From: Kilian Saffran Date: Thu, 11 Jul 2024 06:41:09 +0000 (+0200) Subject: v240711 2 X-Git-Tag: 0.27.2~3 X-Git-Url: http://cloud.dks.lu/git/?a=commitdiff_plain;h=150cd910de017918f365a85cc25fdb56d9fd6696;p=ngl-snep.git v240711 2 --- diff --git a/.gitignore b/.gitignore index d0e8d85..96867a0 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ geodata/adresses-france.csv.gz geodata/openplzapi.data-main.zip NGL-SNEP-App.exe release/* -public_html/test/* \ No newline at end of file +public_html/test/* +tmp/* \ No newline at end of file diff --git a/20240429_180128.xml b/20240429_180128.xml deleted file mode 100644 index 88db33a..0000000 --- a/20240429_180128.xml +++ /dev/null @@ -1,8525 +0,0 @@ - - - - 20240429_180128 - 2024-04-29T18:01:28 - 290 - 5343.5 - - NGL-SNEP ASBL - - - - F5078 - RCS - - - - - - - 20240429_180128 - DD - true - 281 - 5234.5 - - - SEPA - - - CORE - - RCUR - - 2024-04-29 - - NGL-SNEP ASBL - - LU - 5 Am Brill - L-3961 EHLANGE-SUR-MESS - - - - - LU080019435512770000 - - - - - BCEELULL - - - - - - - LU57ZZZ0000000000000000760 - - SEPA - - - - - - - - 11797 - 11797 - - 20.00 - - - 11797 - 2018-01-22 - - - - - BGLLLULL - - - - TORRES LEAL RUI MANUEL - - - - LU24 0030 0835 2643 0000 - - - - NGL-SNEP 04/2024 - - - - - 11814 - 11814 - - 20.00 - - - 11814 - 2020-11-03 - - - - - BCEELULL - - - - VIEIRA DE ABREU ANA CATARINA - - - - LU52 0019 5955 0960 7000 - - - - NGL-SNEP 04/2024 - - - - - 12222 - 12222 - - 20.00 - - - 12222 - 2020-10-14 - - - - - BILLLULL - - - - GUEDES SANTOS ANTONIO MIGUEL - - - - LU07 0021 2506 0244 6500 - - - - NGL-SNEP 04/2024 - - - - - 12235 - 12235 - - 20.00 - - - 12235 - 2014-05-30 - - - - - BCEELULL - - - - FERNANDES DA SILVA JOAO LOURENCO - - - - LU14 0019 2755 0009 2000 - - - - NGL-SNEP 04/2024 - - - - - 12250 - 12250 - - 20.00 - - - 12250 - 2014-05-30 - - - - - BILLLULL - - - - GONCALVES PEIXOTO DULCINEIA - - - - LU63 0029 1101 2215 2800 - - - - NGL-SNEP 04/2024 - - - - - 12256 - 12256 - - 20.00 - - - 12256 - 2014-05-30 - - - - - BILLLULL - - - - DE SOUSA BASTOS JOAO EVANGELISTA - - - - LU85 0026 1904 3045 2500 - - - - NGL-SNEP 04/2024 - - - - - 12266 - 12266 - - 20.00 - - - 12266 - 2014-05-30 - - - - - BCEELULL - - - - VIEIRA DE ABREU ROSA MARIA - - - - LU30 0019 1355 7300 4000 - - - - NGL-SNEP 04/2024 - - - - - 11839 - 11839 - - 20.00 - - - 11839 - 2016-03-03 - - - - - BCEELULL - - - - DE OLIVEIRA PAIS JORGE MANUEL - - - - LU42 0019 3355 2041 6000 - - - - NGL-SNEP 04/2024 - - - - - 11130 - 11130 - - 20.00 - - - 11130 - 2014-05-30 - - - - - BCEELULL - - - - DA SILVA COELHO MANUEL ANTONIO - - - - LU98 0019 5903 7583 5000 - - - - NGL-SNEP 04/2024 - - - - - 11844 - 11844 - - 15.00 - - - 11844 - 2023-07-20 - - - - - CELLLULL - - - - ALVES DUARTE ARMENIO - - - - LU30 0141 0415 5180 0000 - - - - NGL-SNEP 04/2024 - - - - - 11139 - 11139 - - 15.00 - - - 11139 - 2014-05-30 - - - - - BCEELULL - - - - ARENT GINETTE - - - - LU78 0019 7303 5761 4000 - - - - NGL-SNEP 04/2024 - - - - - 11865 - 11865 - - 20.00 - - - 11865 - 2020-01-08 - - - - - BCEELULL - - - - GONCALVES ALMEIDA TANIA CLARA - - - - LU75 0019 2055 6439 4000 - - - - NGL-SNEP 04/2024 - - - - - 11889 - 11889 - - 12.00 - - - 11889 - 2015-07-03 - - - - - BGLLLULL - - - - GRAZIA FAPPANI-DRIOL MARIA - - - - LU89 0030 1801 5459 0000 - - - - NGL-SNEP 04/2024 - - - - - 11905 - 11905 - - 16.50 - - - 11905 - 2014-05-30 - - - - - BCEELULL - - - - RIOLINO ENNIO - - - - LU83 0019 1106 8426 6000 - - - - NGL-SNEP 04/2024 - - - - - 11907 - 11907 - - 20.00 - - - 11907 - 2014-05-30 - - - - - BGLLLULL - - - - DA SILVA NOGUEIRA TITO ANTONIO - - - - LU77 0030 5964 8465 0000 - - - - NGL-SNEP 04/2024 - - - - - 11922 - 11922 - - 20.00 - - - 11922 - 2014-05-30 - - - - - BILLLULL - - - - DA ROCHA FERREIRA LUIS MIGUEL - - - - LU69 0026 1697 0060 1800 - - - - NGL-SNEP 04/2024 - - - - - 11933 - 11933 - - 20.00 - - - 11933 - 2018-03-22 - - - - - BCEELULL - - - - DIAS DE SOUSA RITA MANUELA - - - - LU48 0019 5155 6791 3000 - - - - NGL-SNEP 04/2024 - - - - - 11937 - 11937 - - 20.00 - - - 11937 - 2015-08-14 - - - - - TRISDE55XXX - - - - SZCZEPANSKI GUNTER - - - - DE88 5855 0130 0184 0136 13 - - - - NGL-SNEP 04/2024 - - - - - 11258 - 11258 - - 20.00 - - - 11258 - 2017-02-04 - - - - - BCEELULL - - - - WEHRLEN SVEN - - - - LU37 0019 1755 9651 9000 - - - - NGL-SNEP 04/2024 - - - - - 11939 - 11939 - - 20.00 - - - 11939 - 2023-05-12 - - - - - BGLLLULL - - - - MARQUES VAZ ANTONIO JULIO - - - - LU65 0030 0388 3771 0000 - - - - NGL-SNEP 04/2024 - - - - - 11274 - 11274 - - 20.00 - - - 11274 - 2020-01-14 - - - - - CELLLULL - - - - FERREIRA DA COSTA CANDIDA ALEXANDRA - - - - LU90 0141 2486 9410 0000 - - - - NGL-SNEP 04/2024 - - - - - 11945 - 11945 - - 20.00 - - - 11945 - 2014-05-30 - - - - - BILLLULL - - - - BELCHIOR ANTONIO JOSE - - - - LU91 0026 1823 0617 5100 - - - - NGL-SNEP 04/2024 - - - - - 11320 - 11320 - - 20.00 - - - 11320 - 2017-06-29 - - - - - BCEELULL - - - - DA SILVA PAULO SERGIO - - - - LU49 0019 5155 4354 6000 - - - - NGL-SNEP 04/2024 - - - - - 11363 - 11363 - - 20.00 - - - 11363 - 2017-02-21 - - - - - BILLLULL - - - - DE OLIVEIRA PEREIRA PAULO JORGE - - - - LU07 0029 1817 9771 7400 - - - - NGL-SNEP 04/2024 - - - - - 11416 - 11416 - - 20.00 - - - 11416 - 2014-05-30 - - - - - BILLLULL - - - - NUNES NETO FERREIRA GOMES JAIME - - - - LU95 0020 1867 2016 7700 - - - - NGL-SNEP 04/2024 - - - - - 11974 - 11974 - - 20.00 - - - 11974 - 2016-03-23 - - - - - BMECLULL - - - - VALADA DA COSTA CARLOS MANUEL - - - - LU39 0250 0442 9708 8000 - - - - NGL-SNEP 04/2024 - - - - - 11452 - 11452 - - 20.00 - - - 11452 - 2014-05-30 - - - - - BCEELULL - - - - CASTRO DA FONSECA FRANCISCO - - - - LU53 0019 3255 0669 2000 - - - - NGL-SNEP 04/2024 - - - - - 11980 - 11980 - - 20.00 - - - 11980 - 2014-05-30 - - - - - BCEELULL - - - - DA COSTA LEITE MIGUEL ALBERTO - - - - LU07 0019 3455 4383 5000 - - - - NGL-SNEP 04/2024 - - - - - 11490 - 11490 - - 20.00 - - - 11490 - 2014-05-30 - - - - - BGLLLULL - - - - COELHO VANESSA - - - - LU56 0030 0761 3827 0000 - - - - NGL-SNEP 04/2024 - - - - - 11992 - 11992 - - 20.00 - - - 11992 - 2016-01-08 - - - - - BGLLLULL - - - - RODRIGUES LOPES EMERSON JORGE - - - - LU83 0030 8695 3662 0000 - - - - NGL-SNEP 04/2024 - - - - - 11524 - 11524 - - 20.00 - - - 11524 - 2014-05-30 - - - - - BCEELULL - - - - DE CASTRO VALENTIM PAULO GUILHERME - - - - LU72 0019 3055 1907 4000 - - - - NGL-SNEP 04/2024 - - - - - 11995 - 11995 - - 20.00 - - - 11995 - 2015-07-01 - - - - - BCEELULL - - - - DOS SANTOS MONTEIRO PAULO JORGE - - - - LU69 0019 2455 7808 1000 - - - - NGL-SNEP 04/2024 - - - - - 12053 - 12053 - - 20.00 - - - 12053 - 2020-12-07 - - - - - BGLLLULL - - - - ARAUJO VIEIRA DE FREITAS JOAO CARLOS - - - - LU73 0030 0145 8367 0000 - - - - NGL-SNEP 04/2024 - - - - - 12070 - 12070 - - 20.00 - - - 12070 - 2015-09-17 - - - - - BCEELULL - - - - CAMPOS SOEIRO MIGUEL ANGELO - - - - LU23 0019 3855 8841 3000 - - - - NGL-SNEP 04/2024 - - - - - 11572 - 11572 - - 20.00 - - - 11572 - 2014-05-30 - - - - - BCEELULL - - - - LORAN ALAIN - - - - LU11 0019 5003 0046 5000 - - - - NGL-SNEP 04/2024 - - - - - 11589 - 11589 - - 20.00 - - - 11589 - 2018-09-26 - - - - - BMECLULL - - - - SERRA DINIS MACHADO MARIA DE FATIMA - - - - LU97 0250 0443 3598 9000 - - - - NGL-SNEP 04/2024 - - - - - 11592 - 11592 - - 15.00 - - - 11592 - 2022-10-26 - - - - - BGLLLULL - - - - ROCHA DE CARVALHO SERGIO ALBERTO - - - - LU77 0030 6919 3265 0000 - - - - NGL-SNEP 04/2024 - - - - - 11605 - 11605 - - 20.00 - - - 11605 - 2014-05-30 - - - - - BCEELULL - - - - TOTARO MARA - - - - LU10 0019 1955 8691 6000 - - - - NGL-SNEP 04/2024 - - - - - 12090 - 12090 - - 20.00 - - - 12090 - 2018-03-28 - - - - - BCEELULL - - - - DOS SANTOS GAIO BRUNO GABRIEL - - - - LU62 0019 2655 7205 5000 - - - - NGL-SNEP 04/2024 - - - - - 12094 - 12094 - - 15.00 - - - 12094 - 2019-04-17 - - - - - CCPLLULL - - - - BLEY ERIC - - - - LU15 1111 2321 9978 0000 - - - - NGL-SNEP 04/2024 - - - - - 12111 - 12111 - - 16.50 - - - 12111 - 2020-07-16 - - - - - BMECLULL - - - - ALVES ANTUNES MARCELINO - - - - LU18 0250 0437 9349 6000 - - - - NGL-SNEP 04/2024 - - - - - 12113 - 12113 - - 20.00 - - - 12113 - 2014-05-30 - - - - - BMECLULL - - - - MALHEIRO GONCALVES MARIA FERNANDA - - - - LU80 0250 0457 8007 7000 - - - - NGL-SNEP 04/2024 - - - - - 12136 - 12136 - - 20.00 - - - 12136 - 2014-05-30 - - - - - BGLLLULL - - - - MALHOA FERREIRA PINTO VERA MARIA - - - - LU04 0030 4145 9753 0000 - - - - NGL-SNEP 04/2024 - - - - - 12163 - 12163 - - 20.00 - - - 12163 - 2014-02-19 - - - - - BILLLULL - - - - RODRIGUES BATALHA RUBEN MIGUEL - - - - LU94 0024 0100 3448 3800 - - - - NGL-SNEP 04/2024 - - - - - 12172 - 12172 - - 20.00 - - - 12172 - 2014-05-30 - - - - - BMECLULL - - - - GONCALVES ALVES JOSE LUIS - - - - LU52 0250 0458 2312 3000 - - - - NGL-SNEP 04/2024 - - - - - 12188 - 12188 - - 20.00 - - - 12188 - 2020-10-03 - - - - - CELLLULL - - - - PUDDU WALTER - - - - LU17 0141 1435 7860 0000 - - - - NGL-SNEP 04/2024 - - - - - 12200 - 12200 - - 20.00 - - - 12200 - 2014-05-30 - - - - - BCEELULL - - - - DIAS DE SOUSA BRUNO FILIPE - - - - LU70 0019 3055 1484 6000 - - - - NGL-SNEP 04/2024 - - - - - 11670 - 11670 - - 15.00 - - - 11670 - 2014-05-30 - - - - - BGLLLULL - - - - DOS SANTOS FERREIRA JOAO CARLOS - - - - LU34 0030 2672 3938 0000 - - - - NGL-SNEP 04/2024 - - - - - 11673 - 11673 - - 20.00 - - - 11673 - 2016-08-18 - - - - - CCRALULL - - - - BRCVAK DEMIR - - - - LU08 0090 0000 1163 1710 - - - - NGL-SNEP 04/2024 - - - - - 11708 - 11708 - - 20.00 - - - 11708 - 2016-10-14 - - - - - CCRALULL - - - - REIFFERS GWENDOLYN - - - - LU55 0099 7801 0050 3812 - - - - NGL-SNEP 04/2024 - - - - - 11736 - 11736 - - 16.50 - - - 11736 - 2021-08-06 - - - - - BBPIPTPLXXX - - - - LIMA DE FREITAS AUGUSTO - - - - PT50 0010 0000 5491 9490 0012 2 - - - - NGL-SNEP 04/2024 - - - - - 11772 - 11772 - - 15.00 - - - 11772 - 2015-09-29 - - - - - CCRALULL - - - - BINSFELD LILIANE - - - - LU73 0090 0000 0626 0038 - - - - NGL-SNEP 04/2024 - - - - - 11786 - 11786 - - 20.00 - - - 11786 - 2017-01-16 - - - - - BCEELULL - - - - FERREIRA FIGUEIREDO MAIA ELISABETE MARIA - - - - LU96 0019 3555 3130 9000 - - - - NGL-SNEP 04/2024 - - - - - 5018 - 5018 - - 16.50 - - - 5018 - 2014-05-30 - - - - - BILLLULL - - - - KRAEMER PIERRE - - - - LU93 0024 1175 7400 0000 - - - - NGL-SNEP 04/2024 - - - - - 5025 - 5025 - - 12.00 - - - 5025 - 2022-12-17 - - - - - BGLLLULL - - - - HOUBLIE NICO OSCAR - - - - LU05 0030 1399 4104 0000 - - - - NGL-SNEP 04/2024 - - - - - 8250 - 8250 - - 15.00 - - - 8250 - 2014-05-30 - - - - - BCEELULL - - - - ZGNILEC AGNIESZKA - - - - LU56 0019 5003 9423 7000 - - - - NGL-SNEP 04/2024 - - - - - 5054 - 5054 - - 20.00 - - - 5054 - 2017-12-11 - - - - - CELLLULL - - - - KLEIN JEAN - - - - LU26 0141 3114 4080 0000 - - - - NGL-SNEP 04/2024 - - - - - 5082 - 5082 - - 12.00 - - - 5082 - 2015-11-30 - - - - - BCEELULL - - - - STEFFEN ERNEST - - - - LU70 0019 8403 7129 4000 - - - - NGL-SNEP 04/2024 - - - - - 8666 - 8666 - - 16.50 - - - 8666 - 2017-12-07 - - - - - CCRALULL - - - - THOSS GUSTAVE - - - - LU36 0090 0000 1858 8046 - - - - NGL-SNEP 04/2024 - - - - - 5088 - 5088 - - 16.50 - - - 5088 - 2016-07-19 - - - - - BCEELULL - - - - WESTER NICO - - - - LU95 0019 7003 7971 5000 - - - - NGL-SNEP 04/2024 - - - - - 8677 - 8677 - - 20.00 - - - 8677 - 2015-07-27 - - - - - BGLLLULL - - - - SCHEFFEN NICO - - - - LU82 0030 0823 3314 0000 - - - - NGL-SNEP 04/2024 - - - - - 5113 - 5113 - - 12.00 - - - 5113 - 2023-09-13 - - - - - BCEELULL - - - - GRYSELEYN MARCEL - - - - LU40 0019 5803 6290 9000 - - - - NGL-SNEP 04/2024 - - - - - 8817 - 8817 - - 20.00 - - - 8817 - 2014-05-30 - - - - - BCEELULL - - - - STOFFEL MARCO - - - - LU68 0019 5003 6392 7000 - - - - NGL-SNEP 04/2024 - - - - - 8999 - 8999 - - 20.00 - - - 8999 - 2016-03-11 - - - - - BILLLULL - - - - WANTZ NADIA - - - - LU81 0023 1671 1644 2000 - - - - NGL-SNEP 04/2024 - - - - - 9231 - 9231 - - 20.00 - - - 9231 - 2014-05-30 - - - - - BCEELULL - - - - NEUENSEN PASCAL - - - - LU14 0019 7603 0677 1000 - - - - NGL-SNEP 04/2024 - - - - - 9331 - 9331 - - 20.00 - - - 9331 - 2022-09-29 - - - - - CCPLLULL - - - - STRAUCH ARTHUR - - - - LU31 1111 0674 8570 0000 - - - - NGL-SNEP 04/2024 - - - - - 9341 - 9341 - - 15.00 - - - 9341 - 2014-05-30 - - - - - BGLLLULL - - - - DOUROS CHRISTINA - - - - LU46 0030 8320 6432 0000 - - - - NGL-SNEP 04/2024 - - - - - 9377 - 9377 - - 20.00 - - - 9377 - 2018-06-29 - - - - - BCEELULL - - - - RODRIGUES ALEXANDRE JOSE ALBERTO - - - - LU14 0019 5003 3668 3000 - - - - NGL-SNEP 04/2024 - - - - - 9521 - 9521 - - 12.00 - - - 9521 - 2017-05-31 - - - - - BCEELULL - - - - FERRETTI MARIE-JEANNE - - - - LU52 0019 1103 5120 6000 - - - - NGL-SNEP 04/2024 - - - - - 5149 - 5149 - - 16.50 - - - 5149 - 2015-05-05 - - - - - BCEELULL - - - - LENTZEN RICHARD - - - - LU16 0019 3503 7493 4000 - - - - NGL-SNEP 04/2024 - - - - - 5178 - 5178 - - 16.50 - - - 5178 - 2014-05-30 - - - - - BCEELULL - - - - TROES EUGENE - - - - LU19 0019 5303 6380 6000 - - - - NGL-SNEP 04/2024 - - - - - 9584 - 9584 - - 20.00 - - - 9584 - 2017-08-02 - - - - - CELLLULL - - - - REINSBACH MICHAEL - - - - LU90 0141 6717 8870 0000 - - - - NGL-SNEP 04/2024 - - - - - 5197 - 5197 - - 12.00 - - - 5197 - 2023-09-08 - - - - - BCEELULL - - - - MEDER MATHIAS - - - - LU29 0019 3003 7165 9000 - - - - NGL-SNEP 04/2024 - - - - - 9587 - 9587 - - 20.00 - - - 9587 - 2016-06-30 - - - - - BCEELULL - - - - DA SILVA DOMINGUES PEREIRA CRISTINA MARIA - - - - LU02 0019 1855 2691 5000 - - - - NGL-SNEP 04/2024 - - - - - 5269 - 5269 - - 16.50 - - - 5269 - 2014-05-30 - - - - - BILLLULL - - - - WETZ ROGER - - - - LU63 0025 1320 8790 0000 - - - - NGL-SNEP 04/2024 - - - - - 9588 - 9588 - - 12.00 - - - 9588 - 2014-05-30 - - - - - CCRALULL - - - - HOLPER-GILBERTZ MARIE-JOSEE - - - - LU18 0099 7800 0021 3074 - - - - NGL-SNEP 04/2024 - - - - - 5376 - 5376 - - 16.50 - - - 5376 - 2016-01-28 - - - - - BCEELULL - - - - FRISING PAUL - - - - LU04 0019 5303 6672 5000 - - - - NGL-SNEP 04/2024 - - - - - 9592 - 9592 - - 16.50 - - - 9592 - 2014-05-30 - - - - - BCEELULL - - - - LANGERS MICHEL - - - - LU34 0019 5003 5112 4000 - - - - NGL-SNEP 04/2024 - - - - - 5389 - 5389 - - 20.00 - - - 5389 - 2016-06-20 - - - - - BGLLLULL - - - - FRIDERES FRANCOISE - - - - LU85 0030 2430 1261 0000 - - - - NGL-SNEP 04/2024 - - - - - 9673 - 9673 - - 16.50 - - - 9673 - 2014-07-03 - - - - - CELLLULL - - - - HORTA DOMINGOS MANUEL - - - - LU28 0141 1143 1930 0000 - - - - NGL-SNEP 04/2024 - - - - - 5394 - 5394 - - 12.00 - - - 5394 - 2014-08-19 - - - - - BGLLLULL - - - - SCIMIA JEAN - - - - LU94 0030 0318 8708 0000 - - - - NGL-SNEP 04/2024 - - - - - 9693 - 9693 - - 20.00 - - - 9693 - 2015-09-11 - - - - - BGLLLULL - - - - BILL GILBERT - - - - LU31 0030 6406 4288 0000 - - - - NGL-SNEP 04/2024 - - - - - 5442 - 5442 - - 16.50 - - - 5442 - 2014-05-30 - - - - - BCEELULL - - - - BELLUCCI ROLAND - - - - LU37 0019 5303 7741 4000 - - - - NGL-SNEP 04/2024 - - - - - 5487 - 5487 - - 20.00 - - - 5487 - 2014-05-30 - - - - - BILLLULL - - - - MOSSONG ROMAIN - - - - LU46 0026 1360 7155 9500 - - - - NGL-SNEP 04/2024 - - - - - 9809 - 9809 - - 12.00 - - - 9809 - 2017-11-23 - - - - - BCEELULL - - - - SCHNEIDERS FRANCOIS - - - - LU30 0019 2103 7096 5000 - - - - NGL-SNEP 04/2024 - - - - - 5546 - 5546 - - 16.50 - - - 5546 - 2014-05-30 - - - - - BCEELULL - - - - GREISCH FELIX - - - - LU61 0019 3303 6962 7000 - - - - NGL-SNEP 04/2024 - - - - - 9839 - 9839 - - 15.00 - - - 9839 - 2017-11-24 - - - - - BILLLULL - - - - TAVOLACCI SYLVIA - - - - LU75 0026 1319 7530 0000 - - - - NGL-SNEP 04/2024 - - - - - 5796 - 5796 - - 16.50 - - - 5796 - 2021-01-23 - - - - - BCEELULL - - - - GIROTTO MARIO - - - - LU43 0019 6303 6741 6000 - - - - NGL-SNEP 04/2024 - - - - - 9895 - 9895 - - 20.00 - - - 9895 - 2016-02-02 - - - - - BGLLLULL - - - - SCHROBILTGEN STEVE - - - - LU92 0030 2642 0309 0000 - - - - NGL-SNEP 04/2024 - - - - - 5820 - 5820 - - 12.00 - - - 5820 - 2014-05-30 - - - - - BCEELULL - - - - CATANI SONJA - - - - LU69 0019 7903 1805 3000 - - - - NGL-SNEP 04/2024 - - - - - 5826 - 5826 - - 16.50 - - - 5826 - 2024-01-10 - - - - - CELLLULL - - - - ODILL ANTOINE - - - - LU81 0141 3113 9411 0000 - - - - NGL-SNEP 04/2024 - - - - - 5908 - 5908 - - 12.00 - - - 5908 - 2018-03-16 - - - - - BGLLLULL - - - - WEYLAND GUILLAUME - - - - LU57 0030 0371 9275 0000 - - - - NGL-SNEP 04/2024 - - - - - 6060 - 6060 - - 16.50 - - - 6060 - 2014-05-30 - - - - - BCEELULL - - - - REUTER ROGER - - - - LU58 0019 5003 9099 6000 - - - - NGL-SNEP 04/2024 - - - - - 6097 - 6097 - - 12.00 - - - 6097 - 2014-05-30 - - - - - BCEELULL - - - - BOEVER RENE - - - - LU22 0019 5003 5834 8000 - - - - NGL-SNEP 04/2024 - - - - - 6196 - 6196 - - 16.50 - - - 6196 - 2022-08-05 - - - - - CCRALULL - - - - BAUSTERT MONIQUE - - - - LU12 0090 0000 0529 4434 - - - - NGL-SNEP 04/2024 - - - - - 6379 - 6379 - - 16.50 - - - 6379 - 2015-05-29 - - - - - BCEELULL - - - - PIAZZALUNGA ADELIO - - - - LU81 0019 6503 6078 1000 - - - - NGL-SNEP 04/2024 - - - - - 6388 - 6388 - - 12.00 - - - 6388 - 2016-01-27 - - - - - BCEELULL - - - - GILLEN ROGER - - - - LU05 0019 9303 7317 1000 - - - - NGL-SNEP 04/2024 - - - - - 6428 - 6428 - - 12.00 - - - 6428 - 2019-11-11 - - - - - BGLLLULL - - - - GROBER GUSTY - - - - LU42 0030 0354 0534 0000 - - - - NGL-SNEP 04/2024 - - - - - 9976 - 9976 - - 20.00 - - - 9976 - 2016-01-29 - - - - - BCEELULL - - - - LONIEN CHANTAL - - - - LU89 0019 1055 3451 3000 - - - - NGL-SNEP 04/2024 - - - - - 6468 - 6468 - - 16.50 - - - 6468 - 2014-05-30 - - - - - BILLLULL - - - - FERREIRA ARAUJO JOSE - - - - LU39 0023 1420 7130 0000 - - - - NGL-SNEP 04/2024 - - - - - 10010 - 10010 - - 20.00 - - - 10010 - 2017-11-17 - - - - - BGLLLULL - - - - SIMOES LOPES DANIEL - - - - LU30 0030 2297 9940 0000 - - - - NGL-SNEP 04/2024 - - - - - 6483 - 6483 - - 16.50 - - - 6483 - 2017-03-06 - - - - - BCEELULL - - - - FLORIAN ROLAND - - - - LU86 0019 1007 5615 9000 - - - - NGL-SNEP 04/2024 - - - - - 10011 - 10011 - - 20.00 - - - 10011 - 2014-05-30 - - - - - BCEELULL - - - - HUBERTY-ROHR CHRISTIANE - - - - LU56 0019 1000 5651 6000 - - - - NGL-SNEP 04/2024 - - - - - 6539 - 6539 - - 20.00 - - - 6539 - 2016-04-01 - - - - - BILLLULL - - - - PETERS JEAN-CLAUDE - - - - LU66 0024 1124 9950 0000 - - - - NGL-SNEP 04/2024 - - - - - 10051 - 10051 - - 20.00 - - - 10051 - 2017-03-16 - - - - - CCPLLULL - - - - BRUCE ARISTIDE - - - - LU46 1111 2346 5714 0000 - - - - NGL-SNEP 04/2024 - - - - - 6559 - 6559 - - 16.50 - - - 6559 - 2017-10-27 - - - - - BCEELULL - - - - TEIXEIRA BRAS JOAQUIM - - - - LU34 0019 5003 9661 7000 - - - - NGL-SNEP 04/2024 - - - - - 10087 - 10087 - - 20.00 - - - 10087 - 2016-08-08 - - - - - BGLLLULL - - - - OESTREICHER FERNAND - - - - LU30 0030 5288 5040 0000 - - - - NGL-SNEP 04/2024 - - - - - 6677 - 6677 - - 16.50 - - - 6677 - 2016-05-16 - - - - - CCRALULL - - - - SCHINTGEN LEON - - - - LU61 0090 0000 0122 0037 - - - - NGL-SNEP 04/2024 - - - - - 10089 - 10089 - - 12.00 - - - 10089 - 2023-04-18 - - - - - BGLLLULL - - - - LEOCI VITO - - - - LU51 0030 1472 9078 0000 - - - - NGL-SNEP 04/2024 - - - - - 6746 - 6746 - - 12.00 - - - 6746 - 2014-05-30 - - - - - BCEELULL - - - - HARY ROGER - - - - LU36 0019 1006 3891 6000 - - - - NGL-SNEP 04/2024 - - - - - 10147 - 10147 - - 16.50 - - - 10147 - 2016-04-27 - - - - - BCEELULL - - - - BAUM JOHN - - - - LU38 0019 3403 7020 5000 - - - - NGL-SNEP 04/2024 - - - - - 6892 - 6892 - - 16.50 - - - 6892 - 2014-05-30 - - - - - CCRALULL - - - - WOHL JEANNOT - - - - LU95 0090 0000 0070 2415 - - - - NGL-SNEP 04/2024 - - - - - 10150 - 10150 - - 16.50 - - - 10150 - 2023-04-04 - - - - - BILLLULL - - - - VAN HEMERT OSWALD - - - - LU02 0024 1151 2560 0000 - - - - NGL-SNEP 04/2024 - - - - - 6900 - 6900 - - 20.00 - - - 6900 - 2014-05-30 - - - - - BILLLULL - - - - GRISIUS LUCIEN - - - - LU68 0024 1125 6930 0000 - - - - NGL-SNEP 04/2024 - - - - - 10479 - 10479 - - 20.00 - - - 10479 - 2016-05-09 - - - - - CELLLULL - - - - SIMON PIERRE - - - - LU97 0141 1220 8180 0000 - - - - NGL-SNEP 04/2024 - - - - - 6917 - 6917 - - 20.00 - - - 6917 - 2022-08-24 - - - - - BCEELULL - - - - BEFFORT MARCEL - - - - LU97 0019 6255 2419 3000 - - - - NGL-SNEP 04/2024 - - - - - 10489 - 10489 - - 20.00 - - - 10489 - 2023-10-27 - - - - - BCEELULL - - - - CORDEIRO LUIS MARIO - - - - LU98 0019 1106 0190 4000 - - - - NGL-SNEP 04/2024 - - - - - 7102 - 7102 - - 16.50 - - - 7102 - 2018-03-07 - - - - - BCEELULL - - - - KEMP GILBERT - - - - LU75 0019 5403 6571 4000 - - - - NGL-SNEP 04/2024 - - - - - 10591 - 10591 - - 20.00 - - - 10591 - 2014-05-30 - - - - - BGLLLULL - - - - MARQUES CARVALHO PEDRO JORGE - - - - LU43 0030 8596 6282 0000 - - - - NGL-SNEP 04/2024 - - - - - 7249 - 7249 - - 16.50 - - - 7249 - 2014-05-30 - - - - - BCEELULL - - - - PIANTANIDA JOSEPH - - - - LU12 0019 5303 6666 2000 - - - - NGL-SNEP 04/2024 - - - - - 10727 - 10727 - - 20.00 - - - 10727 - 2016-01-14 - - - - - BCEELULL - - - - FLICK MYRIAM - - - - LU34 0019 3803 7114 5000 - - - - NGL-SNEP 04/2024 - - - - - 7339 - 7339 - - 16.50 - - - 7339 - 2014-05-30 - - - - - BCEELULL - - - - HILGER NICO - - - - LU04 0019 5503 7413 9000 - - - - NGL-SNEP 04/2024 - - - - - 10769 - 10769 - - 16.50 - - - 10769 - 2017-03-01 - - - - - BCEELULL - - - - CLAUDE ALEX - - - - LU29 0019 5003 6907 2000 - - - - NGL-SNEP 04/2024 - - - - - 7582 - 7582 - - 20.00 - - - 7582 - 2014-05-30 - - - - - BILLLULL - - - - MARTA FERRAZ ANACLETO - - - - LU77 0026 1345 5650 7600 - - - - NGL-SNEP 04/2024 - - - - - 10784 - 10784 - - 16.50 - - - 10784 - 2023-03-02 - - - - - BCEELULL - - - - SCHROBILTGEN MICHEL - - - - LU35 0019 1200 5077 0000 - - - - NGL-SNEP 04/2024 - - - - - 7856 - 7856 - - 16.50 - - - 7856 - 2014-05-30 - - - - - CELLLULL - - - - AFONSO MAGALHAES JOAQUIM - - - - LU82 0141 5137 2930 0000 - - - - NGL-SNEP 04/2024 - - - - - 10827 - 10827 - - 20.00 - - - 10827 - 2020-06-16 - - - - - CMCIFR2A - - - - SPONAR PASCAL - - - - FR76 1027 8042 8000 0539 9084 002 - - - - NGL-SNEP 04/2024 - - - - - 10865 - 10865 - - 20.00 - - - 10865 - 2014-05-30 - - - - - BILLLULL - - - - MARQUARDT CLAUS - - - - LU58 0022 6100 3139 0800 - - - - NGL-SNEP 04/2024 - - - - - 10875 - 10875 - - 12.00 - - - 10875 - 2014-05-30 - - - - - BCEELULL - - - - POOS JEAN-CLAUDE - - - - LU52 0019 5603 6728 3000 - - - - NGL-SNEP 04/2024 - - - - - 7880 - 7880 - - 20.00 - - - 7880 - 2022-07-04 - - - - - CCPLLULL - - - - CLEMENS FRANCOIS - - - - LU53 1111 1505 0659 0000 - - - - NGL-SNEP 04/2024 - - - - - 8003 - 8003 - - 20.00 - - - 8003 - 2014-05-30 - - - - - BCEELULL - - - - DA SILVA ALMEIDA MARIA LURDES - - - - LU87 0019 5003 8032 8000 - - - - NGL-SNEP 04/2024 - - - - - 8015 - 8015 - - 12.00 - - - 8015 - 2023-05-04 - - - - - BCEELULL - - - - PETESCH LUCIEN - - - - LU55 0019 5403 7639 6000 - - - - NGL-SNEP 04/2024 - - - - - 11066 - 11066 - - 20.00 - - - 11066 - 2015-08-24 - - - - - BGLLLULL - - - - VALENTIN ADRIEN - - - - LU85 0030 3058 6861 0000 - - - - NGL-SNEP 04/2024 - - - - - 8044 - 8044 - - 12.00 - - - 8044 - 2016-08-04 - - - - - BCEELULL - - - - URBANY RENé - - - - LU05 0019 5403 6575 6000 - - - - NGL-SNEP 04/2024 - - - - - 8068 - 8068 - - 20.00 - - - 8068 - 2017-12-12 - - - - - SOGEFRPP - - - - CHANTEUR MURIEL - - - - FR76 3000 3024 5200 0506 9196 361 - - - - NGL-SNEP 04/2024 - - - - - 8083 - 8083 - - 20.00 - - - 8083 - 2014-05-30 - - - - - BCEELULL - - - - VELOSO DA COSTA AUGUSTO - - - - LU15 0019 5003 9583 3000 - - - - NGL-SNEP 04/2024 - - - - - 8090 - 8090 - - 12.00 - - - 8090 - 2021-12-01 - - - - - CCRALULL - - - - RIES EMILE - - - - LU57 0099 7818 0763 4033 - - - - NGL-SNEP 04/2024 - - - - - 12671 - 12671 - - 20.00 - - - 12671 - 2014-05-30 - - - - - BMECLULL - - - - CRISTELO DA SILVA CUNHA MARIA DE FATIMA - - - - LU92 0250 0435 2361 7000 - - - - NGL-SNEP 04/2024 - - - - - 12692 - 12692 - - 20.00 - - - 12692 - 2017-11-02 - - - - - BCEELULL - - - - PINTO NUNES JOSE - - - - LU46 0019 2555 6915 3000 - - - - NGL-SNEP 04/2024 - - - - - 12360 - 12360 - - 20.00 - - - 12360 - 2014-05-30 - - - - - CELLLULL - - - - MALHAO DA SILVA REIS ANTONIO - - - - LU70 0141 9439 2260 0000 - - - - NGL-SNEP 04/2024 - - - - - 12369 - 12369 - - 20.00 - - - 12369 - 2014-05-30 - - - - - BMECLULL - - - - HENRIQUES MARTINS AUGUSTO - - - - LU19 0250 0448 9879 1000 - - - - NGL-SNEP 04/2024 - - - - - 12381 - 12381 - - 20.00 - - - 12381 - 2020-02-04 - - - - - CELLLULL - - - - GOMES DA SILVA ANTONIO MANUEL - - - - LU53 0141 0701 0620 0000 - - - - NGL-SNEP 04/2024 - - - - - 12697 - 12697 - - 20.00 - - - 12697 - 2020-12-04 - - - - - BGLLLULL - - - - GALIAR FERREIRA OLIVEIRA ADELIA MARIA - - - - LU43 0030 8965 2282 0000 - - - - NGL-SNEP 04/2024 - - - - - 12386 - 12386 - - 20.00 - - - 12386 - 2020-11-13 - - - - - BCEELULL - - - - FERREIRA GOMES PAULO JORGE - - - - LU36 0019 3755 8299 1000 - - - - NGL-SNEP 04/2024 - - - - - 12395 - 12395 - - 20.00 - - - 12395 - 2016-06-01 - - - - - BCEELULL - - - - DA CUNHA RELVAO DA SILVA FRANCISCO ALEXANDRE - - - - LU33 0019 2655 7525 4000 - - - - NGL-SNEP 04/2024 - - - - - 12716 - 12716 - - 20.00 - - - 12716 - 2014-05-30 - - - - - BILLLULL - - - - DOS SANTOS TEIXEIRA PEDRO MANUEL - - - - LU13 0025 1928 0358 6200 - - - - NGL-SNEP 04/2024 - - - - - 12404 - 12404 - - 15.00 - - - 12404 - 2014-05-30 - - - - - BCEELULL - - - - VIDEIRA MARQUES CLARA DA CONCEICãO - - - - LU74 0019 2255 1944 8000 - - - - NGL-SNEP 04/2024 - - - - - 12409 - 12409 - - 20.00 - - - 12409 - 2016-04-19 - - - - - CCPLLULL - - - - TAVARES FERNANDES VICTOR ARMINDO - - - - LU26 1111 3243 9224 0000 - - - - NGL-SNEP 04/2024 - - - - - 12780 - 12780 - - 20.00 - - - 12780 - 2017-11-21 - - - - - BGLLLULL - - - - MARTINS DE ALMEIDA BERNARDINO - - - - LU20 0030 7261 5345 0000 - - - - NGL-SNEP 04/2024 - - - - - 12416 - 12416 - - 20.00 - - - 12416 - 2014-05-30 - - - - - BILLLULL - - - - FERREIRA DA COSTA HELIO - - - - LU32 0026 5100 3356 3000 - - - - NGL-SNEP 04/2024 - - - - - 12418 - 12418 - - 20.00 - - - 12418 - 2020-12-14 - - - - - CELLLULL - - - - RODRIGUES MARQUES SILVA CRISTINA MARIA - - - - LU94 0141 8558 5970 0000 - - - - NGL-SNEP 04/2024 - - - - - 12784 - 12784 - - 20.00 - - - 12784 - 2018-08-27 - - - - - BCEELULL - - - - DA ROCHA FERREIRA MANUEL - - - - LU82 0019 5255 8781 8000 - - - - NGL-SNEP 04/2024 - - - - - 12427 - 12427 - - 20.00 - - - 12427 - 2014-05-30 - - - - - BCEELULL - - - - DE NAZARé DE BASTOS ANTóNIO SILVA PALMIRA - - - - LU46 0019 1355 8781 6000 - - - - NGL-SNEP 04/2024 - - - - - 12431 - 12431 - - 16.50 - - - 12431 - 2020-07-21 - - - - - BGLLLULL - - - - DE OLIVEIRA GALVEIAS CARLOS MANUEL - - - - LU88 0030 4746 9511 0000 - - - - NGL-SNEP 04/2024 - - - - - 12805 - 12805 - - 20.00 - - - 12805 - 2015-07-29 - - - - - BMECLULL - - - - ADELAIDE SIMOES DA ROCHA COSTA MARIA - - - - LU75 0250 0444 8270 5000 - - - - NGL-SNEP 04/2024 - - - - - 12439 - 12439 - - 15.00 - - - 12439 - 2020-12-10 - - - - - CCPLLULL - - - - FERREIRA LEITE SUSANA DE LURDES - - - - LU92 1111 2536 4688 0000 - - - - NGL-SNEP 04/2024 - - - - - 12442 - 12442 - - 20.00 - - - 12442 - 2014-05-30 - - - - - BCEELULL - - - - GONCALVES PEIXOTO RUI ALEXANDRE - - - - LU87 0019 2155 4254 4000 - - - - NGL-SNEP 04/2024 - - - - - 12836 - 12836 - - 15.00 - - - 12836 - 2021-07-19 - - - - - BILLLULL - - - - STREITZ JOSIANE - - - - LU53 0028 1125 8770 0000 - - - - NGL-SNEP 04/2024 - - - - - 12466 - 12466 - - 20.00 - - - 12466 - 2014-05-30 - - - - - BMECLULL - - - - FIGUEIREDO GONCALVES JOAQUIM - - - - LU19 0250 0433 0799 1000 - - - - NGL-SNEP 04/2024 - - - - - 12849 - 12849 - - 20.00 - - - 12849 - 2014-05-30 - - - - - BILLLULL - - - - DA SILVA BASTOS PAULO - - - - LU03 0026 1894 0903 3500 - - - - NGL-SNEP 04/2024 - - - - - 12485 - 12485 - - 20.00 - - - 12485 - 2021-01-14 - - - - - CELLLULL - - - - COELHO SILVA CATIA FILIPA - - - - LU87 0141 6407 3130 0000 - - - - NGL-SNEP 04/2024 - - - - - 12883 - 12883 - - 16.50 - - - 12883 - 2023-06-06 - - - - - BILLLULL - - - - DE JESUS DA SILVA ANTONIO - - - - LU98 0025 8100 1170 2800 - - - - NGL-SNEP 04/2024 - - - - - 12490 - 12490 - - 20.00 - - - 12490 - 2014-05-30 - - - - - BGLLLULL - - - - AZENHA RODRIGUES JOAO CARLOS - - - - LU12 0030 0956 5749 0000 - - - - NGL-SNEP 04/2024 - - - - - 12887 - 12887 - - 20.00 - - - 12887 - 2014-08-01 - - - - - CCPLLULL - - - - GSCHWEND ACHIM - - - - LU37 1111 0553 5767 0000 - - - - NGL-SNEP 04/2024 - - - - - 12506 - 12506 - - 20.00 - - - 12506 - 2017-05-10 - - - - - BCEELULL - - - - DE SOUSA SANTOS FERNANDO - - - - LU34 0019 3055 3787 6000 - - - - NGL-SNEP 04/2024 - - - - - 12531 - 12531 - - 20.00 - - - 12531 - 2014-05-30 - - - - - BGLLLULL - - - - PEREIRA FEIJAO HORACIO - - - - LU04 0030 6210 1353 0000 - - - - NGL-SNEP 04/2024 - - - - - 12542 - 12542 - - 20.00 - - - 12542 - 2022-08-03 - - - - - BMECLULL - - - - DE JESUS TRINDADE JOAQUIM FILIPE - - - - LU95 0250 0445 1150 2000 - - - - NGL-SNEP 04/2024 - - - - - 12548 - 12548 - - 20.00 - - - 12548 - 2015-05-20 - - - - - BMECLULL - - - - DE SOUSA MOREIRA AURELIO MANUEL - - - - LU38 0250 0443 7519 3000 - - - - NGL-SNEP 04/2024 - - - - - 12562 - 12562 - - 20.00 - - - 12562 - 2014-05-30 - - - - - BMECLULL - - - - ALVES TAVARES PAULO ALEXANDRE - - - - LU63 0250 0447 2156 5000 - - - - NGL-SNEP 04/2024 - - - - - 12572 - 12572 - - 20.00 - - - 12572 - 2014-05-30 - - - - - BCEELULL - - - - DE OLIVEIRA CAMPOS AMERICO LUIS - - - - LU82 0019 3255 4694 9000 - - - - NGL-SNEP 04/2024 - - - - - 12906 - 12906 - - 20.00 - - - 12906 - 2014-09-10 - - - - - BILLLULL - - - - PINTO FERREIRA DE CARVALHO MANUEL ANTONIO - - - - LU87 0023 0100 3889 6700 - - - - NGL-SNEP 04/2024 - - - - - 12915 - 12915 - - 20.00 - - - 12915 - 2022-11-04 - - - - - PSSTFRPPNCY - - - - CABACO PINTO FRANCISCO - - - - FR40 2004 1010 1010 3536 9D03 150 - - - - NGL-SNEP 04/2024 - - - - - 12614 - 12614 - - 20.00 - - - 12614 - 2021-05-06 - - - - - BCEELULL - - - - PINTO MARTINS JOAO - - - - LU47 0019 3555 2142 5000 - - - - NGL-SNEP 04/2024 - - - - - 12625 - 12625 - - 20.00 - - - 12625 - 2014-05-30 - - - - - BGLLLULL - - - - LOPES DA SILVA ANTONIO FERNANDO - - - - LU90 0030 3454 9010 0000 - - - - NGL-SNEP 04/2024 - - - - - 12628 - 12628 - - 20.00 - - - 12628 - 2014-05-30 - - - - - BGLLLULL - - - - SILVA ANTUNES CARLOS ALBERTO - - - - LU06 0030 8872 7752 0000 - - - - NGL-SNEP 04/2024 - - - - - 12955 - 12955 - - 16.50 - - - 12955 - 2014-05-13 - - - - - BMECLULL - - - - DE LIMA PEREIRA VITOR MANUEL - - - - LU71 0250 0446 2052 5000 - - - - NGL-SNEP 04/2024 - - - - - 12640 - 12640 - - 20.00 - - - 12640 - 2022-03-22 - - - - - BCEELULL - - - - TAVEIRA VILLELA IVANIR - - - - LU59 0019 7355 6068 6000 - - - - NGL-SNEP 04/2024 - - - - - 12651 - 12651 - - 20.00 - - - 12651 - 2014-05-30 - - - - - BMECLULL - - - - DA CUNHA LOURENCO ANTONINO - - - - LU88 0250 0447 3813 7000 - - - - NGL-SNEP 04/2024 - - - - - 12666 - 12666 - - 20.00 - - - 12666 - 2014-05-30 - - - - - BGLLLULL - - - - TORRES FERREIRA EDGAR JOSE - - - - LU57 0030 8501 4975 0000 - - - - NGL-SNEP 04/2024 - - - - - 13281 - 13281 - - 12.00 - - - 13281 - 2020-07-07 - - - - - BMECLULL - - - - FERREIRA BRITO MARIA DA GUIA - - - - LU06 0250 0434 5025 9000 - - - - NGL-SNEP 04/2024 - - - - - 13316 - 13316 - - 20.00 - - - 13316 - 2016-08-18 - - - - - BCEELULL - - - - GUEDES POUBEL VIVIANE - - - - LU59 0019 4055 7551 3000 - - - - NGL-SNEP 04/2024 - - - - - 12971 - 12971 - - 20.00 - - - 12971 - 2014-05-30 - - - - - BCEELULL - - - - SILVA SANTOS ANABELA - - - - LU12 0019 1655 8273 9000 - - - - NGL-SNEP 04/2024 - - - - - 12974 - 12974 - - 20.00 - - - 12974 - 2014-05-30 - - - - - BCEELULL - - - - MAELLARO PATRIZIA - - - - LU73 0019 4055 2091 3000 - - - - NGL-SNEP 04/2024 - - - - - 12980 - 12980 - - 20.00 - - - 12980 - 2014-05-30 - - - - - CELLLULL - - - - PADINHA TOME PEDRO MANUEL - - - - LU82 0141 8482 8230 0000 - - - - NGL-SNEP 04/2024 - - - - - 13325 - 13325 - - 15.00 - - - 13325 - 2015-04-28 - - - - - BMECLULL - - - - RODRIGUES CARNEIRO SARA DANIELA - - - - LU93 0250 0450 5571 2000 - - - - NGL-SNEP 04/2024 - - - - - 12991 - 12991 - - 20.00 - - - 12991 - 2014-06-12 - - - - - CMCIFR2A - - - - CHATELIN JONATHAN - - - - FR76 1027 8025 5900 0174 1694 068 - - - - NGL-SNEP 04/2024 - - - - - 13347 - 13347 - - 20.00 - - - 13347 - 2020-02-14 - - - - - BILLLULL - - - - CENTRONE PIER PASQUALE - - - - LU72 0028 1165 6612 4200 - - - - NGL-SNEP 04/2024 - - - - - 13005 - 13005 - - 18.00 - - - 13005 - 2021-04-19 - - - - - BCEELULL - - - - META FLORID - - - - LU23 0019 1055 8035 6000 - - - - NGL-SNEP 04/2024 - - - - - 13355 - 13355 - - 20.00 - - - 13355 - 2015-10-30 - - - - - BGLLLULL - - - - MOITEIRO RIBEIRO MARTA - - - - LU41 0030 4726 3383 0000 - - - - NGL-SNEP 04/2024 - - - - - 13010 - 13010 - - 20.00 - - - 13010 - 2014-07-10 - - - - - CELLLULL - - - - DA SILVA MARQUES ANTONIO FERNANDO - - - - LU32 0141 1441 4090 0000 - - - - NGL-SNEP 04/2024 - - - - - 13026 - 13026 - - 20.00 - - - 13026 - 2014-07-11 - - - - - BCEELULL - - - - DA SILVA RODRIGUES ANTONIO JOAO - - - - LU71 0019 3555 2259 4000 - - - - NGL-SNEP 04/2024 - - - - - 13037 - 13037 - - 20.00 - - - 13037 - 2014-07-30 - - - - - BCEELULL - - - - MARQUES ANDRADE LUIS ANTONIO - - - - LU70 0019 3655 7171 7000 - - - - NGL-SNEP 04/2024 - - - - - 13039 - 13039 - - 20.00 - - - 13039 - 2014-07-07 - - - - - BCEELULL - - - - FERREIRA LEITE MIGUEL HERNANI - - - - LU41 0019 3455 2540 4000 - - - - NGL-SNEP 04/2024 - - - - - 13040 - 13040 - - 20.00 - - - 13040 - 2014-07-23 - - - - - BCEELULL - - - - VIANA DE SOUSA JOAO MANUEL - - - - LU73 0019 3855 8411 5000 - - - - NGL-SNEP 04/2024 - - - - - 13372 - 13372 - - 20.00 - - - 13372 - 2015-11-16 - - - - - BGLLLULL - - - - DELGADO GOMES NéLIDA - - - - LU74 0030 2155 1818 0000 - - - - NGL-SNEP 04/2024 - - - - - 13380 - 13380 - - 20.00 - - - 13380 - 2015-12-04 - - - - - BILLLULL - - - - OESTGES RUDOLF - - - - LU39 0024 1939 3845 6100 - - - - NGL-SNEP 04/2024 - - - - - 13403 - 13403 - - 20.00 - - - 13403 - 2023-02-01 - - - - - CCRALULL - - - - DIAS DE AMORIM ORLANDO AMERICO - - - - LU10 0099 7800 0118 0793 - - - - NGL-SNEP 04/2024 - - - - - 13075 - 13075 - - 20.00 - - - 13075 - 2014-09-01 - - - - - BGLLLULL - - - - FERREIRA CARVALHO JORGE MANUEL - - - - LU79 0030 8860 2864 0000 - - - - NGL-SNEP 04/2024 - - - - - 13410 - 13410 - - 20.00 - - - 13410 - 2016-01-12 - - - - - BCEELULL - - - - DE ALMEIDA LAGOA JOAQUIM MANUEL - - - - LU23 0019 4055 4761 8000 - - - - NGL-SNEP 04/2024 - - - - - 13084 - 13084 - - 20.00 - - - 13084 - 2014-09-01 - - - - - BMECLULL - - - - PINHEIRO FERREIRA FERNANDO MANUEL - - - - LU54 0250 0448 9091 3000 - - - - NGL-SNEP 04/2024 - - - - - 13421 - 13421 - - 20.00 - - - 13421 - 2016-01-19 - - - - - BILLLULL - - - - ASCENCAO GOMES MARIA DE FATIMA - - - - LU05 0029 6100 4110 7700 - - - - NGL-SNEP 04/2024 - - - - - 13086 - 13086 - - 20.00 - - - 13086 - 2014-10-01 - - - - - BMECLULL - - - - RODRIGUES LOPES SUSANA CRISTINA - - - - LU14 0250 0444 2591 9000 - - - - NGL-SNEP 04/2024 - - - - - 13094 - 13094 - - 15.00 - - - 13094 - 2014-11-01 - - - - - CRLYFRPP - - - - BITAT RADIA - - - - FR55 3000 2070 3400 0024 6157 R34 - - - - NGL-SNEP 04/2024 - - - - - 13103 - 13103 - - 20.00 - - - 13103 - 2014-11-01 - - - - - BCEELULL - - - - BESSA CARDOSO DIANA PATRICIA - - - - LU23 0019 2655 4460 8000 - - - - NGL-SNEP 04/2024 - - - - - 13112 - 13112 - - 20.00 - - - 13112 - 2014-11-01 - - - - - CCRALULL - - - - DA SILVA MARQUES MONICA PAULA - - - - LU56 0099 7800 0025 3906 - - - - NGL-SNEP 04/2024 - - - - - 13426 - 13426 - - 20.00 - - - 13426 - 2016-01-26 - - - - - BGLLLULL - - - - MATCHUM FOTSO NADEGE LAURE - - - - LU28 0030 2404 7041 0000 - - - - NGL-SNEP 04/2024 - - - - - 13135 - 13135 - - 20.00 - - - 13135 - 2014-12-01 - - - - - BCEELULL - - - - AFONSO QUITERIO SANDRA CRISTINA - - - - LU25 0019 3855 4714 8000 - - - - NGL-SNEP 04/2024 - - - - - 13149 - 13149 - - 20.00 - - - 13149 - 2015-01-01 - - - - - BCEELULL - - - - DUTRA DE ALMEIDA GESSE - - - - LU79 0019 4355 6712 5000 - - - - NGL-SNEP 04/2024 - - - - - 13433 - 13433 - - 20.00 - - - 13433 - 2021-01-23 - - - - - CCBPFRPPMTZ - - - - MONTEIRO CINDY - - - - FR76 1470 7011 0131 5197 3150 484 - - - - NGL-SNEP 04/2024 - - - - - 13438 - 13438 - - 12.00 - - - 13438 - 2022-11-23 - - - - - BCEELULL - - - - LOPES ALMEIDA ABILIO - - - - LU56 0019 2603 6841 6000 - - - - NGL-SNEP 04/2024 - - - - - 13442 - 13442 - - 20.00 - - - 13442 - 2016-02-23 - - - - - CELLLULL - - - - PEREIRA DA SILVA FELISBELA ACACIA - - - - LU67 0141 4495 9320 0000 - - - - NGL-SNEP 04/2024 - - - - - 13446 - 13446 - - 20.00 - - - 13446 - 2016-03-11 - - - - - BMECLULL - - - - MOREIRA DA SILVA CARLOS MANUEL - - - - LU51 0250 0449 5062 8000 - - - - NGL-SNEP 04/2024 - - - - - 13453 - 13453 - - 20.00 - - - 13453 - 2021-08-24 - - - - - BILLLULL - - - - DO CABO TEIXEIRA CARDOSO AMERICO - - - - LU47 0026 1877 4999 6700 - - - - NGL-SNEP 04/2024 - - - - - 13204 - 13204 - - 20.00 - - - 13204 - 2015-06-26 - - - - - BILLLULL - - - - NUNES AFONSO CARLOS MANUEL - - - - LU94 0020 5100 2839 4800 - - - - NGL-SNEP 04/2024 - - - - - 13460 - 13460 - - 20.00 - - - 13460 - 2016-04-01 - - - - - CELLLULL - - - - VARELA DE SOUSA FREITAS ANDREIA - - - - LU31 0141 5419 8060 0000 - - - - NGL-SNEP 04/2024 - - - - - 13208 - 13208 - - 20.00 - - - 13208 - 2015-03-04 - - - - - BCEELULL - - - - DE MAGALHAES PEREIRA MARIA DA GRACA - - - - LU72 0019 3055 2518 5000 - - - - NGL-SNEP 04/2024 - - - - - 13225 - 13225 - - 20.00 - - - 13225 - 2015-03-20 - - - - - BMECLULL - - - - ANTUNES MARTINS MARIA DA CONCEICAO - - - - LU14 0250 0458 1301 9000 - - - - NGL-SNEP 04/2024 - - - - - 13464 - 13464 - - 20.00 - - - 13464 - 2016-04-06 - - - - - BCEELULL - - - - DE OLIVEIRA E SILVA MANUEL - - - - LU95 0019 2655 5490 5000 - - - - NGL-SNEP 04/2024 - - - - - 13473 - 13473 - - 20.00 - - - 13473 - 2016-04-12 - - - - - CELLLULL - - - - DA SILVA OLIVEIRA LUCIA MARIA - - - - LU21 0141 7495 6080 0000 - - - - NGL-SNEP 04/2024 - - - - - 13482 - 13482 - - 20.00 - - - 13482 - 2016-04-14 - - - - - BGLLLULL - - - - RIVERA CARRERA NELSON - - - - LU91 0030 2209 9058 0000 - - - - NGL-SNEP 04/2024 - - - - - 13500 - 13500 - - 20.00 - - - 13500 - 2016-05-10 - - - - - CCRALULL - - - - MACEDO DE PINHO ANTONIO AUGUSTO - - - - LU12 0090 0000 5892 2048 - - - - NGL-SNEP 04/2024 - - - - - 13242 - 13242 - - 20.00 - - - 13242 - 2015-04-23 - - - - - BCEELULL - - - - DA COSTA LEITE VITOR LUíS - - - - LU97 0019 2355 3782 7000 - - - - NGL-SNEP 04/2024 - - - - - 13507 - 13507 - - 20.00 - - - 13507 - 2016-05-17 - - - - - BCEELULL - - - - DA CRUZ SARAIVA JOSE ALEXANDRE - - - - LU20 0019 4455 4184 5000 - - - - NGL-SNEP 04/2024 - - - - - 13249 - 13249 - - 20.00 - - - 13249 - 2014-05-30 - - - - - GENODEF1S01 - - - - PALLIEN MICHAEL - - - - DE77 5509 0500 0005 6799 07 - - - - NGL-SNEP 04/2024 - - - - - 13265 - 13265 - - 20.00 - - - 13265 - 2015-06-01 - - - - - BCEELULL - - - - MONTEIRO DELGADO ROBERTO CARLOS - - - - LU52 0019 3455 0656 0000 - - - - NGL-SNEP 04/2024 - - - - - 13278 - 13278 - - 20.00 - - - 13278 - 2015-06-12 - - - - - CELLLULL - - - - GOMES RIBEIRO SANDRA - - - - LU98 0141 9560 5480 0000 - - - - NGL-SNEP 04/2024 - - - - - 13803 - 13803 - - 20.00 - - - 13803 - 2018-04-18 - - - - - BILLLULL - - - - DELAHAYE DOMINIQUE - - - - LU65 0024 6100 7567 6700 - - - - NGL-SNEP 04/2024 - - - - - 13815 - 13815 - - 20.00 - - - 13815 - 2020-10-14 - - - - - BMECLULL - - - - CARVALHO DOS SANTOS ARMINDA - - - - LU09 0250 0446 7094 4000 - - - - NGL-SNEP 04/2024 - - - - - 13828 - 13828 - - 20.00 - - - 13828 - 2017-04-11 - - - - - BCEELULL - - - - DA COSTA SIMAO PEDRO JORGE - - - - LU77 0019 4355 8462 5000 - - - - NGL-SNEP 04/2024 - - - - - 13555 - 13555 - - 20.00 - - - 13555 - 2016-07-19 - - - - - BILLLULL - - - - MONTEIRO ALVES DANIEL - - - - LU27 0027 8100 1327 7900 - - - - NGL-SNEP 04/2024 - - - - - 13831 - 13831 - - 20.00 - - - 13831 - 2017-04-13 - - - - - BCEELULL - - - - SIMOES BARREIRA AUREA MARIA - - - - LU85 0019 3855 2800 3000 - - - - NGL-SNEP 04/2024 - - - - - 13564 - 13564 - - 20.00 - - - 13564 - 2016-07-22 - - - - - CELLLULL - - - - TAVARES PERON KELIANE - - - - LU26 0141 7482 3180 0000 - - - - NGL-SNEP 04/2024 - - - - - 13839 - 13839 - - 20.00 - - - 13839 - 2017-04-21 - - - - - BCEELULL - - - - BARBOSA DE CASTRO VERA LILIANA - - - - LU47 0019 3555 8932 5000 - - - - NGL-SNEP 04/2024 - - - - - 13570 - 13570 - - 20.00 - - - 13570 - 2016-08-01 - - - - - BMECLULL - - - - FERREIRA RIBEIRO CAMILO - - - - LU66 0250 0440 8955 0000 - - - - NGL-SNEP 04/2024 - - - - - 13842 - 13842 - - 20.00 - - - 13842 - 2017-04-25 - - - - - BCEELULL - - - - SKRIJELJ MIRSAD - - - - LU57 0019 5003 2166 1000 - - - - NGL-SNEP 04/2024 - - - - - 13589 - 13589 - - 20.00 - - - 13589 - 2016-08-19 - - - - - CCPLLULL - - - - GONCALVES COELHO MANUEL ANTONIO - - - - LU89 1111 2322 5941 0000 - - - - NGL-SNEP 04/2024 - - - - - 13849 - 13849 - - 20.00 - - - 13849 - 2017-05-01 - - - - - BCEELULL - - - - SKRIJELJ SAFET - - - - LU52 0019 5103 7183 4000 - - - - NGL-SNEP 04/2024 - - - - - 13591 - 13591 - - 20.00 - - - 13591 - 2015-04-28 - - - - - CELLLULL - - - - LOPES DE ALMEIDA JOãO ALEXANDRE - - - - LU44 0141 4556 7750 0000 - - - - NGL-SNEP 04/2024 - - - - - 13860 - 13860 - - 20.00 - - - 13860 - 2015-04-28 - - - - - BGLLLULL - - - - PINTO BERNARDO MANUEL - - - - LU22 0030 8942 5344 0000 - - - - NGL-SNEP 04/2024 - - - - - 13594 - 13594 - - 15.00 - - - 13594 - 2023-11-09 - - - - - BILLLULL - - - - DA SILVA GONçALVES ANA PAULA - - - - LU40 0028 5101 0348 5400 - - - - NGL-SNEP 04/2024 - - - - - 13615 - 13615 - - 20.00 - - - 13615 - 2016-09-13 - - - - - BMECLULL - - - - TOMAS DE SOUSA ALVES ANABELA - - - - LU05 0250 0436 6416 4000 - - - - NGL-SNEP 04/2024 - - - - - 13638 - 13638 - - 20.00 - - - 13638 - 2016-09-19 - - - - - BCEELULL - - - - RIBEIRO GONCALVES JORGE MANUEL - - - - LU82 0019 2355 2173 4000 - - - - NGL-SNEP 04/2024 - - - - - 13644 - 13644 - - 20.00 - - - 13644 - 2016-09-28 - - - - - BILLLULL - - - - MONTEIRO DIAS ROSA MARIA - - - - LU71 0027 3100 4922 6400 - - - - NGL-SNEP 04/2024 - - - - - 13649 - 13649 - - 20.00 - - - 13649 - 2016-10-06 - - - - - BGLLLULL - - - - MOREIRA ALMEIDA MARIO JOSE - - - - LU91 0030 0590 9758 0000 - - - - NGL-SNEP 04/2024 - - - - - 13882 - 13882 - - 20.00 - - - 13882 - 2017-06-01 - - - - - CCPLLULL - - - - PEREZ DE JESUS DIONICIO - - - - LU59 1111 2774 7656 0000 - - - - NGL-SNEP 04/2024 - - - - - 13651 - 13651 - - 20.00 - - - 13651 - 2016-10-06 - - - - - CCRALULL - - - - SOARES MINEIRO DANIEL - - - - LU30 0090 0000 6277 0102 - - - - NGL-SNEP 04/2024 - - - - - 13656 - 13656 - - 20.00 - - - 13656 - 2016-10-11 - - - - - BILLLULL - - - - TAVERNA GRETA - - - - LU25 0027 8101 7311 5700 - - - - NGL-SNEP 04/2024 - - - - - 13905 - 13905 - - 20.00 - - - 13905 - 2017-07-01 - - - - - BCEELULL - - - - MOREIRA DE OLIVEIRA CLAUDIA ISABEL - - - - LU76 0019 3455 5865 4000 - - - - NGL-SNEP 04/2024 - - - - - 13912 - 13912 - - 20.00 - - - 13912 - 2017-07-11 - - - - - CELLLULL - - - - MEIRA FERREIRA NATALIA FILIPA - - - - LU39 0141 8426 7850 0000 - - - - NGL-SNEP 04/2024 - - - - - 13916 - 13916 - - 20.00 - - - 13916 - 2017-07-19 - - - - - CCPLLULL - - - - DE CARVALHO PEREIRA ANA CRISTINA - - - - LU90 1111 2329 8689 0000 - - - - NGL-SNEP 04/2024 - - - - - 13927 - 13927 - - 20.00 - - - 13927 - 2017-08-01 - - - - - BMECLULL - - - - ALVES BORGES PATRICIA ISABEL - - - - LU95 0250 0456 1730 2000 - - - - NGL-SNEP 04/2024 - - - - - 13939 - 13939 - - 20.00 - - - 13939 - 2017-08-23 - - - - - BGLLLULL - - - - BOTAS PEDROSA FERNANDO FRANCISCO - - - - LU16 0030 3703 5947 0000 - - - - NGL-SNEP 04/2024 - - - - - 13666 - 13666 - - 20.00 - - - 13666 - 2016-11-09 - - - - - BGLLLULL - - - - DUARTE MARQUES MANUEL JOAO - - - - LU88 0030 8968 3911 0000 - - - - NGL-SNEP 04/2024 - - - - - 13951 - 13951 - - 20.00 - - - 13951 - 2017-09-05 - - - - - BCEELULL - - - - OLIVEIRA NUNES HELDER ANTONIO - - - - LU68 0019 3355 2377 6000 - - - - NGL-SNEP 04/2024 - - - - - 13686 - 13686 - - 20.00 - - - 13686 - 2016-12-01 - - - - - CCRALULL - - - - GOIS FIGUEIREDO SONIA MARIZA - - - - LU34 0099 7800 0061 7761 - - - - NGL-SNEP 04/2024 - - - - - 13959 - 13959 - - 20.00 - - - 13959 - 2017-09-07 - - - - - BCEELULL - - - - DUARTE CATAO JOAO CARLOS - - - - LU80 0019 2155 6577 0000 - - - - NGL-SNEP 04/2024 - - - - - 13968 - 13968 - - 20.00 - - - 13968 - 2017-09-15 - - - - - BILLLULL - - - - FORTES ALVES PRISCILA - - - - LU89 0027 4101 1157 3500 - - - - NGL-SNEP 04/2024 - - - - - 13705 - 13705 - - 20.00 - - - 13705 - 2016-12-15 - - - - - BILLLULL - - - - COELHO TEIXEIRA MARIO ANTONIO - - - - LU90 0020 8100 2359 5200 - - - - NGL-SNEP 04/2024 - - - - - 13977 - 13977 - - 20.00 - - - 13977 - 2019-07-25 - - - - - CELLLULL - - - - MENESES QUINTEIRO SUSANA MARIA - - - - LU31 0141 3701 2570 0000 - - - - NGL-SNEP 04/2024 - - - - - 13708 - 13708 - - 20.00 - - - 13708 - 2016-12-15 - - - - - BILLLULL - - - - DIAS ANTUNES SOFIA ALEXANDRA - - - - LU96 0028 5100 5820 1300 - - - - NGL-SNEP 04/2024 - - - - - 13988 - 13988 - - 20.00 - - - 13988 - 2017-10-01 - - - - - BMECLULL - - - - PEREIRA NEVES ALBERTO - - - - LU78 0250 0444 5218 7000 - - - - NGL-SNEP 04/2024 - - - - - 13718 - 13718 - - 15.00 - - - 13718 - 2021-01-26 - - - - - BCEELULL - - - - CABRAL DA SILVA JORGE MIGUEL - - - - LU89 0019 4355 2511 8000 - - - - NGL-SNEP 04/2024 - - - - - 13721 - 13721 - - 20.00 - - - 13721 - 2017-01-06 - - - - - BCEELULL - - - - VENTURA MACHADO ANABELA AFONSO - - - - LU63 0019 3355 2610 7000 - - - - NGL-SNEP 04/2024 - - - - - 13725 - 13725 - - 20.00 - - - 13725 - 2017-01-17 - - - - - SOGEFRPP - - - - NAUD PATRICK JEAN-PIERRE - - - - FR76 3000 3024 5600 0502 6390 007 - - - - NGL-SNEP 04/2024 - - - - - 13731 - 13731 - - 20.00 - - - 13731 - 2017-02-01 - - - - - BCEELULL - - - - FERNANDES GOMES FERNANDO ALEXANDRE - - - - LU44 0019 2455 5374 9000 - - - - NGL-SNEP 04/2024 - - - - - 13735 - 13735 - - 20.00 - - - 13735 - 2017-01-27 - - - - - BILLLULL - - - - MARTINS ANTUNES JOSE AGOSTINHO - - - - LU55 0021 3100 1762 4000 - - - - NGL-SNEP 04/2024 - - - - - 13992 - 13992 - - 20.00 - - - 13992 - 2017-10-03 - - - - - BMECLULL - - - - DOS SANTOS MENDES CLAUDIA ANDREIA - - - - LU62 0250 0452 7497 0000 - - - - NGL-SNEP 04/2024 - - - - - 13746 - 13746 - - 20.00 - - - 13746 - 2017-02-08 - - - - - BMECLULL - - - - DE ARAUJO ANTONIO PAULO - - - - LU92 0250 0450 1741 7000 - - - - NGL-SNEP 04/2024 - - - - - 13998 - 13998 - - 15.00 - - - 13998 - 2017-09-28 - - - - - CMCIFR2A - - - - BOUSSIS AISSA - - - - FR76 1027 8051 0000 0203 0710 133 - - - - NGL-SNEP 04/2024 - - - - - 14015 - 14015 - - 20.00 - - - 14015 - 2017-10-24 - - - - - BGLLLULL - - - - SA VELOSO DANIELA PATRICIA - - - - LU32 0030 1008 8539 0000 - - - - NGL-SNEP 04/2024 - - - - - 14029 - 14029 - - 20.00 - - - 14029 - 2017-11-06 - - - - - BNPAFRPP - - - - GUILLEMIN DAMIEN - - - - FR76 3000 4014 5000 0000 7616 278 - - - - NGL-SNEP 04/2024 - - - - - 13775 - 13775 - - 20.00 - - - 13775 - 2017-03-01 - - - - - BCEELULL - - - - MARTINS LOUREIRO ANTONIO MIGUEL - - - - LU94 0019 5003 9580 5000 - - - - NGL-SNEP 04/2024 - - - - - 13510 - 13510 - - 20.00 - - - 13510 - 2016-05-18 - - - - - BMECLULL - - - - NUNES DA COSTA JOSE CARLOS - - - - LU47 0250 0445 3554 8000 - - - - NGL-SNEP 04/2024 - - - - - 13780 - 13780 - - 20.00 - - - 13780 - 2017-03-08 - - - - - BILLLULL - - - - MACHADO DA SILVA ANDREIA BIBIANA - - - - LU24 0025 6101 0194 4600 - - - - NGL-SNEP 04/2024 - - - - - 13526 - 13526 - - 20.00 - - - 13526 - 2016-06-15 - - - - - BCEELULL - - - - GUILLAUME PHILIPPE JEAN-FRANCOIS - - - - LU82 0019 2055 6289 6000 - - - - NGL-SNEP 04/2024 - - - - - 13790 - 13790 - - 20.00 - - - 13790 - 2017-03-10 - - - - - CCPLLULL - - - - PASTORE FRANCESCO - - - - LU84 1111 2169 8492 0000 - - - - NGL-SNEP 04/2024 - - - - - 13532 - 13532 - - 20.00 - - - 13532 - 2016-06-17 - - - - - CELLLULL - - - - DE BARROS OLIVEIRA MARIA HELENA - - - - LU07 0141 5358 6620 0000 - - - - NGL-SNEP 04/2024 - - - - - 13796 - 13796 - - 20.00 - - - 13796 - 2017-03-14 - - - - - BMECLULL - - - - SANTOS MARTINS TIAGO JOSE - - - - LU90 0250 0445 2372 7000 - - - - NGL-SNEP 04/2024 - - - - - 13538 - 13538 - - 20.00 - - - 13538 - 2016-06-22 - - - - - BMECLULL - - - - ABREU FRIAS FREITAS JOSé FERNANDO - - - - LU28 0250 0438 1754 6000 - - - - NGL-SNEP 04/2024 - - - - - 13544 - 13544 - - 20.00 - - - 13544 - 2016-06-30 - - - - - BMECLULL - - - - BORGES ROQUE ANTONIO LUIS - - - - LU46 0250 0439 3465 3000 - - - - NGL-SNEP 04/2024 - - - - - 13798 - 13798 - - 20.00 - - - 13798 - 2017-03-17 - - - - - BCEELULL - - - - NOGUEIRA FERREIRA ANTONIO EMILIO - - - - LU40 0019 7455 3916 5000 - - - - NGL-SNEP 04/2024 - - - - - 20240429_180128 - DD - true - 9 - 109 - - - SEPA - - - CORE - - FRST - - 2024-04-29 - - NGL-SNEP ASBL - - LU - 5 Am Brill - L-3961 EHLANGE-SUR-MESS - - - - - LU080019435512770000 - - - - - BCEELULL - - - - - - - LU57ZZZ0000000000000000760 - - SEPA - - - - - - - - 11545 - 11545 - - 2.50 - - - 11545 - 2023-04-18 - - - - - BGLLLULL - - - - LEOCI GIANCARLO - - - - LU51 0030 1472 9078 0000 - - - - NGL-SNEP 04/2024 - - - - - 14260 - 14260 - - 15.00 - - - 14260 - 2019-01-08 - - - - - INGBFR21XXX - - - - TRAXEL SEBASTIEN - - - - FR76 3043 8001 0040 0046 7767 642 - - - - NGL-SNEP 04/2024 - - - - - 14263 - 14263 - - 15.00 - - - 14263 - 2019-01-09 - - - - - BILLLULL - - - - KIEFER THIERRY - - - - LU31 0028 1894 6619 8100 - - - - NGL-SNEP 04/2024 - - - - - 14262 - 14262 - - 15.00 - - - 14262 - 2019-01-15 - - - - - BCEELULL - - - - MIRANDA DUARTE DIANA - - - - LU96 0019 2955 4233 8000 - - - - NGL-SNEP 04/2024 - - - - - 14444 - 14444 - - 14.00 - - - 14444 - 2019-12-16 - - - - - BCEELULL - - - - LESOURD HENRY - - - - LU26 0019 5000 1100 8000 - - - - NGL-SNEP 04/2024 - - - - - 14460 - 14460 - - 15.00 - - - 14460 - 2020-01-26 - - - - - FPELFR21 - - - - VANBUCKHAVE JULIEN - - - - FR76 1659 8000 0109 2307 1000 142 - - - - NGL-SNEP 04/2024 - - - - - 14928 - 14928 - - 15.00 - - - 14928 - 2023-10-18 - - - - - BGLLLULL - - - - VAZ ALVES BAPTISTA CARLA PATRICIA - - - - LU84 0030 6568 6924 1000 - - - - NGL-SNEP 04/2024 - - - - - 14930 - 14930 - - 15.00 - - - 14930 - 2023-10-04 - - - - - BILLLULL - - - - STEPHANIE LANGARD - - - - LU44 0027 8100 8579 4600 - - - - NGL-SNEP 04/2024 - - - - - 14937 - 14937 - - 2.50 - - - 14937 - 2023-11-22 - - - - - BGLLLULL - - - - LINO LUCAS FLAVIO - - - - LU88 0030 1623 5511 0000 - - - - NGL-SNEP 04/2024 - - - - - diff --git a/tmp/node_modules/.bin/marked b/tmp/node_modules/.bin/marked deleted file mode 100644 index bc49a0d..0000000 --- a/tmp/node_modules/.bin/marked +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../marked/bin/marked.js" "$@" -else - exec node "$basedir/../marked/bin/marked.js" "$@" -fi diff --git a/tmp/node_modules/.bin/marked.cmd b/tmp/node_modules/.bin/marked.cmd deleted file mode 100644 index b074870..0000000 --- a/tmp/node_modules/.bin/marked.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\marked\bin\marked.js" %* diff --git a/tmp/node_modules/.bin/marked.ps1 b/tmp/node_modules/.bin/marked.ps1 deleted file mode 100644 index c6b4c9f..0000000 --- a/tmp/node_modules/.bin/marked.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../marked/bin/marked.js" $args - } else { - & "$basedir/node$exe" "$basedir/../marked/bin/marked.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../marked/bin/marked.js" $args - } else { - & "node$exe" "$basedir/../marked/bin/marked.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/tmp/node_modules/.package-lock.json b/tmp/node_modules/.package-lock.json deleted file mode 100644 index 4315877..0000000 --- a/tmp/node_modules/.package-lock.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "tmp", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - } - } -} diff --git a/tmp/node_modules/marked/LICENSE.md b/tmp/node_modules/marked/LICENSE.md deleted file mode 100644 index 4bd2d4a..0000000 --- a/tmp/node_modules/marked/LICENSE.md +++ /dev/null @@ -1,44 +0,0 @@ -# License information - -## Contribution License Agreement - -If you contribute code to this project, you are implicitly allowing your code -to be distributed under the MIT license. You are also implicitly verifying that -all code is your original work. `` - -## Marked - -Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/) -Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -## Markdown - -Copyright © 2004, John Gruber -http://daringfireball.net/ -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. diff --git a/tmp/node_modules/marked/README.md b/tmp/node_modules/marked/README.md deleted file mode 100644 index d4ab251..0000000 --- a/tmp/node_modules/marked/README.md +++ /dev/null @@ -1,107 +0,0 @@ - - - - -# Marked - -[![npm](https://badgen.net/npm/v/marked)](https://www.npmjs.com/package/marked) -[![gzip size](https://badgen.net/badgesize/gzip/https://cdn.jsdelivr.net/npm/marked/marked.min.js)](https://cdn.jsdelivr.net/npm/marked/marked.min.js) -[![install size](https://badgen.net/packagephobia/install/marked)](https://packagephobia.now.sh/result?p=marked) -[![downloads](https://badgen.net/npm/dt/marked)](https://www.npmjs.com/package/marked) -[![github actions](https://github.com/markedjs/marked/workflows/Tests/badge.svg)](https://github.com/markedjs/marked/actions) -[![snyk](https://snyk.io/test/npm/marked/badge.svg)](https://snyk.io/test/npm/marked) - -- ⚡ built for speed -- ⬇️ low-level compiler for parsing markdown without caching or blocking for long periods of time -- ⚖️ light-weight while implementing all markdown features from the supported flavors & specifications -- 🌐 works in a browser, on a server, or from a command line interface (CLI) - -## Demo - -Checkout the [demo page](https://marked.js.org/demo/) to see marked in action ⛹️ - -## Docs - -Our [documentation pages](https://marked.js.org) are also rendered using marked 💯 - -Also read about: - -* [Options](https://marked.js.org/using_advanced) -* [Extensibility](https://marked.js.org/using_pro) - -## Compatibility - -**Node.js:** Only [current and LTS](https://nodejs.org/en/about/releases/) Node.js versions are supported. End of life Node.js versions may become incompatible with Marked at any point in time. - -**Browser:** Not IE11 :) - -## Installation - -**CLI:** - -```sh -npm install -g marked -``` - -**In-browser:** - -```sh -npm install marked -``` - -## Usage - -### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/using_advanced#options) the output HTML. Please use a sanitize library, like [DOMPurify](https://github.com/cure53/DOMPurify) (recommended), [sanitize-html](https://github.com/apostrophecms/sanitize-html) or [insane](https://github.com/bevacqua/insane) on the *output* HTML! 🚨 - -``` -DOMPurify.sanitize(marked.parse(``)); -``` - -**CLI** - -``` bash -# Example with stdin input -$ marked -o hello.html -hello world -^D -$ cat hello.html -

hello world

-``` - -```bash -# Print all options -$ marked --help -``` - -**Browser** - -```html - - - - - Marked in the browser - - -
- - - - -``` -or import esm module - -```html - -``` - -## License - -Copyright (c) 2011-2022, Christopher Jeffrey. (MIT License) diff --git a/tmp/node_modules/marked/bin/main.js b/tmp/node_modules/marked/bin/main.js deleted file mode 100644 index 758ef56..0000000 --- a/tmp/node_modules/marked/bin/main.js +++ /dev/null @@ -1,279 +0,0 @@ -#!/usr/bin/env node - -/** - * Marked CLI - * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License) - */ - -import { promises } from 'node:fs'; -import { dirname, resolve } from 'node:path'; -import { homedir } from 'node:os'; -import { createRequire } from 'node:module'; -import { marked } from '../lib/marked.esm.js'; - -const { access, readFile, writeFile } = promises; -const require = createRequire(import.meta.url); - -/** - * @param {Process} nodeProcess inject process so it can be mocked in tests. - */ -export async function main(nodeProcess) { - /** - * Man Page - */ - async function help() { - const { spawn } = await import('child_process'); - const { fileURLToPath } = await import('url'); - - const options = { - cwd: nodeProcess.cwd(), - env: nodeProcess.env, - stdio: 'inherit' - }; - - const __dirname = dirname(fileURLToPath(import.meta.url)); - const helpText = await readFile(resolve(__dirname, '../man/marked.1.md'), 'utf8'); - - // eslint-disable-next-line promise/param-names - await new Promise(res => { - spawn('man', [resolve(__dirname, '../man/marked.1')], options) - .on('error', () => { - console.log(helpText); - }) - .on('close', res); - }); - } - - async function version() { - const pkg = require('../package.json'); - console.log(pkg.version); - } - - /** - * Main - */ - async function start(argv) { - const files = []; - const options = {}; - let input; - let output; - let string; - let arg; - let tokens; - let config; - let opt; - let noclobber; - - function getArg() { - let arg = argv.shift(); - - if (arg.indexOf('--') === 0) { - // e.g. --opt - arg = arg.split('='); - if (arg.length > 1) { - // e.g. --opt=val - argv.unshift(arg.slice(1).join('=')); - } - arg = arg[0]; - } else if (arg[0] === '-') { - if (arg.length > 2) { - // e.g. -abc - argv = arg.substring(1).split('').map(function(ch) { - return '-' + ch; - }).concat(argv); - arg = argv.shift(); - } else { - // e.g. -a - } - } else { - // e.g. foo - } - - return arg; - } - - while (argv.length) { - arg = getArg(); - switch (arg) { - case '-o': - case '--output': - output = argv.shift(); - break; - case '-i': - case '--input': - input = argv.shift(); - break; - case '-s': - case '--string': - string = argv.shift(); - break; - case '-t': - case '--tokens': - tokens = true; - break; - case '-c': - case '--config': - config = argv.shift(); - break; - case '-n': - case '--no-clobber': - noclobber = true; - break; - case '-h': - case '--help': - return await help(); - case '-v': - case '--version': - return await version(); - default: - if (arg.indexOf('--') === 0) { - opt = camelize(arg.replace(/^--(no-)?/, '')); - if (!marked.defaults.hasOwnProperty(opt)) { - continue; - } - if (arg.indexOf('--no-') === 0) { - options[opt] = typeof marked.defaults[opt] !== 'boolean' - ? null - : false; - } else { - options[opt] = typeof marked.defaults[opt] !== 'boolean' - ? argv.shift() - : true; - } - } else { - files.push(arg); - } - break; - } - } - - async function getData() { - if (!input) { - if (files.length <= 2) { - if (string) { - return string; - } - return await getStdin(); - } - input = files.pop(); - } - return await readFile(input, 'utf8'); - } - - function resolveFile(file) { - return resolve(file.replace(/^~/, homedir)); - } - - function fileExists(file) { - return access(resolveFile(file)).then(() => true, () => false); - } - - async function runConfig(file) { - const configFile = resolveFile(file); - let markedConfig; - try { - // try require for json - markedConfig = require(configFile); - } catch (err) { - if (err.code !== 'ERR_REQUIRE_ESM') { - throw err; - } - // must import esm - markedConfig = await import('file:///' + configFile); - } - - if (markedConfig.default) { - markedConfig = markedConfig.default; - } - - if (typeof markedConfig === 'function') { - markedConfig(marked); - } else { - marked.use(markedConfig); - } - } - - const data = await getData(); - - if (config) { - if (!await fileExists(config)) { - throw Error(`Cannot load config file '${config}'`); - } - - await runConfig(config); - } else { - const defaultConfig = [ - '~/.marked.json', - '~/.marked.js', - '~/.marked/index.js' - ]; - - for (const configFile of defaultConfig) { - if (await fileExists(configFile)) { - await runConfig(configFile); - break; - } - } - } - - const html = tokens - ? JSON.stringify(marked.lexer(data, options), null, 2) - : await marked.parse(data, options); - - if (output) { - if (noclobber && await fileExists(output)) { - throw Error('marked: output file \'' + output + '\' already exists, disable the \'-n\' / \'--no-clobber\' flag to overwrite\n'); - } - return await writeFile(output, html); - } - - nodeProcess.stdout.write(html + '\n'); - } - - /** - * Helpers - */ - function getStdin() { - return new Promise((resolve, reject) => { - const stdin = nodeProcess.stdin; - let buff = ''; - - stdin.setEncoding('utf8'); - - stdin.on('data', function(data) { - buff += data; - }); - - stdin.on('error', function(err) { - reject(err); - }); - - stdin.on('end', function() { - resolve(buff); - }); - - stdin.resume(); - }); - } - - /** - * @param {string} text - */ - function camelize(text) { - return text.replace(/(\w)-(\w)/g, function(_, a, b) { - return a + b.toUpperCase(); - }); - } - - try { - await start(nodeProcess.argv.slice()); - nodeProcess.exit(0); - } catch (err) { - if (err.code === 'ENOENT') { - nodeProcess.stderr.write('marked: ' + err.path + ': No such file or directory'); - } else { - nodeProcess.stderr.write(err.message); - } - return nodeProcess.exit(1); - } -} diff --git a/tmp/node_modules/marked/bin/marked.js b/tmp/node_modules/marked/bin/marked.js deleted file mode 100644 index e2dd816..0000000 --- a/tmp/node_modules/marked/bin/marked.js +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env node - -/** - * Marked CLI - * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License) - */ - -import { main } from './main.js'; - -/** - * Expose / Entry Point - */ - -process.title = 'marked'; -main(process); diff --git a/tmp/node_modules/marked/lib/marked.cjs b/tmp/node_modules/marked/lib/marked.cjs deleted file mode 100644 index 874fea1..0000000 --- a/tmp/node_modules/marked/lib/marked.cjs +++ /dev/null @@ -1,2450 +0,0 @@ -/** - * marked v12.0.2 - a markdown parser - * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed) - * https://github.com/markedjs/marked - */ - -/** - * DO NOT EDIT THIS FILE - * The code in this file is generated from files in ./src/ - */ - -'use strict'; - -/** - * Gets the original marked default options. - */ -function _getDefaults() { - return { - async: false, - breaks: false, - extensions: null, - gfm: true, - hooks: null, - pedantic: false, - renderer: null, - silent: false, - tokenizer: null, - walkTokens: null - }; -} -exports.defaults = _getDefaults(); -function changeDefaults(newDefaults) { - exports.defaults = newDefaults; -} - -/** - * Helpers - */ -const escapeTest = /[&<>"']/; -const escapeReplace = new RegExp(escapeTest.source, 'g'); -const escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/; -const escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g'); -const escapeReplacements = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; -const getEscapeReplacement = (ch) => escapeReplacements[ch]; -function escape$1(html, encode) { - if (encode) { - if (escapeTest.test(html)) { - return html.replace(escapeReplace, getEscapeReplacement); - } - } - else { - if (escapeTestNoEncode.test(html)) { - return html.replace(escapeReplaceNoEncode, getEscapeReplacement); - } - } - return html; -} -const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; -function unescape(html) { - // explicitly match decimal, hex, and named HTML entities - return html.replace(unescapeTest, (_, n) => { - n = n.toLowerCase(); - if (n === 'colon') - return ':'; - if (n.charAt(0) === '#') { - return n.charAt(1) === 'x' - ? String.fromCharCode(parseInt(n.substring(2), 16)) - : String.fromCharCode(+n.substring(1)); - } - return ''; - }); -} -const caret = /(^|[^\[])\^/g; -function edit(regex, opt) { - let source = typeof regex === 'string' ? regex : regex.source; - opt = opt || ''; - const obj = { - replace: (name, val) => { - let valSource = typeof val === 'string' ? val : val.source; - valSource = valSource.replace(caret, '$1'); - source = source.replace(name, valSource); - return obj; - }, - getRegex: () => { - return new RegExp(source, opt); - } - }; - return obj; -} -function cleanUrl(href) { - try { - href = encodeURI(href).replace(/%25/g, '%'); - } - catch (e) { - return null; - } - return href; -} -const noopTest = { exec: () => null }; -function splitCells(tableRow, count) { - // ensure that every cell-delimiting pipe has a space - // before it to distinguish it from an escaped pipe - const row = tableRow.replace(/\|/g, (match, offset, str) => { - let escaped = false; - let curr = offset; - while (--curr >= 0 && str[curr] === '\\') - escaped = !escaped; - if (escaped) { - // odd number of slashes means | is escaped - // so we leave it alone - return '|'; - } - else { - // add space before unescaped | - return ' |'; - } - }), cells = row.split(/ \|/); - let i = 0; - // First/last cell in a row cannot be empty if it has no leading/trailing pipe - if (!cells[0].trim()) { - cells.shift(); - } - if (cells.length > 0 && !cells[cells.length - 1].trim()) { - cells.pop(); - } - if (count) { - if (cells.length > count) { - cells.splice(count); - } - else { - while (cells.length < count) - cells.push(''); - } - } - for (; i < cells.length; i++) { - // leading or trailing whitespace is ignored per the gfm spec - cells[i] = cells[i].trim().replace(/\\\|/g, '|'); - } - return cells; -} -/** - * Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). - * /c*$/ is vulnerable to REDOS. - * - * @param str - * @param c - * @param invert Remove suffix of non-c chars instead. Default falsey. - */ -function rtrim(str, c, invert) { - const l = str.length; - if (l === 0) { - return ''; - } - // Length of suffix matching the invert condition. - let suffLen = 0; - // Step left until we fail to match the invert condition. - while (suffLen < l) { - const currChar = str.charAt(l - suffLen - 1); - if (currChar === c && !invert) { - suffLen++; - } - else if (currChar !== c && invert) { - suffLen++; - } - else { - break; - } - } - return str.slice(0, l - suffLen); -} -function findClosingBracket(str, b) { - if (str.indexOf(b[1]) === -1) { - return -1; - } - let level = 0; - for (let i = 0; i < str.length; i++) { - if (str[i] === '\\') { - i++; - } - else if (str[i] === b[0]) { - level++; - } - else if (str[i] === b[1]) { - level--; - if (level < 0) { - return i; - } - } - } - return -1; -} - -function outputLink(cap, link, raw, lexer) { - const href = link.href; - const title = link.title ? escape$1(link.title) : null; - const text = cap[1].replace(/\\([\[\]])/g, '$1'); - if (cap[0].charAt(0) !== '!') { - lexer.state.inLink = true; - const token = { - type: 'link', - raw, - href, - title, - text, - tokens: lexer.inlineTokens(text) - }; - lexer.state.inLink = false; - return token; - } - return { - type: 'image', - raw, - href, - title, - text: escape$1(text) - }; -} -function indentCodeCompensation(raw, text) { - const matchIndentToCode = raw.match(/^(\s+)(?:```)/); - if (matchIndentToCode === null) { - return text; - } - const indentToCode = matchIndentToCode[1]; - return text - .split('\n') - .map(node => { - const matchIndentInNode = node.match(/^\s+/); - if (matchIndentInNode === null) { - return node; - } - const [indentInNode] = matchIndentInNode; - if (indentInNode.length >= indentToCode.length) { - return node.slice(indentToCode.length); - } - return node; - }) - .join('\n'); -} -/** - * Tokenizer - */ -class _Tokenizer { - options; - rules; // set by the lexer - lexer; // set by the lexer - constructor(options) { - this.options = options || exports.defaults; - } - space(src) { - const cap = this.rules.block.newline.exec(src); - if (cap && cap[0].length > 0) { - return { - type: 'space', - raw: cap[0] - }; - } - } - code(src) { - const cap = this.rules.block.code.exec(src); - if (cap) { - const text = cap[0].replace(/^ {1,4}/gm, ''); - return { - type: 'code', - raw: cap[0], - codeBlockStyle: 'indented', - text: !this.options.pedantic - ? rtrim(text, '\n') - : text - }; - } - } - fences(src) { - const cap = this.rules.block.fences.exec(src); - if (cap) { - const raw = cap[0]; - const text = indentCodeCompensation(raw, cap[3] || ''); - return { - type: 'code', - raw, - lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2], - text - }; - } - } - heading(src) { - const cap = this.rules.block.heading.exec(src); - if (cap) { - let text = cap[2].trim(); - // remove trailing #s - if (/#$/.test(text)) { - const trimmed = rtrim(text, '#'); - if (this.options.pedantic) { - text = trimmed.trim(); - } - else if (!trimmed || / $/.test(trimmed)) { - // CommonMark requires space before trailing #s - text = trimmed.trim(); - } - } - return { - type: 'heading', - raw: cap[0], - depth: cap[1].length, - text, - tokens: this.lexer.inline(text) - }; - } - } - hr(src) { - const cap = this.rules.block.hr.exec(src); - if (cap) { - return { - type: 'hr', - raw: cap[0] - }; - } - } - blockquote(src) { - const cap = this.rules.block.blockquote.exec(src); - if (cap) { - // precede setext continuation with 4 spaces so it isn't a setext - let text = cap[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g, '\n $1'); - text = rtrim(text.replace(/^ *>[ \t]?/gm, ''), '\n'); - const top = this.lexer.state.top; - this.lexer.state.top = true; - const tokens = this.lexer.blockTokens(text); - this.lexer.state.top = top; - return { - type: 'blockquote', - raw: cap[0], - tokens, - text - }; - } - } - list(src) { - let cap = this.rules.block.list.exec(src); - if (cap) { - let bull = cap[1].trim(); - const isordered = bull.length > 1; - const list = { - type: 'list', - raw: '', - ordered: isordered, - start: isordered ? +bull.slice(0, -1) : '', - loose: false, - items: [] - }; - bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`; - if (this.options.pedantic) { - bull = isordered ? bull : '[*+-]'; - } - // Get next list item - const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`); - let raw = ''; - let itemContents = ''; - let endsWithBlankLine = false; - // Check if current bullet point can start a new List Item - while (src) { - let endEarly = false; - if (!(cap = itemRegex.exec(src))) { - break; - } - if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?) - break; - } - raw = cap[0]; - src = src.substring(raw.length); - let line = cap[2].split('\n', 1)[0].replace(/^\t+/, (t) => ' '.repeat(3 * t.length)); - let nextLine = src.split('\n', 1)[0]; - let indent = 0; - if (this.options.pedantic) { - indent = 2; - itemContents = line.trimStart(); - } - else { - indent = cap[2].search(/[^ ]/); // Find first non-space char - indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent - itemContents = line.slice(indent); - indent += cap[1].length; - } - let blankLine = false; - if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line - raw += nextLine + '\n'; - src = src.substring(nextLine.length + 1); - endEarly = true; - } - if (!endEarly) { - const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`); - const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`); - const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`); - const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`); - // Check if following lines should be included in List Item - while (src) { - const rawLine = src.split('\n', 1)[0]; - nextLine = rawLine; - // Re-align to follow commonmark nesting rules - if (this.options.pedantic) { - nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' '); - } - // End list item if found code fences - if (fencesBeginRegex.test(nextLine)) { - break; - } - // End list item if found start of new heading - if (headingBeginRegex.test(nextLine)) { - break; - } - // End list item if found start of new bullet - if (nextBulletRegex.test(nextLine)) { - break; - } - // Horizontal rule found - if (hrRegex.test(src)) { - break; - } - if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible - itemContents += '\n' + nextLine.slice(indent); - } - else { - // not enough indentation - if (blankLine) { - break; - } - // paragraph continuation unless last line was a different block level element - if (line.search(/[^ ]/) >= 4) { // indented code block - break; - } - if (fencesBeginRegex.test(line)) { - break; - } - if (headingBeginRegex.test(line)) { - break; - } - if (hrRegex.test(line)) { - break; - } - itemContents += '\n' + nextLine; - } - if (!blankLine && !nextLine.trim()) { // Check if current line is blank - blankLine = true; - } - raw += rawLine + '\n'; - src = src.substring(rawLine.length + 1); - line = nextLine.slice(indent); - } - } - if (!list.loose) { - // If the previous item ended with a blank line, the list is loose - if (endsWithBlankLine) { - list.loose = true; - } - else if (/\n *\n *$/.test(raw)) { - endsWithBlankLine = true; - } - } - let istask = null; - let ischecked; - // Check for task list items - if (this.options.gfm) { - istask = /^\[[ xX]\] /.exec(itemContents); - if (istask) { - ischecked = istask[0] !== '[ ] '; - itemContents = itemContents.replace(/^\[[ xX]\] +/, ''); - } - } - list.items.push({ - type: 'list_item', - raw, - task: !!istask, - checked: ischecked, - loose: false, - text: itemContents, - tokens: [] - }); - list.raw += raw; - } - // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic - list.items[list.items.length - 1].raw = raw.trimEnd(); - (list.items[list.items.length - 1]).text = itemContents.trimEnd(); - list.raw = list.raw.trimEnd(); - // Item child tokens handled here at end because we needed to have the final item to trim it first - for (let i = 0; i < list.items.length; i++) { - this.lexer.state.top = false; - list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []); - if (!list.loose) { - // Check if list should be loose - const spacers = list.items[i].tokens.filter(t => t.type === 'space'); - const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\n.*\n/.test(t.raw)); - list.loose = hasMultipleLineBreaks; - } - } - // Set all items to loose if list is loose - if (list.loose) { - for (let i = 0; i < list.items.length; i++) { - list.items[i].loose = true; - } - } - return list; - } - } - html(src) { - const cap = this.rules.block.html.exec(src); - if (cap) { - const token = { - type: 'html', - block: true, - raw: cap[0], - pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style', - text: cap[0] - }; - return token; - } - } - def(src) { - const cap = this.rules.block.def.exec(src); - if (cap) { - const tag = cap[1].toLowerCase().replace(/\s+/g, ' '); - const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : ''; - const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3]; - return { - type: 'def', - tag, - raw: cap[0], - href, - title - }; - } - } - table(src) { - const cap = this.rules.block.table.exec(src); - if (!cap) { - return; - } - if (!/[:|]/.test(cap[2])) { - // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading - return; - } - const headers = splitCells(cap[1]); - const aligns = cap[2].replace(/^\||\| *$/g, '').split('|'); - const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []; - const item = { - type: 'table', - raw: cap[0], - header: [], - align: [], - rows: [] - }; - if (headers.length !== aligns.length) { - // header and align columns must be equal, rows can be different. - return; - } - for (const align of aligns) { - if (/^ *-+: *$/.test(align)) { - item.align.push('right'); - } - else if (/^ *:-+: *$/.test(align)) { - item.align.push('center'); - } - else if (/^ *:-+ *$/.test(align)) { - item.align.push('left'); - } - else { - item.align.push(null); - } - } - for (const header of headers) { - item.header.push({ - text: header, - tokens: this.lexer.inline(header) - }); - } - for (const row of rows) { - item.rows.push(splitCells(row, item.header.length).map(cell => { - return { - text: cell, - tokens: this.lexer.inline(cell) - }; - })); - } - return item; - } - lheading(src) { - const cap = this.rules.block.lheading.exec(src); - if (cap) { - return { - type: 'heading', - raw: cap[0], - depth: cap[2].charAt(0) === '=' ? 1 : 2, - text: cap[1], - tokens: this.lexer.inline(cap[1]) - }; - } - } - paragraph(src) { - const cap = this.rules.block.paragraph.exec(src); - if (cap) { - const text = cap[1].charAt(cap[1].length - 1) === '\n' - ? cap[1].slice(0, -1) - : cap[1]; - return { - type: 'paragraph', - raw: cap[0], - text, - tokens: this.lexer.inline(text) - }; - } - } - text(src) { - const cap = this.rules.block.text.exec(src); - if (cap) { - return { - type: 'text', - raw: cap[0], - text: cap[0], - tokens: this.lexer.inline(cap[0]) - }; - } - } - escape(src) { - const cap = this.rules.inline.escape.exec(src); - if (cap) { - return { - type: 'escape', - raw: cap[0], - text: escape$1(cap[1]) - }; - } - } - tag(src) { - const cap = this.rules.inline.tag.exec(src); - if (cap) { - if (!this.lexer.state.inLink && /^/i.test(cap[0])) { - this.lexer.state.inLink = false; - } - if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.lexer.state.inRawBlock = true; - } - else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.lexer.state.inRawBlock = false; - } - return { - type: 'html', - raw: cap[0], - inLink: this.lexer.state.inLink, - inRawBlock: this.lexer.state.inRawBlock, - block: false, - text: cap[0] - }; - } - } - link(src) { - const cap = this.rules.inline.link.exec(src); - if (cap) { - const trimmedUrl = cap[2].trim(); - if (!this.options.pedantic && /^$/.test(trimmedUrl))) { - return; - } - // ending angle bracket cannot be escaped - const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\'); - if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { - return; - } - } - else { - // find closing parenthesis - const lastParenIndex = findClosingBracket(cap[2], '()'); - if (lastParenIndex > -1) { - const start = cap[0].indexOf('!') === 0 ? 5 : 4; - const linkLen = start + cap[1].length + lastParenIndex; - cap[2] = cap[2].substring(0, lastParenIndex); - cap[0] = cap[0].substring(0, linkLen).trim(); - cap[3] = ''; - } - } - let href = cap[2]; - let title = ''; - if (this.options.pedantic) { - // split pedantic href and title - const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); - if (link) { - href = link[1]; - title = link[3]; - } - } - else { - title = cap[3] ? cap[3].slice(1, -1) : ''; - } - href = href.trim(); - if (/^$/.test(trimmedUrl))) { - // pedantic allows starting angle bracket without ending angle bracket - href = href.slice(1); - } - else { - href = href.slice(1, -1); - } - } - return outputLink(cap, { - href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href, - title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title - }, cap[0], this.lexer); - } - } - reflink(src, links) { - let cap; - if ((cap = this.rules.inline.reflink.exec(src)) - || (cap = this.rules.inline.nolink.exec(src))) { - const linkString = (cap[2] || cap[1]).replace(/\s+/g, ' '); - const link = links[linkString.toLowerCase()]; - if (!link) { - const text = cap[0].charAt(0); - return { - type: 'text', - raw: text, - text - }; - } - return outputLink(cap, link, cap[0], this.lexer); - } - } - emStrong(src, maskedSrc, prevChar = '') { - let match = this.rules.inline.emStrongLDelim.exec(src); - if (!match) - return; - // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well - if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) - return; - const nextChar = match[1] || match[2] || ''; - if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) { - // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below) - const lLength = [...match[0]].length - 1; - let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0; - const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd; - endReg.lastIndex = 0; - // Clip maskedSrc to same section of string as src (move to lexer?) - maskedSrc = maskedSrc.slice(-1 * src.length + lLength); - while ((match = endReg.exec(maskedSrc)) != null) { - rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; - if (!rDelim) - continue; // skip single * in __abc*abc__ - rLength = [...rDelim].length; - if (match[3] || match[4]) { // found another Left Delim - delimTotal += rLength; - continue; - } - else if (match[5] || match[6]) { // either Left or Right Delim - if (lLength % 3 && !((lLength + rLength) % 3)) { - midDelimTotal += rLength; - continue; // CommonMark Emphasis Rules 9-10 - } - } - delimTotal -= rLength; - if (delimTotal > 0) - continue; // Haven't found enough closing delimiters - // Remove extra characters. *a*** -> *a* - rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); - // char length can be >1 for unicode characters; - const lastCharLength = [...match[0]][0].length; - const raw = src.slice(0, lLength + match.index + lastCharLength + rLength); - // Create `em` if smallest delimiter has odd char count. *a*** - if (Math.min(lLength, rLength) % 2) { - const text = raw.slice(1, -1); - return { - type: 'em', - raw, - text, - tokens: this.lexer.inlineTokens(text) - }; - } - // Create 'strong' if smallest delimiter has even char count. **a*** - const text = raw.slice(2, -2); - return { - type: 'strong', - raw, - text, - tokens: this.lexer.inlineTokens(text) - }; - } - } - } - codespan(src) { - const cap = this.rules.inline.code.exec(src); - if (cap) { - let text = cap[2].replace(/\n/g, ' '); - const hasNonSpaceChars = /[^ ]/.test(text); - const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text); - if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { - text = text.substring(1, text.length - 1); - } - text = escape$1(text, true); - return { - type: 'codespan', - raw: cap[0], - text - }; - } - } - br(src) { - const cap = this.rules.inline.br.exec(src); - if (cap) { - return { - type: 'br', - raw: cap[0] - }; - } - } - del(src) { - const cap = this.rules.inline.del.exec(src); - if (cap) { - return { - type: 'del', - raw: cap[0], - text: cap[2], - tokens: this.lexer.inlineTokens(cap[2]) - }; - } - } - autolink(src) { - const cap = this.rules.inline.autolink.exec(src); - if (cap) { - let text, href; - if (cap[2] === '@') { - text = escape$1(cap[1]); - href = 'mailto:' + text; - } - else { - text = escape$1(cap[1]); - href = text; - } - return { - type: 'link', - raw: cap[0], - text, - href, - tokens: [ - { - type: 'text', - raw: text, - text - } - ] - }; - } - } - url(src) { - let cap; - if (cap = this.rules.inline.url.exec(src)) { - let text, href; - if (cap[2] === '@') { - text = escape$1(cap[0]); - href = 'mailto:' + text; - } - else { - // do extended autolink path validation - let prevCapZero; - do { - prevCapZero = cap[0]; - cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? ''; - } while (prevCapZero !== cap[0]); - text = escape$1(cap[0]); - if (cap[1] === 'www.') { - href = 'http://' + cap[0]; - } - else { - href = cap[0]; - } - } - return { - type: 'link', - raw: cap[0], - text, - href, - tokens: [ - { - type: 'text', - raw: text, - text - } - ] - }; - } - } - inlineText(src) { - const cap = this.rules.inline.text.exec(src); - if (cap) { - let text; - if (this.lexer.state.inRawBlock) { - text = cap[0]; - } - else { - text = escape$1(cap[0]); - } - return { - type: 'text', - raw: cap[0], - text - }; - } - } -} - -/** - * Block-Level Grammar - */ -const newline = /^(?: *(?:\n|$))+/; -const blockCode = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/; -const fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/; -const hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/; -const heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/; -const bullet = /(?:[*+-]|\d{1,9}[.)])/; -const lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/) - .replace(/bull/g, bullet) // lists can interrupt - .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt - .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt - .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt - .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt - .replace(/html/g, / {0,3}<[^\n>]+>\n/) // block html can interrupt - .getRegex(); -const _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/; -const blockText = /^[^\n]+/; -const _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/; -const def = edit(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/) - .replace('label', _blockLabel) - .replace('title', /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/) - .getRegex(); -const list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/) - .replace(/bull/g, bullet) - .getRegex(); -const _tag = 'address|article|aside|base|basefont|blockquote|body|caption' - + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' - + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' - + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' - + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title' - + '|tr|track|ul'; -const _comment = /|$))/; -const html = edit('^ {0,3}(?:' // optional indentation - + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) - + '|comment[^\\n]*(\\n+|$)' // (2) - + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) - + '|\\n*|$)' // (4) - + '|\\n*|$)' // (5) - + '|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6) - + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag - + '|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag - + ')', 'i') - .replace('comment', _comment) - .replace('tag', _tag) - .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) - .getRegex(); -const paragraph = edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs - .replace('|table', '') - .replace('blockquote', ' {0,3}>') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // pars can be interrupted by type (6) html blocks - .getRegex(); -const blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/) - .replace('paragraph', paragraph) - .getRegex(); -/** - * Normal Block Grammar - */ -const blockNormal = { - blockquote, - code: blockCode, - def, - fences, - heading, - hr, - html, - lheading, - list, - newline, - paragraph, - table: noopTest, - text: blockText -}; -/** - * GFM Block Grammar - */ -const gfmTable = edit('^ *([^\\n ].*)\\n' // Header - + ' {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)' // Align - + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)') // Cells - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('blockquote', ' {0,3}>') - .replace('code', ' {4}[^\\n]') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // tables can be interrupted by type (6) html blocks - .getRegex(); -const blockGfm = { - ...blockNormal, - table: gfmTable, - paragraph: edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs - .replace('table', gfmTable) // interrupt paragraphs with table - .replace('blockquote', ' {0,3}>') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // pars can be interrupted by type (6) html blocks - .getRegex() -}; -/** - * Pedantic grammar (original John Gruber's loose markdown specification) - */ -const blockPedantic = { - ...blockNormal, - html: edit('^ *(?:comment *(?:\\n|\\s*$)' - + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag - + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') - .replace('comment', _comment) - .replace(/tag/g, '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' - + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' - + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') - .getRegex(), - def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, - heading: /^(#{1,6})(.*)(?:\n+|$)/, - fences: noopTest, // fences not supported - lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, - paragraph: edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' *#{1,6} *[^\n]') - .replace('lheading', lheading) - .replace('|table', '') - .replace('blockquote', ' {0,3}>') - .replace('|fences', '') - .replace('|list', '') - .replace('|html', '') - .replace('|tag', '') - .getRegex() -}; -/** - * Inline-Level Grammar - */ -const escape = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; -const inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; -const br = /^( {2,}|\\)\n(?!\s*$)/; -const inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\ -const blockSkip = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g; -const emStrongLDelim = edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, 'u') - .replace(/punct/g, _punctuation) - .getRegex(); -const emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)' // Skip orphan inside strong - + '|[^*]+(?=[^*])' // Consume to delim - + '|(?!\\*)[punct](\\*+)(?=[\\s]|$)' // (1) #*** can only be a Right Delimiter - + '|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter - + '|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])' // (3) #***a, ***a can only be Left Delimiter - + '|[\\s](\\*+)(?!\\*)(?=[punct])' // (4) ***# can only be Left Delimiter - + '|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter - + '|[^punct\\s](\\*+)(?=[^punct\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter - .replace(/punct/g, _punctuation) - .getRegex(); -// (6) Not allowed for _ -const emStrongRDelimUnd = edit('^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)' // Skip orphan inside strong - + '|[^_]+(?=[^_])' // Consume to delim - + '|(?!_)[punct](_+)(?=[\\s]|$)' // (1) #___ can only be a Right Delimiter - + '|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter - + '|(?!_)[punct\\s](_+)(?=[^punct\\s])' // (3) #___a, ___a can only be Left Delimiter - + '|[\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter - + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter - .replace(/punct/g, _punctuation) - .getRegex(); -const anyPunctuation = edit(/\\([punct])/, 'gu') - .replace(/punct/g, _punctuation) - .getRegex(); -const autolink = edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/) - .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/) - .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/) - .getRegex(); -const _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex(); -const tag = edit('^comment' - + '|^' // self-closing tag - + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag - + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. - + '|^' // declaration, e.g. - + '|^') // CDATA section - .replace('comment', _inlineComment) - .replace('attribute', /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/) - .getRegex(); -const _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; -const link = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/) - .replace('label', _inlineLabel) - .replace('href', /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/) - .replace('title', /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/) - .getRegex(); -const reflink = edit(/^!?\[(label)\]\[(ref)\]/) - .replace('label', _inlineLabel) - .replace('ref', _blockLabel) - .getRegex(); -const nolink = edit(/^!?\[(ref)\](?:\[\])?/) - .replace('ref', _blockLabel) - .getRegex(); -const reflinkSearch = edit('reflink|nolink(?!\\()', 'g') - .replace('reflink', reflink) - .replace('nolink', nolink) - .getRegex(); -/** - * Normal Inline Grammar - */ -const inlineNormal = { - _backpedal: noopTest, // only used for GFM url - anyPunctuation, - autolink, - blockSkip, - br, - code: inlineCode, - del: noopTest, - emStrongLDelim, - emStrongRDelimAst, - emStrongRDelimUnd, - escape, - link, - nolink, - punctuation, - reflink, - reflinkSearch, - tag, - text: inlineText, - url: noopTest -}; -/** - * Pedantic Inline Grammar - */ -const inlinePedantic = { - ...inlineNormal, - link: edit(/^!?\[(label)\]\((.*?)\)/) - .replace('label', _inlineLabel) - .getRegex(), - reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) - .replace('label', _inlineLabel) - .getRegex() -}; -/** - * GFM Inline Grammar - */ -const inlineGfm = { - ...inlineNormal, - escape: edit(escape).replace('])', '~|])').getRegex(), - url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, 'i') - .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/) - .getRegex(), - _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, - del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, - text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\ { - return leading + ' '.repeat(tabs.length); - }); - } - let token; - let lastToken; - let cutSrc; - let lastParagraphClipped; - while (src) { - if (this.options.extensions - && this.options.extensions.block - && this.options.extensions.block.some((extTokenizer) => { - if (token = extTokenizer.call({ lexer: this }, src, tokens)) { - src = src.substring(token.raw.length); - tokens.push(token); - return true; - } - return false; - })) { - continue; - } - // newline - if (token = this.tokenizer.space(src)) { - src = src.substring(token.raw.length); - if (token.raw.length === 1 && tokens.length > 0) { - // if there's a single \n as a spacer, it's terminating the last line, - // so move it there so that we don't get unnecessary paragraph tags - tokens[tokens.length - 1].raw += '\n'; - } - else { - tokens.push(token); - } - continue; - } - // code - if (token = this.tokenizer.code(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - // An indented code block cannot interrupt a paragraph. - if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - continue; - } - // fences - if (token = this.tokenizer.fences(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // heading - if (token = this.tokenizer.heading(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // hr - if (token = this.tokenizer.hr(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // blockquote - if (token = this.tokenizer.blockquote(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // list - if (token = this.tokenizer.list(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // html - if (token = this.tokenizer.html(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // def - if (token = this.tokenizer.def(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.raw; - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else if (!this.tokens.links[token.tag]) { - this.tokens.links[token.tag] = { - href: token.href, - title: token.title - }; - } - continue; - } - // table (gfm) - if (token = this.tokenizer.table(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // lheading - if (token = this.tokenizer.lheading(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // top-level paragraph - // prevent paragraph consuming extensions by clipping 'src' to extension start - cutSrc = src; - if (this.options.extensions && this.options.extensions.startBlock) { - let startIndex = Infinity; - const tempSrc = src.slice(1); - let tempStart; - this.options.extensions.startBlock.forEach((getStartIndex) => { - tempStart = getStartIndex.call({ lexer: this }, tempSrc); - if (typeof tempStart === 'number' && tempStart >= 0) { - startIndex = Math.min(startIndex, tempStart); - } - }); - if (startIndex < Infinity && startIndex >= 0) { - cutSrc = src.substring(0, startIndex + 1); - } - } - if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) { - lastToken = tokens[tokens.length - 1]; - if (lastParagraphClipped && lastToken.type === 'paragraph') { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue.pop(); - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - lastParagraphClipped = (cutSrc.length !== src.length); - src = src.substring(token.raw.length); - continue; - } - // text - if (token = this.tokenizer.text(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && lastToken.type === 'text') { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue.pop(); - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - continue; - } - if (src) { - const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); - if (this.options.silent) { - console.error(errMsg); - break; - } - else { - throw new Error(errMsg); - } - } - } - this.state.top = true; - return tokens; - } - inline(src, tokens = []) { - this.inlineQueue.push({ src, tokens }); - return tokens; - } - /** - * Lexing/Compiling - */ - inlineTokens(src, tokens = []) { - let token, lastToken, cutSrc; - // String with links masked to avoid interference with em and strong - let maskedSrc = src; - let match; - let keepPrevChar, prevChar; - // Mask out reflinks - if (this.tokens.links) { - const links = Object.keys(this.tokens.links); - if (links.length > 0) { - while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { - if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) { - maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); - } - } - } - } - // Mask out other blocks - while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { - maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); - } - // Mask out escaped characters - while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) { - maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); - } - while (src) { - if (!keepPrevChar) { - prevChar = ''; - } - keepPrevChar = false; - // extensions - if (this.options.extensions - && this.options.extensions.inline - && this.options.extensions.inline.some((extTokenizer) => { - if (token = extTokenizer.call({ lexer: this }, src, tokens)) { - src = src.substring(token.raw.length); - tokens.push(token); - return true; - } - return false; - })) { - continue; - } - // escape - if (token = this.tokenizer.escape(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // tag - if (token = this.tokenizer.tag(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && token.type === 'text' && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - // link - if (token = this.tokenizer.link(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // reflink, nolink - if (token = this.tokenizer.reflink(src, this.tokens.links)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && token.type === 'text' && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - // em & strong - if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // code - if (token = this.tokenizer.codespan(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // br - if (token = this.tokenizer.br(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // del (gfm) - if (token = this.tokenizer.del(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // autolink - if (token = this.tokenizer.autolink(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // url (gfm) - if (!this.state.inLink && (token = this.tokenizer.url(src))) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // text - // prevent inlineText consuming extensions by clipping 'src' to extension start - cutSrc = src; - if (this.options.extensions && this.options.extensions.startInline) { - let startIndex = Infinity; - const tempSrc = src.slice(1); - let tempStart; - this.options.extensions.startInline.forEach((getStartIndex) => { - tempStart = getStartIndex.call({ lexer: this }, tempSrc); - if (typeof tempStart === 'number' && tempStart >= 0) { - startIndex = Math.min(startIndex, tempStart); - } - }); - if (startIndex < Infinity && startIndex >= 0) { - cutSrc = src.substring(0, startIndex + 1); - } - } - if (token = this.tokenizer.inlineText(cutSrc)) { - src = src.substring(token.raw.length); - if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started - prevChar = token.raw.slice(-1); - } - keepPrevChar = true; - lastToken = tokens[tokens.length - 1]; - if (lastToken && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - if (src) { - const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); - if (this.options.silent) { - console.error(errMsg); - break; - } - else { - throw new Error(errMsg); - } - } - } - return tokens; - } -} - -/** - * Renderer - */ -class _Renderer { - options; - constructor(options) { - this.options = options || exports.defaults; - } - code(code, infostring, escaped) { - const lang = (infostring || '').match(/^\S*/)?.[0]; - code = code.replace(/\n$/, '') + '\n'; - if (!lang) { - return '
'
-                + (escaped ? code : escape$1(code, true))
-                + '
\n'; - } - return '
'
-            + (escaped ? code : escape$1(code, true))
-            + '
\n'; - } - blockquote(quote) { - return `
\n${quote}
\n`; - } - html(html, block) { - return html; - } - heading(text, level, raw) { - // ignore IDs - return `${text}\n`; - } - hr() { - return '
\n'; - } - list(body, ordered, start) { - const type = ordered ? 'ol' : 'ul'; - const startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; - return '<' + type + startatt + '>\n' + body + '\n'; - } - listitem(text, task, checked) { - return `
  • ${text}
  • \n`; - } - checkbox(checked) { - return ''; - } - paragraph(text) { - return `

    ${text}

    \n`; - } - table(header, body) { - if (body) - body = `${body}`; - return '\n' - + '\n' - + header - + '\n' - + body - + '
    \n'; - } - tablerow(content) { - return `\n${content}\n`; - } - tablecell(content, flags) { - const type = flags.header ? 'th' : 'td'; - const tag = flags.align - ? `<${type} align="${flags.align}">` - : `<${type}>`; - return tag + content + `\n`; - } - /** - * span level renderer - */ - strong(text) { - return `${text}`; - } - em(text) { - return `${text}`; - } - codespan(text) { - return `${text}`; - } - br() { - return '
    '; - } - del(text) { - return `${text}`; - } - link(href, title, text) { - const cleanHref = cleanUrl(href); - if (cleanHref === null) { - return text; - } - href = cleanHref; - let out = '
    '; - return out; - } - image(href, title, text) { - const cleanHref = cleanUrl(href); - if (cleanHref === null) { - return text; - } - href = cleanHref; - let out = `${text} 0 && item.tokens[0].type === 'paragraph') { - item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; - if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') { - item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text; - } - } - else { - item.tokens.unshift({ - type: 'text', - text: checkbox + ' ' - }); - } - } - else { - itemBody += checkbox + ' '; - } - } - itemBody += this.parse(item.tokens, loose); - body += this.renderer.listitem(itemBody, task, !!checked); - } - out += this.renderer.list(body, ordered, start); - continue; - } - case 'html': { - const htmlToken = token; - out += this.renderer.html(htmlToken.text, htmlToken.block); - continue; - } - case 'paragraph': { - const paragraphToken = token; - out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens)); - continue; - } - case 'text': { - let textToken = token; - let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text; - while (i + 1 < tokens.length && tokens[i + 1].type === 'text') { - textToken = tokens[++i]; - body += '\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text); - } - out += top ? this.renderer.paragraph(body) : body; - continue; - } - default: { - const errMsg = 'Token with "' + token.type + '" type was not found.'; - if (this.options.silent) { - console.error(errMsg); - return ''; - } - else { - throw new Error(errMsg); - } - } - } - } - return out; - } - /** - * Parse Inline Tokens - */ - parseInline(tokens, renderer) { - renderer = renderer || this.renderer; - let out = ''; - for (let i = 0; i < tokens.length; i++) { - const token = tokens[i]; - // Run any renderer extensions - if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { - const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token); - if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) { - out += ret || ''; - continue; - } - } - switch (token.type) { - case 'escape': { - const escapeToken = token; - out += renderer.text(escapeToken.text); - break; - } - case 'html': { - const tagToken = token; - out += renderer.html(tagToken.text); - break; - } - case 'link': { - const linkToken = token; - out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer)); - break; - } - case 'image': { - const imageToken = token; - out += renderer.image(imageToken.href, imageToken.title, imageToken.text); - break; - } - case 'strong': { - const strongToken = token; - out += renderer.strong(this.parseInline(strongToken.tokens, renderer)); - break; - } - case 'em': { - const emToken = token; - out += renderer.em(this.parseInline(emToken.tokens, renderer)); - break; - } - case 'codespan': { - const codespanToken = token; - out += renderer.codespan(codespanToken.text); - break; - } - case 'br': { - out += renderer.br(); - break; - } - case 'del': { - const delToken = token; - out += renderer.del(this.parseInline(delToken.tokens, renderer)); - break; - } - case 'text': { - const textToken = token; - out += renderer.text(textToken.text); - break; - } - default: { - const errMsg = 'Token with "' + token.type + '" type was not found.'; - if (this.options.silent) { - console.error(errMsg); - return ''; - } - else { - throw new Error(errMsg); - } - } - } - } - return out; - } -} - -class _Hooks { - options; - constructor(options) { - this.options = options || exports.defaults; - } - static passThroughHooks = new Set([ - 'preprocess', - 'postprocess', - 'processAllTokens' - ]); - /** - * Process markdown before marked - */ - preprocess(markdown) { - return markdown; - } - /** - * Process HTML after marked is finished - */ - postprocess(html) { - return html; - } - /** - * Process all tokens before walk tokens - */ - processAllTokens(tokens) { - return tokens; - } -} - -class Marked { - defaults = _getDefaults(); - options = this.setOptions; - parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse); - parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline); - Parser = _Parser; - Renderer = _Renderer; - TextRenderer = _TextRenderer; - Lexer = _Lexer; - Tokenizer = _Tokenizer; - Hooks = _Hooks; - constructor(...args) { - this.use(...args); - } - /** - * Run callback for every token - */ - walkTokens(tokens, callback) { - let values = []; - for (const token of tokens) { - values = values.concat(callback.call(this, token)); - switch (token.type) { - case 'table': { - const tableToken = token; - for (const cell of tableToken.header) { - values = values.concat(this.walkTokens(cell.tokens, callback)); - } - for (const row of tableToken.rows) { - for (const cell of row) { - values = values.concat(this.walkTokens(cell.tokens, callback)); - } - } - break; - } - case 'list': { - const listToken = token; - values = values.concat(this.walkTokens(listToken.items, callback)); - break; - } - default: { - const genericToken = token; - if (this.defaults.extensions?.childTokens?.[genericToken.type]) { - this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => { - const tokens = genericToken[childTokens].flat(Infinity); - values = values.concat(this.walkTokens(tokens, callback)); - }); - } - else if (genericToken.tokens) { - values = values.concat(this.walkTokens(genericToken.tokens, callback)); - } - } - } - } - return values; - } - use(...args) { - const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} }; - args.forEach((pack) => { - // copy options to new object - const opts = { ...pack }; - // set async to true if it was set to true before - opts.async = this.defaults.async || opts.async || false; - // ==-- Parse "addon" extensions --== // - if (pack.extensions) { - pack.extensions.forEach((ext) => { - if (!ext.name) { - throw new Error('extension name required'); - } - if ('renderer' in ext) { // Renderer extensions - const prevRenderer = extensions.renderers[ext.name]; - if (prevRenderer) { - // Replace extension with func to run new extension but fall back if false - extensions.renderers[ext.name] = function (...args) { - let ret = ext.renderer.apply(this, args); - if (ret === false) { - ret = prevRenderer.apply(this, args); - } - return ret; - }; - } - else { - extensions.renderers[ext.name] = ext.renderer; - } - } - if ('tokenizer' in ext) { // Tokenizer Extensions - if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) { - throw new Error("extension level must be 'block' or 'inline'"); - } - const extLevel = extensions[ext.level]; - if (extLevel) { - extLevel.unshift(ext.tokenizer); - } - else { - extensions[ext.level] = [ext.tokenizer]; - } - if (ext.start) { // Function to check for start of token - if (ext.level === 'block') { - if (extensions.startBlock) { - extensions.startBlock.push(ext.start); - } - else { - extensions.startBlock = [ext.start]; - } - } - else if (ext.level === 'inline') { - if (extensions.startInline) { - extensions.startInline.push(ext.start); - } - else { - extensions.startInline = [ext.start]; - } - } - } - } - if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens - extensions.childTokens[ext.name] = ext.childTokens; - } - }); - opts.extensions = extensions; - } - // ==-- Parse "overwrite" extensions --== // - if (pack.renderer) { - const renderer = this.defaults.renderer || new _Renderer(this.defaults); - for (const prop in pack.renderer) { - if (!(prop in renderer)) { - throw new Error(`renderer '${prop}' does not exist`); - } - if (prop === 'options') { - // ignore options property - continue; - } - const rendererProp = prop; - const rendererFunc = pack.renderer[rendererProp]; - const prevRenderer = renderer[rendererProp]; - // Replace renderer with func to run extension, but fall back if false - renderer[rendererProp] = (...args) => { - let ret = rendererFunc.apply(renderer, args); - if (ret === false) { - ret = prevRenderer.apply(renderer, args); - } - return ret || ''; - }; - } - opts.renderer = renderer; - } - if (pack.tokenizer) { - const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults); - for (const prop in pack.tokenizer) { - if (!(prop in tokenizer)) { - throw new Error(`tokenizer '${prop}' does not exist`); - } - if (['options', 'rules', 'lexer'].includes(prop)) { - // ignore options, rules, and lexer properties - continue; - } - const tokenizerProp = prop; - const tokenizerFunc = pack.tokenizer[tokenizerProp]; - const prevTokenizer = tokenizer[tokenizerProp]; - // Replace tokenizer with func to run extension, but fall back if false - // @ts-expect-error cannot type tokenizer function dynamically - tokenizer[tokenizerProp] = (...args) => { - let ret = tokenizerFunc.apply(tokenizer, args); - if (ret === false) { - ret = prevTokenizer.apply(tokenizer, args); - } - return ret; - }; - } - opts.tokenizer = tokenizer; - } - // ==-- Parse Hooks extensions --== // - if (pack.hooks) { - const hooks = this.defaults.hooks || new _Hooks(); - for (const prop in pack.hooks) { - if (!(prop in hooks)) { - throw new Error(`hook '${prop}' does not exist`); - } - if (prop === 'options') { - // ignore options property - continue; - } - const hooksProp = prop; - const hooksFunc = pack.hooks[hooksProp]; - const prevHook = hooks[hooksProp]; - if (_Hooks.passThroughHooks.has(prop)) { - // @ts-expect-error cannot type hook function dynamically - hooks[hooksProp] = (arg) => { - if (this.defaults.async) { - return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => { - return prevHook.call(hooks, ret); - }); - } - const ret = hooksFunc.call(hooks, arg); - return prevHook.call(hooks, ret); - }; - } - else { - // @ts-expect-error cannot type hook function dynamically - hooks[hooksProp] = (...args) => { - let ret = hooksFunc.apply(hooks, args); - if (ret === false) { - ret = prevHook.apply(hooks, args); - } - return ret; - }; - } - } - opts.hooks = hooks; - } - // ==-- Parse WalkTokens extensions --== // - if (pack.walkTokens) { - const walkTokens = this.defaults.walkTokens; - const packWalktokens = pack.walkTokens; - opts.walkTokens = function (token) { - let values = []; - values.push(packWalktokens.call(this, token)); - if (walkTokens) { - values = values.concat(walkTokens.call(this, token)); - } - return values; - }; - } - this.defaults = { ...this.defaults, ...opts }; - }); - return this; - } - setOptions(opt) { - this.defaults = { ...this.defaults, ...opt }; - return this; - } - lexer(src, options) { - return _Lexer.lex(src, options ?? this.defaults); - } - parser(tokens, options) { - return _Parser.parse(tokens, options ?? this.defaults); - } - #parseMarkdown(lexer, parser) { - return (src, options) => { - const origOpt = { ...options }; - const opt = { ...this.defaults, ...origOpt }; - // Show warning if an extension set async to true but the parse was called with async: false - if (this.defaults.async === true && origOpt.async === false) { - if (!opt.silent) { - console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.'); - } - opt.async = true; - } - const throwError = this.#onError(!!opt.silent, !!opt.async); - // throw error in case of non string input - if (typeof src === 'undefined' || src === null) { - return throwError(new Error('marked(): input parameter is undefined or null')); - } - if (typeof src !== 'string') { - return throwError(new Error('marked(): input parameter is of type ' - + Object.prototype.toString.call(src) + ', string expected')); - } - if (opt.hooks) { - opt.hooks.options = opt; - } - if (opt.async) { - return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src) - .then(src => lexer(src, opt)) - .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens) - .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens) - .then(tokens => parser(tokens, opt)) - .then(html => opt.hooks ? opt.hooks.postprocess(html) : html) - .catch(throwError); - } - try { - if (opt.hooks) { - src = opt.hooks.preprocess(src); - } - let tokens = lexer(src, opt); - if (opt.hooks) { - tokens = opt.hooks.processAllTokens(tokens); - } - if (opt.walkTokens) { - this.walkTokens(tokens, opt.walkTokens); - } - let html = parser(tokens, opt); - if (opt.hooks) { - html = opt.hooks.postprocess(html); - } - return html; - } - catch (e) { - return throwError(e); - } - }; - } - #onError(silent, async) { - return (e) => { - e.message += '\nPlease report this to https://github.com/markedjs/marked.'; - if (silent) { - const msg = '

    An error occurred:

    '
    -                    + escape$1(e.message + '', true)
    -                    + '
    '; - if (async) { - return Promise.resolve(msg); - } - return msg; - } - if (async) { - return Promise.reject(e); - } - throw e; - }; - } -} - -const markedInstance = new Marked(); -function marked(src, opt) { - return markedInstance.parse(src, opt); -} -/** - * Sets the default options. - * - * @param options Hash of options - */ -marked.options = - marked.setOptions = function (options) { - markedInstance.setOptions(options); - marked.defaults = markedInstance.defaults; - changeDefaults(marked.defaults); - return marked; - }; -/** - * Gets the original marked default options. - */ -marked.getDefaults = _getDefaults; -marked.defaults = exports.defaults; -/** - * Use Extension - */ -marked.use = function (...args) { - markedInstance.use(...args); - marked.defaults = markedInstance.defaults; - changeDefaults(marked.defaults); - return marked; -}; -/** - * Run callback for every token - */ -marked.walkTokens = function (tokens, callback) { - return markedInstance.walkTokens(tokens, callback); -}; -/** - * Compiles markdown to HTML without enclosing `p` tag. - * - * @param src String of markdown source to be compiled - * @param options Hash of options - * @return String of compiled HTML - */ -marked.parseInline = markedInstance.parseInline; -/** - * Expose - */ -marked.Parser = _Parser; -marked.parser = _Parser.parse; -marked.Renderer = _Renderer; -marked.TextRenderer = _TextRenderer; -marked.Lexer = _Lexer; -marked.lexer = _Lexer.lex; -marked.Tokenizer = _Tokenizer; -marked.Hooks = _Hooks; -marked.parse = marked; -const options = marked.options; -const setOptions = marked.setOptions; -const use = marked.use; -const walkTokens = marked.walkTokens; -const parseInline = marked.parseInline; -const parse = marked; -const parser = _Parser.parse; -const lexer = _Lexer.lex; - -exports.Hooks = _Hooks; -exports.Lexer = _Lexer; -exports.Marked = Marked; -exports.Parser = _Parser; -exports.Renderer = _Renderer; -exports.TextRenderer = _TextRenderer; -exports.Tokenizer = _Tokenizer; -exports.getDefaults = _getDefaults; -exports.lexer = lexer; -exports.marked = marked; -exports.options = options; -exports.parse = parse; -exports.parseInline = parseInline; -exports.parser = parser; -exports.setOptions = setOptions; -exports.use = use; -exports.walkTokens = walkTokens; -//# sourceMappingURL=marked.cjs.map diff --git a/tmp/node_modules/marked/lib/marked.cjs.map b/tmp/node_modules/marked/lib/marked.cjs.map deleted file mode 100644 index 0e496a3..0000000 --- a/tmp/node_modules/marked/lib/marked.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"marked.cjs","sources":["../src/defaults.ts","../src/helpers.ts","../src/Tokenizer.ts","../src/rules.ts","../src/Lexer.ts","../src/Renderer.ts","../src/TextRenderer.ts","../src/Parser.ts","../src/Hooks.ts","../src/Instance.ts","../src/marked.ts"],"sourcesContent":["/**\n * Gets the original marked default options.\n */\nexport function _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nexport let _defaults = _getDefaults();\nexport function changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n","/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nexport function escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nexport function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nexport function edit(regex, opt) {\n let source = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nexport function cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nexport const noopTest = { exec: () => null };\nexport function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nexport function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n","import { _defaults } from './defaults.ts';\nimport { rtrim, splitCells, escape, findClosingBracket } from './helpers.ts';\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n // precede setext continuation with 4 spaces so it isn't a setext\n let text = cap[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n $1');\n text = rtrim(text.replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n (list.items[list.items.length - 1]).text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (/^ *-+: *$/.test(align)) {\n item.align.push('right');\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align.push('center');\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (const header of headers) {\n item.header.push({\n text: header,\n tokens: this.lexer.inline(header)\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map(cell => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell)\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^
    /i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n","import { edit, noopTest } from './helpers.ts';\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\\nconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n escape: edit(escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\ {\n return leading + ' '.repeat(tabs.length);\n });\n }\n let token;\n let lastToken;\n let cutSrc;\n let lastParagraphClipped;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport { cleanUrl, escape } from './helpers.ts';\n/**\n * Renderer\n */\nexport class _Renderer {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/^\\S*/)?.[0];\n code = code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '
    '\n                + (escaped ? code : escape(code, true))\n                + '
    \\n';\n }\n return '
    '\n            + (escaped ? code : escape(code, true))\n            + '
    \\n';\n }\n blockquote(quote) {\n return `
    \\n${quote}
    \\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `${text}\\n`;\n }\n hr() {\n return '
    \\n';\n }\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul';\n const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n listitem(text, task, checked) {\n return `
  • ${text}
  • \\n`;\n }\n checkbox(checked) {\n return '';\n }\n paragraph(text) {\n return `

    ${text}

    \\n`;\n }\n table(header, body) {\n if (body)\n body = `${body}`;\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n tablerow(content) {\n return `\\n${content}\\n`;\n }\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `\\n`;\n }\n /**\n * span level renderer\n */\n strong(text) {\n return `${text}`;\n }\n em(text) {\n return `${text}`;\n }\n codespan(text) {\n return `${text}`;\n }\n br() {\n return '
    ';\n }\n del(text) {\n return `${text}`;\n }\n link(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '
    ';\n return out;\n }\n image(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `\"${text}\"`;\n 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox + ' '\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, !!checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n const htmlToken = token;\n out += this.renderer.html(htmlToken.text, htmlToken.block);\n continue;\n }\n case 'paragraph': {\n const paragraphToken = token;\n out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape': {\n const escapeToken = token;\n out += renderer.text(escapeToken.text);\n break;\n }\n case 'html': {\n const tagToken = token;\n out += renderer.html(tagToken.text);\n break;\n }\n case 'link': {\n const linkToken = token;\n out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n break;\n }\n case 'image': {\n const imageToken = token;\n out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n break;\n }\n case 'strong': {\n const strongToken = token;\n out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n break;\n }\n case 'em': {\n const emToken = token;\n out += renderer.em(this.parseInline(emToken.tokens, renderer));\n break;\n }\n case 'codespan': {\n const codespanToken = token;\n out += renderer.codespan(codespanToken.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n const delToken = token;\n out += renderer.del(this.parseInline(delToken.tokens, renderer));\n break;\n }\n case 'text': {\n const textToken = token;\n out += renderer.text(textToken.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n","import { _defaults } from './defaults.ts';\nexport class _Hooks {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens'\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nexport class Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n #parseMarkdown(lexer, parser) {\n return (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n // Show warning if an extension set async to true but the parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n if (!opt.silent) {\n console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n }\n opt.async = true;\n }\n const throwError = this.#onError(!!opt.silent, !!opt.async);\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n }\n #onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '

    An error occurred:

    '\n                    + escape(e.message + '', true)\n                    + '
    ';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport { _getDefaults, changeDefaults, _defaults } from './defaults.ts';\nconst markedInstance = new Marked();\nexport function marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\n"],"names":["_defaults","escape"],"mappings":"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"} \ No newline at end of file diff --git a/tmp/node_modules/marked/lib/marked.d.cts b/tmp/node_modules/marked/lib/marked.d.cts deleted file mode 100644 index c26b2db..0000000 --- a/tmp/node_modules/marked/lib/marked.d.cts +++ /dev/null @@ -1,657 +0,0 @@ -// Generated by dts-bundle-generator v9.3.1 - -export type Token = (Tokens.Space | Tokens.Code | Tokens.Heading | Tokens.Table | Tokens.Hr | Tokens.Blockquote | Tokens.List | Tokens.ListItem | Tokens.Paragraph | Tokens.HTML | Tokens.Text | Tokens.Def | Tokens.Escape | Tokens.Tag | Tokens.Image | Tokens.Link | Tokens.Strong | Tokens.Em | Tokens.Codespan | Tokens.Br | Tokens.Del | Tokens.Generic); -export declare namespace Tokens { - interface Space { - type: "space"; - raw: string; - } - interface Code { - type: "code"; - raw: string; - codeBlockStyle?: "indented" | undefined; - lang?: string | undefined; - text: string; - escaped?: boolean; - } - interface Heading { - type: "heading"; - raw: string; - depth: number; - text: string; - tokens: Token[]; - } - interface Table { - type: "table"; - raw: string; - align: Array<"center" | "left" | "right" | null>; - header: TableCell[]; - rows: TableCell[][]; - } - interface TableCell { - text: string; - tokens: Token[]; - } - interface Hr { - type: "hr"; - raw: string; - } - interface Blockquote { - type: "blockquote"; - raw: string; - text: string; - tokens: Token[]; - } - interface List { - type: "list"; - raw: string; - ordered: boolean; - start: number | ""; - loose: boolean; - items: ListItem[]; - } - interface ListItem { - type: "list_item"; - raw: string; - task: boolean; - checked?: boolean | undefined; - loose: boolean; - text: string; - tokens: Token[]; - } - interface Paragraph { - type: "paragraph"; - raw: string; - pre?: boolean | undefined; - text: string; - tokens: Token[]; - } - interface HTML { - type: "html"; - raw: string; - pre: boolean; - text: string; - block: boolean; - } - interface Text { - type: "text"; - raw: string; - text: string; - tokens?: Token[]; - } - interface Def { - type: "def"; - raw: string; - tag: string; - href: string; - title: string; - } - interface Escape { - type: "escape"; - raw: string; - text: string; - } - interface Tag { - type: "text" | "html"; - raw: string; - inLink: boolean; - inRawBlock: boolean; - text: string; - block: boolean; - } - interface Link { - type: "link"; - raw: string; - href: string; - title?: string | null; - text: string; - tokens: Token[]; - } - interface Image { - type: "image"; - raw: string; - href: string; - title: string | null; - text: string; - } - interface Strong { - type: "strong"; - raw: string; - text: string; - tokens: Token[]; - } - interface Em { - type: "em"; - raw: string; - text: string; - tokens: Token[]; - } - interface Codespan { - type: "codespan"; - raw: string; - text: string; - } - interface Br { - type: "br"; - raw: string; - } - interface Del { - type: "del"; - raw: string; - text: string; - tokens: Token[]; - } - interface Generic { - [index: string]: any; - type: string; - raw: string; - tokens?: Token[] | undefined; - } -} -export type Links = Record>; -export type TokensList = Token[] & { - links: Links; -}; -/** - * Renderer - */ -declare class _Renderer { - options: MarkedOptions; - constructor(options?: MarkedOptions); - code(code: string, infostring: string | undefined, escaped: boolean): string; - blockquote(quote: string): string; - html(html: string, block?: boolean): string; - heading(text: string, level: number, raw: string): string; - hr(): string; - list(body: string, ordered: boolean, start: number | ""): string; - listitem(text: string, task: boolean, checked: boolean): string; - checkbox(checked: boolean): string; - paragraph(text: string): string; - table(header: string, body: string): string; - tablerow(content: string): string; - tablecell(content: string, flags: { - header: boolean; - align: "center" | "left" | "right" | null; - }): string; - /** - * span level renderer - */ - strong(text: string): string; - em(text: string): string; - codespan(text: string): string; - br(): string; - del(text: string): string; - link(href: string, title: string | null | undefined, text: string): string; - image(href: string, title: string | null, text: string): string; - text(text: string): string; -} -/** - * TextRenderer - * returns only the textual part of the token - */ -declare class _TextRenderer { - strong(text: string): string; - em(text: string): string; - codespan(text: string): string; - del(text: string): string; - html(text: string): string; - text(text: string): string; - link(href: string, title: string | null | undefined, text: string): string; - image(href: string, title: string | null, text: string): string; - br(): string; -} -/** - * Parsing & Compiling - */ -declare class _Parser { - options: MarkedOptions; - renderer: _Renderer; - textRenderer: _TextRenderer; - constructor(options?: MarkedOptions); - /** - * Static Parse Method - */ - static parse(tokens: Token[], options?: MarkedOptions): string; - /** - * Static Parse Inline Method - */ - static parseInline(tokens: Token[], options?: MarkedOptions): string; - /** - * Parse Loop - */ - parse(tokens: Token[], top?: boolean): string; - /** - * Parse Inline Tokens - */ - parseInline(tokens: Token[], renderer?: _Renderer | _TextRenderer): string; -} -declare const blockNormal: { - blockquote: RegExp; - code: RegExp; - def: RegExp; - fences: RegExp; - heading: RegExp; - hr: RegExp; - html: RegExp; - lheading: RegExp; - list: RegExp; - newline: RegExp; - paragraph: RegExp; - table: RegExp; - text: RegExp; -}; -export type BlockKeys = keyof typeof blockNormal; -declare const inlineNormal: { - _backpedal: RegExp; - anyPunctuation: RegExp; - autolink: RegExp; - blockSkip: RegExp; - br: RegExp; - code: RegExp; - del: RegExp; - emStrongLDelim: RegExp; - emStrongRDelimAst: RegExp; - emStrongRDelimUnd: RegExp; - escape: RegExp; - link: RegExp; - nolink: RegExp; - punctuation: RegExp; - reflink: RegExp; - reflinkSearch: RegExp; - tag: RegExp; - text: RegExp; - url: RegExp; -}; -export type InlineKeys = keyof typeof inlineNormal; -/** - * exports - */ -export declare const block: { - normal: { - blockquote: RegExp; - code: RegExp; - def: RegExp; - fences: RegExp; - heading: RegExp; - hr: RegExp; - html: RegExp; - lheading: RegExp; - list: RegExp; - newline: RegExp; - paragraph: RegExp; - table: RegExp; - text: RegExp; - }; - gfm: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; - pedantic: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; -}; -export declare const inline: { - normal: { - _backpedal: RegExp; - anyPunctuation: RegExp; - autolink: RegExp; - blockSkip: RegExp; - br: RegExp; - code: RegExp; - del: RegExp; - emStrongLDelim: RegExp; - emStrongRDelimAst: RegExp; - emStrongRDelimUnd: RegExp; - escape: RegExp; - link: RegExp; - nolink: RegExp; - punctuation: RegExp; - reflink: RegExp; - reflinkSearch: RegExp; - tag: RegExp; - text: RegExp; - url: RegExp; - }; - gfm: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - breaks: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - pedantic: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; -}; -export interface Rules { - block: Record; - inline: Record; -} -/** - * Tokenizer - */ -declare class _Tokenizer { - options: MarkedOptions; - rules: Rules; - lexer: _Lexer; - constructor(options?: MarkedOptions); - space(src: string): Tokens.Space | undefined; - code(src: string): Tokens.Code | undefined; - fences(src: string): Tokens.Code | undefined; - heading(src: string): Tokens.Heading | undefined; - hr(src: string): Tokens.Hr | undefined; - blockquote(src: string): Tokens.Blockquote | undefined; - list(src: string): Tokens.List | undefined; - html(src: string): Tokens.HTML | undefined; - def(src: string): Tokens.Def | undefined; - table(src: string): Tokens.Table | undefined; - lheading(src: string): Tokens.Heading | undefined; - paragraph(src: string): Tokens.Paragraph | undefined; - text(src: string): Tokens.Text | undefined; - escape(src: string): Tokens.Escape | undefined; - tag(src: string): Tokens.Tag | undefined; - link(src: string): Tokens.Link | Tokens.Image | undefined; - reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined; - emStrong(src: string, maskedSrc: string, prevChar?: string): Tokens.Em | Tokens.Strong | undefined; - codespan(src: string): Tokens.Codespan | undefined; - br(src: string): Tokens.Br | undefined; - del(src: string): Tokens.Del | undefined; - autolink(src: string): Tokens.Link | undefined; - url(src: string): Tokens.Link | undefined; - inlineText(src: string): Tokens.Text | undefined; -} -declare class _Hooks { - options: MarkedOptions; - constructor(options?: MarkedOptions); - static passThroughHooks: Set; - /** - * Process markdown before marked - */ - preprocess(markdown: string): string; - /** - * Process HTML after marked is finished - */ - postprocess(html: string): string; - /** - * Process all tokens before walk tokens - */ - processAllTokens(tokens: Token[] | TokensList): Token[] | TokensList; -} -export interface TokenizerThis { - lexer: _Lexer; -} -export type TokenizerExtensionFunction = (this: TokenizerThis, src: string, tokens: Token[] | TokensList) => Tokens.Generic | undefined; -export type TokenizerStartFunction = (this: TokenizerThis, src: string) => number | void; -export interface TokenizerExtension { - name: string; - level: "block" | "inline"; - start?: TokenizerStartFunction | undefined; - tokenizer: TokenizerExtensionFunction; - childTokens?: string[] | undefined; -} -export interface RendererThis { - parser: _Parser; -} -export type RendererExtensionFunction = (this: RendererThis, token: Tokens.Generic) => string | false | undefined; -export interface RendererExtension { - name: string; - renderer: RendererExtensionFunction; -} -export type TokenizerAndRendererExtension = TokenizerExtension | RendererExtension | (TokenizerExtension & RendererExtension); -export type HooksApi = Omit<_Hooks, "constructor" | "options">; -export type HooksObject = { - [K in keyof HooksApi]?: (...args: Parameters) => ReturnType | Promise>; -}; -export type RendererApi = Omit<_Renderer, "constructor" | "options">; -export type RendererObject = { - [K in keyof RendererApi]?: (...args: Parameters) => ReturnType | false; -}; -export type TokenizerApi = Omit<_Tokenizer, "constructor" | "options" | "rules" | "lexer">; -export type TokenizerObject = { - [K in keyof TokenizerApi]?: (...args: Parameters) => ReturnType | false; -}; -export interface MarkedExtension { - /** - * True will tell marked to await any walkTokens functions before parsing the tokens and returning an HTML string. - */ - async?: boolean; - /** - * Enable GFM line breaks. This option requires the gfm option to be true. - */ - breaks?: boolean | undefined; - /** - * Add tokenizers and renderers to marked - */ - extensions?: TokenizerAndRendererExtension[] | undefined | null; - /** - * Enable GitHub flavored markdown. - */ - gfm?: boolean | undefined; - /** - * Hooks are methods that hook into some part of marked. - * preprocess is called to process markdown before sending it to marked. - * processAllTokens is called with the TokensList before walkTokens. - * postprocess is called to process html after marked has finished parsing. - */ - hooks?: HooksObject | undefined | null; - /** - * Conform to obscure parts of markdown.pl as much as possible. Don't fix any of the original markdown bugs or poor behavior. - */ - pedantic?: boolean | undefined; - /** - * Type: object Default: new Renderer() - * - * An object containing functions to render tokens to HTML. - */ - renderer?: RendererObject | undefined | null; - /** - * Shows an HTML error message when rendering fails. - */ - silent?: boolean | undefined; - /** - * The tokenizer defines how to turn markdown text into tokens. - */ - tokenizer?: TokenizerObject | undefined | null; - /** - * The walkTokens function gets called with every token. - * Child tokens are called before moving on to sibling tokens. - * Each token is passed by reference so updates are persisted when passed to the parser. - * The return value of the function is ignored. - */ - walkTokens?: ((token: Token) => void | Promise) | undefined | null; -} -export interface MarkedOptions extends Omit { - /** - * Hooks are methods that hook into some part of marked. - */ - hooks?: _Hooks | undefined | null; - /** - * Type: object Default: new Renderer() - * - * An object containing functions to render tokens to HTML. - */ - renderer?: _Renderer | undefined | null; - /** - * The tokenizer defines how to turn markdown text into tokens. - */ - tokenizer?: _Tokenizer | undefined | null; - /** - * Custom extensions - */ - extensions?: null | { - renderers: { - [name: string]: RendererExtensionFunction; - }; - childTokens: { - [name: string]: string[]; - }; - inline?: TokenizerExtensionFunction[]; - block?: TokenizerExtensionFunction[]; - startInline?: TokenizerStartFunction[]; - startBlock?: TokenizerStartFunction[]; - }; - /** - * walkTokens function returns array of values for Promise.all - */ - walkTokens?: null | ((token: Token) => void | Promise | (void | Promise)[]); -} -/** - * Block Lexer - */ -declare class _Lexer { - tokens: TokensList; - options: MarkedOptions; - state: { - inLink: boolean; - inRawBlock: boolean; - top: boolean; - }; - private tokenizer; - private inlineQueue; - constructor(options?: MarkedOptions); - /** - * Expose Rules - */ - static get rules(): { - block: { - normal: { - blockquote: RegExp; - code: RegExp; - def: RegExp; - fences: RegExp; - heading: RegExp; - hr: RegExp; - html: RegExp; - lheading: RegExp; - list: RegExp; - newline: RegExp; - paragraph: RegExp; - table: RegExp; - text: RegExp; - }; - gfm: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; - pedantic: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; - }; - inline: { - normal: { - _backpedal: RegExp; - anyPunctuation: RegExp; - autolink: RegExp; - blockSkip: RegExp; - br: RegExp; - code: RegExp; - del: RegExp; - emStrongLDelim: RegExp; - emStrongRDelimAst: RegExp; - emStrongRDelimUnd: RegExp; - escape: RegExp; - link: RegExp; - nolink: RegExp; - punctuation: RegExp; - reflink: RegExp; - reflinkSearch: RegExp; - tag: RegExp; - text: RegExp; - url: RegExp; - }; - gfm: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - breaks: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - pedantic: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - }; - }; - /** - * Static Lex Method - */ - static lex(src: string, options?: MarkedOptions): TokensList; - /** - * Static Lex Inline Method - */ - static lexInline(src: string, options?: MarkedOptions): Token[]; - /** - * Preprocessing - */ - lex(src: string): TokensList; - /** - * Lexing - */ - blockTokens(src: string, tokens?: Token[]): Token[]; - blockTokens(src: string, tokens?: TokensList): TokensList; - inline(src: string, tokens?: Token[]): Token[]; - /** - * Lexing/Compiling - */ - inlineTokens(src: string, tokens?: Token[]): Token[]; -} -/** - * Gets the original marked default options. - */ -declare function _getDefaults(): MarkedOptions; -declare let _defaults: MarkedOptions; -export type MaybePromise = void | Promise; -export declare class Marked { - #private; - defaults: MarkedOptions; - options: (opt: MarkedOptions) => this; - parse: (src: string, options?: MarkedOptions | undefined | null) => string | Promise; - parseInline: (src: string, options?: MarkedOptions | undefined | null) => string | Promise; - Parser: typeof _Parser; - Renderer: typeof _Renderer; - TextRenderer: typeof _TextRenderer; - Lexer: typeof _Lexer; - Tokenizer: typeof _Tokenizer; - Hooks: typeof _Hooks; - constructor(...args: MarkedExtension[]); - /** - * Run callback for every token - */ - walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]): MaybePromise[]; - use(...args: MarkedExtension[]): this; - setOptions(opt: MarkedOptions): this; - lexer(src: string, options?: MarkedOptions): TokensList; - parser(tokens: Token[], options?: MarkedOptions): string; -} -/** - * Compiles markdown to HTML asynchronously. - * - * @param src String of markdown source to be compiled - * @param options Hash of options, having async: true - * @return Promise of string of compiled HTML - */ -export declare function marked(src: string, options: MarkedOptions & { - async: true; -}): Promise; -/** - * Compiles markdown to HTML. - * - * @param src String of markdown source to be compiled - * @param options Optional hash of options - * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions. - */ -export declare function marked(src: string, options?: MarkedOptions): string | Promise; -export declare namespace marked { - var options: (options: MarkedOptions) => typeof marked; - var setOptions: (options: MarkedOptions) => typeof marked; - var getDefaults: typeof _getDefaults; - var defaults: MarkedOptions; - var use: (...args: MarkedExtension[]) => typeof marked; - var walkTokens: (tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) => MaybePromise[]; - var parseInline: (src: string, options?: MarkedOptions | null | undefined) => string | Promise; - var Parser: typeof _Parser; - var parser: typeof _Parser.parse; - var Renderer: typeof _Renderer; - var TextRenderer: typeof _TextRenderer; - var Lexer: typeof _Lexer; - var lexer: typeof _Lexer.lex; - var Tokenizer: typeof _Tokenizer; - var Hooks: typeof _Hooks; - var parse: typeof marked; -} -export declare const options: (options: MarkedOptions) => typeof marked; -export declare const setOptions: (options: MarkedOptions) => typeof marked; -export declare const use: (...args: MarkedExtension[]) => typeof marked; -export declare const walkTokens: (tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) => MaybePromise[]; -export declare const parseInline: (src: string, options?: MarkedOptions | null | undefined) => string | Promise; -export declare const parse: typeof marked; -export declare const parser: typeof _Parser.parse; -export declare const lexer: typeof _Lexer.lex; - -export { - _Hooks as Hooks, - _Lexer as Lexer, - _Parser as Parser, - _Renderer as Renderer, - _TextRenderer as TextRenderer, - _Tokenizer as Tokenizer, - _defaults as defaults, - _getDefaults as getDefaults, -}; - -export {}; diff --git a/tmp/node_modules/marked/lib/marked.d.ts b/tmp/node_modules/marked/lib/marked.d.ts deleted file mode 100644 index c26b2db..0000000 --- a/tmp/node_modules/marked/lib/marked.d.ts +++ /dev/null @@ -1,657 +0,0 @@ -// Generated by dts-bundle-generator v9.3.1 - -export type Token = (Tokens.Space | Tokens.Code | Tokens.Heading | Tokens.Table | Tokens.Hr | Tokens.Blockquote | Tokens.List | Tokens.ListItem | Tokens.Paragraph | Tokens.HTML | Tokens.Text | Tokens.Def | Tokens.Escape | Tokens.Tag | Tokens.Image | Tokens.Link | Tokens.Strong | Tokens.Em | Tokens.Codespan | Tokens.Br | Tokens.Del | Tokens.Generic); -export declare namespace Tokens { - interface Space { - type: "space"; - raw: string; - } - interface Code { - type: "code"; - raw: string; - codeBlockStyle?: "indented" | undefined; - lang?: string | undefined; - text: string; - escaped?: boolean; - } - interface Heading { - type: "heading"; - raw: string; - depth: number; - text: string; - tokens: Token[]; - } - interface Table { - type: "table"; - raw: string; - align: Array<"center" | "left" | "right" | null>; - header: TableCell[]; - rows: TableCell[][]; - } - interface TableCell { - text: string; - tokens: Token[]; - } - interface Hr { - type: "hr"; - raw: string; - } - interface Blockquote { - type: "blockquote"; - raw: string; - text: string; - tokens: Token[]; - } - interface List { - type: "list"; - raw: string; - ordered: boolean; - start: number | ""; - loose: boolean; - items: ListItem[]; - } - interface ListItem { - type: "list_item"; - raw: string; - task: boolean; - checked?: boolean | undefined; - loose: boolean; - text: string; - tokens: Token[]; - } - interface Paragraph { - type: "paragraph"; - raw: string; - pre?: boolean | undefined; - text: string; - tokens: Token[]; - } - interface HTML { - type: "html"; - raw: string; - pre: boolean; - text: string; - block: boolean; - } - interface Text { - type: "text"; - raw: string; - text: string; - tokens?: Token[]; - } - interface Def { - type: "def"; - raw: string; - tag: string; - href: string; - title: string; - } - interface Escape { - type: "escape"; - raw: string; - text: string; - } - interface Tag { - type: "text" | "html"; - raw: string; - inLink: boolean; - inRawBlock: boolean; - text: string; - block: boolean; - } - interface Link { - type: "link"; - raw: string; - href: string; - title?: string | null; - text: string; - tokens: Token[]; - } - interface Image { - type: "image"; - raw: string; - href: string; - title: string | null; - text: string; - } - interface Strong { - type: "strong"; - raw: string; - text: string; - tokens: Token[]; - } - interface Em { - type: "em"; - raw: string; - text: string; - tokens: Token[]; - } - interface Codespan { - type: "codespan"; - raw: string; - text: string; - } - interface Br { - type: "br"; - raw: string; - } - interface Del { - type: "del"; - raw: string; - text: string; - tokens: Token[]; - } - interface Generic { - [index: string]: any; - type: string; - raw: string; - tokens?: Token[] | undefined; - } -} -export type Links = Record>; -export type TokensList = Token[] & { - links: Links; -}; -/** - * Renderer - */ -declare class _Renderer { - options: MarkedOptions; - constructor(options?: MarkedOptions); - code(code: string, infostring: string | undefined, escaped: boolean): string; - blockquote(quote: string): string; - html(html: string, block?: boolean): string; - heading(text: string, level: number, raw: string): string; - hr(): string; - list(body: string, ordered: boolean, start: number | ""): string; - listitem(text: string, task: boolean, checked: boolean): string; - checkbox(checked: boolean): string; - paragraph(text: string): string; - table(header: string, body: string): string; - tablerow(content: string): string; - tablecell(content: string, flags: { - header: boolean; - align: "center" | "left" | "right" | null; - }): string; - /** - * span level renderer - */ - strong(text: string): string; - em(text: string): string; - codespan(text: string): string; - br(): string; - del(text: string): string; - link(href: string, title: string | null | undefined, text: string): string; - image(href: string, title: string | null, text: string): string; - text(text: string): string; -} -/** - * TextRenderer - * returns only the textual part of the token - */ -declare class _TextRenderer { - strong(text: string): string; - em(text: string): string; - codespan(text: string): string; - del(text: string): string; - html(text: string): string; - text(text: string): string; - link(href: string, title: string | null | undefined, text: string): string; - image(href: string, title: string | null, text: string): string; - br(): string; -} -/** - * Parsing & Compiling - */ -declare class _Parser { - options: MarkedOptions; - renderer: _Renderer; - textRenderer: _TextRenderer; - constructor(options?: MarkedOptions); - /** - * Static Parse Method - */ - static parse(tokens: Token[], options?: MarkedOptions): string; - /** - * Static Parse Inline Method - */ - static parseInline(tokens: Token[], options?: MarkedOptions): string; - /** - * Parse Loop - */ - parse(tokens: Token[], top?: boolean): string; - /** - * Parse Inline Tokens - */ - parseInline(tokens: Token[], renderer?: _Renderer | _TextRenderer): string; -} -declare const blockNormal: { - blockquote: RegExp; - code: RegExp; - def: RegExp; - fences: RegExp; - heading: RegExp; - hr: RegExp; - html: RegExp; - lheading: RegExp; - list: RegExp; - newline: RegExp; - paragraph: RegExp; - table: RegExp; - text: RegExp; -}; -export type BlockKeys = keyof typeof blockNormal; -declare const inlineNormal: { - _backpedal: RegExp; - anyPunctuation: RegExp; - autolink: RegExp; - blockSkip: RegExp; - br: RegExp; - code: RegExp; - del: RegExp; - emStrongLDelim: RegExp; - emStrongRDelimAst: RegExp; - emStrongRDelimUnd: RegExp; - escape: RegExp; - link: RegExp; - nolink: RegExp; - punctuation: RegExp; - reflink: RegExp; - reflinkSearch: RegExp; - tag: RegExp; - text: RegExp; - url: RegExp; -}; -export type InlineKeys = keyof typeof inlineNormal; -/** - * exports - */ -export declare const block: { - normal: { - blockquote: RegExp; - code: RegExp; - def: RegExp; - fences: RegExp; - heading: RegExp; - hr: RegExp; - html: RegExp; - lheading: RegExp; - list: RegExp; - newline: RegExp; - paragraph: RegExp; - table: RegExp; - text: RegExp; - }; - gfm: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; - pedantic: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; -}; -export declare const inline: { - normal: { - _backpedal: RegExp; - anyPunctuation: RegExp; - autolink: RegExp; - blockSkip: RegExp; - br: RegExp; - code: RegExp; - del: RegExp; - emStrongLDelim: RegExp; - emStrongRDelimAst: RegExp; - emStrongRDelimUnd: RegExp; - escape: RegExp; - link: RegExp; - nolink: RegExp; - punctuation: RegExp; - reflink: RegExp; - reflinkSearch: RegExp; - tag: RegExp; - text: RegExp; - url: RegExp; - }; - gfm: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - breaks: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - pedantic: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; -}; -export interface Rules { - block: Record; - inline: Record; -} -/** - * Tokenizer - */ -declare class _Tokenizer { - options: MarkedOptions; - rules: Rules; - lexer: _Lexer; - constructor(options?: MarkedOptions); - space(src: string): Tokens.Space | undefined; - code(src: string): Tokens.Code | undefined; - fences(src: string): Tokens.Code | undefined; - heading(src: string): Tokens.Heading | undefined; - hr(src: string): Tokens.Hr | undefined; - blockquote(src: string): Tokens.Blockquote | undefined; - list(src: string): Tokens.List | undefined; - html(src: string): Tokens.HTML | undefined; - def(src: string): Tokens.Def | undefined; - table(src: string): Tokens.Table | undefined; - lheading(src: string): Tokens.Heading | undefined; - paragraph(src: string): Tokens.Paragraph | undefined; - text(src: string): Tokens.Text | undefined; - escape(src: string): Tokens.Escape | undefined; - tag(src: string): Tokens.Tag | undefined; - link(src: string): Tokens.Link | Tokens.Image | undefined; - reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined; - emStrong(src: string, maskedSrc: string, prevChar?: string): Tokens.Em | Tokens.Strong | undefined; - codespan(src: string): Tokens.Codespan | undefined; - br(src: string): Tokens.Br | undefined; - del(src: string): Tokens.Del | undefined; - autolink(src: string): Tokens.Link | undefined; - url(src: string): Tokens.Link | undefined; - inlineText(src: string): Tokens.Text | undefined; -} -declare class _Hooks { - options: MarkedOptions; - constructor(options?: MarkedOptions); - static passThroughHooks: Set; - /** - * Process markdown before marked - */ - preprocess(markdown: string): string; - /** - * Process HTML after marked is finished - */ - postprocess(html: string): string; - /** - * Process all tokens before walk tokens - */ - processAllTokens(tokens: Token[] | TokensList): Token[] | TokensList; -} -export interface TokenizerThis { - lexer: _Lexer; -} -export type TokenizerExtensionFunction = (this: TokenizerThis, src: string, tokens: Token[] | TokensList) => Tokens.Generic | undefined; -export type TokenizerStartFunction = (this: TokenizerThis, src: string) => number | void; -export interface TokenizerExtension { - name: string; - level: "block" | "inline"; - start?: TokenizerStartFunction | undefined; - tokenizer: TokenizerExtensionFunction; - childTokens?: string[] | undefined; -} -export interface RendererThis { - parser: _Parser; -} -export type RendererExtensionFunction = (this: RendererThis, token: Tokens.Generic) => string | false | undefined; -export interface RendererExtension { - name: string; - renderer: RendererExtensionFunction; -} -export type TokenizerAndRendererExtension = TokenizerExtension | RendererExtension | (TokenizerExtension & RendererExtension); -export type HooksApi = Omit<_Hooks, "constructor" | "options">; -export type HooksObject = { - [K in keyof HooksApi]?: (...args: Parameters) => ReturnType | Promise>; -}; -export type RendererApi = Omit<_Renderer, "constructor" | "options">; -export type RendererObject = { - [K in keyof RendererApi]?: (...args: Parameters) => ReturnType | false; -}; -export type TokenizerApi = Omit<_Tokenizer, "constructor" | "options" | "rules" | "lexer">; -export type TokenizerObject = { - [K in keyof TokenizerApi]?: (...args: Parameters) => ReturnType | false; -}; -export interface MarkedExtension { - /** - * True will tell marked to await any walkTokens functions before parsing the tokens and returning an HTML string. - */ - async?: boolean; - /** - * Enable GFM line breaks. This option requires the gfm option to be true. - */ - breaks?: boolean | undefined; - /** - * Add tokenizers and renderers to marked - */ - extensions?: TokenizerAndRendererExtension[] | undefined | null; - /** - * Enable GitHub flavored markdown. - */ - gfm?: boolean | undefined; - /** - * Hooks are methods that hook into some part of marked. - * preprocess is called to process markdown before sending it to marked. - * processAllTokens is called with the TokensList before walkTokens. - * postprocess is called to process html after marked has finished parsing. - */ - hooks?: HooksObject | undefined | null; - /** - * Conform to obscure parts of markdown.pl as much as possible. Don't fix any of the original markdown bugs or poor behavior. - */ - pedantic?: boolean | undefined; - /** - * Type: object Default: new Renderer() - * - * An object containing functions to render tokens to HTML. - */ - renderer?: RendererObject | undefined | null; - /** - * Shows an HTML error message when rendering fails. - */ - silent?: boolean | undefined; - /** - * The tokenizer defines how to turn markdown text into tokens. - */ - tokenizer?: TokenizerObject | undefined | null; - /** - * The walkTokens function gets called with every token. - * Child tokens are called before moving on to sibling tokens. - * Each token is passed by reference so updates are persisted when passed to the parser. - * The return value of the function is ignored. - */ - walkTokens?: ((token: Token) => void | Promise) | undefined | null; -} -export interface MarkedOptions extends Omit { - /** - * Hooks are methods that hook into some part of marked. - */ - hooks?: _Hooks | undefined | null; - /** - * Type: object Default: new Renderer() - * - * An object containing functions to render tokens to HTML. - */ - renderer?: _Renderer | undefined | null; - /** - * The tokenizer defines how to turn markdown text into tokens. - */ - tokenizer?: _Tokenizer | undefined | null; - /** - * Custom extensions - */ - extensions?: null | { - renderers: { - [name: string]: RendererExtensionFunction; - }; - childTokens: { - [name: string]: string[]; - }; - inline?: TokenizerExtensionFunction[]; - block?: TokenizerExtensionFunction[]; - startInline?: TokenizerStartFunction[]; - startBlock?: TokenizerStartFunction[]; - }; - /** - * walkTokens function returns array of values for Promise.all - */ - walkTokens?: null | ((token: Token) => void | Promise | (void | Promise)[]); -} -/** - * Block Lexer - */ -declare class _Lexer { - tokens: TokensList; - options: MarkedOptions; - state: { - inLink: boolean; - inRawBlock: boolean; - top: boolean; - }; - private tokenizer; - private inlineQueue; - constructor(options?: MarkedOptions); - /** - * Expose Rules - */ - static get rules(): { - block: { - normal: { - blockquote: RegExp; - code: RegExp; - def: RegExp; - fences: RegExp; - heading: RegExp; - hr: RegExp; - html: RegExp; - lheading: RegExp; - list: RegExp; - newline: RegExp; - paragraph: RegExp; - table: RegExp; - text: RegExp; - }; - gfm: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; - pedantic: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "heading" | "list" | "paragraph" | "def" | "fences" | "lheading" | "newline", RegExp>; - }; - inline: { - normal: { - _backpedal: RegExp; - anyPunctuation: RegExp; - autolink: RegExp; - blockSkip: RegExp; - br: RegExp; - code: RegExp; - del: RegExp; - emStrongLDelim: RegExp; - emStrongRDelimAst: RegExp; - emStrongRDelimUnd: RegExp; - escape: RegExp; - link: RegExp; - nolink: RegExp; - punctuation: RegExp; - reflink: RegExp; - reflinkSearch: RegExp; - tag: RegExp; - text: RegExp; - url: RegExp; - }; - gfm: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - breaks: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - pedantic: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "autolink" | "nolink" | "_backpedal" | "anyPunctuation" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>; - }; - }; - /** - * Static Lex Method - */ - static lex(src: string, options?: MarkedOptions): TokensList; - /** - * Static Lex Inline Method - */ - static lexInline(src: string, options?: MarkedOptions): Token[]; - /** - * Preprocessing - */ - lex(src: string): TokensList; - /** - * Lexing - */ - blockTokens(src: string, tokens?: Token[]): Token[]; - blockTokens(src: string, tokens?: TokensList): TokensList; - inline(src: string, tokens?: Token[]): Token[]; - /** - * Lexing/Compiling - */ - inlineTokens(src: string, tokens?: Token[]): Token[]; -} -/** - * Gets the original marked default options. - */ -declare function _getDefaults(): MarkedOptions; -declare let _defaults: MarkedOptions; -export type MaybePromise = void | Promise; -export declare class Marked { - #private; - defaults: MarkedOptions; - options: (opt: MarkedOptions) => this; - parse: (src: string, options?: MarkedOptions | undefined | null) => string | Promise; - parseInline: (src: string, options?: MarkedOptions | undefined | null) => string | Promise; - Parser: typeof _Parser; - Renderer: typeof _Renderer; - TextRenderer: typeof _TextRenderer; - Lexer: typeof _Lexer; - Tokenizer: typeof _Tokenizer; - Hooks: typeof _Hooks; - constructor(...args: MarkedExtension[]); - /** - * Run callback for every token - */ - walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]): MaybePromise[]; - use(...args: MarkedExtension[]): this; - setOptions(opt: MarkedOptions): this; - lexer(src: string, options?: MarkedOptions): TokensList; - parser(tokens: Token[], options?: MarkedOptions): string; -} -/** - * Compiles markdown to HTML asynchronously. - * - * @param src String of markdown source to be compiled - * @param options Hash of options, having async: true - * @return Promise of string of compiled HTML - */ -export declare function marked(src: string, options: MarkedOptions & { - async: true; -}): Promise; -/** - * Compiles markdown to HTML. - * - * @param src String of markdown source to be compiled - * @param options Optional hash of options - * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions. - */ -export declare function marked(src: string, options?: MarkedOptions): string | Promise; -export declare namespace marked { - var options: (options: MarkedOptions) => typeof marked; - var setOptions: (options: MarkedOptions) => typeof marked; - var getDefaults: typeof _getDefaults; - var defaults: MarkedOptions; - var use: (...args: MarkedExtension[]) => typeof marked; - var walkTokens: (tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) => MaybePromise[]; - var parseInline: (src: string, options?: MarkedOptions | null | undefined) => string | Promise; - var Parser: typeof _Parser; - var parser: typeof _Parser.parse; - var Renderer: typeof _Renderer; - var TextRenderer: typeof _TextRenderer; - var Lexer: typeof _Lexer; - var lexer: typeof _Lexer.lex; - var Tokenizer: typeof _Tokenizer; - var Hooks: typeof _Hooks; - var parse: typeof marked; -} -export declare const options: (options: MarkedOptions) => typeof marked; -export declare const setOptions: (options: MarkedOptions) => typeof marked; -export declare const use: (...args: MarkedExtension[]) => typeof marked; -export declare const walkTokens: (tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) => MaybePromise[]; -export declare const parseInline: (src: string, options?: MarkedOptions | null | undefined) => string | Promise; -export declare const parse: typeof marked; -export declare const parser: typeof _Parser.parse; -export declare const lexer: typeof _Lexer.lex; - -export { - _Hooks as Hooks, - _Lexer as Lexer, - _Parser as Parser, - _Renderer as Renderer, - _TextRenderer as TextRenderer, - _Tokenizer as Tokenizer, - _defaults as defaults, - _getDefaults as getDefaults, -}; - -export {}; diff --git a/tmp/node_modules/marked/lib/marked.esm.js b/tmp/node_modules/marked/lib/marked.esm.js deleted file mode 100644 index 5d758dc..0000000 --- a/tmp/node_modules/marked/lib/marked.esm.js +++ /dev/null @@ -1,2432 +0,0 @@ -/** - * marked v12.0.2 - a markdown parser - * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed) - * https://github.com/markedjs/marked - */ - -/** - * DO NOT EDIT THIS FILE - * The code in this file is generated from files in ./src/ - */ - -/** - * Gets the original marked default options. - */ -function _getDefaults() { - return { - async: false, - breaks: false, - extensions: null, - gfm: true, - hooks: null, - pedantic: false, - renderer: null, - silent: false, - tokenizer: null, - walkTokens: null - }; -} -let _defaults = _getDefaults(); -function changeDefaults(newDefaults) { - _defaults = newDefaults; -} - -/** - * Helpers - */ -const escapeTest = /[&<>"']/; -const escapeReplace = new RegExp(escapeTest.source, 'g'); -const escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/; -const escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g'); -const escapeReplacements = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; -const getEscapeReplacement = (ch) => escapeReplacements[ch]; -function escape$1(html, encode) { - if (encode) { - if (escapeTest.test(html)) { - return html.replace(escapeReplace, getEscapeReplacement); - } - } - else { - if (escapeTestNoEncode.test(html)) { - return html.replace(escapeReplaceNoEncode, getEscapeReplacement); - } - } - return html; -} -const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; -function unescape(html) { - // explicitly match decimal, hex, and named HTML entities - return html.replace(unescapeTest, (_, n) => { - n = n.toLowerCase(); - if (n === 'colon') - return ':'; - if (n.charAt(0) === '#') { - return n.charAt(1) === 'x' - ? String.fromCharCode(parseInt(n.substring(2), 16)) - : String.fromCharCode(+n.substring(1)); - } - return ''; - }); -} -const caret = /(^|[^\[])\^/g; -function edit(regex, opt) { - let source = typeof regex === 'string' ? regex : regex.source; - opt = opt || ''; - const obj = { - replace: (name, val) => { - let valSource = typeof val === 'string' ? val : val.source; - valSource = valSource.replace(caret, '$1'); - source = source.replace(name, valSource); - return obj; - }, - getRegex: () => { - return new RegExp(source, opt); - } - }; - return obj; -} -function cleanUrl(href) { - try { - href = encodeURI(href).replace(/%25/g, '%'); - } - catch (e) { - return null; - } - return href; -} -const noopTest = { exec: () => null }; -function splitCells(tableRow, count) { - // ensure that every cell-delimiting pipe has a space - // before it to distinguish it from an escaped pipe - const row = tableRow.replace(/\|/g, (match, offset, str) => { - let escaped = false; - let curr = offset; - while (--curr >= 0 && str[curr] === '\\') - escaped = !escaped; - if (escaped) { - // odd number of slashes means | is escaped - // so we leave it alone - return '|'; - } - else { - // add space before unescaped | - return ' |'; - } - }), cells = row.split(/ \|/); - let i = 0; - // First/last cell in a row cannot be empty if it has no leading/trailing pipe - if (!cells[0].trim()) { - cells.shift(); - } - if (cells.length > 0 && !cells[cells.length - 1].trim()) { - cells.pop(); - } - if (count) { - if (cells.length > count) { - cells.splice(count); - } - else { - while (cells.length < count) - cells.push(''); - } - } - for (; i < cells.length; i++) { - // leading or trailing whitespace is ignored per the gfm spec - cells[i] = cells[i].trim().replace(/\\\|/g, '|'); - } - return cells; -} -/** - * Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). - * /c*$/ is vulnerable to REDOS. - * - * @param str - * @param c - * @param invert Remove suffix of non-c chars instead. Default falsey. - */ -function rtrim(str, c, invert) { - const l = str.length; - if (l === 0) { - return ''; - } - // Length of suffix matching the invert condition. - let suffLen = 0; - // Step left until we fail to match the invert condition. - while (suffLen < l) { - const currChar = str.charAt(l - suffLen - 1); - if (currChar === c && !invert) { - suffLen++; - } - else if (currChar !== c && invert) { - suffLen++; - } - else { - break; - } - } - return str.slice(0, l - suffLen); -} -function findClosingBracket(str, b) { - if (str.indexOf(b[1]) === -1) { - return -1; - } - let level = 0; - for (let i = 0; i < str.length; i++) { - if (str[i] === '\\') { - i++; - } - else if (str[i] === b[0]) { - level++; - } - else if (str[i] === b[1]) { - level--; - if (level < 0) { - return i; - } - } - } - return -1; -} - -function outputLink(cap, link, raw, lexer) { - const href = link.href; - const title = link.title ? escape$1(link.title) : null; - const text = cap[1].replace(/\\([\[\]])/g, '$1'); - if (cap[0].charAt(0) !== '!') { - lexer.state.inLink = true; - const token = { - type: 'link', - raw, - href, - title, - text, - tokens: lexer.inlineTokens(text) - }; - lexer.state.inLink = false; - return token; - } - return { - type: 'image', - raw, - href, - title, - text: escape$1(text) - }; -} -function indentCodeCompensation(raw, text) { - const matchIndentToCode = raw.match(/^(\s+)(?:```)/); - if (matchIndentToCode === null) { - return text; - } - const indentToCode = matchIndentToCode[1]; - return text - .split('\n') - .map(node => { - const matchIndentInNode = node.match(/^\s+/); - if (matchIndentInNode === null) { - return node; - } - const [indentInNode] = matchIndentInNode; - if (indentInNode.length >= indentToCode.length) { - return node.slice(indentToCode.length); - } - return node; - }) - .join('\n'); -} -/** - * Tokenizer - */ -class _Tokenizer { - options; - rules; // set by the lexer - lexer; // set by the lexer - constructor(options) { - this.options = options || _defaults; - } - space(src) { - const cap = this.rules.block.newline.exec(src); - if (cap && cap[0].length > 0) { - return { - type: 'space', - raw: cap[0] - }; - } - } - code(src) { - const cap = this.rules.block.code.exec(src); - if (cap) { - const text = cap[0].replace(/^ {1,4}/gm, ''); - return { - type: 'code', - raw: cap[0], - codeBlockStyle: 'indented', - text: !this.options.pedantic - ? rtrim(text, '\n') - : text - }; - } - } - fences(src) { - const cap = this.rules.block.fences.exec(src); - if (cap) { - const raw = cap[0]; - const text = indentCodeCompensation(raw, cap[3] || ''); - return { - type: 'code', - raw, - lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2], - text - }; - } - } - heading(src) { - const cap = this.rules.block.heading.exec(src); - if (cap) { - let text = cap[2].trim(); - // remove trailing #s - if (/#$/.test(text)) { - const trimmed = rtrim(text, '#'); - if (this.options.pedantic) { - text = trimmed.trim(); - } - else if (!trimmed || / $/.test(trimmed)) { - // CommonMark requires space before trailing #s - text = trimmed.trim(); - } - } - return { - type: 'heading', - raw: cap[0], - depth: cap[1].length, - text, - tokens: this.lexer.inline(text) - }; - } - } - hr(src) { - const cap = this.rules.block.hr.exec(src); - if (cap) { - return { - type: 'hr', - raw: cap[0] - }; - } - } - blockquote(src) { - const cap = this.rules.block.blockquote.exec(src); - if (cap) { - // precede setext continuation with 4 spaces so it isn't a setext - let text = cap[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g, '\n $1'); - text = rtrim(text.replace(/^ *>[ \t]?/gm, ''), '\n'); - const top = this.lexer.state.top; - this.lexer.state.top = true; - const tokens = this.lexer.blockTokens(text); - this.lexer.state.top = top; - return { - type: 'blockquote', - raw: cap[0], - tokens, - text - }; - } - } - list(src) { - let cap = this.rules.block.list.exec(src); - if (cap) { - let bull = cap[1].trim(); - const isordered = bull.length > 1; - const list = { - type: 'list', - raw: '', - ordered: isordered, - start: isordered ? +bull.slice(0, -1) : '', - loose: false, - items: [] - }; - bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`; - if (this.options.pedantic) { - bull = isordered ? bull : '[*+-]'; - } - // Get next list item - const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`); - let raw = ''; - let itemContents = ''; - let endsWithBlankLine = false; - // Check if current bullet point can start a new List Item - while (src) { - let endEarly = false; - if (!(cap = itemRegex.exec(src))) { - break; - } - if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?) - break; - } - raw = cap[0]; - src = src.substring(raw.length); - let line = cap[2].split('\n', 1)[0].replace(/^\t+/, (t) => ' '.repeat(3 * t.length)); - let nextLine = src.split('\n', 1)[0]; - let indent = 0; - if (this.options.pedantic) { - indent = 2; - itemContents = line.trimStart(); - } - else { - indent = cap[2].search(/[^ ]/); // Find first non-space char - indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent - itemContents = line.slice(indent); - indent += cap[1].length; - } - let blankLine = false; - if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line - raw += nextLine + '\n'; - src = src.substring(nextLine.length + 1); - endEarly = true; - } - if (!endEarly) { - const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`); - const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`); - const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`); - const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`); - // Check if following lines should be included in List Item - while (src) { - const rawLine = src.split('\n', 1)[0]; - nextLine = rawLine; - // Re-align to follow commonmark nesting rules - if (this.options.pedantic) { - nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' '); - } - // End list item if found code fences - if (fencesBeginRegex.test(nextLine)) { - break; - } - // End list item if found start of new heading - if (headingBeginRegex.test(nextLine)) { - break; - } - // End list item if found start of new bullet - if (nextBulletRegex.test(nextLine)) { - break; - } - // Horizontal rule found - if (hrRegex.test(src)) { - break; - } - if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible - itemContents += '\n' + nextLine.slice(indent); - } - else { - // not enough indentation - if (blankLine) { - break; - } - // paragraph continuation unless last line was a different block level element - if (line.search(/[^ ]/) >= 4) { // indented code block - break; - } - if (fencesBeginRegex.test(line)) { - break; - } - if (headingBeginRegex.test(line)) { - break; - } - if (hrRegex.test(line)) { - break; - } - itemContents += '\n' + nextLine; - } - if (!blankLine && !nextLine.trim()) { // Check if current line is blank - blankLine = true; - } - raw += rawLine + '\n'; - src = src.substring(rawLine.length + 1); - line = nextLine.slice(indent); - } - } - if (!list.loose) { - // If the previous item ended with a blank line, the list is loose - if (endsWithBlankLine) { - list.loose = true; - } - else if (/\n *\n *$/.test(raw)) { - endsWithBlankLine = true; - } - } - let istask = null; - let ischecked; - // Check for task list items - if (this.options.gfm) { - istask = /^\[[ xX]\] /.exec(itemContents); - if (istask) { - ischecked = istask[0] !== '[ ] '; - itemContents = itemContents.replace(/^\[[ xX]\] +/, ''); - } - } - list.items.push({ - type: 'list_item', - raw, - task: !!istask, - checked: ischecked, - loose: false, - text: itemContents, - tokens: [] - }); - list.raw += raw; - } - // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic - list.items[list.items.length - 1].raw = raw.trimEnd(); - (list.items[list.items.length - 1]).text = itemContents.trimEnd(); - list.raw = list.raw.trimEnd(); - // Item child tokens handled here at end because we needed to have the final item to trim it first - for (let i = 0; i < list.items.length; i++) { - this.lexer.state.top = false; - list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []); - if (!list.loose) { - // Check if list should be loose - const spacers = list.items[i].tokens.filter(t => t.type === 'space'); - const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\n.*\n/.test(t.raw)); - list.loose = hasMultipleLineBreaks; - } - } - // Set all items to loose if list is loose - if (list.loose) { - for (let i = 0; i < list.items.length; i++) { - list.items[i].loose = true; - } - } - return list; - } - } - html(src) { - const cap = this.rules.block.html.exec(src); - if (cap) { - const token = { - type: 'html', - block: true, - raw: cap[0], - pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style', - text: cap[0] - }; - return token; - } - } - def(src) { - const cap = this.rules.block.def.exec(src); - if (cap) { - const tag = cap[1].toLowerCase().replace(/\s+/g, ' '); - const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : ''; - const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3]; - return { - type: 'def', - tag, - raw: cap[0], - href, - title - }; - } - } - table(src) { - const cap = this.rules.block.table.exec(src); - if (!cap) { - return; - } - if (!/[:|]/.test(cap[2])) { - // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading - return; - } - const headers = splitCells(cap[1]); - const aligns = cap[2].replace(/^\||\| *$/g, '').split('|'); - const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []; - const item = { - type: 'table', - raw: cap[0], - header: [], - align: [], - rows: [] - }; - if (headers.length !== aligns.length) { - // header and align columns must be equal, rows can be different. - return; - } - for (const align of aligns) { - if (/^ *-+: *$/.test(align)) { - item.align.push('right'); - } - else if (/^ *:-+: *$/.test(align)) { - item.align.push('center'); - } - else if (/^ *:-+ *$/.test(align)) { - item.align.push('left'); - } - else { - item.align.push(null); - } - } - for (const header of headers) { - item.header.push({ - text: header, - tokens: this.lexer.inline(header) - }); - } - for (const row of rows) { - item.rows.push(splitCells(row, item.header.length).map(cell => { - return { - text: cell, - tokens: this.lexer.inline(cell) - }; - })); - } - return item; - } - lheading(src) { - const cap = this.rules.block.lheading.exec(src); - if (cap) { - return { - type: 'heading', - raw: cap[0], - depth: cap[2].charAt(0) === '=' ? 1 : 2, - text: cap[1], - tokens: this.lexer.inline(cap[1]) - }; - } - } - paragraph(src) { - const cap = this.rules.block.paragraph.exec(src); - if (cap) { - const text = cap[1].charAt(cap[1].length - 1) === '\n' - ? cap[1].slice(0, -1) - : cap[1]; - return { - type: 'paragraph', - raw: cap[0], - text, - tokens: this.lexer.inline(text) - }; - } - } - text(src) { - const cap = this.rules.block.text.exec(src); - if (cap) { - return { - type: 'text', - raw: cap[0], - text: cap[0], - tokens: this.lexer.inline(cap[0]) - }; - } - } - escape(src) { - const cap = this.rules.inline.escape.exec(src); - if (cap) { - return { - type: 'escape', - raw: cap[0], - text: escape$1(cap[1]) - }; - } - } - tag(src) { - const cap = this.rules.inline.tag.exec(src); - if (cap) { - if (!this.lexer.state.inLink && /^
    /i.test(cap[0])) { - this.lexer.state.inLink = false; - } - if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.lexer.state.inRawBlock = true; - } - else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.lexer.state.inRawBlock = false; - } - return { - type: 'html', - raw: cap[0], - inLink: this.lexer.state.inLink, - inRawBlock: this.lexer.state.inRawBlock, - block: false, - text: cap[0] - }; - } - } - link(src) { - const cap = this.rules.inline.link.exec(src); - if (cap) { - const trimmedUrl = cap[2].trim(); - if (!this.options.pedantic && /^$/.test(trimmedUrl))) { - return; - } - // ending angle bracket cannot be escaped - const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\'); - if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { - return; - } - } - else { - // find closing parenthesis - const lastParenIndex = findClosingBracket(cap[2], '()'); - if (lastParenIndex > -1) { - const start = cap[0].indexOf('!') === 0 ? 5 : 4; - const linkLen = start + cap[1].length + lastParenIndex; - cap[2] = cap[2].substring(0, lastParenIndex); - cap[0] = cap[0].substring(0, linkLen).trim(); - cap[3] = ''; - } - } - let href = cap[2]; - let title = ''; - if (this.options.pedantic) { - // split pedantic href and title - const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); - if (link) { - href = link[1]; - title = link[3]; - } - } - else { - title = cap[3] ? cap[3].slice(1, -1) : ''; - } - href = href.trim(); - if (/^$/.test(trimmedUrl))) { - // pedantic allows starting angle bracket without ending angle bracket - href = href.slice(1); - } - else { - href = href.slice(1, -1); - } - } - return outputLink(cap, { - href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href, - title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title - }, cap[0], this.lexer); - } - } - reflink(src, links) { - let cap; - if ((cap = this.rules.inline.reflink.exec(src)) - || (cap = this.rules.inline.nolink.exec(src))) { - const linkString = (cap[2] || cap[1]).replace(/\s+/g, ' '); - const link = links[linkString.toLowerCase()]; - if (!link) { - const text = cap[0].charAt(0); - return { - type: 'text', - raw: text, - text - }; - } - return outputLink(cap, link, cap[0], this.lexer); - } - } - emStrong(src, maskedSrc, prevChar = '') { - let match = this.rules.inline.emStrongLDelim.exec(src); - if (!match) - return; - // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well - if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) - return; - const nextChar = match[1] || match[2] || ''; - if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) { - // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below) - const lLength = [...match[0]].length - 1; - let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0; - const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd; - endReg.lastIndex = 0; - // Clip maskedSrc to same section of string as src (move to lexer?) - maskedSrc = maskedSrc.slice(-1 * src.length + lLength); - while ((match = endReg.exec(maskedSrc)) != null) { - rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; - if (!rDelim) - continue; // skip single * in __abc*abc__ - rLength = [...rDelim].length; - if (match[3] || match[4]) { // found another Left Delim - delimTotal += rLength; - continue; - } - else if (match[5] || match[6]) { // either Left or Right Delim - if (lLength % 3 && !((lLength + rLength) % 3)) { - midDelimTotal += rLength; - continue; // CommonMark Emphasis Rules 9-10 - } - } - delimTotal -= rLength; - if (delimTotal > 0) - continue; // Haven't found enough closing delimiters - // Remove extra characters. *a*** -> *a* - rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); - // char length can be >1 for unicode characters; - const lastCharLength = [...match[0]][0].length; - const raw = src.slice(0, lLength + match.index + lastCharLength + rLength); - // Create `em` if smallest delimiter has odd char count. *a*** - if (Math.min(lLength, rLength) % 2) { - const text = raw.slice(1, -1); - return { - type: 'em', - raw, - text, - tokens: this.lexer.inlineTokens(text) - }; - } - // Create 'strong' if smallest delimiter has even char count. **a*** - const text = raw.slice(2, -2); - return { - type: 'strong', - raw, - text, - tokens: this.lexer.inlineTokens(text) - }; - } - } - } - codespan(src) { - const cap = this.rules.inline.code.exec(src); - if (cap) { - let text = cap[2].replace(/\n/g, ' '); - const hasNonSpaceChars = /[^ ]/.test(text); - const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text); - if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { - text = text.substring(1, text.length - 1); - } - text = escape$1(text, true); - return { - type: 'codespan', - raw: cap[0], - text - }; - } - } - br(src) { - const cap = this.rules.inline.br.exec(src); - if (cap) { - return { - type: 'br', - raw: cap[0] - }; - } - } - del(src) { - const cap = this.rules.inline.del.exec(src); - if (cap) { - return { - type: 'del', - raw: cap[0], - text: cap[2], - tokens: this.lexer.inlineTokens(cap[2]) - }; - } - } - autolink(src) { - const cap = this.rules.inline.autolink.exec(src); - if (cap) { - let text, href; - if (cap[2] === '@') { - text = escape$1(cap[1]); - href = 'mailto:' + text; - } - else { - text = escape$1(cap[1]); - href = text; - } - return { - type: 'link', - raw: cap[0], - text, - href, - tokens: [ - { - type: 'text', - raw: text, - text - } - ] - }; - } - } - url(src) { - let cap; - if (cap = this.rules.inline.url.exec(src)) { - let text, href; - if (cap[2] === '@') { - text = escape$1(cap[0]); - href = 'mailto:' + text; - } - else { - // do extended autolink path validation - let prevCapZero; - do { - prevCapZero = cap[0]; - cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? ''; - } while (prevCapZero !== cap[0]); - text = escape$1(cap[0]); - if (cap[1] === 'www.') { - href = 'http://' + cap[0]; - } - else { - href = cap[0]; - } - } - return { - type: 'link', - raw: cap[0], - text, - href, - tokens: [ - { - type: 'text', - raw: text, - text - } - ] - }; - } - } - inlineText(src) { - const cap = this.rules.inline.text.exec(src); - if (cap) { - let text; - if (this.lexer.state.inRawBlock) { - text = cap[0]; - } - else { - text = escape$1(cap[0]); - } - return { - type: 'text', - raw: cap[0], - text - }; - } - } -} - -/** - * Block-Level Grammar - */ -const newline = /^(?: *(?:\n|$))+/; -const blockCode = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/; -const fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/; -const hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/; -const heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/; -const bullet = /(?:[*+-]|\d{1,9}[.)])/; -const lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/) - .replace(/bull/g, bullet) // lists can interrupt - .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt - .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt - .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt - .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt - .replace(/html/g, / {0,3}<[^\n>]+>\n/) // block html can interrupt - .getRegex(); -const _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/; -const blockText = /^[^\n]+/; -const _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/; -const def = edit(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/) - .replace('label', _blockLabel) - .replace('title', /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/) - .getRegex(); -const list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/) - .replace(/bull/g, bullet) - .getRegex(); -const _tag = 'address|article|aside|base|basefont|blockquote|body|caption' - + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' - + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' - + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' - + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title' - + '|tr|track|ul'; -const _comment = /|$))/; -const html = edit('^ {0,3}(?:' // optional indentation - + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) - + '|comment[^\\n]*(\\n+|$)' // (2) - + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) - + '|\\n*|$)' // (4) - + '|\\n*|$)' // (5) - + '|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6) - + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag - + '|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag - + ')', 'i') - .replace('comment', _comment) - .replace('tag', _tag) - .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) - .getRegex(); -const paragraph = edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs - .replace('|table', '') - .replace('blockquote', ' {0,3}>') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // pars can be interrupted by type (6) html blocks - .getRegex(); -const blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/) - .replace('paragraph', paragraph) - .getRegex(); -/** - * Normal Block Grammar - */ -const blockNormal = { - blockquote, - code: blockCode, - def, - fences, - heading, - hr, - html, - lheading, - list, - newline, - paragraph, - table: noopTest, - text: blockText -}; -/** - * GFM Block Grammar - */ -const gfmTable = edit('^ *([^\\n ].*)\\n' // Header - + ' {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)' // Align - + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)') // Cells - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('blockquote', ' {0,3}>') - .replace('code', ' {4}[^\\n]') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // tables can be interrupted by type (6) html blocks - .getRegex(); -const blockGfm = { - ...blockNormal, - table: gfmTable, - paragraph: edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs - .replace('table', gfmTable) // interrupt paragraphs with table - .replace('blockquote', ' {0,3}>') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // pars can be interrupted by type (6) html blocks - .getRegex() -}; -/** - * Pedantic grammar (original John Gruber's loose markdown specification) - */ -const blockPedantic = { - ...blockNormal, - html: edit('^ *(?:comment *(?:\\n|\\s*$)' - + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag - + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') - .replace('comment', _comment) - .replace(/tag/g, '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' - + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' - + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') - .getRegex(), - def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, - heading: /^(#{1,6})(.*)(?:\n+|$)/, - fences: noopTest, // fences not supported - lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, - paragraph: edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' *#{1,6} *[^\n]') - .replace('lheading', lheading) - .replace('|table', '') - .replace('blockquote', ' {0,3}>') - .replace('|fences', '') - .replace('|list', '') - .replace('|html', '') - .replace('|tag', '') - .getRegex() -}; -/** - * Inline-Level Grammar - */ -const escape = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; -const inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; -const br = /^( {2,}|\\)\n(?!\s*$)/; -const inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\ -const blockSkip = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g; -const emStrongLDelim = edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, 'u') - .replace(/punct/g, _punctuation) - .getRegex(); -const emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)' // Skip orphan inside strong - + '|[^*]+(?=[^*])' // Consume to delim - + '|(?!\\*)[punct](\\*+)(?=[\\s]|$)' // (1) #*** can only be a Right Delimiter - + '|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter - + '|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])' // (3) #***a, ***a can only be Left Delimiter - + '|[\\s](\\*+)(?!\\*)(?=[punct])' // (4) ***# can only be Left Delimiter - + '|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter - + '|[^punct\\s](\\*+)(?=[^punct\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter - .replace(/punct/g, _punctuation) - .getRegex(); -// (6) Not allowed for _ -const emStrongRDelimUnd = edit('^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)' // Skip orphan inside strong - + '|[^_]+(?=[^_])' // Consume to delim - + '|(?!_)[punct](_+)(?=[\\s]|$)' // (1) #___ can only be a Right Delimiter - + '|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter - + '|(?!_)[punct\\s](_+)(?=[^punct\\s])' // (3) #___a, ___a can only be Left Delimiter - + '|[\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter - + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter - .replace(/punct/g, _punctuation) - .getRegex(); -const anyPunctuation = edit(/\\([punct])/, 'gu') - .replace(/punct/g, _punctuation) - .getRegex(); -const autolink = edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/) - .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/) - .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/) - .getRegex(); -const _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex(); -const tag = edit('^comment' - + '|^' // self-closing tag - + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag - + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. - + '|^' // declaration, e.g. - + '|^') // CDATA section - .replace('comment', _inlineComment) - .replace('attribute', /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/) - .getRegex(); -const _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; -const link = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/) - .replace('label', _inlineLabel) - .replace('href', /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/) - .replace('title', /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/) - .getRegex(); -const reflink = edit(/^!?\[(label)\]\[(ref)\]/) - .replace('label', _inlineLabel) - .replace('ref', _blockLabel) - .getRegex(); -const nolink = edit(/^!?\[(ref)\](?:\[\])?/) - .replace('ref', _blockLabel) - .getRegex(); -const reflinkSearch = edit('reflink|nolink(?!\\()', 'g') - .replace('reflink', reflink) - .replace('nolink', nolink) - .getRegex(); -/** - * Normal Inline Grammar - */ -const inlineNormal = { - _backpedal: noopTest, // only used for GFM url - anyPunctuation, - autolink, - blockSkip, - br, - code: inlineCode, - del: noopTest, - emStrongLDelim, - emStrongRDelimAst, - emStrongRDelimUnd, - escape, - link, - nolink, - punctuation, - reflink, - reflinkSearch, - tag, - text: inlineText, - url: noopTest -}; -/** - * Pedantic Inline Grammar - */ -const inlinePedantic = { - ...inlineNormal, - link: edit(/^!?\[(label)\]\((.*?)\)/) - .replace('label', _inlineLabel) - .getRegex(), - reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) - .replace('label', _inlineLabel) - .getRegex() -}; -/** - * GFM Inline Grammar - */ -const inlineGfm = { - ...inlineNormal, - escape: edit(escape).replace('])', '~|])').getRegex(), - url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, 'i') - .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/) - .getRegex(), - _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, - del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, - text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\ { - return leading + ' '.repeat(tabs.length); - }); - } - let token; - let lastToken; - let cutSrc; - let lastParagraphClipped; - while (src) { - if (this.options.extensions - && this.options.extensions.block - && this.options.extensions.block.some((extTokenizer) => { - if (token = extTokenizer.call({ lexer: this }, src, tokens)) { - src = src.substring(token.raw.length); - tokens.push(token); - return true; - } - return false; - })) { - continue; - } - // newline - if (token = this.tokenizer.space(src)) { - src = src.substring(token.raw.length); - if (token.raw.length === 1 && tokens.length > 0) { - // if there's a single \n as a spacer, it's terminating the last line, - // so move it there so that we don't get unnecessary paragraph tags - tokens[tokens.length - 1].raw += '\n'; - } - else { - tokens.push(token); - } - continue; - } - // code - if (token = this.tokenizer.code(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - // An indented code block cannot interrupt a paragraph. - if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - continue; - } - // fences - if (token = this.tokenizer.fences(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // heading - if (token = this.tokenizer.heading(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // hr - if (token = this.tokenizer.hr(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // blockquote - if (token = this.tokenizer.blockquote(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // list - if (token = this.tokenizer.list(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // html - if (token = this.tokenizer.html(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // def - if (token = this.tokenizer.def(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.raw; - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else if (!this.tokens.links[token.tag]) { - this.tokens.links[token.tag] = { - href: token.href, - title: token.title - }; - } - continue; - } - // table (gfm) - if (token = this.tokenizer.table(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // lheading - if (token = this.tokenizer.lheading(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // top-level paragraph - // prevent paragraph consuming extensions by clipping 'src' to extension start - cutSrc = src; - if (this.options.extensions && this.options.extensions.startBlock) { - let startIndex = Infinity; - const tempSrc = src.slice(1); - let tempStart; - this.options.extensions.startBlock.forEach((getStartIndex) => { - tempStart = getStartIndex.call({ lexer: this }, tempSrc); - if (typeof tempStart === 'number' && tempStart >= 0) { - startIndex = Math.min(startIndex, tempStart); - } - }); - if (startIndex < Infinity && startIndex >= 0) { - cutSrc = src.substring(0, startIndex + 1); - } - } - if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) { - lastToken = tokens[tokens.length - 1]; - if (lastParagraphClipped && lastToken.type === 'paragraph') { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue.pop(); - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - lastParagraphClipped = (cutSrc.length !== src.length); - src = src.substring(token.raw.length); - continue; - } - // text - if (token = this.tokenizer.text(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && lastToken.type === 'text') { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue.pop(); - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - continue; - } - if (src) { - const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); - if (this.options.silent) { - console.error(errMsg); - break; - } - else { - throw new Error(errMsg); - } - } - } - this.state.top = true; - return tokens; - } - inline(src, tokens = []) { - this.inlineQueue.push({ src, tokens }); - return tokens; - } - /** - * Lexing/Compiling - */ - inlineTokens(src, tokens = []) { - let token, lastToken, cutSrc; - // String with links masked to avoid interference with em and strong - let maskedSrc = src; - let match; - let keepPrevChar, prevChar; - // Mask out reflinks - if (this.tokens.links) { - const links = Object.keys(this.tokens.links); - if (links.length > 0) { - while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { - if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) { - maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); - } - } - } - } - // Mask out other blocks - while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { - maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); - } - // Mask out escaped characters - while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) { - maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); - } - while (src) { - if (!keepPrevChar) { - prevChar = ''; - } - keepPrevChar = false; - // extensions - if (this.options.extensions - && this.options.extensions.inline - && this.options.extensions.inline.some((extTokenizer) => { - if (token = extTokenizer.call({ lexer: this }, src, tokens)) { - src = src.substring(token.raw.length); - tokens.push(token); - return true; - } - return false; - })) { - continue; - } - // escape - if (token = this.tokenizer.escape(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // tag - if (token = this.tokenizer.tag(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && token.type === 'text' && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - // link - if (token = this.tokenizer.link(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // reflink, nolink - if (token = this.tokenizer.reflink(src, this.tokens.links)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && token.type === 'text' && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - // em & strong - if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // code - if (token = this.tokenizer.codespan(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // br - if (token = this.tokenizer.br(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // del (gfm) - if (token = this.tokenizer.del(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // autolink - if (token = this.tokenizer.autolink(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // url (gfm) - if (!this.state.inLink && (token = this.tokenizer.url(src))) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // text - // prevent inlineText consuming extensions by clipping 'src' to extension start - cutSrc = src; - if (this.options.extensions && this.options.extensions.startInline) { - let startIndex = Infinity; - const tempSrc = src.slice(1); - let tempStart; - this.options.extensions.startInline.forEach((getStartIndex) => { - tempStart = getStartIndex.call({ lexer: this }, tempSrc); - if (typeof tempStart === 'number' && tempStart >= 0) { - startIndex = Math.min(startIndex, tempStart); - } - }); - if (startIndex < Infinity && startIndex >= 0) { - cutSrc = src.substring(0, startIndex + 1); - } - } - if (token = this.tokenizer.inlineText(cutSrc)) { - src = src.substring(token.raw.length); - if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started - prevChar = token.raw.slice(-1); - } - keepPrevChar = true; - lastToken = tokens[tokens.length - 1]; - if (lastToken && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - if (src) { - const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); - if (this.options.silent) { - console.error(errMsg); - break; - } - else { - throw new Error(errMsg); - } - } - } - return tokens; - } -} - -/** - * Renderer - */ -class _Renderer { - options; - constructor(options) { - this.options = options || _defaults; - } - code(code, infostring, escaped) { - const lang = (infostring || '').match(/^\S*/)?.[0]; - code = code.replace(/\n$/, '') + '\n'; - if (!lang) { - return '
    '
    -                + (escaped ? code : escape$1(code, true))
    -                + '
    \n'; - } - return '
    '
    -            + (escaped ? code : escape$1(code, true))
    -            + '
    \n'; - } - blockquote(quote) { - return `
    \n${quote}
    \n`; - } - html(html, block) { - return html; - } - heading(text, level, raw) { - // ignore IDs - return `${text}\n`; - } - hr() { - return '
    \n'; - } - list(body, ordered, start) { - const type = ordered ? 'ol' : 'ul'; - const startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; - return '<' + type + startatt + '>\n' + body + '\n'; - } - listitem(text, task, checked) { - return `
  • ${text}
  • \n`; - } - checkbox(checked) { - return ''; - } - paragraph(text) { - return `

    ${text}

    \n`; - } - table(header, body) { - if (body) - body = `${body}`; - return '\n' - + '\n' - + header - + '\n' - + body - + '
    \n'; - } - tablerow(content) { - return `\n${content}\n`; - } - tablecell(content, flags) { - const type = flags.header ? 'th' : 'td'; - const tag = flags.align - ? `<${type} align="${flags.align}">` - : `<${type}>`; - return tag + content + `\n`; - } - /** - * span level renderer - */ - strong(text) { - return `${text}`; - } - em(text) { - return `${text}`; - } - codespan(text) { - return `${text}`; - } - br() { - return '
    '; - } - del(text) { - return `${text}`; - } - link(href, title, text) { - const cleanHref = cleanUrl(href); - if (cleanHref === null) { - return text; - } - href = cleanHref; - let out = '
    '; - return out; - } - image(href, title, text) { - const cleanHref = cleanUrl(href); - if (cleanHref === null) { - return text; - } - href = cleanHref; - let out = `${text} 0 && item.tokens[0].type === 'paragraph') { - item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; - if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') { - item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text; - } - } - else { - item.tokens.unshift({ - type: 'text', - text: checkbox + ' ' - }); - } - } - else { - itemBody += checkbox + ' '; - } - } - itemBody += this.parse(item.tokens, loose); - body += this.renderer.listitem(itemBody, task, !!checked); - } - out += this.renderer.list(body, ordered, start); - continue; - } - case 'html': { - const htmlToken = token; - out += this.renderer.html(htmlToken.text, htmlToken.block); - continue; - } - case 'paragraph': { - const paragraphToken = token; - out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens)); - continue; - } - case 'text': { - let textToken = token; - let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text; - while (i + 1 < tokens.length && tokens[i + 1].type === 'text') { - textToken = tokens[++i]; - body += '\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text); - } - out += top ? this.renderer.paragraph(body) : body; - continue; - } - default: { - const errMsg = 'Token with "' + token.type + '" type was not found.'; - if (this.options.silent) { - console.error(errMsg); - return ''; - } - else { - throw new Error(errMsg); - } - } - } - } - return out; - } - /** - * Parse Inline Tokens - */ - parseInline(tokens, renderer) { - renderer = renderer || this.renderer; - let out = ''; - for (let i = 0; i < tokens.length; i++) { - const token = tokens[i]; - // Run any renderer extensions - if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { - const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token); - if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) { - out += ret || ''; - continue; - } - } - switch (token.type) { - case 'escape': { - const escapeToken = token; - out += renderer.text(escapeToken.text); - break; - } - case 'html': { - const tagToken = token; - out += renderer.html(tagToken.text); - break; - } - case 'link': { - const linkToken = token; - out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer)); - break; - } - case 'image': { - const imageToken = token; - out += renderer.image(imageToken.href, imageToken.title, imageToken.text); - break; - } - case 'strong': { - const strongToken = token; - out += renderer.strong(this.parseInline(strongToken.tokens, renderer)); - break; - } - case 'em': { - const emToken = token; - out += renderer.em(this.parseInline(emToken.tokens, renderer)); - break; - } - case 'codespan': { - const codespanToken = token; - out += renderer.codespan(codespanToken.text); - break; - } - case 'br': { - out += renderer.br(); - break; - } - case 'del': { - const delToken = token; - out += renderer.del(this.parseInline(delToken.tokens, renderer)); - break; - } - case 'text': { - const textToken = token; - out += renderer.text(textToken.text); - break; - } - default: { - const errMsg = 'Token with "' + token.type + '" type was not found.'; - if (this.options.silent) { - console.error(errMsg); - return ''; - } - else { - throw new Error(errMsg); - } - } - } - } - return out; - } -} - -class _Hooks { - options; - constructor(options) { - this.options = options || _defaults; - } - static passThroughHooks = new Set([ - 'preprocess', - 'postprocess', - 'processAllTokens' - ]); - /** - * Process markdown before marked - */ - preprocess(markdown) { - return markdown; - } - /** - * Process HTML after marked is finished - */ - postprocess(html) { - return html; - } - /** - * Process all tokens before walk tokens - */ - processAllTokens(tokens) { - return tokens; - } -} - -class Marked { - defaults = _getDefaults(); - options = this.setOptions; - parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse); - parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline); - Parser = _Parser; - Renderer = _Renderer; - TextRenderer = _TextRenderer; - Lexer = _Lexer; - Tokenizer = _Tokenizer; - Hooks = _Hooks; - constructor(...args) { - this.use(...args); - } - /** - * Run callback for every token - */ - walkTokens(tokens, callback) { - let values = []; - for (const token of tokens) { - values = values.concat(callback.call(this, token)); - switch (token.type) { - case 'table': { - const tableToken = token; - for (const cell of tableToken.header) { - values = values.concat(this.walkTokens(cell.tokens, callback)); - } - for (const row of tableToken.rows) { - for (const cell of row) { - values = values.concat(this.walkTokens(cell.tokens, callback)); - } - } - break; - } - case 'list': { - const listToken = token; - values = values.concat(this.walkTokens(listToken.items, callback)); - break; - } - default: { - const genericToken = token; - if (this.defaults.extensions?.childTokens?.[genericToken.type]) { - this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => { - const tokens = genericToken[childTokens].flat(Infinity); - values = values.concat(this.walkTokens(tokens, callback)); - }); - } - else if (genericToken.tokens) { - values = values.concat(this.walkTokens(genericToken.tokens, callback)); - } - } - } - } - return values; - } - use(...args) { - const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} }; - args.forEach((pack) => { - // copy options to new object - const opts = { ...pack }; - // set async to true if it was set to true before - opts.async = this.defaults.async || opts.async || false; - // ==-- Parse "addon" extensions --== // - if (pack.extensions) { - pack.extensions.forEach((ext) => { - if (!ext.name) { - throw new Error('extension name required'); - } - if ('renderer' in ext) { // Renderer extensions - const prevRenderer = extensions.renderers[ext.name]; - if (prevRenderer) { - // Replace extension with func to run new extension but fall back if false - extensions.renderers[ext.name] = function (...args) { - let ret = ext.renderer.apply(this, args); - if (ret === false) { - ret = prevRenderer.apply(this, args); - } - return ret; - }; - } - else { - extensions.renderers[ext.name] = ext.renderer; - } - } - if ('tokenizer' in ext) { // Tokenizer Extensions - if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) { - throw new Error("extension level must be 'block' or 'inline'"); - } - const extLevel = extensions[ext.level]; - if (extLevel) { - extLevel.unshift(ext.tokenizer); - } - else { - extensions[ext.level] = [ext.tokenizer]; - } - if (ext.start) { // Function to check for start of token - if (ext.level === 'block') { - if (extensions.startBlock) { - extensions.startBlock.push(ext.start); - } - else { - extensions.startBlock = [ext.start]; - } - } - else if (ext.level === 'inline') { - if (extensions.startInline) { - extensions.startInline.push(ext.start); - } - else { - extensions.startInline = [ext.start]; - } - } - } - } - if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens - extensions.childTokens[ext.name] = ext.childTokens; - } - }); - opts.extensions = extensions; - } - // ==-- Parse "overwrite" extensions --== // - if (pack.renderer) { - const renderer = this.defaults.renderer || new _Renderer(this.defaults); - for (const prop in pack.renderer) { - if (!(prop in renderer)) { - throw new Error(`renderer '${prop}' does not exist`); - } - if (prop === 'options') { - // ignore options property - continue; - } - const rendererProp = prop; - const rendererFunc = pack.renderer[rendererProp]; - const prevRenderer = renderer[rendererProp]; - // Replace renderer with func to run extension, but fall back if false - renderer[rendererProp] = (...args) => { - let ret = rendererFunc.apply(renderer, args); - if (ret === false) { - ret = prevRenderer.apply(renderer, args); - } - return ret || ''; - }; - } - opts.renderer = renderer; - } - if (pack.tokenizer) { - const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults); - for (const prop in pack.tokenizer) { - if (!(prop in tokenizer)) { - throw new Error(`tokenizer '${prop}' does not exist`); - } - if (['options', 'rules', 'lexer'].includes(prop)) { - // ignore options, rules, and lexer properties - continue; - } - const tokenizerProp = prop; - const tokenizerFunc = pack.tokenizer[tokenizerProp]; - const prevTokenizer = tokenizer[tokenizerProp]; - // Replace tokenizer with func to run extension, but fall back if false - // @ts-expect-error cannot type tokenizer function dynamically - tokenizer[tokenizerProp] = (...args) => { - let ret = tokenizerFunc.apply(tokenizer, args); - if (ret === false) { - ret = prevTokenizer.apply(tokenizer, args); - } - return ret; - }; - } - opts.tokenizer = tokenizer; - } - // ==-- Parse Hooks extensions --== // - if (pack.hooks) { - const hooks = this.defaults.hooks || new _Hooks(); - for (const prop in pack.hooks) { - if (!(prop in hooks)) { - throw new Error(`hook '${prop}' does not exist`); - } - if (prop === 'options') { - // ignore options property - continue; - } - const hooksProp = prop; - const hooksFunc = pack.hooks[hooksProp]; - const prevHook = hooks[hooksProp]; - if (_Hooks.passThroughHooks.has(prop)) { - // @ts-expect-error cannot type hook function dynamically - hooks[hooksProp] = (arg) => { - if (this.defaults.async) { - return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => { - return prevHook.call(hooks, ret); - }); - } - const ret = hooksFunc.call(hooks, arg); - return prevHook.call(hooks, ret); - }; - } - else { - // @ts-expect-error cannot type hook function dynamically - hooks[hooksProp] = (...args) => { - let ret = hooksFunc.apply(hooks, args); - if (ret === false) { - ret = prevHook.apply(hooks, args); - } - return ret; - }; - } - } - opts.hooks = hooks; - } - // ==-- Parse WalkTokens extensions --== // - if (pack.walkTokens) { - const walkTokens = this.defaults.walkTokens; - const packWalktokens = pack.walkTokens; - opts.walkTokens = function (token) { - let values = []; - values.push(packWalktokens.call(this, token)); - if (walkTokens) { - values = values.concat(walkTokens.call(this, token)); - } - return values; - }; - } - this.defaults = { ...this.defaults, ...opts }; - }); - return this; - } - setOptions(opt) { - this.defaults = { ...this.defaults, ...opt }; - return this; - } - lexer(src, options) { - return _Lexer.lex(src, options ?? this.defaults); - } - parser(tokens, options) { - return _Parser.parse(tokens, options ?? this.defaults); - } - #parseMarkdown(lexer, parser) { - return (src, options) => { - const origOpt = { ...options }; - const opt = { ...this.defaults, ...origOpt }; - // Show warning if an extension set async to true but the parse was called with async: false - if (this.defaults.async === true && origOpt.async === false) { - if (!opt.silent) { - console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.'); - } - opt.async = true; - } - const throwError = this.#onError(!!opt.silent, !!opt.async); - // throw error in case of non string input - if (typeof src === 'undefined' || src === null) { - return throwError(new Error('marked(): input parameter is undefined or null')); - } - if (typeof src !== 'string') { - return throwError(new Error('marked(): input parameter is of type ' - + Object.prototype.toString.call(src) + ', string expected')); - } - if (opt.hooks) { - opt.hooks.options = opt; - } - if (opt.async) { - return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src) - .then(src => lexer(src, opt)) - .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens) - .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens) - .then(tokens => parser(tokens, opt)) - .then(html => opt.hooks ? opt.hooks.postprocess(html) : html) - .catch(throwError); - } - try { - if (opt.hooks) { - src = opt.hooks.preprocess(src); - } - let tokens = lexer(src, opt); - if (opt.hooks) { - tokens = opt.hooks.processAllTokens(tokens); - } - if (opt.walkTokens) { - this.walkTokens(tokens, opt.walkTokens); - } - let html = parser(tokens, opt); - if (opt.hooks) { - html = opt.hooks.postprocess(html); - } - return html; - } - catch (e) { - return throwError(e); - } - }; - } - #onError(silent, async) { - return (e) => { - e.message += '\nPlease report this to https://github.com/markedjs/marked.'; - if (silent) { - const msg = '

    An error occurred:

    '
    -                    + escape$1(e.message + '', true)
    -                    + '
    '; - if (async) { - return Promise.resolve(msg); - } - return msg; - } - if (async) { - return Promise.reject(e); - } - throw e; - }; - } -} - -const markedInstance = new Marked(); -function marked(src, opt) { - return markedInstance.parse(src, opt); -} -/** - * Sets the default options. - * - * @param options Hash of options - */ -marked.options = - marked.setOptions = function (options) { - markedInstance.setOptions(options); - marked.defaults = markedInstance.defaults; - changeDefaults(marked.defaults); - return marked; - }; -/** - * Gets the original marked default options. - */ -marked.getDefaults = _getDefaults; -marked.defaults = _defaults; -/** - * Use Extension - */ -marked.use = function (...args) { - markedInstance.use(...args); - marked.defaults = markedInstance.defaults; - changeDefaults(marked.defaults); - return marked; -}; -/** - * Run callback for every token - */ -marked.walkTokens = function (tokens, callback) { - return markedInstance.walkTokens(tokens, callback); -}; -/** - * Compiles markdown to HTML without enclosing `p` tag. - * - * @param src String of markdown source to be compiled - * @param options Hash of options - * @return String of compiled HTML - */ -marked.parseInline = markedInstance.parseInline; -/** - * Expose - */ -marked.Parser = _Parser; -marked.parser = _Parser.parse; -marked.Renderer = _Renderer; -marked.TextRenderer = _TextRenderer; -marked.Lexer = _Lexer; -marked.lexer = _Lexer.lex; -marked.Tokenizer = _Tokenizer; -marked.Hooks = _Hooks; -marked.parse = marked; -const options = marked.options; -const setOptions = marked.setOptions; -const use = marked.use; -const walkTokens = marked.walkTokens; -const parseInline = marked.parseInline; -const parse = marked; -const parser = _Parser.parse; -const lexer = _Lexer.lex; - -export { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens }; -//# sourceMappingURL=marked.esm.js.map diff --git a/tmp/node_modules/marked/lib/marked.esm.js.map b/tmp/node_modules/marked/lib/marked.esm.js.map deleted file mode 100644 index dc74678..0000000 --- a/tmp/node_modules/marked/lib/marked.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"marked.esm.js","sources":["../src/defaults.ts","../src/helpers.ts","../src/Tokenizer.ts","../src/rules.ts","../src/Lexer.ts","../src/Renderer.ts","../src/TextRenderer.ts","../src/Parser.ts","../src/Hooks.ts","../src/Instance.ts","../src/marked.ts"],"sourcesContent":["/**\n * Gets the original marked default options.\n */\nexport function _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nexport let _defaults = _getDefaults();\nexport function changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n","/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nexport function escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nexport function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nexport function edit(regex, opt) {\n let source = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nexport function cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nexport const noopTest = { exec: () => null };\nexport function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nexport function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n","import { _defaults } from './defaults.ts';\nimport { rtrim, splitCells, escape, findClosingBracket } from './helpers.ts';\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n // precede setext continuation with 4 spaces so it isn't a setext\n let text = cap[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n $1');\n text = rtrim(text.replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n (list.items[list.items.length - 1]).text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (/^ *-+: *$/.test(align)) {\n item.align.push('right');\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align.push('center');\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (const header of headers) {\n item.header.push({\n text: header,\n tokens: this.lexer.inline(header)\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map(cell => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell)\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^
    /i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n","import { edit, noopTest } from './helpers.ts';\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\\nconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n escape: edit(escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\ {\n return leading + ' '.repeat(tabs.length);\n });\n }\n let token;\n let lastToken;\n let cutSrc;\n let lastParagraphClipped;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport { cleanUrl, escape } from './helpers.ts';\n/**\n * Renderer\n */\nexport class _Renderer {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/^\\S*/)?.[0];\n code = code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '
    '\n                + (escaped ? code : escape(code, true))\n                + '
    \\n';\n }\n return '
    '\n            + (escaped ? code : escape(code, true))\n            + '
    \\n';\n }\n blockquote(quote) {\n return `
    \\n${quote}
    \\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `${text}\\n`;\n }\n hr() {\n return '
    \\n';\n }\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul';\n const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n listitem(text, task, checked) {\n return `
  • ${text}
  • \\n`;\n }\n checkbox(checked) {\n return '';\n }\n paragraph(text) {\n return `

    ${text}

    \\n`;\n }\n table(header, body) {\n if (body)\n body = `${body}`;\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n tablerow(content) {\n return `\\n${content}\\n`;\n }\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `\\n`;\n }\n /**\n * span level renderer\n */\n strong(text) {\n return `${text}`;\n }\n em(text) {\n return `${text}`;\n }\n codespan(text) {\n return `${text}`;\n }\n br() {\n return '
    ';\n }\n del(text) {\n return `${text}`;\n }\n link(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '
    ';\n return out;\n }\n image(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `\"${text}\"`;\n 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox + ' '\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, !!checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n const htmlToken = token;\n out += this.renderer.html(htmlToken.text, htmlToken.block);\n continue;\n }\n case 'paragraph': {\n const paragraphToken = token;\n out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape': {\n const escapeToken = token;\n out += renderer.text(escapeToken.text);\n break;\n }\n case 'html': {\n const tagToken = token;\n out += renderer.html(tagToken.text);\n break;\n }\n case 'link': {\n const linkToken = token;\n out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n break;\n }\n case 'image': {\n const imageToken = token;\n out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n break;\n }\n case 'strong': {\n const strongToken = token;\n out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n break;\n }\n case 'em': {\n const emToken = token;\n out += renderer.em(this.parseInline(emToken.tokens, renderer));\n break;\n }\n case 'codespan': {\n const codespanToken = token;\n out += renderer.codespan(codespanToken.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n const delToken = token;\n out += renderer.del(this.parseInline(delToken.tokens, renderer));\n break;\n }\n case 'text': {\n const textToken = token;\n out += renderer.text(textToken.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n","import { _defaults } from './defaults.ts';\nexport class _Hooks {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens'\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nexport class Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n #parseMarkdown(lexer, parser) {\n return (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n // Show warning if an extension set async to true but the parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n if (!opt.silent) {\n console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n }\n opt.async = true;\n }\n const throwError = this.#onError(!!opt.silent, !!opt.async);\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n }\n #onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '

    An error occurred:

    '\n                    + escape(e.message + '', true)\n                    + '
    ';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport { _getDefaults, changeDefaults, _defaults } from './defaults.ts';\nconst markedInstance = new Marked();\nexport function marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\n"],"names":["escape"],"mappings":"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"} \ No newline at end of file diff --git a/tmp/node_modules/marked/lib/marked.umd.js b/tmp/node_modules/marked/lib/marked.umd.js deleted file mode 100644 index 1b2a3f7..0000000 --- a/tmp/node_modules/marked/lib/marked.umd.js +++ /dev/null @@ -1,2456 +0,0 @@ -/** - * marked v12.0.2 - a markdown parser - * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed) - * https://github.com/markedjs/marked - */ - -/** - * DO NOT EDIT THIS FILE - * The code in this file is generated from files in ./src/ - */ - -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {})); -})(this, (function (exports) { 'use strict'; - - /** - * Gets the original marked default options. - */ - function _getDefaults() { - return { - async: false, - breaks: false, - extensions: null, - gfm: true, - hooks: null, - pedantic: false, - renderer: null, - silent: false, - tokenizer: null, - walkTokens: null - }; - } - exports.defaults = _getDefaults(); - function changeDefaults(newDefaults) { - exports.defaults = newDefaults; - } - - /** - * Helpers - */ - const escapeTest = /[&<>"']/; - const escapeReplace = new RegExp(escapeTest.source, 'g'); - const escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/; - const escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g'); - const escapeReplacements = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - const getEscapeReplacement = (ch) => escapeReplacements[ch]; - function escape$1(html, encode) { - if (encode) { - if (escapeTest.test(html)) { - return html.replace(escapeReplace, getEscapeReplacement); - } - } - else { - if (escapeTestNoEncode.test(html)) { - return html.replace(escapeReplaceNoEncode, getEscapeReplacement); - } - } - return html; - } - const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; - function unescape(html) { - // explicitly match decimal, hex, and named HTML entities - return html.replace(unescapeTest, (_, n) => { - n = n.toLowerCase(); - if (n === 'colon') - return ':'; - if (n.charAt(0) === '#') { - return n.charAt(1) === 'x' - ? String.fromCharCode(parseInt(n.substring(2), 16)) - : String.fromCharCode(+n.substring(1)); - } - return ''; - }); - } - const caret = /(^|[^\[])\^/g; - function edit(regex, opt) { - let source = typeof regex === 'string' ? regex : regex.source; - opt = opt || ''; - const obj = { - replace: (name, val) => { - let valSource = typeof val === 'string' ? val : val.source; - valSource = valSource.replace(caret, '$1'); - source = source.replace(name, valSource); - return obj; - }, - getRegex: () => { - return new RegExp(source, opt); - } - }; - return obj; - } - function cleanUrl(href) { - try { - href = encodeURI(href).replace(/%25/g, '%'); - } - catch (e) { - return null; - } - return href; - } - const noopTest = { exec: () => null }; - function splitCells(tableRow, count) { - // ensure that every cell-delimiting pipe has a space - // before it to distinguish it from an escaped pipe - const row = tableRow.replace(/\|/g, (match, offset, str) => { - let escaped = false; - let curr = offset; - while (--curr >= 0 && str[curr] === '\\') - escaped = !escaped; - if (escaped) { - // odd number of slashes means | is escaped - // so we leave it alone - return '|'; - } - else { - // add space before unescaped | - return ' |'; - } - }), cells = row.split(/ \|/); - let i = 0; - // First/last cell in a row cannot be empty if it has no leading/trailing pipe - if (!cells[0].trim()) { - cells.shift(); - } - if (cells.length > 0 && !cells[cells.length - 1].trim()) { - cells.pop(); - } - if (count) { - if (cells.length > count) { - cells.splice(count); - } - else { - while (cells.length < count) - cells.push(''); - } - } - for (; i < cells.length; i++) { - // leading or trailing whitespace is ignored per the gfm spec - cells[i] = cells[i].trim().replace(/\\\|/g, '|'); - } - return cells; - } - /** - * Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). - * /c*$/ is vulnerable to REDOS. - * - * @param str - * @param c - * @param invert Remove suffix of non-c chars instead. Default falsey. - */ - function rtrim(str, c, invert) { - const l = str.length; - if (l === 0) { - return ''; - } - // Length of suffix matching the invert condition. - let suffLen = 0; - // Step left until we fail to match the invert condition. - while (suffLen < l) { - const currChar = str.charAt(l - suffLen - 1); - if (currChar === c && !invert) { - suffLen++; - } - else if (currChar !== c && invert) { - suffLen++; - } - else { - break; - } - } - return str.slice(0, l - suffLen); - } - function findClosingBracket(str, b) { - if (str.indexOf(b[1]) === -1) { - return -1; - } - let level = 0; - for (let i = 0; i < str.length; i++) { - if (str[i] === '\\') { - i++; - } - else if (str[i] === b[0]) { - level++; - } - else if (str[i] === b[1]) { - level--; - if (level < 0) { - return i; - } - } - } - return -1; - } - - function outputLink(cap, link, raw, lexer) { - const href = link.href; - const title = link.title ? escape$1(link.title) : null; - const text = cap[1].replace(/\\([\[\]])/g, '$1'); - if (cap[0].charAt(0) !== '!') { - lexer.state.inLink = true; - const token = { - type: 'link', - raw, - href, - title, - text, - tokens: lexer.inlineTokens(text) - }; - lexer.state.inLink = false; - return token; - } - return { - type: 'image', - raw, - href, - title, - text: escape$1(text) - }; - } - function indentCodeCompensation(raw, text) { - const matchIndentToCode = raw.match(/^(\s+)(?:```)/); - if (matchIndentToCode === null) { - return text; - } - const indentToCode = matchIndentToCode[1]; - return text - .split('\n') - .map(node => { - const matchIndentInNode = node.match(/^\s+/); - if (matchIndentInNode === null) { - return node; - } - const [indentInNode] = matchIndentInNode; - if (indentInNode.length >= indentToCode.length) { - return node.slice(indentToCode.length); - } - return node; - }) - .join('\n'); - } - /** - * Tokenizer - */ - class _Tokenizer { - options; - rules; // set by the lexer - lexer; // set by the lexer - constructor(options) { - this.options = options || exports.defaults; - } - space(src) { - const cap = this.rules.block.newline.exec(src); - if (cap && cap[0].length > 0) { - return { - type: 'space', - raw: cap[0] - }; - } - } - code(src) { - const cap = this.rules.block.code.exec(src); - if (cap) { - const text = cap[0].replace(/^ {1,4}/gm, ''); - return { - type: 'code', - raw: cap[0], - codeBlockStyle: 'indented', - text: !this.options.pedantic - ? rtrim(text, '\n') - : text - }; - } - } - fences(src) { - const cap = this.rules.block.fences.exec(src); - if (cap) { - const raw = cap[0]; - const text = indentCodeCompensation(raw, cap[3] || ''); - return { - type: 'code', - raw, - lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2], - text - }; - } - } - heading(src) { - const cap = this.rules.block.heading.exec(src); - if (cap) { - let text = cap[2].trim(); - // remove trailing #s - if (/#$/.test(text)) { - const trimmed = rtrim(text, '#'); - if (this.options.pedantic) { - text = trimmed.trim(); - } - else if (!trimmed || / $/.test(trimmed)) { - // CommonMark requires space before trailing #s - text = trimmed.trim(); - } - } - return { - type: 'heading', - raw: cap[0], - depth: cap[1].length, - text, - tokens: this.lexer.inline(text) - }; - } - } - hr(src) { - const cap = this.rules.block.hr.exec(src); - if (cap) { - return { - type: 'hr', - raw: cap[0] - }; - } - } - blockquote(src) { - const cap = this.rules.block.blockquote.exec(src); - if (cap) { - // precede setext continuation with 4 spaces so it isn't a setext - let text = cap[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g, '\n $1'); - text = rtrim(text.replace(/^ *>[ \t]?/gm, ''), '\n'); - const top = this.lexer.state.top; - this.lexer.state.top = true; - const tokens = this.lexer.blockTokens(text); - this.lexer.state.top = top; - return { - type: 'blockquote', - raw: cap[0], - tokens, - text - }; - } - } - list(src) { - let cap = this.rules.block.list.exec(src); - if (cap) { - let bull = cap[1].trim(); - const isordered = bull.length > 1; - const list = { - type: 'list', - raw: '', - ordered: isordered, - start: isordered ? +bull.slice(0, -1) : '', - loose: false, - items: [] - }; - bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`; - if (this.options.pedantic) { - bull = isordered ? bull : '[*+-]'; - } - // Get next list item - const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`); - let raw = ''; - let itemContents = ''; - let endsWithBlankLine = false; - // Check if current bullet point can start a new List Item - while (src) { - let endEarly = false; - if (!(cap = itemRegex.exec(src))) { - break; - } - if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?) - break; - } - raw = cap[0]; - src = src.substring(raw.length); - let line = cap[2].split('\n', 1)[0].replace(/^\t+/, (t) => ' '.repeat(3 * t.length)); - let nextLine = src.split('\n', 1)[0]; - let indent = 0; - if (this.options.pedantic) { - indent = 2; - itemContents = line.trimStart(); - } - else { - indent = cap[2].search(/[^ ]/); // Find first non-space char - indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent - itemContents = line.slice(indent); - indent += cap[1].length; - } - let blankLine = false; - if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line - raw += nextLine + '\n'; - src = src.substring(nextLine.length + 1); - endEarly = true; - } - if (!endEarly) { - const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`); - const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`); - const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`); - const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`); - // Check if following lines should be included in List Item - while (src) { - const rawLine = src.split('\n', 1)[0]; - nextLine = rawLine; - // Re-align to follow commonmark nesting rules - if (this.options.pedantic) { - nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' '); - } - // End list item if found code fences - if (fencesBeginRegex.test(nextLine)) { - break; - } - // End list item if found start of new heading - if (headingBeginRegex.test(nextLine)) { - break; - } - // End list item if found start of new bullet - if (nextBulletRegex.test(nextLine)) { - break; - } - // Horizontal rule found - if (hrRegex.test(src)) { - break; - } - if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible - itemContents += '\n' + nextLine.slice(indent); - } - else { - // not enough indentation - if (blankLine) { - break; - } - // paragraph continuation unless last line was a different block level element - if (line.search(/[^ ]/) >= 4) { // indented code block - break; - } - if (fencesBeginRegex.test(line)) { - break; - } - if (headingBeginRegex.test(line)) { - break; - } - if (hrRegex.test(line)) { - break; - } - itemContents += '\n' + nextLine; - } - if (!blankLine && !nextLine.trim()) { // Check if current line is blank - blankLine = true; - } - raw += rawLine + '\n'; - src = src.substring(rawLine.length + 1); - line = nextLine.slice(indent); - } - } - if (!list.loose) { - // If the previous item ended with a blank line, the list is loose - if (endsWithBlankLine) { - list.loose = true; - } - else if (/\n *\n *$/.test(raw)) { - endsWithBlankLine = true; - } - } - let istask = null; - let ischecked; - // Check for task list items - if (this.options.gfm) { - istask = /^\[[ xX]\] /.exec(itemContents); - if (istask) { - ischecked = istask[0] !== '[ ] '; - itemContents = itemContents.replace(/^\[[ xX]\] +/, ''); - } - } - list.items.push({ - type: 'list_item', - raw, - task: !!istask, - checked: ischecked, - loose: false, - text: itemContents, - tokens: [] - }); - list.raw += raw; - } - // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic - list.items[list.items.length - 1].raw = raw.trimEnd(); - (list.items[list.items.length - 1]).text = itemContents.trimEnd(); - list.raw = list.raw.trimEnd(); - // Item child tokens handled here at end because we needed to have the final item to trim it first - for (let i = 0; i < list.items.length; i++) { - this.lexer.state.top = false; - list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []); - if (!list.loose) { - // Check if list should be loose - const spacers = list.items[i].tokens.filter(t => t.type === 'space'); - const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\n.*\n/.test(t.raw)); - list.loose = hasMultipleLineBreaks; - } - } - // Set all items to loose if list is loose - if (list.loose) { - for (let i = 0; i < list.items.length; i++) { - list.items[i].loose = true; - } - } - return list; - } - } - html(src) { - const cap = this.rules.block.html.exec(src); - if (cap) { - const token = { - type: 'html', - block: true, - raw: cap[0], - pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style', - text: cap[0] - }; - return token; - } - } - def(src) { - const cap = this.rules.block.def.exec(src); - if (cap) { - const tag = cap[1].toLowerCase().replace(/\s+/g, ' '); - const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : ''; - const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3]; - return { - type: 'def', - tag, - raw: cap[0], - href, - title - }; - } - } - table(src) { - const cap = this.rules.block.table.exec(src); - if (!cap) { - return; - } - if (!/[:|]/.test(cap[2])) { - // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading - return; - } - const headers = splitCells(cap[1]); - const aligns = cap[2].replace(/^\||\| *$/g, '').split('|'); - const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []; - const item = { - type: 'table', - raw: cap[0], - header: [], - align: [], - rows: [] - }; - if (headers.length !== aligns.length) { - // header and align columns must be equal, rows can be different. - return; - } - for (const align of aligns) { - if (/^ *-+: *$/.test(align)) { - item.align.push('right'); - } - else if (/^ *:-+: *$/.test(align)) { - item.align.push('center'); - } - else if (/^ *:-+ *$/.test(align)) { - item.align.push('left'); - } - else { - item.align.push(null); - } - } - for (const header of headers) { - item.header.push({ - text: header, - tokens: this.lexer.inline(header) - }); - } - for (const row of rows) { - item.rows.push(splitCells(row, item.header.length).map(cell => { - return { - text: cell, - tokens: this.lexer.inline(cell) - }; - })); - } - return item; - } - lheading(src) { - const cap = this.rules.block.lheading.exec(src); - if (cap) { - return { - type: 'heading', - raw: cap[0], - depth: cap[2].charAt(0) === '=' ? 1 : 2, - text: cap[1], - tokens: this.lexer.inline(cap[1]) - }; - } - } - paragraph(src) { - const cap = this.rules.block.paragraph.exec(src); - if (cap) { - const text = cap[1].charAt(cap[1].length - 1) === '\n' - ? cap[1].slice(0, -1) - : cap[1]; - return { - type: 'paragraph', - raw: cap[0], - text, - tokens: this.lexer.inline(text) - }; - } - } - text(src) { - const cap = this.rules.block.text.exec(src); - if (cap) { - return { - type: 'text', - raw: cap[0], - text: cap[0], - tokens: this.lexer.inline(cap[0]) - }; - } - } - escape(src) { - const cap = this.rules.inline.escape.exec(src); - if (cap) { - return { - type: 'escape', - raw: cap[0], - text: escape$1(cap[1]) - }; - } - } - tag(src) { - const cap = this.rules.inline.tag.exec(src); - if (cap) { - if (!this.lexer.state.inLink && /^
    /i.test(cap[0])) { - this.lexer.state.inLink = false; - } - if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.lexer.state.inRawBlock = true; - } - else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.lexer.state.inRawBlock = false; - } - return { - type: 'html', - raw: cap[0], - inLink: this.lexer.state.inLink, - inRawBlock: this.lexer.state.inRawBlock, - block: false, - text: cap[0] - }; - } - } - link(src) { - const cap = this.rules.inline.link.exec(src); - if (cap) { - const trimmedUrl = cap[2].trim(); - if (!this.options.pedantic && /^$/.test(trimmedUrl))) { - return; - } - // ending angle bracket cannot be escaped - const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\'); - if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { - return; - } - } - else { - // find closing parenthesis - const lastParenIndex = findClosingBracket(cap[2], '()'); - if (lastParenIndex > -1) { - const start = cap[0].indexOf('!') === 0 ? 5 : 4; - const linkLen = start + cap[1].length + lastParenIndex; - cap[2] = cap[2].substring(0, lastParenIndex); - cap[0] = cap[0].substring(0, linkLen).trim(); - cap[3] = ''; - } - } - let href = cap[2]; - let title = ''; - if (this.options.pedantic) { - // split pedantic href and title - const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); - if (link) { - href = link[1]; - title = link[3]; - } - } - else { - title = cap[3] ? cap[3].slice(1, -1) : ''; - } - href = href.trim(); - if (/^$/.test(trimmedUrl))) { - // pedantic allows starting angle bracket without ending angle bracket - href = href.slice(1); - } - else { - href = href.slice(1, -1); - } - } - return outputLink(cap, { - href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href, - title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title - }, cap[0], this.lexer); - } - } - reflink(src, links) { - let cap; - if ((cap = this.rules.inline.reflink.exec(src)) - || (cap = this.rules.inline.nolink.exec(src))) { - const linkString = (cap[2] || cap[1]).replace(/\s+/g, ' '); - const link = links[linkString.toLowerCase()]; - if (!link) { - const text = cap[0].charAt(0); - return { - type: 'text', - raw: text, - text - }; - } - return outputLink(cap, link, cap[0], this.lexer); - } - } - emStrong(src, maskedSrc, prevChar = '') { - let match = this.rules.inline.emStrongLDelim.exec(src); - if (!match) - return; - // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well - if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) - return; - const nextChar = match[1] || match[2] || ''; - if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) { - // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below) - const lLength = [...match[0]].length - 1; - let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0; - const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd; - endReg.lastIndex = 0; - // Clip maskedSrc to same section of string as src (move to lexer?) - maskedSrc = maskedSrc.slice(-1 * src.length + lLength); - while ((match = endReg.exec(maskedSrc)) != null) { - rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; - if (!rDelim) - continue; // skip single * in __abc*abc__ - rLength = [...rDelim].length; - if (match[3] || match[4]) { // found another Left Delim - delimTotal += rLength; - continue; - } - else if (match[5] || match[6]) { // either Left or Right Delim - if (lLength % 3 && !((lLength + rLength) % 3)) { - midDelimTotal += rLength; - continue; // CommonMark Emphasis Rules 9-10 - } - } - delimTotal -= rLength; - if (delimTotal > 0) - continue; // Haven't found enough closing delimiters - // Remove extra characters. *a*** -> *a* - rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); - // char length can be >1 for unicode characters; - const lastCharLength = [...match[0]][0].length; - const raw = src.slice(0, lLength + match.index + lastCharLength + rLength); - // Create `em` if smallest delimiter has odd char count. *a*** - if (Math.min(lLength, rLength) % 2) { - const text = raw.slice(1, -1); - return { - type: 'em', - raw, - text, - tokens: this.lexer.inlineTokens(text) - }; - } - // Create 'strong' if smallest delimiter has even char count. **a*** - const text = raw.slice(2, -2); - return { - type: 'strong', - raw, - text, - tokens: this.lexer.inlineTokens(text) - }; - } - } - } - codespan(src) { - const cap = this.rules.inline.code.exec(src); - if (cap) { - let text = cap[2].replace(/\n/g, ' '); - const hasNonSpaceChars = /[^ ]/.test(text); - const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text); - if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { - text = text.substring(1, text.length - 1); - } - text = escape$1(text, true); - return { - type: 'codespan', - raw: cap[0], - text - }; - } - } - br(src) { - const cap = this.rules.inline.br.exec(src); - if (cap) { - return { - type: 'br', - raw: cap[0] - }; - } - } - del(src) { - const cap = this.rules.inline.del.exec(src); - if (cap) { - return { - type: 'del', - raw: cap[0], - text: cap[2], - tokens: this.lexer.inlineTokens(cap[2]) - }; - } - } - autolink(src) { - const cap = this.rules.inline.autolink.exec(src); - if (cap) { - let text, href; - if (cap[2] === '@') { - text = escape$1(cap[1]); - href = 'mailto:' + text; - } - else { - text = escape$1(cap[1]); - href = text; - } - return { - type: 'link', - raw: cap[0], - text, - href, - tokens: [ - { - type: 'text', - raw: text, - text - } - ] - }; - } - } - url(src) { - let cap; - if (cap = this.rules.inline.url.exec(src)) { - let text, href; - if (cap[2] === '@') { - text = escape$1(cap[0]); - href = 'mailto:' + text; - } - else { - // do extended autolink path validation - let prevCapZero; - do { - prevCapZero = cap[0]; - cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? ''; - } while (prevCapZero !== cap[0]); - text = escape$1(cap[0]); - if (cap[1] === 'www.') { - href = 'http://' + cap[0]; - } - else { - href = cap[0]; - } - } - return { - type: 'link', - raw: cap[0], - text, - href, - tokens: [ - { - type: 'text', - raw: text, - text - } - ] - }; - } - } - inlineText(src) { - const cap = this.rules.inline.text.exec(src); - if (cap) { - let text; - if (this.lexer.state.inRawBlock) { - text = cap[0]; - } - else { - text = escape$1(cap[0]); - } - return { - type: 'text', - raw: cap[0], - text - }; - } - } - } - - /** - * Block-Level Grammar - */ - const newline = /^(?: *(?:\n|$))+/; - const blockCode = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/; - const fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/; - const hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/; - const heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/; - const bullet = /(?:[*+-]|\d{1,9}[.)])/; - const lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/) - .replace(/bull/g, bullet) // lists can interrupt - .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt - .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt - .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt - .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt - .replace(/html/g, / {0,3}<[^\n>]+>\n/) // block html can interrupt - .getRegex(); - const _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/; - const blockText = /^[^\n]+/; - const _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/; - const def = edit(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/) - .replace('label', _blockLabel) - .replace('title', /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/) - .getRegex(); - const list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/) - .replace(/bull/g, bullet) - .getRegex(); - const _tag = 'address|article|aside|base|basefont|blockquote|body|caption' - + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' - + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' - + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' - + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title' - + '|tr|track|ul'; - const _comment = /|$))/; - const html = edit('^ {0,3}(?:' // optional indentation - + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) - + '|comment[^\\n]*(\\n+|$)' // (2) - + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) - + '|\\n*|$)' // (4) - + '|\\n*|$)' // (5) - + '|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6) - + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag - + '|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag - + ')', 'i') - .replace('comment', _comment) - .replace('tag', _tag) - .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) - .getRegex(); - const paragraph = edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs - .replace('|table', '') - .replace('blockquote', ' {0,3}>') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // pars can be interrupted by type (6) html blocks - .getRegex(); - const blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/) - .replace('paragraph', paragraph) - .getRegex(); - /** - * Normal Block Grammar - */ - const blockNormal = { - blockquote, - code: blockCode, - def, - fences, - heading, - hr, - html, - lheading, - list, - newline, - paragraph, - table: noopTest, - text: blockText - }; - /** - * GFM Block Grammar - */ - const gfmTable = edit('^ *([^\\n ].*)\\n' // Header - + ' {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)' // Align - + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)') // Cells - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('blockquote', ' {0,3}>') - .replace('code', ' {4}[^\\n]') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // tables can be interrupted by type (6) html blocks - .getRegex(); - const blockGfm = { - ...blockNormal, - table: gfmTable, - paragraph: edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' {0,3}#{1,6}(?:\\s|$)') - .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs - .replace('table', gfmTable) // interrupt paragraphs with table - .replace('blockquote', ' {0,3}>') - .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') - .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt - .replace('html', ')|<(?:script|pre|style|textarea|!--)') - .replace('tag', _tag) // pars can be interrupted by type (6) html blocks - .getRegex() - }; - /** - * Pedantic grammar (original John Gruber's loose markdown specification) - */ - const blockPedantic = { - ...blockNormal, - html: edit('^ *(?:comment *(?:\\n|\\s*$)' - + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag - + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') - .replace('comment', _comment) - .replace(/tag/g, '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' - + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' - + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') - .getRegex(), - def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, - heading: /^(#{1,6})(.*)(?:\n+|$)/, - fences: noopTest, // fences not supported - lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, - paragraph: edit(_paragraph) - .replace('hr', hr) - .replace('heading', ' *#{1,6} *[^\n]') - .replace('lheading', lheading) - .replace('|table', '') - .replace('blockquote', ' {0,3}>') - .replace('|fences', '') - .replace('|list', '') - .replace('|html', '') - .replace('|tag', '') - .getRegex() - }; - /** - * Inline-Level Grammar - */ - const escape = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; - const inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; - const br = /^( {2,}|\\)\n(?!\s*$)/; - const inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\ - const blockSkip = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g; - const emStrongLDelim = edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, 'u') - .replace(/punct/g, _punctuation) - .getRegex(); - const emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)' // Skip orphan inside strong - + '|[^*]+(?=[^*])' // Consume to delim - + '|(?!\\*)[punct](\\*+)(?=[\\s]|$)' // (1) #*** can only be a Right Delimiter - + '|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter - + '|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])' // (3) #***a, ***a can only be Left Delimiter - + '|[\\s](\\*+)(?!\\*)(?=[punct])' // (4) ***# can only be Left Delimiter - + '|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter - + '|[^punct\\s](\\*+)(?=[^punct\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter - .replace(/punct/g, _punctuation) - .getRegex(); - // (6) Not allowed for _ - const emStrongRDelimUnd = edit('^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)' // Skip orphan inside strong - + '|[^_]+(?=[^_])' // Consume to delim - + '|(?!_)[punct](_+)(?=[\\s]|$)' // (1) #___ can only be a Right Delimiter - + '|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter - + '|(?!_)[punct\\s](_+)(?=[^punct\\s])' // (3) #___a, ___a can only be Left Delimiter - + '|[\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter - + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter - .replace(/punct/g, _punctuation) - .getRegex(); - const anyPunctuation = edit(/\\([punct])/, 'gu') - .replace(/punct/g, _punctuation) - .getRegex(); - const autolink = edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/) - .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/) - .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/) - .getRegex(); - const _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex(); - const tag = edit('^comment' - + '|^' // self-closing tag - + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag - + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. - + '|^' // declaration, e.g. - + '|^') // CDATA section - .replace('comment', _inlineComment) - .replace('attribute', /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/) - .getRegex(); - const _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; - const link = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/) - .replace('label', _inlineLabel) - .replace('href', /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/) - .replace('title', /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/) - .getRegex(); - const reflink = edit(/^!?\[(label)\]\[(ref)\]/) - .replace('label', _inlineLabel) - .replace('ref', _blockLabel) - .getRegex(); - const nolink = edit(/^!?\[(ref)\](?:\[\])?/) - .replace('ref', _blockLabel) - .getRegex(); - const reflinkSearch = edit('reflink|nolink(?!\\()', 'g') - .replace('reflink', reflink) - .replace('nolink', nolink) - .getRegex(); - /** - * Normal Inline Grammar - */ - const inlineNormal = { - _backpedal: noopTest, // only used for GFM url - anyPunctuation, - autolink, - blockSkip, - br, - code: inlineCode, - del: noopTest, - emStrongLDelim, - emStrongRDelimAst, - emStrongRDelimUnd, - escape, - link, - nolink, - punctuation, - reflink, - reflinkSearch, - tag, - text: inlineText, - url: noopTest - }; - /** - * Pedantic Inline Grammar - */ - const inlinePedantic = { - ...inlineNormal, - link: edit(/^!?\[(label)\]\((.*?)\)/) - .replace('label', _inlineLabel) - .getRegex(), - reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) - .replace('label', _inlineLabel) - .getRegex() - }; - /** - * GFM Inline Grammar - */ - const inlineGfm = { - ...inlineNormal, - escape: edit(escape).replace('])', '~|])').getRegex(), - url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, 'i') - .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/) - .getRegex(), - _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, - del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, - text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\ { - return leading + ' '.repeat(tabs.length); - }); - } - let token; - let lastToken; - let cutSrc; - let lastParagraphClipped; - while (src) { - if (this.options.extensions - && this.options.extensions.block - && this.options.extensions.block.some((extTokenizer) => { - if (token = extTokenizer.call({ lexer: this }, src, tokens)) { - src = src.substring(token.raw.length); - tokens.push(token); - return true; - } - return false; - })) { - continue; - } - // newline - if (token = this.tokenizer.space(src)) { - src = src.substring(token.raw.length); - if (token.raw.length === 1 && tokens.length > 0) { - // if there's a single \n as a spacer, it's terminating the last line, - // so move it there so that we don't get unnecessary paragraph tags - tokens[tokens.length - 1].raw += '\n'; - } - else { - tokens.push(token); - } - continue; - } - // code - if (token = this.tokenizer.code(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - // An indented code block cannot interrupt a paragraph. - if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - continue; - } - // fences - if (token = this.tokenizer.fences(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // heading - if (token = this.tokenizer.heading(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // hr - if (token = this.tokenizer.hr(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // blockquote - if (token = this.tokenizer.blockquote(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // list - if (token = this.tokenizer.list(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // html - if (token = this.tokenizer.html(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // def - if (token = this.tokenizer.def(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.raw; - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else if (!this.tokens.links[token.tag]) { - this.tokens.links[token.tag] = { - href: token.href, - title: token.title - }; - } - continue; - } - // table (gfm) - if (token = this.tokenizer.table(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // lheading - if (token = this.tokenizer.lheading(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // top-level paragraph - // prevent paragraph consuming extensions by clipping 'src' to extension start - cutSrc = src; - if (this.options.extensions && this.options.extensions.startBlock) { - let startIndex = Infinity; - const tempSrc = src.slice(1); - let tempStart; - this.options.extensions.startBlock.forEach((getStartIndex) => { - tempStart = getStartIndex.call({ lexer: this }, tempSrc); - if (typeof tempStart === 'number' && tempStart >= 0) { - startIndex = Math.min(startIndex, tempStart); - } - }); - if (startIndex < Infinity && startIndex >= 0) { - cutSrc = src.substring(0, startIndex + 1); - } - } - if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) { - lastToken = tokens[tokens.length - 1]; - if (lastParagraphClipped && lastToken.type === 'paragraph') { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue.pop(); - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - lastParagraphClipped = (cutSrc.length !== src.length); - src = src.substring(token.raw.length); - continue; - } - // text - if (token = this.tokenizer.text(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && lastToken.type === 'text') { - lastToken.raw += '\n' + token.raw; - lastToken.text += '\n' + token.text; - this.inlineQueue.pop(); - this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; - } - else { - tokens.push(token); - } - continue; - } - if (src) { - const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); - if (this.options.silent) { - console.error(errMsg); - break; - } - else { - throw new Error(errMsg); - } - } - } - this.state.top = true; - return tokens; - } - inline(src, tokens = []) { - this.inlineQueue.push({ src, tokens }); - return tokens; - } - /** - * Lexing/Compiling - */ - inlineTokens(src, tokens = []) { - let token, lastToken, cutSrc; - // String with links masked to avoid interference with em and strong - let maskedSrc = src; - let match; - let keepPrevChar, prevChar; - // Mask out reflinks - if (this.tokens.links) { - const links = Object.keys(this.tokens.links); - if (links.length > 0) { - while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { - if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) { - maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); - } - } - } - } - // Mask out other blocks - while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { - maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); - } - // Mask out escaped characters - while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) { - maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); - } - while (src) { - if (!keepPrevChar) { - prevChar = ''; - } - keepPrevChar = false; - // extensions - if (this.options.extensions - && this.options.extensions.inline - && this.options.extensions.inline.some((extTokenizer) => { - if (token = extTokenizer.call({ lexer: this }, src, tokens)) { - src = src.substring(token.raw.length); - tokens.push(token); - return true; - } - return false; - })) { - continue; - } - // escape - if (token = this.tokenizer.escape(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // tag - if (token = this.tokenizer.tag(src)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && token.type === 'text' && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - // link - if (token = this.tokenizer.link(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // reflink, nolink - if (token = this.tokenizer.reflink(src, this.tokens.links)) { - src = src.substring(token.raw.length); - lastToken = tokens[tokens.length - 1]; - if (lastToken && token.type === 'text' && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - // em & strong - if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // code - if (token = this.tokenizer.codespan(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // br - if (token = this.tokenizer.br(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // del (gfm) - if (token = this.tokenizer.del(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // autolink - if (token = this.tokenizer.autolink(src)) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // url (gfm) - if (!this.state.inLink && (token = this.tokenizer.url(src))) { - src = src.substring(token.raw.length); - tokens.push(token); - continue; - } - // text - // prevent inlineText consuming extensions by clipping 'src' to extension start - cutSrc = src; - if (this.options.extensions && this.options.extensions.startInline) { - let startIndex = Infinity; - const tempSrc = src.slice(1); - let tempStart; - this.options.extensions.startInline.forEach((getStartIndex) => { - tempStart = getStartIndex.call({ lexer: this }, tempSrc); - if (typeof tempStart === 'number' && tempStart >= 0) { - startIndex = Math.min(startIndex, tempStart); - } - }); - if (startIndex < Infinity && startIndex >= 0) { - cutSrc = src.substring(0, startIndex + 1); - } - } - if (token = this.tokenizer.inlineText(cutSrc)) { - src = src.substring(token.raw.length); - if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started - prevChar = token.raw.slice(-1); - } - keepPrevChar = true; - lastToken = tokens[tokens.length - 1]; - if (lastToken && lastToken.type === 'text') { - lastToken.raw += token.raw; - lastToken.text += token.text; - } - else { - tokens.push(token); - } - continue; - } - if (src) { - const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); - if (this.options.silent) { - console.error(errMsg); - break; - } - else { - throw new Error(errMsg); - } - } - } - return tokens; - } - } - - /** - * Renderer - */ - class _Renderer { - options; - constructor(options) { - this.options = options || exports.defaults; - } - code(code, infostring, escaped) { - const lang = (infostring || '').match(/^\S*/)?.[0]; - code = code.replace(/\n$/, '') + '\n'; - if (!lang) { - return '
    '
    -                    + (escaped ? code : escape$1(code, true))
    -                    + '
    \n'; - } - return '
    '
    -                + (escaped ? code : escape$1(code, true))
    -                + '
    \n'; - } - blockquote(quote) { - return `
    \n${quote}
    \n`; - } - html(html, block) { - return html; - } - heading(text, level, raw) { - // ignore IDs - return `${text}\n`; - } - hr() { - return '
    \n'; - } - list(body, ordered, start) { - const type = ordered ? 'ol' : 'ul'; - const startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; - return '<' + type + startatt + '>\n' + body + '\n'; - } - listitem(text, task, checked) { - return `
  • ${text}
  • \n`; - } - checkbox(checked) { - return ''; - } - paragraph(text) { - return `

    ${text}

    \n`; - } - table(header, body) { - if (body) - body = `${body}`; - return '\n' - + '\n' - + header - + '\n' - + body - + '
    \n'; - } - tablerow(content) { - return `\n${content}\n`; - } - tablecell(content, flags) { - const type = flags.header ? 'th' : 'td'; - const tag = flags.align - ? `<${type} align="${flags.align}">` - : `<${type}>`; - return tag + content + `\n`; - } - /** - * span level renderer - */ - strong(text) { - return `${text}`; - } - em(text) { - return `${text}`; - } - codespan(text) { - return `${text}`; - } - br() { - return '
    '; - } - del(text) { - return `${text}`; - } - link(href, title, text) { - const cleanHref = cleanUrl(href); - if (cleanHref === null) { - return text; - } - href = cleanHref; - let out = '
    '; - return out; - } - image(href, title, text) { - const cleanHref = cleanUrl(href); - if (cleanHref === null) { - return text; - } - href = cleanHref; - let out = `${text} 0 && item.tokens[0].type === 'paragraph') { - item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; - if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') { - item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text; - } - } - else { - item.tokens.unshift({ - type: 'text', - text: checkbox + ' ' - }); - } - } - else { - itemBody += checkbox + ' '; - } - } - itemBody += this.parse(item.tokens, loose); - body += this.renderer.listitem(itemBody, task, !!checked); - } - out += this.renderer.list(body, ordered, start); - continue; - } - case 'html': { - const htmlToken = token; - out += this.renderer.html(htmlToken.text, htmlToken.block); - continue; - } - case 'paragraph': { - const paragraphToken = token; - out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens)); - continue; - } - case 'text': { - let textToken = token; - let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text; - while (i + 1 < tokens.length && tokens[i + 1].type === 'text') { - textToken = tokens[++i]; - body += '\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text); - } - out += top ? this.renderer.paragraph(body) : body; - continue; - } - default: { - const errMsg = 'Token with "' + token.type + '" type was not found.'; - if (this.options.silent) { - console.error(errMsg); - return ''; - } - else { - throw new Error(errMsg); - } - } - } - } - return out; - } - /** - * Parse Inline Tokens - */ - parseInline(tokens, renderer) { - renderer = renderer || this.renderer; - let out = ''; - for (let i = 0; i < tokens.length; i++) { - const token = tokens[i]; - // Run any renderer extensions - if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { - const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token); - if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) { - out += ret || ''; - continue; - } - } - switch (token.type) { - case 'escape': { - const escapeToken = token; - out += renderer.text(escapeToken.text); - break; - } - case 'html': { - const tagToken = token; - out += renderer.html(tagToken.text); - break; - } - case 'link': { - const linkToken = token; - out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer)); - break; - } - case 'image': { - const imageToken = token; - out += renderer.image(imageToken.href, imageToken.title, imageToken.text); - break; - } - case 'strong': { - const strongToken = token; - out += renderer.strong(this.parseInline(strongToken.tokens, renderer)); - break; - } - case 'em': { - const emToken = token; - out += renderer.em(this.parseInline(emToken.tokens, renderer)); - break; - } - case 'codespan': { - const codespanToken = token; - out += renderer.codespan(codespanToken.text); - break; - } - case 'br': { - out += renderer.br(); - break; - } - case 'del': { - const delToken = token; - out += renderer.del(this.parseInline(delToken.tokens, renderer)); - break; - } - case 'text': { - const textToken = token; - out += renderer.text(textToken.text); - break; - } - default: { - const errMsg = 'Token with "' + token.type + '" type was not found.'; - if (this.options.silent) { - console.error(errMsg); - return ''; - } - else { - throw new Error(errMsg); - } - } - } - } - return out; - } - } - - class _Hooks { - options; - constructor(options) { - this.options = options || exports.defaults; - } - static passThroughHooks = new Set([ - 'preprocess', - 'postprocess', - 'processAllTokens' - ]); - /** - * Process markdown before marked - */ - preprocess(markdown) { - return markdown; - } - /** - * Process HTML after marked is finished - */ - postprocess(html) { - return html; - } - /** - * Process all tokens before walk tokens - */ - processAllTokens(tokens) { - return tokens; - } - } - - class Marked { - defaults = _getDefaults(); - options = this.setOptions; - parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse); - parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline); - Parser = _Parser; - Renderer = _Renderer; - TextRenderer = _TextRenderer; - Lexer = _Lexer; - Tokenizer = _Tokenizer; - Hooks = _Hooks; - constructor(...args) { - this.use(...args); - } - /** - * Run callback for every token - */ - walkTokens(tokens, callback) { - let values = []; - for (const token of tokens) { - values = values.concat(callback.call(this, token)); - switch (token.type) { - case 'table': { - const tableToken = token; - for (const cell of tableToken.header) { - values = values.concat(this.walkTokens(cell.tokens, callback)); - } - for (const row of tableToken.rows) { - for (const cell of row) { - values = values.concat(this.walkTokens(cell.tokens, callback)); - } - } - break; - } - case 'list': { - const listToken = token; - values = values.concat(this.walkTokens(listToken.items, callback)); - break; - } - default: { - const genericToken = token; - if (this.defaults.extensions?.childTokens?.[genericToken.type]) { - this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => { - const tokens = genericToken[childTokens].flat(Infinity); - values = values.concat(this.walkTokens(tokens, callback)); - }); - } - else if (genericToken.tokens) { - values = values.concat(this.walkTokens(genericToken.tokens, callback)); - } - } - } - } - return values; - } - use(...args) { - const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} }; - args.forEach((pack) => { - // copy options to new object - const opts = { ...pack }; - // set async to true if it was set to true before - opts.async = this.defaults.async || opts.async || false; - // ==-- Parse "addon" extensions --== // - if (pack.extensions) { - pack.extensions.forEach((ext) => { - if (!ext.name) { - throw new Error('extension name required'); - } - if ('renderer' in ext) { // Renderer extensions - const prevRenderer = extensions.renderers[ext.name]; - if (prevRenderer) { - // Replace extension with func to run new extension but fall back if false - extensions.renderers[ext.name] = function (...args) { - let ret = ext.renderer.apply(this, args); - if (ret === false) { - ret = prevRenderer.apply(this, args); - } - return ret; - }; - } - else { - extensions.renderers[ext.name] = ext.renderer; - } - } - if ('tokenizer' in ext) { // Tokenizer Extensions - if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) { - throw new Error("extension level must be 'block' or 'inline'"); - } - const extLevel = extensions[ext.level]; - if (extLevel) { - extLevel.unshift(ext.tokenizer); - } - else { - extensions[ext.level] = [ext.tokenizer]; - } - if (ext.start) { // Function to check for start of token - if (ext.level === 'block') { - if (extensions.startBlock) { - extensions.startBlock.push(ext.start); - } - else { - extensions.startBlock = [ext.start]; - } - } - else if (ext.level === 'inline') { - if (extensions.startInline) { - extensions.startInline.push(ext.start); - } - else { - extensions.startInline = [ext.start]; - } - } - } - } - if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens - extensions.childTokens[ext.name] = ext.childTokens; - } - }); - opts.extensions = extensions; - } - // ==-- Parse "overwrite" extensions --== // - if (pack.renderer) { - const renderer = this.defaults.renderer || new _Renderer(this.defaults); - for (const prop in pack.renderer) { - if (!(prop in renderer)) { - throw new Error(`renderer '${prop}' does not exist`); - } - if (prop === 'options') { - // ignore options property - continue; - } - const rendererProp = prop; - const rendererFunc = pack.renderer[rendererProp]; - const prevRenderer = renderer[rendererProp]; - // Replace renderer with func to run extension, but fall back if false - renderer[rendererProp] = (...args) => { - let ret = rendererFunc.apply(renderer, args); - if (ret === false) { - ret = prevRenderer.apply(renderer, args); - } - return ret || ''; - }; - } - opts.renderer = renderer; - } - if (pack.tokenizer) { - const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults); - for (const prop in pack.tokenizer) { - if (!(prop in tokenizer)) { - throw new Error(`tokenizer '${prop}' does not exist`); - } - if (['options', 'rules', 'lexer'].includes(prop)) { - // ignore options, rules, and lexer properties - continue; - } - const tokenizerProp = prop; - const tokenizerFunc = pack.tokenizer[tokenizerProp]; - const prevTokenizer = tokenizer[tokenizerProp]; - // Replace tokenizer with func to run extension, but fall back if false - // @ts-expect-error cannot type tokenizer function dynamically - tokenizer[tokenizerProp] = (...args) => { - let ret = tokenizerFunc.apply(tokenizer, args); - if (ret === false) { - ret = prevTokenizer.apply(tokenizer, args); - } - return ret; - }; - } - opts.tokenizer = tokenizer; - } - // ==-- Parse Hooks extensions --== // - if (pack.hooks) { - const hooks = this.defaults.hooks || new _Hooks(); - for (const prop in pack.hooks) { - if (!(prop in hooks)) { - throw new Error(`hook '${prop}' does not exist`); - } - if (prop === 'options') { - // ignore options property - continue; - } - const hooksProp = prop; - const hooksFunc = pack.hooks[hooksProp]; - const prevHook = hooks[hooksProp]; - if (_Hooks.passThroughHooks.has(prop)) { - // @ts-expect-error cannot type hook function dynamically - hooks[hooksProp] = (arg) => { - if (this.defaults.async) { - return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => { - return prevHook.call(hooks, ret); - }); - } - const ret = hooksFunc.call(hooks, arg); - return prevHook.call(hooks, ret); - }; - } - else { - // @ts-expect-error cannot type hook function dynamically - hooks[hooksProp] = (...args) => { - let ret = hooksFunc.apply(hooks, args); - if (ret === false) { - ret = prevHook.apply(hooks, args); - } - return ret; - }; - } - } - opts.hooks = hooks; - } - // ==-- Parse WalkTokens extensions --== // - if (pack.walkTokens) { - const walkTokens = this.defaults.walkTokens; - const packWalktokens = pack.walkTokens; - opts.walkTokens = function (token) { - let values = []; - values.push(packWalktokens.call(this, token)); - if (walkTokens) { - values = values.concat(walkTokens.call(this, token)); - } - return values; - }; - } - this.defaults = { ...this.defaults, ...opts }; - }); - return this; - } - setOptions(opt) { - this.defaults = { ...this.defaults, ...opt }; - return this; - } - lexer(src, options) { - return _Lexer.lex(src, options ?? this.defaults); - } - parser(tokens, options) { - return _Parser.parse(tokens, options ?? this.defaults); - } - #parseMarkdown(lexer, parser) { - return (src, options) => { - const origOpt = { ...options }; - const opt = { ...this.defaults, ...origOpt }; - // Show warning if an extension set async to true but the parse was called with async: false - if (this.defaults.async === true && origOpt.async === false) { - if (!opt.silent) { - console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.'); - } - opt.async = true; - } - const throwError = this.#onError(!!opt.silent, !!opt.async); - // throw error in case of non string input - if (typeof src === 'undefined' || src === null) { - return throwError(new Error('marked(): input parameter is undefined or null')); - } - if (typeof src !== 'string') { - return throwError(new Error('marked(): input parameter is of type ' - + Object.prototype.toString.call(src) + ', string expected')); - } - if (opt.hooks) { - opt.hooks.options = opt; - } - if (opt.async) { - return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src) - .then(src => lexer(src, opt)) - .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens) - .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens) - .then(tokens => parser(tokens, opt)) - .then(html => opt.hooks ? opt.hooks.postprocess(html) : html) - .catch(throwError); - } - try { - if (opt.hooks) { - src = opt.hooks.preprocess(src); - } - let tokens = lexer(src, opt); - if (opt.hooks) { - tokens = opt.hooks.processAllTokens(tokens); - } - if (opt.walkTokens) { - this.walkTokens(tokens, opt.walkTokens); - } - let html = parser(tokens, opt); - if (opt.hooks) { - html = opt.hooks.postprocess(html); - } - return html; - } - catch (e) { - return throwError(e); - } - }; - } - #onError(silent, async) { - return (e) => { - e.message += '\nPlease report this to https://github.com/markedjs/marked.'; - if (silent) { - const msg = '

    An error occurred:

    '
    -                        + escape$1(e.message + '', true)
    -                        + '
    '; - if (async) { - return Promise.resolve(msg); - } - return msg; - } - if (async) { - return Promise.reject(e); - } - throw e; - }; - } - } - - const markedInstance = new Marked(); - function marked(src, opt) { - return markedInstance.parse(src, opt); - } - /** - * Sets the default options. - * - * @param options Hash of options - */ - marked.options = - marked.setOptions = function (options) { - markedInstance.setOptions(options); - marked.defaults = markedInstance.defaults; - changeDefaults(marked.defaults); - return marked; - }; - /** - * Gets the original marked default options. - */ - marked.getDefaults = _getDefaults; - marked.defaults = exports.defaults; - /** - * Use Extension - */ - marked.use = function (...args) { - markedInstance.use(...args); - marked.defaults = markedInstance.defaults; - changeDefaults(marked.defaults); - return marked; - }; - /** - * Run callback for every token - */ - marked.walkTokens = function (tokens, callback) { - return markedInstance.walkTokens(tokens, callback); - }; - /** - * Compiles markdown to HTML without enclosing `p` tag. - * - * @param src String of markdown source to be compiled - * @param options Hash of options - * @return String of compiled HTML - */ - marked.parseInline = markedInstance.parseInline; - /** - * Expose - */ - marked.Parser = _Parser; - marked.parser = _Parser.parse; - marked.Renderer = _Renderer; - marked.TextRenderer = _TextRenderer; - marked.Lexer = _Lexer; - marked.lexer = _Lexer.lex; - marked.Tokenizer = _Tokenizer; - marked.Hooks = _Hooks; - marked.parse = marked; - const options = marked.options; - const setOptions = marked.setOptions; - const use = marked.use; - const walkTokens = marked.walkTokens; - const parseInline = marked.parseInline; - const parse = marked; - const parser = _Parser.parse; - const lexer = _Lexer.lex; - - exports.Hooks = _Hooks; - exports.Lexer = _Lexer; - exports.Marked = Marked; - exports.Parser = _Parser; - exports.Renderer = _Renderer; - exports.TextRenderer = _TextRenderer; - exports.Tokenizer = _Tokenizer; - exports.getDefaults = _getDefaults; - exports.lexer = lexer; - exports.marked = marked; - exports.options = options; - exports.parse = parse; - exports.parseInline = parseInline; - exports.parser = parser; - exports.setOptions = setOptions; - exports.use = use; - exports.walkTokens = walkTokens; - -})); -//# sourceMappingURL=marked.umd.js.map diff --git a/tmp/node_modules/marked/lib/marked.umd.js.map b/tmp/node_modules/marked/lib/marked.umd.js.map deleted file mode 100644 index 93e2a4c..0000000 --- a/tmp/node_modules/marked/lib/marked.umd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"marked.umd.js","sources":["../src/defaults.ts","../src/helpers.ts","../src/Tokenizer.ts","../src/rules.ts","../src/Lexer.ts","../src/Renderer.ts","../src/TextRenderer.ts","../src/Parser.ts","../src/Hooks.ts","../src/Instance.ts","../src/marked.ts"],"sourcesContent":["/**\n * Gets the original marked default options.\n */\nexport function _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nexport let _defaults = _getDefaults();\nexport function changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n","/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nexport function escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nexport function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nexport function edit(regex, opt) {\n let source = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nexport function cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nexport const noopTest = { exec: () => null };\nexport function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nexport function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n","import { _defaults } from './defaults.ts';\nimport { rtrim, splitCells, escape, findClosingBracket } from './helpers.ts';\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n // precede setext continuation with 4 spaces so it isn't a setext\n let text = cap[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n $1');\n text = rtrim(text.replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n (list.items[list.items.length - 1]).text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (/^ *-+: *$/.test(align)) {\n item.align.push('right');\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align.push('center');\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (const header of headers) {\n item.header.push({\n text: header,\n tokens: this.lexer.inline(header)\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map(cell => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell)\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^
    /i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n","import { edit, noopTest } from './helpers.ts';\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\\nconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n escape: edit(escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\ {\n return leading + ' '.repeat(tabs.length);\n });\n }\n let token;\n let lastToken;\n let cutSrc;\n let lastParagraphClipped;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport { cleanUrl, escape } from './helpers.ts';\n/**\n * Renderer\n */\nexport class _Renderer {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/^\\S*/)?.[0];\n code = code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '
    '\n                + (escaped ? code : escape(code, true))\n                + '
    \\n';\n }\n return '
    '\n            + (escaped ? code : escape(code, true))\n            + '
    \\n';\n }\n blockquote(quote) {\n return `
    \\n${quote}
    \\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `${text}\\n`;\n }\n hr() {\n return '
    \\n';\n }\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul';\n const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n listitem(text, task, checked) {\n return `
  • ${text}
  • \\n`;\n }\n checkbox(checked) {\n return '';\n }\n paragraph(text) {\n return `

    ${text}

    \\n`;\n }\n table(header, body) {\n if (body)\n body = `${body}`;\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n tablerow(content) {\n return `\\n${content}\\n`;\n }\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `\\n`;\n }\n /**\n * span level renderer\n */\n strong(text) {\n return `${text}`;\n }\n em(text) {\n return `${text}`;\n }\n codespan(text) {\n return `${text}`;\n }\n br() {\n return '
    ';\n }\n del(text) {\n return `${text}`;\n }\n link(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '
    ';\n return out;\n }\n image(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `\"${text}\"`;\n 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox + ' '\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, !!checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n const htmlToken = token;\n out += this.renderer.html(htmlToken.text, htmlToken.block);\n continue;\n }\n case 'paragraph': {\n const paragraphToken = token;\n out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape': {\n const escapeToken = token;\n out += renderer.text(escapeToken.text);\n break;\n }\n case 'html': {\n const tagToken = token;\n out += renderer.html(tagToken.text);\n break;\n }\n case 'link': {\n const linkToken = token;\n out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n break;\n }\n case 'image': {\n const imageToken = token;\n out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n break;\n }\n case 'strong': {\n const strongToken = token;\n out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n break;\n }\n case 'em': {\n const emToken = token;\n out += renderer.em(this.parseInline(emToken.tokens, renderer));\n break;\n }\n case 'codespan': {\n const codespanToken = token;\n out += renderer.codespan(codespanToken.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n const delToken = token;\n out += renderer.del(this.parseInline(delToken.tokens, renderer));\n break;\n }\n case 'text': {\n const textToken = token;\n out += renderer.text(textToken.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n","import { _defaults } from './defaults.ts';\nexport class _Hooks {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens'\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nexport class Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (prop === 'options') {\n // ignore options property\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n #parseMarkdown(lexer, parser) {\n return (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n // Show warning if an extension set async to true but the parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n if (!opt.silent) {\n console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n }\n opt.async = true;\n }\n const throwError = this.#onError(!!opt.silent, !!opt.async);\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n }\n #onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '

    An error occurred:

    '\n                    + escape(e.message + '', true)\n                    + '
    ';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport { _getDefaults, changeDefaults, _defaults } from './defaults.ts';\nconst markedInstance = new Marked();\nexport function marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\n"],"names":["_defaults","escape"],"mappings":"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"} \ No newline at end of file diff --git a/tmp/node_modules/marked/man/marked.1 b/tmp/node_modules/marked/man/marked.1 deleted file mode 100644 index 185f0aa..0000000 --- a/tmp/node_modules/marked/man/marked.1 +++ /dev/null @@ -1,111 +0,0 @@ -.TH "MARKED" "1" "April 2024" "12.0.1" -.SH "NAME" -\fBmarked\fR \- a javascript markdown parser -.SH SYNOPSIS -.P -\fBmarked\fP [\fB\-o\fP ] [\fB\-i\fP ] [\fB\-s\fP ] [\fB\-c\fP ] [\fB\-\-help\fP] [\fB\-\-version\fP] [\fB\-\-tokens\fP] [\fB\-\-no\-clobber\fP] [\fB\-\-pedantic\fP] [\fB\-\-gfm\fP] [\fB\-\-breaks\fP] [\fB\-\-no\-etc\.\.\.\fP] [\fB\-\-silent\fP] [filename] -.SH DESCRIPTION -.P -marked is a full\-featured javascript markdown parser, built for speed\. -.br -It also includes multiple GFM features\. -.SH EXAMPLES -.RS 2 -.nf -cat in\.md | marked > out\.html -.fi -.RE -.RS 2 -.nf -echo "hello *world*" | marked -.fi -.RE -.RS 2 -.nf -marked \-o out\.html \-i in\.md \-\-gfm -.fi -.RE -.RS 2 -.nf -marked \-\-output="hello world\.html" \-i in\.md \-\-no\-breaks -.fi -.RE -.SH OPTIONS - -.RS 1 -.IP \(bu 2 -\-o, \-\-output [output file] -.br -Specify file output\. If none is specified, write to stdout\. -.IP \(bu 2 -\-i, \-\-input [input file] -.br -Specify file input, otherwise use last argument as input file\. -.br -If no input file is specified, read from stdin\. -.IP \(bu 2 -\-s, \-\-string [markdown string] -.br -Specify string input instead of a file\. -.IP \(bu 2 -\-c, \-\-config [config file] -.br -Specify config file to use instead of the default \fB~/\.marked\.json\fP or \fB~/\.marked\.js\fP or \fB~/\.marked/index\.js\fP\|\. -.IP \(bu 2 -\-t, \-\-tokens -.br -Output a token list instead of html\. -.IP \(bu 2 -\-n, \-\-no\-clobber -.br -Do not overwrite \fBoutput\fP if it exists\. -.IP \(bu 2 -\-\-pedantic -.br -Conform to obscure parts of markdown\.pl as much as possible\. -.br -Don't fix original markdown bugs\. -.IP \(bu 2 -\-\-gfm -.br -Enable github flavored markdown\. -.IP \(bu 2 -\-\-breaks -.br -Enable GFM line breaks\. Only works with the gfm option\. -.IP \(bu 2 -\-\-no\-breaks, \-no\-etc\.\.\. -.br -The inverse of any of the marked options above\. -.IP \(bu 2 -\-\-silent -.br -Silence error output\. -.IP \(bu 2 -\-h, \-\-help -.br -Display help information\. - -.RE -.SH CONFIGURATION -.P -For configuring and running programmatically\. -.P -Example -.RS 2 -.nf -import { Marked } from 'marked'; -const marked = new Marked({ gfm: true }); -marked\.parse('*foo*'); -.fi -.RE -.SH BUGS -.P -Please report any bugs to https://github.com/markedjs/marked -.SH LICENSE -.P -Copyright (c) 2011\-2014, Christopher Jeffrey (MIT License)\. -.SH SEE ALSO -.P -markdown(1), nodejs(1) - diff --git a/tmp/node_modules/marked/man/marked.1.md b/tmp/node_modules/marked/man/marked.1.md deleted file mode 100644 index d5b94a4..0000000 --- a/tmp/node_modules/marked/man/marked.1.md +++ /dev/null @@ -1,92 +0,0 @@ -# marked(1) -- a javascript markdown parser - -## SYNOPSIS - -`marked` [`-o` ] [`-i` ] [`-s` ] [`-c` ] [`--help`] [`--version`] [`--tokens`] [`--no-clobber`] [`--pedantic`] [`--gfm`] [`--breaks`] [`--no-etc...`] [`--silent`] [filename] - -## DESCRIPTION - -marked is a full-featured javascript markdown parser, built for speed. -It also includes multiple GFM features. - -## EXAMPLES - -```sh -cat in.md | marked > out.html -``` - -```sh -echo "hello *world*" | marked -``` - -```sh -marked -o out.html -i in.md --gfm -``` - -```sh -marked --output="hello world.html" -i in.md --no-breaks -``` - -## OPTIONS - -* -o, --output [output file] -Specify file output. If none is specified, write to stdout. - -* -i, --input [input file] -Specify file input, otherwise use last argument as input file. -If no input file is specified, read from stdin. - -* -s, --string [markdown string] -Specify string input instead of a file. - -* -c, --config [config file] -Specify config file to use instead of the default `~/.marked.json` or `~/.marked.js` or `~/.marked/index.js`. - -* -t, --tokens -Output a token list instead of html. - -* -n, --no-clobber -Do not overwrite `output` if it exists. - -* --pedantic -Conform to obscure parts of markdown.pl as much as possible. -Don't fix original markdown bugs. - -* --gfm -Enable github flavored markdown. - -* --breaks -Enable GFM line breaks. Only works with the gfm option. - -* --no-breaks, -no-etc... -The inverse of any of the marked options above. - -* --silent -Silence error output. - -* -h, --help -Display help information. - -## CONFIGURATION - -For configuring and running programmatically. - -Example - -```js -import { Marked } from 'marked'; -const marked = new Marked({ gfm: true }); -marked.parse('*foo*'); -``` - -## BUGS - -Please report any bugs to . - -## LICENSE - -Copyright (c) 2011-2014, Christopher Jeffrey (MIT License). - -## SEE ALSO - -markdown(1), nodejs(1) diff --git a/tmp/node_modules/marked/marked.min.js b/tmp/node_modules/marked/marked.min.js deleted file mode 100644 index a91afe7..0000000 --- a/tmp/node_modules/marked/marked.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * marked v12.0.2 - a markdown parser - * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed) - * https://github.com/markedjs/marked - */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,(function(e){"use strict";function t(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function n(t){e.defaults=t}e.defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};const s=/[&<>"']/,r=new RegExp(s.source,"g"),i=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,l=new RegExp(i.source,"g"),o={"&":"&","<":"<",">":">",'"':""","'":"'"},a=e=>o[e];function c(e,t){if(t){if(s.test(e))return e.replace(r,a)}else if(i.test(e))return e.replace(l,a);return e}const h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function p(e){return e.replace(h,((e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const u=/(^|[^\[])\^/g;function k(e,t){let n="string"==typeof e?e:e.source;t=t||"";const s={replace:(e,t)=>{let r="string"==typeof t?t:t.source;return r=r.replace(u,"$1"),n=n.replace(e,r),s},getRegex:()=>new RegExp(n,t)};return s}function g(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch(e){return null}return e}const f={exec:()=>null};function d(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let s=!1,r=t;for(;--r>=0&&"\\"===n[r];)s=!s;return s?"|":" |"})).split(/ \|/);let s=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:x(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const s=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=s.length?e.slice(s.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=x(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=t[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,"\n $1");e=x(e.replace(/^ *>[ \t]?/gm,""),"\n");const n=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:s,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");const i=new RegExp(`^( {0,3}${n})((?:[\t ][^\\n]*)?(?:\\n|$))`);let l="",o="",a=!1;for(;e;){let n=!1;if(!(t=i.exec(e)))break;if(this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let s=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],h=0;this.options.pedantic?(h=2,o=s.trimStart()):(h=t[2].search(/[^ ]/),h=h>4?1:h,o=s.slice(h),h+=t[1].length);let p=!1;if(!s&&/^ *$/.test(c)&&(l+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),n=new RegExp(`^ {0,${Math.min(3,h-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),r=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:\`\`\`|~~~)`),i=new RegExp(`^ {0,${Math.min(3,h-1)}}#`);for(;e;){const a=e.split("\n",1)[0];if(c=a,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),r.test(c))break;if(i.test(c))break;if(t.test(c))break;if(n.test(e))break;if(c.search(/[^ ]/)>=h||!c.trim())o+="\n"+c.slice(h);else{if(p)break;if(s.search(/[^ ]/)>=4)break;if(r.test(s))break;if(i.test(s))break;if(n.test(s))break;o+="\n"+c}p||c.trim()||(p=!0),l+=a+"\n",e=e.substring(a.length+1),s=c.slice(h)}}r.loose||(a?r.loose=!0:/\n *\n *$/.test(l)&&(a=!0));let u,k=null;this.options.gfm&&(k=/^\[[ xX]\] /.exec(o),k&&(u="[ ] "!==k[0],o=o.replace(/^\[[ xX]\] +/,""))),r.items.push({type:"list_item",raw:l,task:!!k,checked:u,loose:!1,text:o,tokens:[]}),r.raw+=l}r.items[r.items.length-1].raw=l.trimEnd(),r.items[r.items.length-1].text=o.trimEnd(),r.raw=r.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));r.loose=n}if(r.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=d(t[1]),s=t[2].replace(/^\||\| *$/g,"").split("|"),r=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],i={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(const e of s)/^ *-+: *$/.test(e)?i.align.push("right"):/^ *:-+: *$/.test(e)?i.align.push("center"):/^ *:-+ *$/.test(e)?i.align.push("left"):i.align.push(null);for(const e of n)i.header.push({text:e,tokens:this.lexer.inline(e)});for(const e of r)i.rows.push(d(e,i.header.length).map((e=>({text:e,tokens:this.lexer.inline(e)}))));return i}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:c(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^
    /i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=x(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let s=0;s-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],s="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],s=e[3])}else s=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),b(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:s?s.replace(this.rules.inline.anyPunctuation,"$1"):s},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return b(n,e,n[0],this.lexer)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s)return;if(s[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(s[1]||s[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...s[0]].length-1;let r,i,l=n,o=0;const a="*"===s[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(a.lastIndex=0,t=t.slice(-1*e.length+n);null!=(s=a.exec(t));){if(r=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!r)continue;if(i=[...r].length,s[3]||s[4]){l+=i;continue}if((s[5]||s[6])&&n%3&&!((n+i)%3)){o+=i;continue}if(l-=i,l>0)continue;i=Math.min(i,i+l+o);const t=[...s[0]][0].length,a=e.slice(0,n+s.index+t+i);if(Math.min(n,i)%2){const e=a.slice(1,-1);return{type:"em",raw:a,text:e,tokens:this.lexer.inlineTokens(e)}}const c=a.slice(2,-2);return{type:"strong",raw:a,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),s=/^ /.test(e)&&/ $/.test(e);return n&&s&&(e=e.substring(1,e.length-1)),e=c(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=c(t[1]),n="mailto:"+e):(e=c(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if("@"===t[2])e=c(t[0]),n="mailto:"+e;else{let s;do{s=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??""}while(s!==t[0]);e=c(t[0]),n="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:c(t[0]),{type:"text",raw:t[0],text:e}}}}const m=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,y=/(?:[*+-]|\d{1,9}[.)])/,$=k(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,y).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),z=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,T=/(?!\s*\])(?:\\.|[^\[\]\\])+/,R=k(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",T).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),_=k(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,y).getRegex(),A="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",S=/|$))/,I=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",S).replace("tag",A).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),E=k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),q={blockquote:k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",E).getRegex(),code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,def:R,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:m,html:I,lheading:$,list:_,newline:/^(?: *(?:\n|$))+/,paragraph:E,table:f,text:/^[^\n]+/},Z=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),L={...q,table:Z,paragraph:k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Z).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex()},P={...q,html:k("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",S).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:f,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(z).replace("hr",m).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Q=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,v=/^( {2,}|\\)\n(?!\s*$)/,B="\\p{P}\\p{S}",C=k(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,B).getRegex(),M=k(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,B).getRegex(),O=k("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,B).getRegex(),D=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,B).getRegex(),j=k(/\\([punct])/,"gu").replace(/punct/g,B).getRegex(),H=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),U=k(S).replace("(?:--\x3e|$)","--\x3e").getRegex(),X=k("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",U).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),F=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,N=k(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",F).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),G=k(/^!?\[(label)\]\[(ref)\]/).replace("label",F).replace("ref",T).getRegex(),J=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",T).getRegex(),K={_backpedal:f,anyPunctuation:j,autolink:H,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:v,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:f,emStrongLDelim:M,emStrongRDelimAst:O,emStrongRDelimUnd:D,escape:Q,link:N,nolink:J,punctuation:C,reflink:G,reflinkSearch:k("reflink|nolink(?!\\()","g").replace("reflink",G).replace("nolink",J).getRegex(),tag:X,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\t+" ".repeat(n.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.space(e))e=e.substring(n.raw.length),1===n.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?t.push(n):(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(s.raw+="\n"+n.raw,s.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startBlock.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(n=this.tokenizer.paragraph(r)))s=t[t.length-1],i&&"paragraph"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n),i=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,s,r,i,l,o,a=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(a));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(a));)a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.anyPunctuation.exec(a));)a=a.slice(0,i.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(l||(o=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,a,o))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startInline.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(r))e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(o=n.raw.slice(-1)),l=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(n.raw.length),t.push(n);return t}}class se{options;constructor(t){this.options=t||e.defaults}code(e,t,n){const s=(t||"").match(/^\S*/)?.[0];return e=e.replace(/\n$/,"")+"\n",s?'
    '+(n?e:c(e,!0))+"
    \n":"
    "+(n?e:c(e,!0))+"
    \n"}blockquote(e){return`
    \n${e}
    \n`}html(e,t){return e}heading(e,t,n){return`${e}\n`}hr(){return"
    \n"}list(e,t,n){const s=t?"ol":"ul";return"<"+s+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}listitem(e,t,n){return`
  • ${e}
  • \n`}checkbox(e){return"'}paragraph(e){return`

    ${e}

    \n`}table(e,t){return t&&(t=`${t}`),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return`\n${e}\n`}tablecell(e,t){const n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return"
    "}del(e){return`${e}`}link(e,t,n){const s=g(e);if(null===s)return n;let r='
    ",r}image(e,t,n){const s=g(e);if(null===s)return n;let r=`${n}0&&"paragraph"===n.tokens[0].type?(n.tokens[0].text=e+" "+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&"text"===n.tokens[0].tokens[0].type&&(n.tokens[0].tokens[0].text=e+" "+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:"text",text:e+" "}):o+=e+" "}o+=this.parse(n.tokens,i),l+=this.renderer.listitem(o,r,!!s)}n+=this.renderer.list(l,t,s);continue}case"html":{const e=r;n+=this.renderer.html(e.text,e.block);continue}case"paragraph":{const e=r;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let i=r,l=i.tokens?this.parseInline(i.tokens):i.text;for(;s+1{const r=e[s].flat(1/0);n=n.concat(this.walkTokens(r,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach((e=>{const n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){const n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let s=e.renderer.apply(this,t);return!1===s&&(s=n.apply(this,t)),s}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");const n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),n.extensions=t),e.renderer){const t=this.defaults.renderer||new se(this.defaults);for(const n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.renderer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n||""}}n.renderer=t}if(e.tokenizer){const t=this.defaults.tokenizer||new w(this.defaults);for(const n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;const s=n,r=e.tokenizer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){const t=this.defaults.hooks||new le;for(const n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.hooks[s],i=t[s];le.passThroughHooks.has(n)?t[s]=e=>{if(this.defaults.async)return Promise.resolve(r.call(t,e)).then((e=>i.call(t,e)));const n=r.call(t,e);return i.call(t,n)}:t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){const t=this.defaults.walkTokens,s=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(s.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}})),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ne.lex(e,t??this.defaults)}parser(e,t){return ie.parse(e,t??this.defaults)}#e(e,t){return(n,s)=>{const r={...s},i={...this.defaults,...r};!0===this.defaults.async&&!1===r.async&&(i.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),i.async=!0);const l=this.#t(!!i.silent,!!i.async);if(null==n)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof n)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(i.hooks&&(i.hooks.options=i),i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(n):n).then((t=>e(t,i))).then((e=>i.hooks?i.hooks.processAllTokens(e):e)).then((e=>i.walkTokens?Promise.all(this.walkTokens(e,i.walkTokens)).then((()=>e)):e)).then((e=>t(e,i))).then((e=>i.hooks?i.hooks.postprocess(e):e)).catch(l);try{i.hooks&&(n=i.hooks.preprocess(n));let s=e(n,i);i.hooks&&(s=i.hooks.processAllTokens(s)),i.walkTokens&&this.walkTokens(s,i.walkTokens);let r=t(s,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return l(e)}}}#t(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+c(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}}const ae=new oe;function ce(e,t){return ae.parse(e,t)}ce.options=ce.setOptions=function(e){return ae.setOptions(e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.getDefaults=t,ce.defaults=e.defaults,ce.use=function(...e){return ae.use(...e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.walkTokens=function(e,t){return ae.walkTokens(e,t)},ce.parseInline=ae.parseInline,ce.Parser=ie,ce.parser=ie.parse,ce.Renderer=se,ce.TextRenderer=re,ce.Lexer=ne,ce.lexer=ne.lex,ce.Tokenizer=w,ce.Hooks=le,ce.parse=ce;const he=ce.options,pe=ce.setOptions,ue=ce.use,ke=ce.walkTokens,ge=ce.parseInline,fe=ce,de=ie.parse,xe=ne.lex;e.Hooks=le,e.Lexer=ne,e.Marked=oe,e.Parser=ie,e.Renderer=se,e.TextRenderer=re,e.Tokenizer=w,e.getDefaults=t,e.lexer=xe,e.marked=ce,e.options=he,e.parse=fe,e.parseInline=ge,e.parser=de,e.setOptions=pe,e.use=ue,e.walkTokens=ke})); diff --git a/tmp/node_modules/marked/package.json b/tmp/node_modules/marked/package.json deleted file mode 100644 index 733069d..0000000 --- a/tmp/node_modules/marked/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "marked", - "description": "A markdown parser built for speed", - "author": "Christopher Jeffrey", - "version": "12.0.2", - "type": "module", - "main": "./lib/marked.cjs", - "module": "./lib/marked.esm.js", - "browser": "./lib/marked.umd.js", - "types": "./lib/marked.d.ts", - "bin": { - "marked": "bin/marked.js" - }, - "man": "./man/marked.1", - "files": [ - "bin/", - "lib/", - "man/", - "marked.min.js" - ], - "exports": { - ".": { - "import": { - "types": "./lib/marked.d.ts", - "default": "./lib/marked.esm.js" - }, - "default": { - "types": "./lib/marked.d.cts", - "default": "./lib/marked.cjs" - } - }, - "./bin/marked": "./bin/marked.js", - "./marked.min.js": "./marked.min.js", - "./package.json": "./package.json" - }, - "repository": "git://github.com/markedjs/marked.git", - "homepage": "https://marked.js.org", - "bugs": { - "url": "http://github.com/markedjs/marked/issues" - }, - "license": "MIT", - "keywords": [ - "markdown", - "markup", - "html" - ], - "tags": [ - "markdown", - "markup", - "html" - ], - "devDependencies": { - "@markedjs/testutils": "12.0.0-0", - "@arethetypeswrong/cli": "^0.15.3", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^11.1.6", - "@semantic-release/commit-analyzer": "^12.0.0", - "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "^10.0.3", - "@semantic-release/npm": "^12.0.0", - "@semantic-release/release-notes-generator": "^13.0.0", - "@typescript-eslint/eslint-plugin": "^7.6.0", - "@typescript-eslint/parser": "^7.4.0", - "cheerio": "1.0.0-rc.12", - "commonmark": "0.31.0", - "cross-env": "^7.0.3", - "dts-bundle-generator": "^9.3.1", - "eslint": "^8.57.0", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-n": "^16.6.2", - "eslint-plugin-promise": "^6.1.1", - "highlight.js": "^11.9.0", - "markdown-it": "14.1.0", - "marked-highlight": "^2.1.1", - "marked-man": "^2.0.0", - "node-fetch": "^3.3.2", - "recheck": "^4.4.5", - "rollup": "^4.14.3", - "semantic-release": "^23.0.7", - "titleize": "^4.0.0", - "ts-expect": "^1.3.0", - "typescript": "5.4.5" - }, - "scripts": { - "test": "npm run build && npm run test:specs && npm run test:unit", - "test:all": "npm test && npm run test:umd && npm run test:types && npm run test:lint", - "test:unit": "node --test --test-reporter=spec test/unit/*.test.js", - "test:specs": "node --test --test-reporter=spec test/run-spec-tests.js", - "test:lint": "eslint .", - "test:redos": "node test/recheck.js > vuln.js", - "test:types": "tsc --project tsconfig-type-test.json && attw -P --exclude-entrypoints ./bin/marked ./marked.min.js", - "test:umd": "node test/umd-test.js", - "test:update": "node test/update-specs.js", - "rules": "node test/rules.js", - "bench": "npm run build && node test/bench.js", - "lint": "eslint --fix .", - "build:reset": "git checkout upstream/master lib/marked.cjs lib/marked.umd.js lib/marked.esm.js marked.min.js", - "build": "npm run rollup && npm run build:types && npm run build:man", - "build:docs": "npm run build && node docs/build.js", - "build:types": "tsc && dts-bundle-generator --project tsconfig.json -o lib/marked.d.ts src/marked.ts && dts-bundle-generator --project tsconfig.json -o lib/marked.d.cts src/marked.ts", - "build:man": "marked-man man/marked.1.md > man/marked.1", - "rollup": "rollup -c rollup.config.js" - }, - "engines": { - "node": ">= 18" - } -} diff --git a/tmp/package-lock.json b/tmp/package-lock.json deleted file mode 100644 index 25d53ae..0000000 --- a/tmp/package-lock.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "tmp", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "tmp", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "marked": "^12.0.2" - } - }, - "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - } - } -} diff --git a/tmp/package.json b/tmp/package.json deleted file mode 100644 index 5bea29e..0000000 --- a/tmp/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "tmp", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "marked": "^12.0.2" - } -} diff --git a/tmp/tabulator-5.6.1.zip b/tmp/tabulator-5.6.1.zip deleted file mode 100644 index 6edd37a..0000000 Binary files a/tmp/tabulator-5.6.1.zip and /dev/null differ diff --git a/tmp/tabulator-5.6.1/.babelrc.json b/tmp/tabulator-5.6.1/.babelrc.json deleted file mode 100644 index e7059e5..0000000 --- a/tmp/tabulator-5.6.1/.babelrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": [["@babel/env", { "modules": false }]], -} diff --git a/tmp/tabulator-5.6.1/.editorconfig b/tmp/tabulator-5.6.1/.editorconfig deleted file mode 100644 index 4ef4194..0000000 --- a/tmp/tabulator-5.6.1/.editorconfig +++ /dev/null @@ -1,6 +0,0 @@ -root = true - -[*] -indent_style = tab -end_of_line = lf -insert_final_newline = true diff --git a/tmp/tabulator-5.6.1/.eslintignore b/tmp/tabulator-5.6.1/.eslintignore deleted file mode 100644 index aa58ada..0000000 --- a/tmp/tabulator-5.6.1/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -.eslintrc.js -dist -examples diff --git a/tmp/tabulator-5.6.1/.eslintrc.js b/tmp/tabulator-5.6.1/.eslintrc.js deleted file mode 100644 index 05ab7d4..0000000 --- a/tmp/tabulator-5.6.1/.eslintrc.js +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = { - "env": { - "browser": true, - "es2021": true, - "node": true, - "amd": true, - }, - globals: { - 'luxon': 'readonly', - 'XLSX': 'readonly', - 'jspdf': 'readonly' - }, - "extends": "eslint:recommended", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "rules": { - "semi": "error", - "indent": ["error", "tab", {VariableDeclarator:0, "SwitchCase": 1}], - "no-unused-vars": ["warn", { "vars": "all", "args": "none", "ignoreRestSiblings": false }], - "no-fallthrough": "off", - "no-inner-declarations": "off", - "no-prototype-builtins": "off", - "no-empty": ["error", { "allowEmptyCatch": true }], - // "curly": "error", - } -} diff --git a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/bug_report.md b/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index b01f645..0000000 --- a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -name: Bug report -about: Report a bug with Tabulator -title: '' -labels: Possible Bug -assignees: '' - ---- - - - -**Describe the bug** -A clear and concise description of what the bug is. - -**Tabulator Info** -- Which version of Tabulator are you using? - -**Working Example** -YOU MUST include a link to a JS Fiddle or Codepen that demonstrates the problem, it is very hard to diagnose an issue from a simple description. - - -**To Reproduce** -A step by step guide to recreate the issue in your JS Fiddle or Codepen: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/documentation.md b/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/documentation.md deleted file mode 100644 index 6ec6e31..0000000 --- a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/documentation.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: Documentation -about: Report an issue with the documentation on the tabulator.info website -title: '' -labels: '' -assignees: '' - ---- - -**Website Page** -A link to the page with the issue - -**Describe the issue** -A clear and concise description of what the issue is. diff --git a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/feature_request.md b/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 608a521..0000000 --- a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: Suggested Feature -assignees: '' - ---- - - - -*Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/question.md b/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/question.md deleted file mode 100644 index d81f9b9..0000000 --- a/tmp/tabulator-5.6.1/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: Question (QUESTIONS MUST BE ASKED ON STACK OVERFLOW!!! DO NOT CREATE AN ISSUE!!!) -about: Please ask questions on Stack Overflow, NOT on GitHub -title: '' -labels: Invalid, Question - Ask On Stack Overflow -assignees: '' - ---- - -Please ask questions on www.stackoverflow.com the issues list is now reserved for feature requests and bug reports. - -Questions asked in the issue list will be automatically closed! diff --git a/tmp/tabulator-5.6.1/.github/workflows/bad-files-check.yml b/tmp/tabulator-5.6.1/.github/workflows/bad-files-check.yml deleted file mode 100644 index 4ccebd1..0000000 --- a/tmp/tabulator-5.6.1/.github/workflows/bad-files-check.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Bad files check -on: - pull_request: - -jobs: - check: - name: Dist check - runs-on: ubuntu-latest - steps: - - name: Check out Git repository - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - - name: Get specific changed files in dist - id: changed-files-specific - uses: tj-actions/changed-files@v17.3 - with: - files: | - dist - - - name: Check file existence - id: check_files - uses: andstor/file-existence-action@v1 - with: - files: "yarn.lock" - - - name: Fail if dist files changed - if: steps.changed-files-specific.outputs.any_changed == 'true' - run: | - echo "Oops! Looks like you modified some files in dist/. Please remove them from your PR, thanks!" - exit 1 - - - name: Fail if yarn lock exists - if: steps.check_files.outputs.files_exists == 'true' - run: | - echo "Oops! Looks like you checked in a yarn.lock file, we use npm and package-lock.json. Please remove it from your PR, thanks!" - exit 1 diff --git a/tmp/tabulator-5.6.1/.github/workflows/lint-and-test.yml b/tmp/tabulator-5.6.1/.github/workflows/lint-and-test.yml deleted file mode 100644 index ef85a47..0000000 --- a/tmp/tabulator-5.6.1/.github/workflows/lint-and-test.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Lint and build -on: - # Trigger the workflow on push or pull request, - # but only for the main branch - push: - branches: - - main - - master - pull_request: - -jobs: - linting: - name: Linting - runs-on: ubuntu-latest - steps: - - name: Check out Git repository - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v1 - with: - node-version: 14 - - - name: Install dependencies - run: npm ci - - - name: Lint - run: npm run lint - - - name: Build - run: npm run build \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/.gitignore b/tmp/tabulator-5.6.1/.gitignore deleted file mode 100644 index 013f31d..0000000 --- a/tmp/tabulator-5.6.1/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.sublime-project -*.sublime-workspace - -node_modules/ -examples/ -npm-debug.log \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/CODE_OF_CONDUCT.md b/tmp/tabulator-5.6.1/CODE_OF_CONDUCT.md deleted file mode 100644 index 2599d16..0000000 --- a/tmp/tabulator-5.6.1/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/tmp/tabulator-5.6.1/CONTRIBUTING.md b/tmp/tabulator-5.6.1/CONTRIBUTING.md deleted file mode 100644 index 8332854..0000000 --- a/tmp/tabulator-5.6.1/CONTRIBUTING.md +++ /dev/null @@ -1,22 +0,0 @@ -## Getting Help -If you need help with any Tabulator features, please ask a question on [Stack Overflow](https://stackoverflow.com/questions/tagged/tabulator) - -Further help resources can be found in the [Community Help Guide](http://tabulator.info/community#help) and the [Documentation Section](http://tabulator.info/) of the Tabulator website - -**QUESTIONS MUST NOT BE ASKED IN THE ISSUE TRACKER, IT IS FOR BUG REPORTS AND FEATURE REQUESTS ONLY** - -## Reporting A Bug -Please read the [Bug Reporting Guide](http://tabulator.info/community#bug) before creating any Bug Report issues on this repo. - -**BUG REPORTS WILL NOT BE ACCEPTED WITHOUT A [JS Fiddle](https://jsfiddle.net/) or [Codepen](https://codepen.io/) TO DEMONSTRATE THE ISSUE** - - -## Requesting A New Feature -Please read the [Feature Request Guide](http://tabulator.info/community#feature) before creating any Feature Request issues on this repo. - -## Contributing To Tabulator -There are many ways that you can contribute to Tabulator. Checkout the [Community Contribution Guide](http://tabulator.info/community#contribute) to find out how you can start contributing - - -## Pull Requests -If you are interested in contributing code to the Tabulator repo, please read the [Pull Request Guide](http://tabulator.info/community#pullrequest) before submitting your first PR diff --git a/tmp/tabulator-5.6.1/LICENSE b/tmp/tabulator-5.6.1/LICENSE deleted file mode 100644 index 85fb142..0000000 --- a/tmp/tabulator-5.6.1/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2024 Oli Folkerd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/README.md b/tmp/tabulator-5.6.1/README.md deleted file mode 100644 index e2466f6..0000000 --- a/tmp/tabulator-5.6.1/README.md +++ /dev/null @@ -1,76 +0,0 @@ -

    - -

    - -

    - -

    - -

    -An easy to use interactive table generation JavaScript library -

    - -

    -Full documentation & demos can be found at: http://tabulator.info -

    - -*** -![Tabulator Table](http://tabulator.info/images/tabulator_table.jpg) -*** - - -Features -================================ -Tabulator allows you to create interactive tables in seconds from any HTML Table, Javascript Array or JSON formatted data. - -Simply include the library and the css in your project and you're away! - -Tabulator is packed with useful features including: - -![Tabulator Features](http://olifolkerd.github.io/tabulator/images/featurelist_share.png) - - -Frontend Framework Support -================================ -Tabulator is built to work with all the major front end JavaScript frameworks including React, Angular and Vue. - - -Setup -================================ -Setting up tabulator could not be simpler. - -Include the library and the css -```html - - -``` - -Create an element to hold the table -```html -
    -``` - -Turn the element into a tabulator with some simple javascript -```js -var table = new Tabulator("#example-table", {}); -``` - - -### Bower Installation -To get Tabulator via the Bower package manager, open a terminal in your project directory and run the following command: -``` -bower install tabulator --save -``` - -### NPM Installation -To get Tabulator via the NPM package manager, open a terminal in your project directory and run the following command: -``` -npm install tabulator-tables --save -``` - -### CDN - UNPKG -To access Tabulator directly from the UNPKG CDN servers, include the following two lines at the start of your project, instead of the locally hosted versions: -```html - - -``` diff --git a/tmp/tabulator-5.6.1/bower.json b/tmp/tabulator-5.6.1/bower.json deleted file mode 100644 index e64601e..0000000 --- a/tmp/tabulator-5.6.1/bower.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "tabulator", - "main": "dist/js/tabulator.js", - "version": "5.6.1", - "description": "Interactive table generation JavaScript library", - "keywords": [ - "table", - "grid", - "datagrid", - "tabulator", - "editable", - "cookie", - "jquery", - "jqueryui", - "sort", - "format", - "resizable", - "list", - "scrollable", - "ajax", - "json", - "widget", - "jquery", - "react", - "angular", - "vue" - ], - "authors": [ - "Oli Folkerd" - ], - "license": "MIT", - "homepage": "https://github.com/olifolkerd/tabulator", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/tmp/tabulator-5.6.1/build/Bundler.js b/tmp/tabulator-5.6.1/build/Bundler.js deleted file mode 100644 index 12856c8..0000000 --- a/tmp/tabulator-5.6.1/build/Bundler.js +++ /dev/null @@ -1,190 +0,0 @@ -import { nodeResolve } from "@rollup/plugin-node-resolve"; -import { terser } from "rollup-plugin-terser"; - -const license = require("rollup-plugin-license"); -const globby = require("globby"); -const fs = require("fs-extra"); - -import postcss from "rollup-plugin-postcss"; - -export default class Bundler{ - - constructor(version, env){ - this.bundles = []; - - this.env = env; - this.version = "/* Tabulator v" + version + " (c) Oliver Folkerd <%= moment().format('YYYY') %> */"; - } - - _suppressUnnecessaryWarnings(warn, defaultHandler){ - const ignoredCodes = { - "FILE_NAME_CONFLICT": true, - "CIRCULAR_DEPENDENCY": this._suppressCircularDependencyWarnings, - }; - - var suppressed = false, - codeHandler = ignoredCodes[warn.code]; - - if(codeHandler){ - suppressed = typeof codeHandler === "function" ? codeHandler(warn) : codeHandler; - } - - if(!suppressed){ - defaultHandler(warn); - } - } - - _suppressCircularDependencyWarnings(warn){ - const ignoredCircularFiles = [ - "Column.js", - "Tabulator.js", - ]; - - return ignoredCircularFiles.some(file => warn.importer.includes(file)); - } - - bundle(){ - if(this.env){ - this.watch(this.env); - }else{ - this.build(); - } - - return this.bundles; - } - - watch(env){ - console.log("Building Dev Package Bundles: ", env); - switch(env){ - case "css": - this.bundleCSS(false); - break; - - case "esm": - this.bundleESM(false); - break; - - case "umd": - this.bundleUMD(false); - break; - - case "wrappers": - this.buildWrappers(); - break; - - default: - this.bundleCSS(false); - this.bundleESM(false); - break; - } - } - - build(){ - console.log("Clearing Dist Files"); - - this.clearDist(); - - console.log("Building Wrappers"); - - this.buildWrappers(); - - console.log("Building Production Package Bundles"); - - this.bundleCSS(false); - this.bundleCSS(true); - - this.bundleESM(false); - this.bundleESM(true); - - this.bundleUMD(false); - this.bundleUMD(true); - } - - clearDist(){ - fs.emptyDirSync("./dist"); - } - - buildWrappers(){ - var builds = ["jquery_wrapper.js"]; - - builds.forEach((build) => { - fs.copySync("./src/js/builds/" + build, "./dist/js/" + build); - }); - } - - bundleCSS(minify){ - this.bundles = this.bundles.concat(globby.sync("./src/scss/**/tabulator*.scss").map(inputFile => { - - var file = inputFile.split("/"); - file = file.pop().replace(".scss", (minify ? ".min" : "") + ".css"); - - return { - input: inputFile, - output: { - file: "./dist/css/" + file, - format: "es", - }, - plugins: [ - postcss({ - modules: false, - extract: true, - minimize: minify, - sourceMap: true, - plugins: [require('postcss-prettify')] - }), - ], - onwarn:this._suppressUnnecessaryWarnings.bind(this), - }; - })); - } - - bundleESM(minify){ - this.bundles.push({ - input:"src/js/builds/esm.js", - plugins: [ - nodeResolve(), - minify ? terser() : null, - license({ - banner: { - commentStyle:"none", - content:this.version, - }, - }), - ], - output: [ - { - file: "dist/js/tabulator_esm" + (minify ? ".min" : "") + ".js", - format: "esm", - exports: "named", - sourcemap: true, - }, - ], - onwarn:this._suppressUnnecessaryWarnings.bind(this), - }); - } - - bundleUMD(minify){ - this.bundles.push({ - input:"src/js/builds/usd.js", - plugins: [ - nodeResolve(), - minify ? terser() : null, - license({ - banner: { - commentStyle:"none", - content:this.version, - }, - }), - ], - output: { - file: "dist/js/tabulator" + (minify ? ".min" : "") + ".js", - format: "umd", - name: "Tabulator", - esModule: false, - exports: "default", - sourcemap: true, - }, - onwarn:this._suppressUnnecessaryWarnings.bind(this), - }); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/build/rollup.js b/tmp/tabulator-5.6.1/build/rollup.js deleted file mode 100644 index 53cb2cc..0000000 --- a/tmp/tabulator-5.6.1/build/rollup.js +++ /dev/null @@ -1,6 +0,0 @@ -import Bundler from "./Bundler.js"; -const pkg = require("../package.json"); - -var bundler = new Bundler(pkg.version, process.env.TARGET); - -module.exports = bundler.bundle(); diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator.css b/tmp/tabulator-5.6.1/dist/css/tabulator.css deleted file mode 100644 index 9a585b8..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator.css +++ /dev/null @@ -1,1277 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #999; - background-color: #888; - font-size: 14px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: #e6e6e6; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: #e6e6e6; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #cdcdcd; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #cdcdcd; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: #f3f3f3 !important; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #f3f3f3 !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #e2e2e2 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #aaa; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #aaa; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #2975DD; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #2975DD; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #2975DD; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #999; - background-color: #e6e6e6; - color: #555; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: #f3f3f3 !important; - border-bottom: 1px solid #aaa; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: #f3f3f3 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #EFEFEF; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #aaa; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #9ABCEA; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #aaa; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #aaa; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #EFEFEF; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #aaa; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #aaa; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #aaa; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #aaa; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -/*# sourceMappingURL=tabulator.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator.css.map deleted file mode 100644 index bed5b52..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"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","file":"tabulator.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #999;\n background-color: #888;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #e6e6e6;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #cdcdcd;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #cdcdcd; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: #f3f3f3 !important;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #f3f3f3 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #e2e2e2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #aaa;\n border-top: 1px solid #aaa;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #EFEFEF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #aaa;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #aaa;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #EFEFEF; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #aaa;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #aaa; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #aaa;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator.min.css deleted file mode 100644 index d042790..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{background-color:#888;border:1px solid #999;font-size:14px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#e6e6e6;border-bottom:1px solid #999;box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#e6e6e6;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#cdcdcd;border:1px solid #999;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#cdcdcd;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#e2e2e2!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#e6e6e6;border-top:1px solid #999;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:22px;position:relative}.tabulator-row.tabulator-row-even{background-color:#efefef}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #aaa;border-top:1px solid #aaa;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #aaa;border-top:1px solid #aaa;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #aaa;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #aaa;border-bottom-left-radius:1px;border-left:2px solid #aaa;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:14px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#efefef;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#aaa;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:14px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #aaa;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #aaa;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #aaa;border-bottom-left-radius:1px;border-left:2px solid #aaa;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px} -/*# sourceMappingURL=tabulator.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator.min.css.map deleted file mode 100644 index b573f7f..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"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","file":"tabulator.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #999;\n background-color: #888;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #e6e6e6;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #cdcdcd;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #cdcdcd; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: #f3f3f3 !important;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #f3f3f3 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #e2e2e2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #aaa;\n border-top: 1px solid #aaa;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #EFEFEF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #aaa;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #aaa;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #EFEFEF; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #aaa;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #aaa; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #aaa;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.css deleted file mode 100644 index 7908565..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.css +++ /dev/null @@ -1,1480 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #ddd; - background-color: #fff; - font-size: 14px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #ddd; - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #ddd; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #e6e6e6; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: white !important; - border-top: 1px solid #ddd; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #ececec !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #2975DD; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #2975DD; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #2975DD; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #ddd; - background-color: #e6e6e6; - color: #555; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: #f3f3f3 !important; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: #f3f3f3 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #ddd; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #ddd; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #f9f9f9; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #f5f5f5; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #ddd; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #9ABCEA; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #ddd; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #f9f9f9; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #ddd; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #ddd; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #ddd; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator { - background-color: #fff; - margin-bottom: 20px; - border: none; -} - -.tabulator .tabulator-header { - border-bottom: 2px solid #ddd; - background-color: #fff; - color: inherit; -} - -.tabulator .tabulator-header .tabulator-col { - background-color: #fff; - border-right: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - padding: 8px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - border-top: 1px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - width: 100%; - border-bottom: 1px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder span { - color: #000; -} - -.tabulator .tabulator-tableholder .tabulator-table { - color: inherit; -} - -.tabulator .tabulator-footer { - border-top: 2px solid #ddd; - background: inherit; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; -} - -.tabulator .tabulator-footer .tabulator-paginator { - color: inherit; -} - -.tabulator.table-striped .tabulator-row.tabulator-row-even { - background-color: #f9f9f9; -} - -.tabulator.table-bordered { - border: 1px solid #ddd; -} - -.tabulator.table-bordered .tabulator-header .tabulator-col { - border-right: 1px solid #ddd; -} - -.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid #ddd; -} - -.tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content { - padding: 5px; -} - -.tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row { - min-height: 24px; -} - -.tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 5px; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active { - background: #f5f5f5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.success { - background: #dff0d8 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.info { - background: #d9edf7 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning { - background: #fcf8e3 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.danger { - background: #f2dede !important; -} - -.tabulator-row { - min-height: 30px; - border-bottom: 1px solid #ddd; -} - -.tabulator-row.tabulator-row-even { - background-color: transparent; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #f5f5f5 !important; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC !important; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell { - padding: 8px; - border-right: none; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - border: 1px solid #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #333; -} - -.tabulator-row.tabulator-group { - background: #fafafa; -} - -.tabulator-row.tabulator-group span { - color: #666; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - color: inherit; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-notice { - color: inherit; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - color: inherit; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - border: none; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-print-table-group { - background: #fafafa; -} - -.tabulator-print-table .tabulator-print-table-group span { - color: #666; -} - -.tabulator-print-table .tabulator-data-tree-control { - border: 1px solid #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #333; -} - -/*# sourceMappingURL=tabulator_bootstrap3.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.css.map deleted file mode 100644 index 258f00e..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap3.scss"],"names":[],"mappings":"AAAA;EACE,kBAAkB;EAClB,sBAAsB;EACtB,sBAAsB;EACtB,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,gCAAgC;EAChC,6BAA6B;EAC7B,4BAA4B;EAC5B,2BAA2B;EAC3B,wBAAwB;AAAE;;AAC1B;EACE,eAAe;AAAE;;AACnB;EACE,qBAAqB;AAAE;;AACzB;EACE,iBAAiB;AAAE;;AACrB;EACE,iBAAiB;AAAE;;AACrB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,WAAW;EACX,6BAA6B;EAC7B,sBAAsB;EACtB,WAAW;EACX,iBAAiB;EACjB,mBAAmB;EACnB,gBAAgB;EAChB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;EACpB,aAAa;AAAE;;AACf;EACE,aAAa;AAAE;;AACjB;EACE,kBAAkB;EAClB,gBAAgB;AAAE;;AAClB;EACE,qBAAqB;AAAE;;AAC3B;EACE,oBAAoB;EACpB,kBAAkB;EAClB,sBAAsB;EACtB,sBAAsB;EACtB,2BAA2B;EAC3B,4BAA4B;EAC5B,gBAAgB;EAChB,gBAAgB;EAChB,sBAAsB;EACtB,gBAAgB;AAAE;;AAClB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,mBAAmB;EACnB,oBAAoB;AAAE;;AACxB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,sBAAsB;EACtB,kBAAkB;EAClB,YAAY;AAAE;;AACd;EACE,cAAc;AAAE;;AAChB;EACE,eAAe;EACf,WAAW;AAAE;;AACjB;EACE,kBAAkB;AAAE;;AACtB;EACE,sBAAsB;EACtB,WAAW;EACX,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,sBAAsB;AAAE;;AACxB;EACE,mBAAmB;EACnB,sBAAsB;AAAE;;AAC1B;EACE,sBAAsB;EACtB,WAAW;EACX,sBAAsB;EACtB,YAAY;EACZ,gBAAgB;AAAE;;AACpB;EACE,wBAAwB;AAAE;;AAC9B;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,UAAU;AAAE;;AACZ;EACE,QAAQ;EACR,SAAS;EACT,kCAAkC;EAClC,mCAAmC;EACnC,6BAA6B;AAAE;;AACrC;EACE,kBAAkB;EAClB,aAAa;EACb,0BAA0B;EAC1B,gBAAgB;EAChB,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,eAAe;EACf,WAAW;EACX,kBAAkB;AAAE;;AACpB;EACE,uBAAuB;AAAE;;AAC3B;EACE,eAAe;AAAE;;AACnB;EACE,QAAQ;EACR,SAAS;AAAE;;AACf;EACE,mBAAmB;AAAE;;AACvB;EACE;IACE,eAAe;IACf,yBAAyB;EAAE;AAAE;;AACjC;EACE,WAAW;AAAE;;AACb;EACE;IACE,eAAe;IACf,6BAA6B;EAAE;AAAE;;AACrC;EACE,gBAAgB;EAChB,6BAA6B;AAAE;;AACnC;EACE,WAAW;AAAE;;AACb;EACE;IACE,eAAe;IACf,6BAA6B;EAAE;AAAE;;AACrC;EACE,gBAAgB;EAChB,6BAA6B;AAAE;;AACnC;EACE,WAAW;AAAE;;AACb;EACE;IACE,eAAe;IACf,0BAA0B;EAAE;AAAE;;AAClC;EACE,mBAAmB;EACnB,0BAA0B;EAC1B,WAAW;AAAE;;AACjB;EACE,yBAAyB;EACzB,uBAAuB;EACvB,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AAAE;;AAC3B;EACE,yBAAyB;AAAE;;AAC7B;EACE,gBAAgB;EAChB,iBAAiB;AAAE;;AACrB;EACE,gBAAgB;EAChB,oBAAoB;AAAE;;AACxB;EACE,uBAAuB;EACvB,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,YAAY;AAAE;;AAClB;EACE,gBAAgB;EAChB,OAAO;EACP,WAAW;AAAE;;AACb;EACE,4BAA4B;AAAE;;AAChC;EACE,2BAA2B;AAAE;;AACjC;EACE,sBAAsB;EACtB,qBAAqB;EACrB,4BAA4B;EAC5B,0BAA0B;EAC1B,6BAA6B;AAAE;;AAC/B;EACE,4BAA4B;AAAE;;AAC9B;EACE,aAAa;AAAE;;AACrB;EACE,qBAAqB;AAAE;;AACvB;EACE,aAAa;AAAE;;AACrB;EACE,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,cAAc;EACd,iCAAiC;AAAE;;AACnC;EACE,aAAa;AAAE;;AACjB;EACE,sBAAsB;EACtB,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,WAAW;AAAE;;AACb;EACE,gBAAgB;AAAE;;AACpB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,iBAAiB;EACjB,eAAe;EACf,mBAAmB;AAAE;;AACzB;EACE,kBAAkB;EAClB,qBAAqB;EACrB,sBAAsB;EACtB,mBAAmB;EACnB,iBAAiB;EACjB,WAAW;AAAE;;AACb;EACE,iBAAiB;EACjB,8BAA8B;AAAE;;AAChC;EACE,6BAA6B;AAAE;;AACjC;EACE,0BAA0B;AAAE;;AAClC;EACE,kBAAkB;EAClB,QAAQ;EACR,WAAW;EACX,oBAAoB;AAAE;;AACtB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,yBAAyB;AAAE;;AAC3B;EACE,WAAW;EACX,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,UAAU;EACV,WAAW;EACX,yBAAyB;EACzB,oBAAoB;AAAE;;AAC1B;EACE,kBAAkB;EAClB,sBAAsB;EACtB,yBAAyB;AAAE;;AACjC;EACE,0BAA0B;EAC1B,yBAAyB;EACzB,WAAW;EACX,iBAAiB;EACjB,mBAAmB;EACnB,iBAAiB;EACjB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;AAAE;;AACtB;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,8BAA8B;EAC9B,iBAAiB;AAAE;;AACnB;EACE,aAAa;AAAE;;AACnB;EACE,sBAAsB;EACtB,WAAW;EACX,gBAAgB;EAChB,8BAA8B;EAC9B,6BAA6B;EAC7B,0BAA0B;EAC1B,gBAAgB;AAAE;;AAClB;EACE,qBAAqB;EACrB,8BAA8B;AAAE;;AAChC;EACE,aAAa;AAAE;;AACnB;EACE,mBAAmB;EACnB,mBAAmB;AAAE;;AACzB;EACE,iBAAiB;AAAE;;AACrB;EACE,mBAAmB;AAAE;;AACvB;EACE,OAAO;EACP,iBAAiB;EACjB,WAAW;EACX,oBAAoB;EACpB,oBAAoB;EACpB,kBAAkB;AAAE;;AACtB;EACE,qBAAqB;EACrB,aAAa;EACb,gBAAgB;EAChB,sBAAsB;EACtB,kBAAkB;AAAE;;AACtB;EACE,aAAa;AAAE;;AACjB;EACE,qBAAqB;EACrB,aAAa;EACb,gBAAgB;EAChB,sBAAsB;EACtB,kBAAkB;EAClB,oCAAoC;AAAE;;AACtC;EACE,WAAW;AAAE;;AACf;EACE,WAAW;AAAE;;AACf;EACE;IACE,eAAe;IACf,8BAA8B;IAC9B,WAAW;EAAE;AAAE;;AACvB;EACE,kBAAkB;EAClB,qBAAqB;EACrB,UAAU;EACV,iBAAiB;EACjB,kBAAkB;EAClB,WAAW;EACX,sBAAsB;AAAE;;AACxB;EACE;IACE,iBAAiB;EAAE;AAAE;;AACzB;EACE,UAAU;EACV,eAAe;AAAE;;AACrB;EACE,kBAAkB;EAClB,aAAa;EACb,mBAAmB;EACnB,MAAM;EACN,OAAO;EACP,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,8BAA8B;EAC9B,kBAAkB;AAAE;;AACpB;EACE,qBAAqB;EACrB,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AAAE;;AACjB;EACE,sBAAsB;EACtB,WAAW;AAAE;;AACf;EACE,sBAAsB;EACtB,cAAc;AAAE;;AAExB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,gBAAgB;EAChB,sBAAsB;AAAE;;AACxB;EACE,yBAAyB;AAAE;;AAC7B;EACE;IACE,yBAAyB;IACzB,eAAe;EAAE;AAAE;;AACvB;EACE,yBAAyB;AAAE;;AAC7B;EACE;IACE,yBAAyB;IACzB,eAAe;EAAE;AAAE;;AACvB;EACE,sBAAsB;EACtB,gBAAgB;AAAE;;AACpB;EACE,kBAAkB;EAClB,0BAA0B;EAC1B,6BAA6B;EAC7B,oBAAoB;EACpB,WAAW;AAAE;;AACf;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,OAAO;EACP,WAAW;AAAE;;AACb;EACE,MAAM;EACN,YAAY;AAAE;;AAChB;EACE;IACE,iBAAiB;EAAE;AAAE;;AAC3B;EACE,sBAAsB;EACtB,YAAY;EACZ,0BAA0B;EAC1B,6BAA6B;AAAE;;AAC/B;EACE,aAAa;AAAE;;AACjB;EACE,eAAe;AAAE;;AACjB;EACE,kBAAkB;AAAE;;AACpB;EACE,mBAAmB;AAAE;;AAC7B;EACE,qBAAqB;EACrB,kBAAkB;EAClB,sBAAsB;EACtB,YAAY;EACZ,4BAA4B;EAC5B,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,aAAa;AAAE;;AACf;EACE,qBAAqB;EACrB,gBAAgB;EAChB,OAAO;EACP,yBAAyB;EACzB,WAAW;AAAE;;AACb;EACE,4BAA4B;AAAE;;AAChC;EACE,2BAA2B;AAAE;;AACjC;EACE,yBAAyB;EACzB,aAAa;EACb,UAAU;AAAE;;AACZ;;EACE,WAAW;EACX,uBAAuB;EACvB,aAAa;AAAE;;AACnB;EACE,yBAAyB;AAAE;;AAC3B;;EACE,WAAW;EACX,uBAAuB;EACvB,cAAc;AAAE;;AACpB;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;AAAE;;AACtB;EACE,UAAU;AAAE;;AACZ;EACE,WAAW;EACX,WAAW;EACX,eAAe;EACf,gBAAgB;AAAE;;AACxB;EACE,yBAAyB;AAAE;;AAC7B;EACE,qBAAqB;EACrB,UAAU;AAAE;;AACd;EACE,qBAAqB;EACrB,sBAAsB;EACtB,WAAW;EACX,UAAU;EACV,gBAAgB;EAChB,iBAAiB;EACjB,8BAA8B;EAC9B,2BAA2B;EAC3B,6BAA6B;AAAE;;AACjC;EACE,oBAAoB;EACpB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,sBAAsB;EACtB,kBAAkB;EAClB,8BAA8B;EAC9B,gBAAgB;AAAE;;AAClB;EACE;IACE,eAAe;IACf,8BAA8B;EAAE;AAAE;;AACtC;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,uBAAuB;AAAE;;AACzB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,gBAAgB;AAAE;;AACtB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,gBAAgB;AAAE;;AAClB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,gBAAgB;AAAE;;AACxB;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;EACpB,YAAY;EACZ,WAAW;EACX,mBAAmB;EACnB,gBAAgB;EAChB,WAAW;EACX,iBAAiB;EACjB,gBAAgB;AAAE;;AAClB;EACE;IACE,WAAW;IACX,eAAe;EAAE;AAAE;;AACvB;EACE,gBAAgB;AAAE;;AACpB;EACE,aAAa;AAAE;;AACjB;EACE,YAAY;AAAE;;AAChB;EACE,aAAa;AAAE;;AACnB;EACE,qBAAqB;EACrB,YAAY;EACZ,WAAW;EACX,mBAAmB;AAAE;;AACzB;EACE,sBAAsB;EACtB,6BAA6B;EAC7B,4BAA4B;EAC5B,0BAA0B;EAC1B,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AAAE;;AACjB;EACE;IACE,eAAe;IACf,oCAAoC;EAAE;AAAE;;AAC5C;EACE,kBAAkB;EAClB,kCAAkC;EAClC,mCAAmC;EACnC,0BAA0B;EAC1B,gBAAgB;AAAE;;AACpB;EACE,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;AAAE;;AACtB;EACE,mBAAmB;AAAE;;AACvB;EACE,qBAAqB;AAAE;;AACzB;EACE,qBAAqB;EACrB,QAAQ;EACR,SAAS;EACT,kBAAkB;EAClB,iCAAiC;EACjC,oCAAoC;EACpC,eAAe;EACf,2BAA2B;EAC3B,sBAAsB;AAAE;;AAC1B;EACE,iBAAiB;EACjB,WAAW;AAAE;;AAEnB;EACE,kBAAkB;EAClB,qBAAqB;EACrB,sBAAsB;EACtB,gBAAgB;EAChB,sBAAsB;EACtB,wCAAwC;EACxC,eAAe;EACf,gBAAgB;EAChB,iCAAiC;EACjC,cAAc;AAAE;;AAElB;EACE,YAAY;EACZ,kBAAkB;AAAE;;AAEtB;EACE,2BAA2B;EAC3B,gBAAgB;EAChB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,oBAAoB;AAAE;;AAExB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,iBAAiB;EACjB,iBAAiB;AAAE;;AACnB;EACE,WAAW;AAAE;;AACf;EACE;IACE,eAAe;IACf,mBAAmB;EAAE;AAAE;;AAC3B;EACE,mBAAmB;AAAE;;AACrB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,WAAW;EACX,UAAU;EACV,WAAW;EACX,yBAAyB;EACzB,mBAAmB;EACnB,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;AAAE;;AAEhC;EACE,0BAA0B;AAAE;;AAE9B;EACE,iBAAiB;EACjB,eAAe;EACf,gBAAgB;EAChB,iCAAiC;AAAE;;AACnC;EACE,YAAY;EACZ,WAAW;EACX,aAAa;AAAE;;AACf;EACE,WAAW;EACX,mBAAmB;AAAE;;AACrB;EACE,2CAA2C;AAAE;;AACjD;EACE,0BAA0B;AAAE;;AAC9B;EACE;IACE,eAAe;IACf,WAAW;IACX,mBAAmB;EAAE;AAAE;;AAC7B;EACE,YAAY;EACZ,WAAW;EACX,kBAAkB;AAAE;;AACtB;EACE,6BAA6B;EAC7B,YAAY;EACZ,gBAAgB;EAChB,WAAW;EACX,iBAAiB;AAAE;;AACrB;;EACE,kBAAkB;AAAE;;AACtB;;EACE,kBAAkB;AAAE;;AACtB;;EACE,kBAAkB;AAAE;;AACtB;;EACE,kBAAkB;AAAE;;AAExB;EACE,cAAc;AAAE;;AAElB;EACE,mBAAmB;EACnB,cAAc;AAAE;;AAChB;EACE,mBAAmB;EACnB,2BAA2B;EAC3B,qBAAqB;AAAE;;AACvB;EACE,qBAAqB;EACrB,iBAAiB;AAAE;;AACrB;EACE,gBAAgB;EAChB,kBAAkB;AAAE;;AACtB;EACE,SAAS;EACT,cAAc;AAAE;;AACpB;EACE,qBAAqB;EACrB,2BAA2B;AAAE;;AAC7B;EACE,qBAAqB;EACrB,gBAAgB;EAChB,kCAAkC;EAClC,+BAA+B;EAC/B,oBAAoB;EACpB,4BAA4B;AAAE;;AAChC;EACE,qBAAqB;EACrB,gBAAgB;AAAE;;AACpB;EACE,2BAA2B;AAAE;;AAC/B;EACE,4BAA4B;AAAE;;AAClC;EACE,UAAU;EACV,cAAc;EACd,kBAAkB;AAAE;;AACtB;EACE,mBAAmB;AAAE;;AAEzB;EACE,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;EACR,cAAc;AAAE;;AAElB;EACE,wBAAwB;AAAE;;AAE5B;EACE,yBAAyB;AAAE;;AAC3B;EACE,qBAAqB;EACrB,sBAAsB;EACtB,WAAW;EACX,UAAU;EACV,gBAAgB;EAChB,iBAAiB;EACjB,8BAA8B;EAC9B,2BAA2B;EAC3B,6BAA6B;AAAE;;AACjC;EACE,sBAAsB;EACtB,6BAA6B;EAC7B,4BAA4B;EAC5B,0BAA0B;EAC1B,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AAAE;;AACjB;EACE;IACE,eAAe;IACf,oCAAoC;EAAE;AAAE;;AAC5C;EACE,kBAAkB;EAClB,kCAAkC;EAClC,mCAAmC;EACnC,0BAA0B;EAC1B,gBAAgB;AAAE;;AACpB;EACE,6BAA6B;AAAE;;AACjC;EACE,6BAA6B;AAAE;;AACjC;EACE,6BAA6B;AAAE;;AACjC;EACE,6BAA6B;AAAE;;AACjC;EACE,8BAA8B;AAAE;;AAClC;EACE,qBAAqB;AAAE;;AACzB;EACE,qBAAqB;EACrB,QAAQ;EACR,SAAS;EACT,kBAAkB;EAClB,iCAAiC;EACjC,oCAAoC;EACpC,eAAe;EACf,2BAA2B;EAC3B,sBAAsB;AAAE;;AAC1B;EACE,iBAAiB;EACjB,WAAW;AAAE;;AACjB;EACE,oBAAoB;EACpB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,sBAAsB;EACtB,kBAAkB;EAClB,8BAA8B;EAC9B,gBAAgB;AAAE;;AAClB;EACE;IACE,eAAe;IACf,8BAA8B;EAAE;AAAE;;AACtC;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,uBAAuB;AAAE;;AACzB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,gBAAgB;AAAE;;AACtB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,gBAAgB;AAAE;;AAClB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,gBAAgB;AAAE;;AAE1B;EACE,sBAAsB;EACtB,mBAAmB;EACnB,YAAY;AAAE;;AACd;EACE,6BAA6B;EAC7B,sBAAsB;EACtB,cAAc;AAAE;;AAChB;EACE,sBAAsB;EACtB,kBAAkB;AAAE;;AACpB;EACE,YAAY;AAAE;;AAChB;EACE,0BAA0B;AAAE;;AAChC;EACE,WAAW;EACX,6BAA6B;AAAE;;AACnC;EACE,WAAW;AAAE;;AACf;EACE,cAAc;AAAE;;AAClB;EACE,0BAA0B;EAC1B,mBAAmB;AAAE;;AACrB;EACE,6BAA6B;EAC7B,0BAA0B;AAAE;;AAC9B;EACE,cAAc;AAAE;;AACpB;EACE,yBAAyB;AAAE;;AAC7B;EACE,sBAAsB;AAAE;;AACxB;EACE,4BAA4B;AAAE;;AAChC;EACE,4BAA4B;AAAE;;AAClC;EACE,YAAY;AAAE;;AAChB;EACE,gBAAgB;AAAE;;AAClB;EACE,YAAY;AAAE;;AAClB;EACE,8BAA8B;AAAE;;AAClC;EACE,8BAA8B;AAAE;;AAClC;EACE,8BAA8B;AAAE;;AAClC;EACE,8BAA8B;AAAE;;AAClC;EACE,8BAA8B;AAAE;;AAEpC;EACE,gBAAgB;EAChB,6BAA6B;AAAE;;AAC/B;EACE,6BAA6B;AAAE;;AACjC;EACE;IACE,oCAAoC;EAAE;AAAE;;AAC5C;EACE,oCAAoC;AAAE;;AACxC;EACE;IACE,oCAAoC;IACpC,eAAe;EAAE;AAAE;;AACvB;EACE,YAAY;EACZ,kBAAkB;AAAE;;AACpB;EACE,kBAAkB;AAAE;;AACtB;EACE,sBAAsB;AAAE;;AACxB;EACE,gBAAgB;AAAE;;AACpB;EACE,gBAAgB;AAAE;;AAClB;EACE,gBAAgB;AAAE;;AAC1B;EACE,mBAAmB;AAAE;;AACrB;EACE,WAAW;AAAE;;AAEnB;EACE,cAAc;AAAE;;AAElB;EACE,cAAc;AAAE;;AAElB;EACE,cAAc;AAAE;;AAElB;EACE,YAAY;AAAE;;AAEhB;EACE,yBAAyB;AAAE;;AAC3B;EACE,mBAAmB;AAAE;;AACrB;EACE,WAAW;AAAE;;AACjB;EACE,sBAAsB;AAAE;;AACxB;EACE,gBAAgB;AAAE;;AACpB;EACE,gBAAgB;AAAE;;AAClB;EACE,gBAAgB;AAAE","file":"tabulator_bootstrap3.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #ddd;\n background-color: #fff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #ddd;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #ddd;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ececec !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #ddd;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #ddd;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f5f5f5;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #ddd;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #ddd;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #f9f9f9; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #ddd;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #ddd; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n background-color: #fff;\n margin-bottom: 20px;\n border: none; }\n .tabulator .tabulator-header {\n border-bottom: 2px solid #ddd;\n background-color: #fff;\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n background-color: #fff;\n border-right: none; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 8px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n border-top: 2px solid #ddd;\n background: inherit; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator.table-striped .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n .tabulator.table-bordered {\n border: 1px solid #ddd; }\n .tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #ddd; }\n .tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #ddd; }\n .tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 5px; }\n .tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row {\n min-height: 24px; }\n .tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 5px; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.success {\n background: #dff0d8 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.info {\n background: #d9edf7 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning {\n background: #fcf8e3 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.danger {\n background: #f2dede !important; }\n\n.tabulator-row {\n min-height: 30px;\n border-bottom: 1px solid #ddd; }\n .tabulator-row.tabulator-row-even {\n background-color: transparent; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f5f5f5 !important; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC !important;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell {\n padding: 8px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #333; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item {\n color: inherit; }\n\n.tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n\n.tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n border: none; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n .tabulator-print-table .tabulator-data-tree-control {\n border: 1px solid #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #333; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.min.css deleted file mode 100644 index 6e08bdb..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{border:1px solid #ddd;font-size:14px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{border-bottom:1px solid #ddd;box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid #ddd;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #aaa;border-top:1px solid #ddd;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#ececec!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#e6e6e6;border-top:1px solid #ddd;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f3f3f3!important;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #ddd;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #ddd;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:22px;position:relative}.tabulator-row.tabulator-row-even{background-color:#f9f9f9}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#f5f5f5;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #ddd;border-top:1px solid #ddd;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #ddd;border-top:1px solid #ddd;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #ddd;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #ddd;border-bottom-left-radius:1px;border-left:2px solid #ddd;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #ddd;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:14px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#f9f9f9;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#ddd;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #ddd}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:14px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #ddd;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #ddd;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #ddd;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #ddd;border-bottom-left-radius:1px;border-left:2px solid #ddd;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#fff;border:none;margin-bottom:20px}.tabulator .tabulator-header{background-color:#fff;border-bottom:2px solid #ddd;color:inherit}.tabulator .tabulator-header .tabulator-col{background-color:#fff;border-right:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:8px}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{border-bottom:1px solid #ddd;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#000}.tabulator .tabulator-tableholder .tabulator-table{color:inherit}.tabulator .tabulator-footer{background:inherit;border-top:2px solid #ddd}.tabulator .tabulator-footer .tabulator-calcs-holder{border-bottom:1px solid #ddd;border-top:1px solid #ddd}.tabulator .tabulator-footer .tabulator-paginator{color:inherit}.tabulator.table-striped .tabulator-row.tabulator-row-even{background-color:#f9f9f9}.tabulator.table-bordered{border:1px solid #ddd}.tabulator.table-bordered .tabulator-header .tabulator-col,.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #ddd}.tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content{padding:5px}.tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row{min-height:24px}.tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:5px}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active{background:#f5f5f5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.success{background:#dff0d8!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.info{background:#d9edf7!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning{background:#fcf8e3!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.danger{background:#f2dede!important}.tabulator-row{border-bottom:1px solid #ddd;min-height:30px}.tabulator-row.tabulator-row-even{background-color:transparent}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#f5f5f5!important}}.tabulator-row.tabulator-selected{background-color:#9abcea!important}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc!important;cursor:pointer}}.tabulator-row .tabulator-cell{border-right:none;padding:8px}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell .tabulator-data-tree-control{border:1px solid #333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333}.tabulator-row.tabulator-group{background:#fafafa}.tabulator-row.tabulator-group span{color:#666}.tabulator-edit-select-list .tabulator-edit-select-list-group,.tabulator-edit-select-list .tabulator-edit-select-list-item,.tabulator-edit-select-list .tabulator-edit-select-list-notice{color:inherit}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border:none}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{background:#fafafa}.tabulator-print-table .tabulator-print-table-group span{color:#666}.tabulator-print-table .tabulator-data-tree-control{border:1px solid #333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333} -/*# sourceMappingURL=tabulator_bootstrap3.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.min.css.map deleted file mode 100644 index 09e6881..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap3.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap3.scss"],"names":[],"mappings":"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","file":"tabulator_bootstrap3.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #ddd;\n background-color: #fff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #ddd;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #ddd;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ececec !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #ddd;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #ddd;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f5f5f5;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #ddd;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #ddd;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #f9f9f9; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #ddd;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #ddd; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n background-color: #fff;\n margin-bottom: 20px;\n border: none; }\n .tabulator .tabulator-header {\n border-bottom: 2px solid #ddd;\n background-color: #fff;\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n background-color: #fff;\n border-right: none; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 8px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n border-top: 2px solid #ddd;\n background: inherit; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator.table-striped .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n .tabulator.table-bordered {\n border: 1px solid #ddd; }\n .tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #ddd; }\n .tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #ddd; }\n .tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 5px; }\n .tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row {\n min-height: 24px; }\n .tabulator.table-condensed .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 5px; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.success {\n background: #dff0d8 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.info {\n background: #d9edf7 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning {\n background: #fcf8e3 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.danger {\n background: #f2dede !important; }\n\n.tabulator-row {\n min-height: 30px;\n border-bottom: 1px solid #ddd; }\n .tabulator-row.tabulator-row-even {\n background-color: transparent; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f5f5f5 !important; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC !important;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell {\n padding: 8px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #333; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item {\n color: inherit; }\n\n.tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n\n.tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n border: none; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n .tabulator-print-table .tabulator-data-tree-control {\n border: 1px solid #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #333; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.css deleted file mode 100644 index 45b98f3..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.css +++ /dev/null @@ -1,1744 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #dee2e6; - background-color: #fff; - font-size: 16px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #dee2e6; - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #dee2e6; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #e6e6e6; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: white !important; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #ececec !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #dee2e6; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #dee2e6; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #2975DD; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #2975DD; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #2975DD; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #dee2e6; - background-color: #e6e6e6; - color: #555; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: #f3f3f3 !important; - border-bottom: 1px solid #dee2e6; - border-top: 1px solid #dee2e6; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: #f3f3f3 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #dee2e6; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #dee2e6; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 24px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #f9f9f9; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #f5f5f5; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #dee2e6; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #dee2e6; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 16px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #dee2e6; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #9ABCEA; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #dee2e6; - border-bottom: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #dee2e6; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #dee2e6; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #f9f9f9; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #dee2e6; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #dee2e6; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #dee2e6; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #dee2e6; - border-bottom: 2px solid #dee2e6; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #dee2e6; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator { - background-color: #fff; - border: none; -} - -.tabulator .tabulator-header { - border-top: 1px solid #dee2e6; - border-bottom: 2px solid #dee2e6; - color: inherit; -} - -.tabulator .tabulator-header .tabulator-col { - border-right: none; - background-color: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - padding: 12px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - right: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - border-top: 1px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input { - padding: .375rem .75rem; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: .25rem; - transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; - font-size: 1rem; - line-height: 1.5; - color: #495057; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus { - color: #495057; - background-color: #fff; - border: 1px solid #1D68CD; - outline: 0; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - width: 100%; - border-bottom: 1px solid #dee2e6; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder span { - color: #000; -} - -.tabulator .tabulator-tableholder .tabulator-table { - color: inherit; -} - -.tabulator .tabulator-footer { - color: inherit; -} - -.tabulator .tabulator-footer .tabulator-paginator { - color: inherit; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0; -} - -.tabulator .tabulator-footer .tabulator-page { - margin: 0; - margin-top: 5px; - padding: 8px 12px; -} - -.tabulator .tabulator-footer .tabulator-page[data-page="first"] { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page[data-page="last"] { - border: 1px solid #dee2e6; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page.active { - border-color: #007bff; - background-color: #007bff; - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - border-color: #dee2e6; - background: #fff; - color: #6c757d; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - border-color: #dee2e6; - background: #e9ecef; - color: #0056b3; - } -} - -.tabulator.thead-dark .tabulator-header { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.thead-dark .tabulator-header .tabulator-col { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.table-dark { - background-color: #212529; -} - -.tabulator.table-dark:not(.thead-light) .tabulator-header { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.table-dark .tabulator-tableholder { - color: #fff; -} - -.tabulator.table-dark .tabulator-row { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator.table-dark .tabulator-row:hover { - background-color: #32383e; - } - .tabulator.table-dark .tabulator-row:hover .tabulator-cell { - background-color: rgba(255, 255, 255, 0.075); - } -} - -.tabulator.table-dark .tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator.table-dark .tabulator-footer { - border-color: #32383e !important; -} - -.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder { - border-color: #32383e !important; - background: #212529 !important; -} - -.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder .tabulator-row { - border-color: #32383e !important; - background-color: #212529 !important; - color: #fff !important; -} - -.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even { - background-color: #f9f9f9; -} - -.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selectable:hover { - background-color: #f5f5f5; - cursor: pointer; - } - .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator.table-striped.table-dark .tabulator-row:nth-child(even) .tabulator-cell { - background-color: rgba(255, 255, 255, 0.05); -} - -.tabulator.table-bordered { - border: 1px solid #dee2e6; -} - -.tabulator.table-bordered .tabulator-header .tabulator-col { - border-right: 1px solid #dee2e6; -} - -.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid #dee2e6; -} - -.tabulator.table-borderless .tabulator-header { - border: none; -} - -.tabulator.table-borderless .tabulator-row { - border: none; -} - -.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content { - padding: 5px !important; -} - -.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row { - min-height: 26px; -} - -.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 5px !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary { - background: #b8daff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary { - background: #d6d8db !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success { - background: #c3e6cb !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info { - background: #bee5eb !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning { - background: #ffeeba !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger { - background: #f5c6cb !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light { - background: #fdfdfe !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-dark { - background: #c6c8ca !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active { - background: #f5f5f5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary { - background: #007bff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary { - background: #6c757d !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success { - background: #28a745 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info { - background: #17a2b8 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning { - background: #ffc107 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger { - background: #dc3545 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark { - background: #343a40 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active { - background: #f5f5f5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary { - background: #b8daff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary { - background: #d6d8db !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success { - background: #c3e6cb !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info { - background: #bee5eb !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning { - background: #ffeeba !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger { - background: #f5c6cb !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light { - background: #fdfdfe !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-dark { - background: #c6c8ca !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active { - background: #f5f5f5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary { - background: #007bff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary { - background: #6c757d !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success { - background: #28a745 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info { - background: #17a2b8 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning { - background: #ffc107 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger { - background: #dc3545 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark { - background: #343a40 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active { - background: #f5f5f5 !important; -} - -.tabulator-row { - min-height: 40px; - border-bottom: 1px solid #dee2e6; -} - -.tabulator-row .tabulator-cell { - padding: 12px; - border-right: none; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - border: 1px solid #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #ccc; -} - -.tabulator-row.tabulator-group { - background: #fafafa; -} - -.tabulator-row.tabulator-group span { - color: #666; -} - -.tabulator-edit-select-list { - background: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - color: #fff; - } -} - -.tabulator-edit-select-list .tabulator-edit-select-list-notice { - color: inherit; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - color: inherit; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: initial; -} - -.tabulator-print-table .tabulator-print-table-group { - background: #fafafa; -} - -.tabulator-print-table .tabulator-print-table-group span { - color: #666; -} - -.tabulator-print-table .tabulator-data-tree-control { - color: inherit; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #ccc; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #ccc; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #ccc; -} - -/*# sourceMappingURL=tabulator_bootstrap4.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.css.map deleted file mode 100644 index f2c1b4f..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap4.scss"],"names":[],"mappings":"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","file":"tabulator_bootstrap4.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #dee2e6;\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #dee2e6;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #dee2e6;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ececec !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #dee2e6;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #dee2e6;\n border-top: 1px solid #dee2e6;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f5f5f5;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #dee2e6;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #dee2e6;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #f9f9f9; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #dee2e6;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #dee2e6; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #dee2e6;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n background-color: #fff;\n border: none; }\n .tabulator .tabulator-header {\n border-top: 1px solid #dee2e6;\n border-bottom: 2px solid #dee2e6;\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 12px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input {\n padding: .375rem .75rem;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: .25rem;\n transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus {\n color: #495057;\n background-color: #fff;\n border: 1px solid #1D68CD;\n outline: 0; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0;\n margin-top: 5px;\n padding: 8px 12px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"first\"] {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"last\"] {\n border: 1px solid #dee2e6;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n border-color: #007bff;\n background-color: #007bff;\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n border-color: #dee2e6;\n background: #fff;\n color: #6c757d; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n border-color: #dee2e6;\n background: #e9ecef;\n color: #0056b3; } }\n .tabulator.thead-dark .tabulator-header {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.thead-dark .tabulator-header .tabulator-col {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.table-dark {\n background-color: #212529; }\n .tabulator.table-dark:not(.thead-light) .tabulator-header {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.table-dark .tabulator-tableholder {\n color: #fff; }\n .tabulator.table-dark .tabulator-row {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table-dark .tabulator-row:hover {\n background-color: #32383e; }\n .tabulator.table-dark .tabulator-row:hover .tabulator-cell {\n background-color: rgba(255, 255, 255, 0.075); } }\n .tabulator.table-dark .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n .tabulator.table-dark .tabulator-footer {\n border-color: #32383e !important; }\n .tabulator.table-dark .tabulator-footer .tabulator-calcs-holder {\n border-color: #32383e !important;\n background: #212529 !important; }\n .tabulator.table-dark .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n border-color: #32383e !important;\n background-color: #212529 !important;\n color: #fff !important; }\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selectable:hover {\n background-color: #f5f5f5;\n cursor: pointer; }\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator.table-striped.table-dark .tabulator-row:nth-child(even) .tabulator-cell {\n background-color: rgba(255, 255, 255, 0.05); }\n .tabulator.table-bordered {\n border: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-borderless .tabulator-header {\n border: none; }\n .tabulator.table-borderless .tabulator-row {\n border: none; }\n .tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 5px !important; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row {\n min-height: 26px; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 5px !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary {\n background: #b8daff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary {\n background: #d6d8db !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success {\n background: #c3e6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info {\n background: #bee5eb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning {\n background: #ffeeba !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger {\n background: #f5c6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light {\n background: #fdfdfe !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-dark {\n background: #c6c8ca !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary {\n background: #007bff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success {\n background: #28a745 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info {\n background: #17a2b8 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning {\n background: #ffc107 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger {\n background: #dc3545 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark {\n background: #343a40 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary {\n background: #b8daff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary {\n background: #d6d8db !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success {\n background: #c3e6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info {\n background: #bee5eb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning {\n background: #ffeeba !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger {\n background: #f5c6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light {\n background: #fdfdfe !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-dark {\n background: #c6c8ca !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary {\n background: #007bff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success {\n background: #28a745 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info {\n background: #17a2b8 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning {\n background: #ffc107 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger {\n background: #dc3545 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark {\n background: #343a40 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active {\n background: #f5f5f5 !important; }\n\n.tabulator-row {\n min-height: 40px;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-cell {\n padding: 12px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #fff; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: initial; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n\n.tabulator-print-table .tabulator-data-tree-control {\n color: inherit; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.min.css deleted file mode 100644 index d44adaa..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{border:1px solid #dee2e6;font-size:16px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#fff;border-bottom:1px solid #dee2e6;box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid #dee2e6;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #aaa;border-top:1px solid #dee2e6;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#ececec!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#e6e6e6;border-top:1px solid #dee2e6;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f3f3f3!important;border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:24px;position:relative}.tabulator-row.tabulator-row-even{background-color:#f9f9f9}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#f5f5f5;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #dee2e6;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #dee2e6;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:16px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#f9f9f9;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#dee2e6;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #dee2e6}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:16px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #dee2e6;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #dee2e6;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #dee2e6;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#fff;border:none}.tabulator .tabulator-header{border-bottom:2px solid #dee2e6;border-top:1px solid #dee2e6;color:inherit}.tabulator .tabulator-header .tabulator-col{background-color:#fff;border-right:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:12px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #dee2e6}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input{background-clip:padding-box;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;color:#495057;font-size:1rem;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus{background-color:#fff;border:1px solid #1d68cd;color:#495057;outline:0}.tabulator .tabulator-header .tabulator-calcs-holder{border-bottom:1px solid #dee2e6;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#000}.tabulator .tabulator-footer,.tabulator .tabulator-footer .tabulator-paginator,.tabulator .tabulator-tableholder .tabulator-table{color:inherit}.tabulator .tabulator-footer .tabulator-pages{margin:0}.tabulator .tabulator-footer .tabulator-page{margin:5px 0 0;padding:8px 12px}.tabulator .tabulator-footer .tabulator-page[data-page=first]{border-bottom-left-radius:4px;border-top-left-radius:4px}.tabulator .tabulator-footer .tabulator-page[data-page=last]{border:1px solid #dee2e6;border-bottom-right-radius:4px;border-top-right-radius:4px}.tabulator .tabulator-footer .tabulator-page.active{background-color:#007bff;border-color:#007bff;color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{background:#fff;border-color:#dee2e6;color:#6c757d}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{background:#e9ecef;border-color:#dee2e6;color:#0056b3}}.tabulator.thead-dark .tabulator-header,.tabulator.thead-dark .tabulator-header .tabulator-col{background-color:#212529;border-color:#32383e;color:#fff}.tabulator.table-dark{background-color:#212529}.tabulator.table-dark:not(.thead-light) .tabulator-header,.tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col{background-color:#212529;border-color:#32383e;color:#fff}.tabulator.table-dark .tabulator-tableholder{color:#fff}.tabulator.table-dark .tabulator-row{background-color:#212529;border-color:#32383e;color:#fff}@media (hover:hover) and (pointer:fine){.tabulator.table-dark .tabulator-row:hover{background-color:#32383e}.tabulator.table-dark .tabulator-row:hover .tabulator-cell{background-color:hsla(0,0%,100%,.075)}}.tabulator.table-dark .tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator.table-dark .tabulator-footer{border-color:#32383e!important}.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder{background:#212529!important;border-color:#32383e!important}.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder .tabulator-row{background-color:#212529!important;border-color:#32383e!important;color:#fff!important}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even{background-color:#f9f9f9}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selectable:hover{background-color:#f5f5f5;cursor:pointer}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator.table-striped.table-dark .tabulator-row:nth-child(2n) .tabulator-cell{background-color:hsla(0,0%,100%,.05)}.tabulator.table-bordered{border:1px solid #dee2e6}.tabulator.table-bordered .tabulator-header .tabulator-col,.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #dee2e6}.tabulator.table-borderless .tabulator-header,.tabulator.table-borderless .tabulator-row{border:none}.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content{padding:5px!important}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row{min-height:26px}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:5px!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary{background:#b8daff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary{background:#d6d8db!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success{background:#c3e6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info{background:#bee5eb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning{background:#ffeeba!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger{background:#f5c6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light{background:#fdfdfe!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-dark{background:#c6c8ca!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active{background:#f5f5f5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary{background:#007bff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success{background:#28a745!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info{background:#17a2b8!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning{background:#ffc107!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger{background:#dc3545!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark{background:#343a40!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active{background:#f5f5f5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary{background:#b8daff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary{background:#d6d8db!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success{background:#c3e6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info{background:#bee5eb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning{background:#ffeeba!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger{background:#f5c6cb!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light{background:#fdfdfe!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-dark{background:#c6c8ca!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active{background:#f5f5f5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary{background:#007bff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success{background:#28a745!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info{background:#17a2b8!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning{background:#ffc107!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger{background:#dc3545!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark{background:#343a40!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active{background:#f5f5f5!important}.tabulator-row{border-bottom:1px solid #dee2e6;min-height:40px}.tabulator-row .tabulator-cell{border-right:none;padding:12px}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell .tabulator-data-tree-control{border:1px solid #ccc}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}.tabulator-row.tabulator-group{background:#fafafa}.tabulator-row.tabulator-group span{color:#666}.tabulator-edit-select-list{background:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{color:#fff}}.tabulator-edit-select-list .tabulator-edit-select-list-group,.tabulator-edit-select-list .tabulator-edit-select-list-notice{color:inherit}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:initial;text-align:initial}.tabulator-print-table .tabulator-print-table-group{background:#fafafa}.tabulator-print-table .tabulator-print-table-group span{color:#666}.tabulator-print-table .tabulator-data-tree-control{color:inherit}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc} -/*# sourceMappingURL=tabulator_bootstrap4.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.min.css.map deleted file mode 100644 index 2563766..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap4.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap4.scss"],"names":[],"mappings":"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","file":"tabulator_bootstrap4.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #dee2e6;\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #dee2e6;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #dee2e6;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ececec !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #dee2e6;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #dee2e6;\n border-top: 1px solid #dee2e6;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f5f5f5;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #dee2e6;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #dee2e6;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #f9f9f9; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #dee2e6;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #dee2e6; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #dee2e6;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n background-color: #fff;\n border: none; }\n .tabulator .tabulator-header {\n border-top: 1px solid #dee2e6;\n border-bottom: 2px solid #dee2e6;\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 12px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input {\n padding: .375rem .75rem;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: .25rem;\n transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus {\n color: #495057;\n background-color: #fff;\n border: 1px solid #1D68CD;\n outline: 0; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0;\n margin-top: 5px;\n padding: 8px 12px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"first\"] {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"last\"] {\n border: 1px solid #dee2e6;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n border-color: #007bff;\n background-color: #007bff;\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n border-color: #dee2e6;\n background: #fff;\n color: #6c757d; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n border-color: #dee2e6;\n background: #e9ecef;\n color: #0056b3; } }\n .tabulator.thead-dark .tabulator-header {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.thead-dark .tabulator-header .tabulator-col {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.table-dark {\n background-color: #212529; }\n .tabulator.table-dark:not(.thead-light) .tabulator-header {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n .tabulator.table-dark .tabulator-tableholder {\n color: #fff; }\n .tabulator.table-dark .tabulator-row {\n border-color: #32383e;\n background-color: #212529;\n color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table-dark .tabulator-row:hover {\n background-color: #32383e; }\n .tabulator.table-dark .tabulator-row:hover .tabulator-cell {\n background-color: rgba(255, 255, 255, 0.075); } }\n .tabulator.table-dark .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n .tabulator.table-dark .tabulator-footer {\n border-color: #32383e !important; }\n .tabulator.table-dark .tabulator-footer .tabulator-calcs-holder {\n border-color: #32383e !important;\n background: #212529 !important; }\n .tabulator.table-dark .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n border-color: #32383e !important;\n background-color: #212529 !important;\n color: #fff !important; }\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even {\n background-color: #f9f9f9; }\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selectable:hover {\n background-color: #f5f5f5;\n cursor: pointer; }\n .tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator.table-striped.table-dark .tabulator-row:nth-child(even) .tabulator-cell {\n background-color: rgba(255, 255, 255, 0.05); }\n .tabulator.table-bordered {\n border: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-borderless .tabulator-header {\n border: none; }\n .tabulator.table-borderless .tabulator-row {\n border: none; }\n .tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 5px !important; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row {\n min-height: 26px; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 5px !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary {\n background: #b8daff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary {\n background: #d6d8db !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success {\n background: #c3e6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info {\n background: #bee5eb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning {\n background: #ffeeba !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger {\n background: #f5c6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light {\n background: #fdfdfe !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-dark {\n background: #c6c8ca !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary {\n background: #007bff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success {\n background: #28a745 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info {\n background: #17a2b8 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning {\n background: #ffc107 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger {\n background: #dc3545 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark {\n background: #343a40 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary {\n background: #b8daff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary {\n background: #d6d8db !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success {\n background: #c3e6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info {\n background: #bee5eb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning {\n background: #ffeeba !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger {\n background: #f5c6cb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light {\n background: #fdfdfe !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-dark {\n background: #c6c8ca !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active {\n background: #f5f5f5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary {\n background: #007bff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success {\n background: #28a745 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info {\n background: #17a2b8 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning {\n background: #ffc107 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger {\n background: #dc3545 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark {\n background: #343a40 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active {\n background: #f5f5f5 !important; }\n\n.tabulator-row {\n min-height: 40px;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-cell {\n padding: 12px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #fff; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: initial; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n\n.tabulator-print-table .tabulator-data-tree-control {\n color: inherit; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.css deleted file mode 100644 index 50f5513..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.css +++ /dev/null @@ -1,1771 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #dee2e6; - background-color: #fff; - font-size: 16px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #dee2e6; - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #dee2e6; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #e6e6e6; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: white !important; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #dadfe4 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #dee2e6; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #dee2e6; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #2975DD; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #2975DD; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #2975DD; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #dee2e6; - background-color: #e6e6e6; - color: #555; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: #f3f3f3 !important; - border-bottom: 1px solid #dee2e6; - border-top: 1px solid #dee2e6; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: #f3f3f3 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #dee2e6; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #dee2e6; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 24px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #e9ecef; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #ced4da; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #dee2e6; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #dee2e6; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 16px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #dee2e6; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #9ABCEA; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #dee2e6; - border-bottom: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #dee2e6; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #dee2e6; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #e9ecef; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #dee2e6; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #dee2e6; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #dee2e6; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #dee2e6; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #dee2e6; - border-bottom: 2px solid #dee2e6; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #dee2e6; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator { - background-color: #fff; - border: none; -} - -.tabulator .tabulator-header { - border-top: 1px solid #dee2e6; - border-bottom: 2px solid #dee2e6; - color: inherit; -} - -.tabulator .tabulator-header .tabulator-col { - border-right: none; - background-color: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - padding: 12px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - right: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - border-top: 1px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input { - padding: .375rem .75rem; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: .25rem; - transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; - font-size: 1rem; - line-height: 1.5; - color: #495057; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus { - color: #495057; - background-color: #fff; - border: 1px solid #1D68CD; - outline: 0; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - width: 100%; - border-bottom: 1px solid #dee2e6; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder span { - color: #000; -} - -.tabulator .tabulator-tableholder .tabulator-table { - color: inherit; -} - -.tabulator .tabulator-footer { - color: inherit; -} - -.tabulator .tabulator-footer .tabulator-paginator { - color: inherit; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0; -} - -.tabulator .tabulator-footer .tabulator-page { - margin: 0; - margin-top: 5px; - padding: 8px 12px; -} - -.tabulator .tabulator-footer .tabulator-page[data-page="first"] { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page[data-page="last"] { - border: 1px solid #dee2e6; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page.active { - border-color: #0d6efd; - background-color: #0d6efd; - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - border-color: #dee2e6; - background: #fff; - color: #6c757d; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - border-color: #dee2e6; - background: #e9ecef; - color: #0a58ca; - } -} - -.tabulator.thead-dark .tabulator-header { - border-color: #dee2e6; - background-color: #fff; - color: #212529; -} - -.tabulator.thead-dark .tabulator-header .tabulator-col { - border-color: #dee2e6; - background-color: #fff; - color: #212529; -} - -.tabulator.table { - background-color: #fff; -} - -.tabulator.table:not(.thead-light) .tabulator-header { - border-color: #dee2e6; - background-color: #fff; - color: #212529; -} - -.tabulator.table:not(.thead-light) .tabulator-header .tabulator-col { - border-color: #dee2e6; - background-color: #fff; - color: #212529; -} - -.tabulator.table .tabulator-tableholder { - color: #212529; -} - -.tabulator.table .tabulator-row { - border-color: #dee2e6; - background-color: #fff; - color: #212529; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator.table .tabulator-row:hover { - background-color: #dee2e6; - } - .tabulator.table .tabulator-row:hover .tabulator-cell { - background-color: #ced4da; - } -} - -.tabulator.table .tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator.table .tabulator-footer { - border-color: #dee2e6 !important; -} - -.tabulator.table .tabulator-footer .tabulator-calcs-holder { - border-color: #dee2e6 !important; - background: #fff !important; -} - -.tabulator.table .tabulator-footer .tabulator-calcs-holder .tabulator-row { - border-color: #dee2e6 !important; - background-color: #fff !important; - color: #212529 !important; -} - -.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even { - background-color: #e9ecef; -} - -.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selectable:hover { - background-color: #ced4da; - cursor: pointer; - } - .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator.table-striped.table .tabulator-row:nth-child(even) .tabulator-cell { - background-color: transparent; -} - -.tabulator.table-bordered { - border: 1px solid #dee2e6; -} - -.tabulator.table-bordered .tabulator-header .tabulator-col { - border-right: 1px solid #dee2e6; -} - -.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid #dee2e6; -} - -.tabulator.table-borderless .tabulator-header { - border: none; -} - -.tabulator.table-borderless .tabulator-row { - border: none; -} - -.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content { - padding: 5px !important; -} - -.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row { - min-height: 26px; -} - -.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 5px !important; -} - -.tabulator.table-sm .tabulator-row { - padding-top: 0; - padding-bottom: 0; -} - -.tabulator.table-sm .tabulator-col-resize-handle { - padding: 0; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary { - background: #cfe2ff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary { - background: #e2e3e5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success { - background: #d1e7dd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info { - background: #cff4fc !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning { - background: #fff3cd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger { - background: #f8d7da !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table { - background: #212529 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active { - background: #6c757d !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary { - background: #cfe2ff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary { - background: #e2e3e5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success { - background: #d1e7dd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info { - background: #cff4fc !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning { - background: #fff3cd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger { - background: #f8d7da !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark { - background: #212529 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active { - background: #6c757d !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary { - background: #cfe2ff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary { - background: #e2e3e5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success { - background: #d1e7dd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info { - background: #cff4fc !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning { - background: #fff3cd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger { - background: #f8d7da !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table { - background: #212529 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active { - background: #6c757d !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary { - background: #cfe2ff !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary { - background: #e2e3e5 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success { - background: #d1e7dd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info { - background: #cff4fc !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning { - background: #fff3cd !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger { - background: #f8d7da !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark { - background: #212529 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active { - background: #6c757d !important; -} - -.tabulator-row { - min-height: 40px; - border-bottom: 1px solid #dee2e6; -} - -.tabulator-row .tabulator-cell { - padding: 12px; - border-right: none; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - border: 1px solid #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #ccc; -} - -.tabulator-row.tabulator-group { - background: #fafafa; -} - -.tabulator-row.tabulator-group span { - color: #666; -} - -.tabulator-edit-select-list { - background: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - color: #fff; - } -} - -.tabulator-edit-select-list .tabulator-edit-select-list-notice { - color: inherit; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - color: inherit; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: initial; -} - -.tabulator-print-table .tabulator-print-table-group { - background: #fafafa; -} - -.tabulator-print-table .tabulator-print-table-group span { - color: #666; -} - -.tabulator-print-table .tabulator-data-tree-control { - color: inherit; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #ccc; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #ccc; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #ccc; -} - -.tabulator-popup-container { - background: #fff; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - color: #fff; - } -} - -/*# sourceMappingURL=tabulator_bootstrap5.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.css.map deleted file mode 100644 index 29518d8..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap5.scss"],"names":[],"mappings":"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","file":"tabulator_bootstrap5.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #dee2e6;\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #dee2e6;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #dee2e6;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #dadfe4 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #dee2e6;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #dee2e6;\n border-top: 1px solid #dee2e6;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #e9ecef; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #ced4da;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #dee2e6;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #dee2e6;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #e9ecef; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #dee2e6;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #dee2e6; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #dee2e6;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n background-color: #fff;\n border: none; }\n .tabulator .tabulator-header {\n border-top: 1px solid #dee2e6;\n border-bottom: 2px solid #dee2e6;\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 12px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input {\n padding: .375rem .75rem;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: .25rem;\n transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus {\n color: #495057;\n background-color: #fff;\n border: 1px solid #1D68CD;\n outline: 0; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0;\n margin-top: 5px;\n padding: 8px 12px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"first\"] {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"last\"] {\n border: 1px solid #dee2e6;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n border-color: #0d6efd;\n background-color: #0d6efd;\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n border-color: #dee2e6;\n background: #fff;\n color: #6c757d; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n border-color: #dee2e6;\n background: #e9ecef;\n color: #0a58ca; } }\n .tabulator.thead-dark .tabulator-header {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.thead-dark .tabulator-header .tabulator-col {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.table {\n background-color: #fff; }\n .tabulator.table:not(.thead-light) .tabulator-header {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.table:not(.thead-light) .tabulator-header .tabulator-col {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.table .tabulator-tableholder {\n color: #212529; }\n .tabulator.table .tabulator-row {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table .tabulator-row:hover {\n background-color: #dee2e6; }\n .tabulator.table .tabulator-row:hover .tabulator-cell {\n background-color: #ced4da; } }\n .tabulator.table .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n .tabulator.table .tabulator-footer {\n border-color: #dee2e6 !important; }\n .tabulator.table .tabulator-footer .tabulator-calcs-holder {\n border-color: #dee2e6 !important;\n background: #fff !important; }\n .tabulator.table .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n border-color: #dee2e6 !important;\n background-color: #fff !important;\n color: #212529 !important; }\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even {\n background-color: #e9ecef; }\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selectable:hover {\n background-color: #ced4da;\n cursor: pointer; }\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator.table-striped.table .tabulator-row:nth-child(even) .tabulator-cell {\n background-color: transparent; }\n .tabulator.table-bordered {\n border: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-borderless .tabulator-header {\n border: none; }\n .tabulator.table-borderless .tabulator-row {\n border: none; }\n .tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 5px !important; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row {\n min-height: 26px; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 5px !important; }\n .tabulator.table-sm .tabulator-row {\n padding-top: 0;\n padding-bottom: 0; }\n .tabulator.table-sm .tabulator-col-resize-handle {\n padding: 0; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active {\n background: #6c757d !important; }\n\n.tabulator-row {\n min-height: 40px;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-cell {\n padding: 12px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #fff; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: initial; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n\n.tabulator-print-table .tabulator-data-tree-control {\n color: inherit; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n\n.tabulator-popup-container {\n background: #fff; }\n\n.tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n\n@media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n color: #fff; } }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.min.css deleted file mode 100644 index 6bfa703..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{border:1px solid #dee2e6;font-size:16px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#fff;border-bottom:1px solid #dee2e6;box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid #dee2e6;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #aaa;border-top:1px solid #dee2e6;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#dadfe4!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#e6e6e6;border-top:1px solid #dee2e6;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f3f3f3!important;border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:24px;position:relative}.tabulator-row.tabulator-row-even{background-color:#e9ecef}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#ced4da;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #dee2e6;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;border:1px solid #dee2e6;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:16px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#e9ecef;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#dee2e6;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #dee2e6}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:16px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #dee2e6;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #dee2e6;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #dee2e6;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#fff;border:none}.tabulator .tabulator-header{border-bottom:2px solid #dee2e6;border-top:1px solid #dee2e6;color:inherit}.tabulator .tabulator-header .tabulator-col{background-color:#fff;border-right:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:12px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #dee2e6}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input{background-clip:padding-box;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;color:#495057;font-size:1rem;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus{background-color:#fff;border:1px solid #1d68cd;color:#495057;outline:0}.tabulator .tabulator-header .tabulator-calcs-holder{border-bottom:1px solid #dee2e6;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#000}.tabulator .tabulator-footer,.tabulator .tabulator-footer .tabulator-paginator,.tabulator .tabulator-tableholder .tabulator-table{color:inherit}.tabulator .tabulator-footer .tabulator-pages{margin:0}.tabulator .tabulator-footer .tabulator-page{margin:5px 0 0;padding:8px 12px}.tabulator .tabulator-footer .tabulator-page[data-page=first]{border-bottom-left-radius:4px;border-top-left-radius:4px}.tabulator .tabulator-footer .tabulator-page[data-page=last]{border:1px solid #dee2e6;border-bottom-right-radius:4px;border-top-right-radius:4px}.tabulator .tabulator-footer .tabulator-page.active{background-color:#0d6efd;border-color:#0d6efd;color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{background:#fff;border-color:#dee2e6;color:#6c757d}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{background:#e9ecef;border-color:#dee2e6;color:#0a58ca}}.tabulator.thead-dark .tabulator-header,.tabulator.thead-dark .tabulator-header .tabulator-col{background-color:#fff;border-color:#dee2e6;color:#212529}.tabulator.table{background-color:#fff}.tabulator.table:not(.thead-light) .tabulator-header,.tabulator.table:not(.thead-light) .tabulator-header .tabulator-col{background-color:#fff;border-color:#dee2e6;color:#212529}.tabulator.table .tabulator-tableholder{color:#212529}.tabulator.table .tabulator-row{background-color:#fff;border-color:#dee2e6;color:#212529}@media (hover:hover) and (pointer:fine){.tabulator.table .tabulator-row:hover{background-color:#dee2e6}.tabulator.table .tabulator-row:hover .tabulator-cell{background-color:#ced4da}}.tabulator.table .tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator.table .tabulator-footer{border-color:#dee2e6!important}.tabulator.table .tabulator-footer .tabulator-calcs-holder{background:#fff!important;border-color:#dee2e6!important}.tabulator.table .tabulator-footer .tabulator-calcs-holder .tabulator-row{background-color:#fff!important;border-color:#dee2e6!important;color:#212529!important}.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even{background-color:#e9ecef}.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selectable:hover{background-color:#ced4da;cursor:pointer}.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator.table-striped.table .tabulator-row:nth-child(2n) .tabulator-cell{background-color:transparent}.tabulator.table-bordered{border:1px solid #dee2e6}.tabulator.table-bordered .tabulator-header .tabulator-col,.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #dee2e6}.tabulator.table-borderless .tabulator-header,.tabulator.table-borderless .tabulator-row{border:none}.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content{padding:5px!important}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row{min-height:26px}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:5px!important}.tabulator.table-sm .tabulator-row{padding-bottom:0;padding-top:0}.tabulator.table-sm .tabulator-col-resize-handle{padding:0}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active{background:#6c757d!important}.tabulator-row{border-bottom:1px solid #dee2e6;min-height:40px}.tabulator-row .tabulator-cell{border-right:none;padding:12px}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell .tabulator-data-tree-control{border:1px solid #ccc}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}.tabulator-row.tabulator-group{background:#fafafa}.tabulator-row.tabulator-group span{color:#666}.tabulator-edit-select-list{background:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{color:#fff}}.tabulator-edit-select-list .tabulator-edit-select-list-group,.tabulator-edit-select-list .tabulator-edit-select-list-notice{color:inherit}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:initial;text-align:initial}.tabulator-print-table .tabulator-print-table-group{background:#fafafa}.tabulator-print-table .tabulator-print-table-group span{color:#666}.tabulator-print-table .tabulator-data-tree-control{color:inherit}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}.tabulator-popup-container{background:#fff}.tabulator-edit-list .tabulator-edit-list-item.active{color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{color:#fff}} -/*# sourceMappingURL=tabulator_bootstrap5.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.min.css.map deleted file mode 100644 index f83224e..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bootstrap5.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap5.scss"],"names":[],"mappings":"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","file":"tabulator_bootstrap5.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #dee2e6;\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #dee2e6;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #dee2e6;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #dadfe4 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #dee2e6;\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid #dee2e6;\n border-top: 1px solid #dee2e6;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #dee2e6;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #e9ecef; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #ced4da;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #dee2e6;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #dee2e6;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #e9ecef; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #dee2e6;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #dee2e6; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #dee2e6;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #dee2e6; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n background-color: #fff;\n border: none; }\n .tabulator .tabulator-header {\n border-top: 1px solid #dee2e6;\n border-bottom: 2px solid #dee2e6;\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 12px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid #dee2e6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input {\n padding: .375rem .75rem;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: .25rem;\n transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus {\n color: #495057;\n background-color: #fff;\n border: 1px solid #1D68CD;\n outline: 0; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid #dee2e6; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0;\n margin-top: 5px;\n padding: 8px 12px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"first\"] {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"last\"] {\n border: 1px solid #dee2e6;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n border-color: #0d6efd;\n background-color: #0d6efd;\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n border-color: #dee2e6;\n background: #fff;\n color: #6c757d; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n border-color: #dee2e6;\n background: #e9ecef;\n color: #0a58ca; } }\n .tabulator.thead-dark .tabulator-header {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.thead-dark .tabulator-header .tabulator-col {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.table {\n background-color: #fff; }\n .tabulator.table:not(.thead-light) .tabulator-header {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.table:not(.thead-light) .tabulator-header .tabulator-col {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n .tabulator.table .tabulator-tableholder {\n color: #212529; }\n .tabulator.table .tabulator-row {\n border-color: #dee2e6;\n background-color: #fff;\n color: #212529; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table .tabulator-row:hover {\n background-color: #dee2e6; }\n .tabulator.table .tabulator-row:hover .tabulator-cell {\n background-color: #ced4da; } }\n .tabulator.table .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n .tabulator.table .tabulator-footer {\n border-color: #dee2e6 !important; }\n .tabulator.table .tabulator-footer .tabulator-calcs-holder {\n border-color: #dee2e6 !important;\n background: #fff !important; }\n .tabulator.table .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n border-color: #dee2e6 !important;\n background-color: #fff !important;\n color: #212529 !important; }\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even {\n background-color: #e9ecef; }\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selectable:hover {\n background-color: #ced4da;\n cursor: pointer; }\n .tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator.table-striped.table .tabulator-row:nth-child(even) .tabulator-cell {\n background-color: transparent; }\n .tabulator.table-bordered {\n border: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #dee2e6; }\n .tabulator.table-borderless .tabulator-header {\n border: none; }\n .tabulator.table-borderless .tabulator-row {\n border: none; }\n .tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 5px !important; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row {\n min-height: 26px; }\n .tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 5px !important; }\n .tabulator.table-sm .tabulator-row {\n padding-top: 0;\n padding-bottom: 0; }\n .tabulator.table-sm .tabulator-col-resize-handle {\n padding: 0; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active {\n background: #6c757d !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary {\n background: #cfe2ff !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary {\n background: #e2e3e5 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success {\n background: #d1e7dd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info {\n background: #cff4fc !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning {\n background: #fff3cd !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger {\n background: #f8d7da !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light {\n background: #f8f9fa !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark {\n background: #212529 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active {\n background: #6c757d !important; }\n\n.tabulator-row {\n min-height: 40px;\n border-bottom: 1px solid #dee2e6; }\n .tabulator-row .tabulator-cell {\n padding: 12px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #fff; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: initial; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n\n.tabulator-print-table .tabulator-data-tree-control {\n color: inherit; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n\n.tabulator-popup-container {\n background: #fff; }\n\n.tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n\n@media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n color: #fff; } }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.css deleted file mode 100644 index 095f1a1..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.css +++ /dev/null @@ -1,1444 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #999; - background-color: white; - font-size: 16px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: transparent; - color: #363636; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: transparent; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: rgba(0, 0, 0, 0); - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #009e86; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0); - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #363636; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #363636; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #363636; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #363636; - color: #363636; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: rgba(13, 13, 13, 0) !important; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: rgba(13, 13, 13, 0) !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: transparent; - white-space: nowrap; - overflow: visible; - color: #363636; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #ededed !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #aaa; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #aaa; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #009e86; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #009e86; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #009e86; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #999; - background-color: transparent; - color: #363636; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: rgba(13, 13, 13, 0) !important; - border-bottom: 1px solid #aaa; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: rgba(13, 13, 13, 0) !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #363636; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #dbdbdb; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #dbdbdb; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 24px; - background-color: transparent; -} - -.tabulator-row.tabulator-row-even { - background-color: #fafafa; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #fafafa; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #00d1b2; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #009e86; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #009e86; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 16px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #aaa; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #00d1b2; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #363636; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #363636; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #363636; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #363636; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: transparent; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #aaa; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #363636; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #363636; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: transparent; - border: 1px solid #aaa; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #fafafa; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #aaa; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #aaa; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #363636; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: transparent; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(0, 0, 0, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: transparent; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #363636; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #aaa; - padding: 4px; - padding-top: 6px; - color: #363636; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #aaa; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #363636; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #363636; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #363636; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #363636; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #363636; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #363636; -} - -.tabulator { - border: none; -} - -.tabulator .tabulator-header { - border: 1px solid #dbdbdb; - border-width: 0 0 2px; -} - -.tabulator .tabulator-header .tabulator-col { - border-right: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - border: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.5em 0.75em; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - right: 0px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input { - border: 1px solid #dbdbdb; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - border: 1px solid #dbdbdb; - border-width: 2px 0 0; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell { - border-bottom-width: 0; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border: 1px solid #dbdbdb; - border-width: 0 0 2px; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border: 1px solid #dbdbdb; - border-width: 2px 0 0; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs .tabulator-cell { - border-bottom-width: 0; -} - -.tabulator .tabulator-footer { - padding: 0.5em 0.75em; - border: 1px solid #dbdbdb; - border-width: 2px 0 0; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - margin: -5px -10px 10px -10px; - border: 1px solid #dbdbdb; - border-width: 0 0 2px; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell { - border-bottom-width: 0; -} - -.tabulator .tabulator-footer .tabulator-page { - margin: 0 0.1875em; - padding: calc(0.375em - 1px) 0.75em; - border: 1px solid #dbdbdb; - font-size: 16px; -} - -.tabulator .tabulator-footer .tabulator-page.active { - border-color: #4a4a4a; - color: #363636; - font-weight: bold; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - border-color: #b5b5b5; - background: inherit; - color: inherit; - } -} - -.tabulator.is-striped .tabulator-row:nth-child(even) { - background-color: #fafafa; -} - -.tabulator.is-bordered { - border: 1px solid #dbdbdb; -} - -.tabulator.is-bordered .tabulator-header .tabulator-col { - border-right: 1px solid #dbdbdb; -} - -.tabulator.is-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid #dbdbdb; -} - -.tabulator.is-narrow .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.25em 0.5em; -} - -.tabulator.is-narrow .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 0.25em 0.5em; -} - -.tabulator-row { - min-height: 22px; -} - -.tabulator-row.tabulator-row-even { - background-color: inherit; -} - -.tabulator-row.tabulator-selected { - background-color: #00d1b2 !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #009e86 !important; - } -} - -.tabulator-row .tabulator-cell { - padding: 0.5em 0.75em; - border: 1px solid #dbdbdb; - border-width: 0 0 1px; -} - -.tabulator-row.tabulator-group { - border-bottom: 1px solid #999; - border-right: none; - border-top: 1px solid #999; - color: #363636; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: none; - border-top: 1px solid #999; - color: #363636; -} - -.tabulator-popup-container { - background: white; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: white; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - color: white; - } -} - -/*# sourceMappingURL=tabulator_bulma.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.css.map deleted file mode 100644 index eb3de1e..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bulma.scss"],"names":[],"mappings":"AAAA;EACE,kBAAkB;EAClB,sBAAsB;EACtB,uBAAuB;EACvB,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,gCAAgC;EAChC,6BAA6B;EAC7B,4BAA4B;EAC5B,2BAA2B;EAC3B,wBAAwB;AAAE;;AAC1B;EACE,eAAe;AAAE;;AACnB;EACE,qBAAqB;AAAE;;AACzB;EACE,iBAAiB;AAAE;;AACrB;EACE,iBAAiB;AAAE;;AACrB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,WAAW;EACX,6BAA6B;EAC7B,6BAA6B;EAC7B,cAAc;EACd,iBAAiB;EACjB,mBAAmB;EACnB,gBAAgB;EAChB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;EACpB,aAAa;AAAE;;AACf;EACE,aAAa;AAAE;;AACjB;EACE,kBAAkB;EAClB,gBAAgB;AAAE;;AAClB;EACE,qBAAqB;AAAE;;AAC3B;EACE,oBAAoB;EACpB,kBAAkB;EAClB,sBAAsB;EACtB,sBAAsB;EACtB,2BAA2B;EAC3B,4BAA4B;EAC5B,uBAAuB;EACvB,gBAAgB;EAChB,sBAAsB;EACtB,gBAAgB;AAAE;;AAClB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,4BAA4B;EAC5B,oBAAoB;AAAE;;AACxB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,sBAAsB;EACtB,kBAAkB;EAClB,YAAY;AAAE;;AACd;EACE,cAAc;AAAE;;AAChB;EACE,eAAe;EACf,WAAW;AAAE;;AACjB;EACE,kBAAkB;AAAE;;AACtB;EACE,sBAAsB;EACtB,WAAW;EACX,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,sBAAsB;AAAE;;AACxB;EACE,mBAAmB;EACnB,sBAAsB;AAAE;;AAC1B;EACE,sBAAsB;EACtB,WAAW;EACX,sBAAsB;EACtB,YAAY;EACZ,gBAAgB;AAAE;;AACpB;EACE,wBAAwB;AAAE;;AAC9B;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,UAAU;AAAE;;AACZ;EACE,QAAQ;EACR,SAAS;EACT,kCAAkC;EAClC,mCAAmC;EACnC,6BAA6B;AAAE;;AACrC;EACE,kBAAkB;EAClB,aAAa;EACb,0BAA0B;EAC1B,gBAAgB;EAChB,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,eAAe;EACf,WAAW;EACX,kBAAkB;AAAE;;AACpB;EACE,uBAAuB;AAAE;;AAC3B;EACE,eAAe;AAAE;;AACnB;EACE,QAAQ;EACR,SAAS;AAAE;;AACf;EACE,mBAAmB;AAAE;;AACvB;EACE;IACE,eAAe;IACf,kCAAkC;EAAE;AAAE;;AAC1C;EACE,WAAW;AAAE;;AACb;EACE;IACE,eAAe;IACf,6BAA6B;EAAE;AAAE;;AACrC;EACE,gBAAgB;EAChB,6BAA6B;AAAE;;AACnC;EACE,cAAc;AAAE;;AAChB;EACE;IACE,eAAe;IACf,6BAA6B;EAAE;AAAE;;AACrC;EACE,gBAAgB;EAChB,gCAAgC;AAAE;;AACtC;EACE,cAAc;AAAE;;AAChB;EACE;IACE,eAAe;IACf,0BAA0B;EAAE;AAAE;;AAClC;EACE,mBAAmB;EACnB,6BAA6B;EAC7B,cAAc;AAAE;;AACpB;EACE,yBAAyB;EACzB,uBAAuB;EACvB,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AAAE;;AAC3B;EACE,yBAAyB;AAAE;;AAC7B;EACE,gBAAgB;EAChB,iBAAiB;AAAE;;AACrB;EACE,gBAAgB;EAChB,oBAAoB;AAAE;;AACxB;EACE,uBAAuB;EACvB,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,YAAY;AAAE;;AAClB;EACE,gBAAgB;EAChB,OAAO;EACP,WAAW;AAAE;;AACb;EACE,4BAA4B;AAAE;;AAChC;EACE,2BAA2B;AAAE;;AACjC;EACE,sBAAsB;EACtB,qBAAqB;EACrB,0CAA0C;EAC1C,0BAA0B;EAC1B,6BAA6B;AAAE;;AAC/B;EACE,0CAA0C;AAAE;;AAC5C;EACE,aAAa;AAAE;;AACrB;EACE,qBAAqB;AAAE;;AACvB;EACE,aAAa;AAAE;;AACrB;EACE,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,cAAc;EACd,iCAAiC;AAAE;;AACnC;EACE,aAAa;AAAE;;AACjB;EACE,sBAAsB;EACtB,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,WAAW;AAAE;;AACb;EACE,gBAAgB;AAAE;;AACpB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,iBAAiB;EACjB,eAAe;EACf,mBAAmB;AAAE;;AACzB;EACE,kBAAkB;EAClB,qBAAqB;EACrB,6BAA6B;EAC7B,mBAAmB;EACnB,iBAAiB;EACjB,cAAc;AAAE;;AAChB;EACE,iBAAiB;EACjB,8BAA8B;AAAE;;AAChC;EACE,6BAA6B;AAAE;;AACjC;EACE,0BAA0B;AAAE;;AAClC;EACE,kBAAkB;EAClB,QAAQ;EACR,WAAW;EACX,oBAAoB;AAAE;;AACtB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,yBAAyB;AAAE;;AAC3B;EACE,WAAW;EACX,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,UAAU;EACV,WAAW;EACX,yBAAyB;EACzB,oBAAoB;AAAE;;AAC1B;EACE,kBAAkB;EAClB,sBAAsB;EACtB,yBAAyB;AAAE;;AACjC;EACE,0BAA0B;EAC1B,6BAA6B;EAC7B,cAAc;EACd,iBAAiB;EACjB,mBAAmB;EACnB,iBAAiB;EACjB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;AAAE;;AACtB;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,8BAA8B;EAC9B,iBAAiB;AAAE;;AACnB;EACE,aAAa;AAAE;;AACnB;EACE,sBAAsB;EACtB,WAAW;EACX,gBAAgB;EAChB,0CAA0C;EAC1C,6BAA6B;EAC7B,0BAA0B;EAC1B,gBAAgB;AAAE;;AAClB;EACE,qBAAqB;EACrB,0CAA0C;AAAE;;AAC5C;EACE,aAAa;AAAE;;AACnB;EACE,mBAAmB;EACnB,mBAAmB;AAAE;;AACzB;EACE,iBAAiB;AAAE;;AACrB;EACE,mBAAmB;AAAE;;AACvB;EACE,OAAO;EACP,iBAAiB;EACjB,cAAc;EACd,oBAAoB;EACpB,oBAAoB;EACpB,kBAAkB;AAAE;;AACtB;EACE,qBAAqB;EACrB,aAAa;EACb,gBAAgB;EAChB,yBAAyB;EACzB,kBAAkB;AAAE;;AACtB;EACE,aAAa;AAAE;;AACjB;EACE,qBAAqB;EACrB,aAAa;EACb,gBAAgB;EAChB,yBAAyB;EACzB,kBAAkB;EAClB,oCAAoC;AAAE;;AACtC;EACE,WAAW;AAAE;;AACf;EACE,WAAW;AAAE;;AACf;EACE;IACE,eAAe;IACf,8BAA8B;IAC9B,WAAW;EAAE;AAAE;;AACvB;EACE,kBAAkB;EAClB,qBAAqB;EACrB,UAAU;EACV,iBAAiB;EACjB,kBAAkB;EAClB,WAAW;EACX,sBAAsB;AAAE;;AACxB;EACE;IACE,iBAAiB;EAAE;AAAE;;AACzB;EACE,UAAU;EACV,eAAe;AAAE;;AACrB;EACE,kBAAkB;EAClB,aAAa;EACb,mBAAmB;EACnB,MAAM;EACN,OAAO;EACP,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,8BAA8B;EAC9B,kBAAkB;AAAE;;AACpB;EACE,qBAAqB;EACrB,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AAAE;;AACjB;EACE,sBAAsB;EACtB,WAAW;AAAE;;AACf;EACE,sBAAsB;EACtB,cAAc;AAAE;;AAExB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,gBAAgB;EAChB,6BAA6B;AAAE;;AAC/B;EACE,yBAAyB;AAAE;;AAC7B;EACE;IACE,yBAAyB;IACzB,eAAe;EAAE;AAAE;;AACvB;EACE,yBAAyB;AAAE;;AAC7B;EACE;IACE,yBAAyB;IACzB,eAAe;EAAE;AAAE;;AACvB;EACE,sBAAsB;EACtB,gBAAgB;AAAE;;AACpB;EACE,kBAAkB;EAClB,0BAA0B;EAC1B,6BAA6B;EAC7B,oBAAoB;EACpB,WAAW;AAAE;;AACf;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,yBAAyB;EACzB,cAAc;AAAE;;AAClB;EACE,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,OAAO;EACP,WAAW;AAAE;;AACb;EACE,MAAM;EACN,YAAY;AAAE;;AAChB;EACE;IACE,iBAAiB;EAAE;AAAE;;AAC3B;EACE,sBAAsB;EACtB,YAAY;EACZ,0BAA0B;EAC1B,6BAA6B;AAAE;;AAC/B;EACE,aAAa;AAAE;;AACjB;EACE,eAAe;AAAE;;AACjB;EACE,kBAAkB;AAAE;;AACpB;EACE,mBAAmB;AAAE;;AAC7B;EACE,qBAAqB;EACrB,kBAAkB;EAClB,sBAAsB;EACtB,YAAY;EACZ,4BAA4B;EAC5B,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,aAAa;AAAE;;AACf;EACE,qBAAqB;EACrB,gBAAgB;EAChB,OAAO;EACP,yBAAyB;EACzB,WAAW;AAAE;;AACb;EACE,4BAA4B;AAAE;;AAChC;EACE,2BAA2B;AAAE;;AACjC;EACE,yBAAyB;EACzB,aAAa;EACb,UAAU;AAAE;;AACZ;;EACE,WAAW;EACX,uBAAuB;EACvB,aAAa;AAAE;;AACnB;EACE,yBAAyB;AAAE;;AAC3B;;EACE,WAAW;EACX,uBAAuB;EACvB,cAAc;AAAE;;AACpB;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;AAAE;;AACtB;EACE,UAAU;AAAE;;AACZ;EACE,WAAW;EACX,WAAW;EACX,eAAe;EACf,gBAAgB;AAAE;;AACxB;EACE,yBAAyB;AAAE;;AAC7B;EACE,qBAAqB;EACrB,UAAU;AAAE;;AACd;EACE,qBAAqB;EACrB,sBAAsB;EACtB,WAAW;EACX,UAAU;EACV,gBAAgB;EAChB,iBAAiB;EACjB,8BAA8B;EAC9B,2BAA2B;EAC3B,6BAA6B;AAAE;;AACjC;EACE,oBAAoB;EACpB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;EAClB,8BAA8B;EAC9B,gBAAgB;AAAE;;AAClB;EACE;IACE,eAAe;IACf,8BAA8B;EAAE;AAAE;;AACtC;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,uBAAuB;AAAE;;AACzB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,mBAAmB;AAAE;;AACzB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,mBAAmB;AAAE;;AACrB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,mBAAmB;AAAE;;AAC3B;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;EACpB,YAAY;EACZ,WAAW;EACX,mBAAmB;EACnB,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;EACjB,gBAAgB;AAAE;;AAClB;EACE;IACE,WAAW;IACX,eAAe;EAAE;AAAE;;AACvB;EACE,gBAAgB;AAAE;;AACpB;EACE,aAAa;AAAE;;AACjB;EACE,mBAAmB;AAAE;;AACvB;EACE,aAAa;AAAE;;AACnB;EACE,qBAAqB;EACrB,YAAY;EACZ,WAAW;EACX,mBAAmB;AAAE;;AACzB;EACE,sBAAsB;EACtB,6BAA6B;EAC7B,4BAA4B;EAC5B,0BAA0B;EAC1B,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AAAE;;AACjB;EACE;IACE,eAAe;IACf,oCAAoC;EAAE;AAAE;;AAC5C;EACE,kBAAkB;EAClB,kCAAkC;EAClC,mCAAmC;EACnC,6BAA6B;EAC7B,gBAAgB;AAAE;;AACpB;EACE,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;AAAE;;AACtB;EACE,kBAAkB;AAAE;;AACtB;EACE,mBAAmB;AAAE;;AACvB;EACE,qBAAqB;AAAE;;AACzB;EACE,qBAAqB;EACrB,QAAQ;EACR,SAAS;EACT,kBAAkB;EAClB,iCAAiC;EACjC,oCAAoC;EACpC,eAAe;EACf,8BAA8B;EAC9B,sBAAsB;AAAE;;AAC1B;EACE,iBAAiB;EACjB,WAAW;AAAE;;AAEnB;EACE,kBAAkB;EAClB,qBAAqB;EACrB,sBAAsB;EACtB,uBAAuB;EACvB,sBAAsB;EACtB,wCAAwC;EACxC,eAAe;EACf,gBAAgB;EAChB,iCAAiC;EACjC,cAAc;AAAE;;AAElB;EACE,YAAY;EACZ,kBAAkB;AAAE;;AAEtB;EACE,2BAA2B;EAC3B,gBAAgB;EAChB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,oBAAoB;AAAE;;AAExB;EACE,kBAAkB;EAClB,sBAAsB;EACtB,iBAAiB;EACjB,iBAAiB;AAAE;;AACnB;EACE,WAAW;AAAE;;AACf;EACE;IACE,eAAe;IACf,mBAAmB;EAAE;AAAE;;AAC3B;EACE,mBAAmB;AAAE;;AACrB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,WAAW;EACX,UAAU;EACV,WAAW;EACX,yBAAyB;EACzB,mBAAmB;EACnB,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;AAAE;;AAEhC;EACE,0BAA0B;AAAE;;AAE9B;EACE,iBAAiB;EACjB,eAAe;EACf,gBAAgB;EAChB,iCAAiC;AAAE;;AACnC;EACE,YAAY;EACZ,cAAc;EACd,aAAa;AAAE;;AACf;EACE,kBAAkB;EAClB,mBAAmB;AAAE;;AACrB;EACE,qCAAqC;AAAE;;AAC3C;EACE,0BAA0B;AAAE;;AAC9B;EACE;IACE,eAAe;IACf,kBAAkB;IAClB,mBAAmB;EAAE;AAAE;;AAC7B;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;AAAE;;AACtB;EACE,6BAA6B;EAC7B,YAAY;EACZ,gBAAgB;EAChB,cAAc;EACd,iBAAiB;AAAE;;AACrB;;EACE,kBAAkB;AAAE;;AACtB;;EACE,kBAAkB;AAAE;;AACtB;;EACE,kBAAkB;AAAE;;AACtB;;EACE,kBAAkB;AAAE;;AAExB;EACE,cAAc;AAAE;;AAElB;EACE,mBAAmB;EACnB,cAAc;AAAE;;AAChB;EACE,mBAAmB;EACnB,2BAA2B;EAC3B,qBAAqB;AAAE;;AACvB;EACE,qBAAqB;EACrB,iBAAiB;AAAE;;AACrB;EACE,gBAAgB;EAChB,kBAAkB;AAAE;;AACtB;EACE,SAAS;EACT,cAAc;AAAE;;AACpB;EACE,qBAAqB;EACrB,2BAA2B;AAAE;;AAC7B;EACE,qBAAqB;EACrB,gBAAgB;EAChB,kCAAkC;EAClC,+BAA+B;EAC/B,oBAAoB;EACpB,4BAA4B;AAAE;;AAChC;EACE,qBAAqB;EACrB,gBAAgB;AAAE;;AACpB;EACE,2BAA2B;AAAE;;AAC/B;EACE,4BAA4B;AAAE;;AAClC;EACE,UAAU;EACV,cAAc;EACd,kBAAkB;AAAE;;AACtB;EACE,mBAAmB;AAAE;;AAEzB;EACE,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;EACR,cAAc;AAAE;;AAElB;EACE,wBAAwB;AAAE;;AAE5B;EACE,yBAAyB;AAAE;;AAC3B;EACE,qBAAqB;EACrB,sBAAsB;EACtB,WAAW;EACX,UAAU;EACV,gBAAgB;EAChB,iBAAiB;EACjB,8BAA8B;EAC9B,2BAA2B;EAC3B,6BAA6B;AAAE;;AACjC;EACE,sBAAsB;EACtB,6BAA6B;EAC7B,4BAA4B;EAC5B,0BAA0B;EAC1B,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AAAE;;AACjB;EACE;IACE,eAAe;IACf,oCAAoC;EAAE;AAAE;;AAC5C;EACE,kBAAkB;EAClB,kCAAkC;EAClC,mCAAmC;EACnC,6BAA6B;EAC7B,gBAAgB;AAAE;;AACpB;EACE,6BAA6B;AAAE;;AACjC;EACE,6BAA6B;AAAE;;AACjC;EACE,6BAA6B;AAAE;;AACjC;EACE,6BAA6B;AAAE;;AACjC;EACE,8BAA8B;AAAE;;AAClC;EACE,qBAAqB;AAAE;;AACzB;EACE,qBAAqB;EACrB,QAAQ;EACR,SAAS;EACT,kBAAkB;EAClB,iCAAiC;EACjC,oCAAoC;EACpC,eAAe;EACf,8BAA8B;EAC9B,sBAAsB;AAAE;;AAC1B;EACE,iBAAiB;EACjB,WAAW;AAAE;;AACjB;EACE,oBAAoB;EACpB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;EAClB,8BAA8B;EAC9B,gBAAgB;AAAE;;AAClB;EACE;IACE,eAAe;IACf,8BAA8B;EAAE;AAAE;;AACtC;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,uBAAuB;AAAE;;AACzB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,mBAAmB;AAAE;;AACzB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,mBAAmB;AAAE;;AACrB;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,UAAU;EACV,mBAAmB;AAAE;;AAE7B;EACE,YAAY;AAAE;;AACd;EACE,yBAAyB;EACzB,qBAAqB;AAAE;;AACvB;EACE,kBAAkB;AAAE;;AACpB;EACE,YAAY;AAAE;;AAChB;EACE,qBAAqB;AAAE;;AACvB;EACE,UAAU;AAAE;;AAChB;EACE,yBAAyB;AAAE;;AAC/B;EACE,yBAAyB;EACzB,qBAAqB;AAAE;;AACvB;EACE,sBAAsB;AAAE;;AAC9B;EACE,yBAAyB;EACzB,qBAAqB;AAAE;;AACzB;EACE,yBAAyB;EACzB,qBAAqB;AAAE;;AACzB;EACE,sBAAsB;AAAE;;AAC1B;EACE,qBAAqB;EACrB,yBAAyB;EACzB,qBAAqB;AAAE;;AACvB;EACE,6BAA6B;EAC7B,yBAAyB;EACzB,qBAAqB;AAAE;;AACvB;EACE,sBAAsB;AAAE;;AAC5B;EACE,kBAAkB;EAClB,mCAAmC;EACnC,yBAAyB;EACzB,eAAe;AAAE;;AACjB;EACE,qBAAqB;EACrB,cAAc;EACd,iBAAiB;AAAE;;AACrB;EACE;IACE,eAAe;IACf,qBAAqB;IACrB,mBAAmB;IACnB,cAAc;EAAE;AAAE;;AAC1B;EACE,yBAAyB;AAAE;;AAC7B;EACE,yBAAyB;AAAE;;AAC3B;EACE,+BAA+B;AAAE;;AACnC;EACE,+BAA+B;AAAE;;AACrC;EACE,qBAAqB;AAAE;;AACzB;EACE,qBAAqB;AAAE;;AAE3B;EACE,gBAAgB;AAAE;;AAClB;EACE,yBAAyB;AAAE;;AAC7B;EACE,oCAAoC;AAAE;;AACxC;EACE;IACE,oCAAoC;EAAE;AAAE;;AAC5C;EACE,qBAAqB;EACrB,yBAAyB;EACzB,qBAAqB;AAAE;;AACzB;EACE,6BAA6B;EAC7B,kBAAkB;EAClB,0BAA0B;EAC1B,cAAc;AAAE;;AAEpB;EACE,sBAAsB;EACtB,6BAA6B;EAC7B,kBAAkB;EAClB,0BAA0B;EAC1B,cAAc;AAAE;;AAElB;EACE,iBAAiB;AAAE;;AAErB;EACE,YAAY;AAAE;;AAEhB;EACE;IACE,YAAY;EAAE;AAAE","file":"tabulator_bulma.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #999;\n background-color: white;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: transparent;\n color: #363636;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: transparent;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: rgba(0, 0, 0, 0);\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #009e86;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0); } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #363636; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #363636; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #363636; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #363636;\n color: #363636; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: rgba(13, 13, 13, 0) !important;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: rgba(13, 13, 13, 0) !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: transparent;\n white-space: nowrap;\n overflow: visible;\n color: #363636; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ededed !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #009e86; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #009e86;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #009e86; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: transparent;\n color: #363636;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: rgba(13, 13, 13, 0) !important;\n border-bottom: 1px solid #aaa;\n border-top: 1px solid #aaa;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: rgba(13, 13, 13, 0) !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #363636;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #dbdbdb;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #dbdbdb;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: transparent; }\n .tabulator-row.tabulator-row-even {\n background-color: #fafafa; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #fafafa;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #00d1b2; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #009e86;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #009e86;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #aaa;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #00d1b2; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #363636;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #363636; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: transparent;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: transparent; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #363636;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #363636;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: transparent;\n border: 1px solid #aaa;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #fafafa; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #aaa;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #aaa; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #363636;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: transparent;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(0, 0, 0, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: transparent;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #363636;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #aaa;\n padding: 4px;\n padding-top: 6px;\n color: #363636;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #363636;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #363636;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #363636;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #363636; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n\n.tabulator {\n border: none; }\n .tabulator .tabulator-header {\n border: 1px solid #dbdbdb;\n border-width: 0 0 2px; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n border: none; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.5em 0.75em; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: 0px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input {\n border: 1px solid #dbdbdb; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n border: 1px solid #dbdbdb;\n border-width: 2px 0 0; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n border-bottom-width: 0; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border: 1px solid #dbdbdb;\n border-width: 0 0 2px; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border: 1px solid #dbdbdb;\n border-width: 2px 0 0; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs .tabulator-cell {\n border-bottom-width: 0; }\n .tabulator .tabulator-footer {\n padding: 0.5em 0.75em;\n border: 1px solid #dbdbdb;\n border-width: 2px 0 0; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n margin: -5px -10px 10px -10px;\n border: 1px solid #dbdbdb;\n border-width: 0 0 2px; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n border-bottom-width: 0; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0 0.1875em;\n padding: calc(0.375em - 1px) 0.75em;\n border: 1px solid #dbdbdb;\n font-size: 16px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n border-color: #4a4a4a;\n color: #363636;\n font-weight: bold; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n cursor: pointer;\n border-color: #b5b5b5;\n background: inherit;\n color: inherit; } }\n .tabulator.is-striped .tabulator-row:nth-child(even) {\n background-color: #fafafa; }\n .tabulator.is-bordered {\n border: 1px solid #dbdbdb; }\n .tabulator.is-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #dbdbdb; }\n .tabulator.is-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #dbdbdb; }\n .tabulator.is-narrow .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.25em 0.5em; }\n .tabulator.is-narrow .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.25em 0.5em; }\n\n.tabulator-row {\n min-height: 22px; }\n .tabulator-row.tabulator-row-even {\n background-color: inherit; }\n .tabulator-row.tabulator-selected {\n background-color: #00d1b2 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #009e86 !important; } }\n .tabulator-row .tabulator-cell {\n padding: 0.5em 0.75em;\n border: 1px solid #dbdbdb;\n border-width: 0 0 1px; }\n .tabulator-row.tabulator-group {\n border-bottom: 1px solid #999;\n border-right: none;\n border-top: 1px solid #999;\n color: #363636; }\n\n.tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: none;\n border-top: 1px solid #999;\n color: #363636; }\n\n.tabulator-popup-container {\n background: white; }\n\n.tabulator-edit-list .tabulator-edit-list-item.active {\n color: white; }\n\n@media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n color: white; } }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.min.css deleted file mode 100644 index b1443bd..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{background-color:#fff;border:1px solid #999;font-size:16px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:transparent;border-bottom:1px solid #999;box-sizing:border-box;color:#363636;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:transparent;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:transparent;border:1px solid #999;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#009e86;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:transparent;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#363636}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #363636;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#363636}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #363636;color:#363636}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{background:hsla(0,0%,5%,0)!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:hsla(0,0%,5%,0)!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:transparent;color:#363636;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#ededed!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #009e86;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#009e86;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #009e86;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:transparent;border-top:1px solid #999;color:#363636;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:hsla(0,0%,5%,0)!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:hsla(0,0%,5%,0)!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#363636;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #dbdbdb;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:transparent;box-sizing:border-box;min-height:24px;position:relative}.tabulator-row.tabulator-row-even{background-color:#fafafa}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#fafafa;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#00d1b2}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #aaa;border-top:1px solid #aaa;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#009e86;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #aaa;border-top:1px solid #aaa;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #aaa;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#00d1b2}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #aaa;border-bottom-left-radius:1px;border-left:2px solid #aaa;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #363636;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#363636;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#363636;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#363636;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:transparent;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:transparent}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-right:1px solid #aaa;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #363636;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #363636;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:transparent;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:16px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#fafafa;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#aaa;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:16px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#363636;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:transparent}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid rgba(0,0,0,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:transparent;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#363636;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #aaa;color:#363636;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #aaa;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #aaa;border-bottom-left-radius:1px;border-left:2px solid #aaa;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-right:1px solid #aaa;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #363636;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #363636;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #363636;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#363636;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#363636;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#363636;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{border:none}.tabulator .tabulator-header{border:solid #dbdbdb;border-width:0 0 2px}.tabulator .tabulator-header .tabulator-col{border-right:none}.tabulator .tabulator-header .tabulator-col.tabulator-moving{border:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:.5em .75em}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{right:0}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input{border:1px solid #dbdbdb}.tabulator .tabulator-header .tabulator-calcs-holder{border:solid #dbdbdb;border-width:2px 0 0}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell{border-bottom-width:0}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border:solid #dbdbdb;border-width:0 0 2px}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border:solid #dbdbdb;border-width:2px 0 0}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs .tabulator-cell{border-bottom-width:0}.tabulator .tabulator-footer{border:solid #dbdbdb;border-width:2px 0 0;padding:.5em .75em}.tabulator .tabulator-footer .tabulator-calcs-holder{border:solid #dbdbdb;border-width:0 0 2px;margin:-5px -10px 10px}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell{border-bottom-width:0}.tabulator .tabulator-footer .tabulator-page{border:1px solid #dbdbdb;font-size:16px;margin:0 .1875em;padding:calc(.375em - 1px) .75em}.tabulator .tabulator-footer .tabulator-page.active{border-color:#4a4a4a;color:#363636;font-weight:700}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{background:inherit;border-color:#b5b5b5;color:inherit;cursor:pointer}}.tabulator.is-striped .tabulator-row:nth-child(2n){background-color:#fafafa}.tabulator.is-bordered{border:1px solid #dbdbdb}.tabulator.is-bordered .tabulator-header .tabulator-col,.tabulator.is-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #dbdbdb}.tabulator.is-narrow .tabulator-header .tabulator-col .tabulator-col-content,.tabulator.is-narrow .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:.25em .5em}.tabulator-row{min-height:22px}.tabulator-row.tabulator-row-even{background-color:inherit}.tabulator-row.tabulator-selected{background-color:#00d1b2!important}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#009e86!important}}.tabulator-row .tabulator-cell{border:solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em}.tabulator-print-table .tabulator-print-table-group,.tabulator-row.tabulator-group{border-bottom:1px solid #999;border-right:none;border-top:1px solid #999;color:#363636}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box}.tabulator-popup-container{background:#fff}.tabulator-edit-list .tabulator-edit-list-item.active{color:#fff}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{color:#fff}} -/*# sourceMappingURL=tabulator_bulma.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.min.css.map deleted file mode 100644 index a40c920..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_bulma.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bulma.scss"],"names":[],"mappings":"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","file":"tabulator_bulma.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #999;\n background-color: white;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: transparent;\n color: #363636;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: transparent;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: rgba(0, 0, 0, 0);\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #009e86;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0); } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #363636; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #363636; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #363636; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #363636;\n color: #363636; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: rgba(13, 13, 13, 0) !important;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: rgba(13, 13, 13, 0) !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: transparent;\n white-space: nowrap;\n overflow: visible;\n color: #363636; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ededed !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #009e86; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #009e86;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #009e86; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: transparent;\n color: #363636;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: rgba(13, 13, 13, 0) !important;\n border-bottom: 1px solid #aaa;\n border-top: 1px solid #aaa;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: rgba(13, 13, 13, 0) !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #363636;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #dbdbdb;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #dbdbdb;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: transparent; }\n .tabulator-row.tabulator-row-even {\n background-color: #fafafa; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #fafafa;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #00d1b2; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #009e86;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #009e86;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #aaa;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #00d1b2; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #363636;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #363636; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: transparent;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: transparent; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #363636;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #363636;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: transparent;\n border: 1px solid #aaa;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #fafafa; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #aaa;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #aaa; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #363636;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: transparent;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(0, 0, 0, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: transparent;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #363636;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #aaa;\n padding: 4px;\n padding-top: 6px;\n color: #363636;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #363636;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #363636;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #363636;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #363636; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #363636; }\n\n.tabulator {\n border: none; }\n .tabulator .tabulator-header {\n border: 1px solid #dbdbdb;\n border-width: 0 0 2px; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n border: none; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.5em 0.75em; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: 0px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input {\n border: 1px solid #dbdbdb; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n border: 1px solid #dbdbdb;\n border-width: 2px 0 0; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n border-bottom-width: 0; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border: 1px solid #dbdbdb;\n border-width: 0 0 2px; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border: 1px solid #dbdbdb;\n border-width: 2px 0 0; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs .tabulator-cell {\n border-bottom-width: 0; }\n .tabulator .tabulator-footer {\n padding: 0.5em 0.75em;\n border: 1px solid #dbdbdb;\n border-width: 2px 0 0; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n margin: -5px -10px 10px -10px;\n border: 1px solid #dbdbdb;\n border-width: 0 0 2px; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n border-bottom-width: 0; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0 0.1875em;\n padding: calc(0.375em - 1px) 0.75em;\n border: 1px solid #dbdbdb;\n font-size: 16px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n border-color: #4a4a4a;\n color: #363636;\n font-weight: bold; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n cursor: pointer;\n border-color: #b5b5b5;\n background: inherit;\n color: inherit; } }\n .tabulator.is-striped .tabulator-row:nth-child(even) {\n background-color: #fafafa; }\n .tabulator.is-bordered {\n border: 1px solid #dbdbdb; }\n .tabulator.is-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #dbdbdb; }\n .tabulator.is-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #dbdbdb; }\n .tabulator.is-narrow .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.25em 0.5em; }\n .tabulator.is-narrow .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.25em 0.5em; }\n\n.tabulator-row {\n min-height: 22px; }\n .tabulator-row.tabulator-row-even {\n background-color: inherit; }\n .tabulator-row.tabulator-selected {\n background-color: #00d1b2 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #009e86 !important; } }\n .tabulator-row .tabulator-cell {\n padding: 0.5em 0.75em;\n border: 1px solid #dbdbdb;\n border-width: 0 0 1px; }\n .tabulator-row.tabulator-group {\n border-bottom: 1px solid #999;\n border-right: none;\n border-top: 1px solid #999;\n color: #363636; }\n\n.tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: none;\n border-top: 1px solid #999;\n color: #363636; }\n\n.tabulator-popup-container {\n background: white; }\n\n.tabulator-edit-list .tabulator-edit-list-item.active {\n color: white; }\n\n@media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n color: white; } }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.css b/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.css deleted file mode 100644 index a08932e..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.css +++ /dev/null @@ -1,1482 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid rgba(0, 0, 0, 0.12); - background-color: #fff; - font-size: 16px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid rgba(0, 0, 0, 0.12); - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid rgba(0, 0, 0, 0.12); - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #e94047; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #e6e6e6; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: white !important; - border-top: 1px solid rgba(0, 0, 0, 0.12); - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #ebebeb !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #e94047; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #e94047; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #e94047; -} - -.tabulator .tabulator-footer { - border-top: 1px solid rgba(0, 0, 0, 0.12); - background-color: #e6e6e6; - color: #555; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: #f3f3f3 !important; - border-bottom: 1px solid rgba(0, 0, 0, 0.12); - border-top: 1px solid rgba(0, 0, 0, 0.12); - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: #f3f3f3 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid rgba(0, 0, 0, 0.12); - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid rgba(0, 0, 0, 0.12); - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #ee6e73; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 24px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #f8f8f8; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #f8f8f8; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #ee6e73; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #ee6e73; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid rgba(0, 0, 0, 0.12); - border-bottom: 1px solid rgba(0, 0, 0, 0.12); - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #e94047; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #e94047; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid rgba(0, 0, 0, 0.12); - border-bottom: 1px solid rgba(0, 0, 0, 0.12); -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 16px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid rgba(0, 0, 0, 0.12); - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #ee6e73; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #ee6e73; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid rgba(0, 0, 0, 0.12); - border-bottom: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid rgba(0, 0, 0, 0.12); - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid rgba(0, 0, 0, 0.12); - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #f8f8f8; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: rgba(0, 0, 0, 0.12); - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid rgba(0, 0, 0, 0.12); -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #ee6e73; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #ee6e73; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #ee6e73; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid rgba(0, 0, 0, 0.12); - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid rgba(0, 0, 0, 0.12); -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid rgba(0, 0, 0, 0.12); - border-bottom: 2px solid rgba(0, 0, 0, 0.12); -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid rgba(0, 0, 0, 0.12); - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator { - border: none; - background-color: #fff; - width: 100%; - max-width: 100%; -} - -.tabulator .tabulator-header { - color: inherit; -} - -.tabulator .tabulator-header .tabulator-col { - border-right: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - padding: 15px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - right: -10px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - border-top: 1px solid rgba(0, 0, 0, 0.12); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 10px; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - width: 100%; - border-bottom: 1px solid rgba(0, 0, 0, 0.12); -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 600%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder .tabulator-table { - color: inherit; -} - -.tabulator .tabulator-footer { - background-color: transparent; - color: inherit; -} - -.tabulator .tabulator-footer .tabulator-paginator { - color: inherit; -} - -.tabulator .tabulator-footer .tabulator-page { - margin: 0; - margin-top: 5px; - padding: 8px 12px; - border-radius: 0; - border-right: none; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page[data-page="next"], -.tabulator .tabulator-footer .tabulator-page:first-of-type { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page[data-page="prev"], -.tabulator .tabulator-footer .tabulator-page:last-of-type { - border: 1px solid rgba(0, 0, 0, 0.12); - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #ee6e73; -} - -.tabulator.striped .tabulator-row:nth-child(even) { - background-color: #f8f8f8; -} - -.tabulator.striped .tabulator-row:nth-child(even).tabulator-selected { - background-color: #ee6e73 !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator.striped .tabulator-row:nth-child(even).tabulator-selectable:hover { - background-color: #f8f8f8; - cursor: pointer; - } - .tabulator.striped .tabulator-row:nth-child(even).tabulator-selected:hover { - background-color: #ee6e73 !important; - cursor: pointer; - } -} - -.tabulator-row { - min-height: 46px; - border-bottom: 1px solid rgba(0, 0, 0, 0.12); -} - -.tabulator-row.tabulator-row-even { - background-color: #fff; -} - -.tabulator-row .tabulator-cell { - padding: 15px; - border-right: none; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - border: 1px solid #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #ccc; -} - -.tabulator-row.tabulator-group { - background: #fafafa; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-edit-select-list { - background: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - color: inherit; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - color: #fff; - } -} - -.tabulator-edit-select-list .tabulator-edit-select-list-notice { - color: inherit; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - color: inherit; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - border-left: none; - border-right: none; -} - -.tabulator-print-table .tabulator-print-table-group { - background: #fafafa; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-print-table .tabulator-data-tree-control { - border: 1px solid #ccc; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - background: #ccc; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - background: #ccc; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - background: #ccc; -} - -/*# sourceMappingURL=tabulator_materialize.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.css.map deleted file mode 100644 index 2e484a9..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_materialize.scss"],"names":[],"mappings":"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","file":"tabulator_materialize.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #e94047;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ebebeb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #e94047; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #e94047;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #e94047; }\n .tabulator .tabulator-footer {\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #ee6e73; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #f8f8f8; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f8f8f8;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #ee6e73; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #ee6e73;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #e94047;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #e94047;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #ee6e73;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #ee6e73; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid rgba(0, 0, 0, 0.12);\n border-bottom: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #f8f8f8; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.12);\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid rgba(0, 0, 0, 0.12); }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #ee6e73; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #ee6e73; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #ee6e73; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid rgba(0, 0, 0, 0.12);\n border-bottom: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n border: none;\n background-color: #fff;\n width: 100%;\n max-width: 100%; }\n .tabulator .tabulator-header {\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 15px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: -10px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 10px; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n min-width: 600%; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n background-color: transparent;\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0;\n margin-top: 5px;\n padding: 8px 12px;\n border-radius: 0;\n border-right: none;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"next\"], .tabulator .tabulator-footer .tabulator-page:first-of-type {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"prev\"], .tabulator .tabulator-footer .tabulator-page:last-of-type {\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #ee6e73; }\n .tabulator.striped .tabulator-row:nth-child(even) {\n background-color: #f8f8f8; }\n .tabulator.striped .tabulator-row:nth-child(even).tabulator-selected {\n background-color: #ee6e73 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.striped .tabulator-row:nth-child(even).tabulator-selectable:hover {\n background-color: #f8f8f8;\n cursor: pointer; }\n .tabulator.striped .tabulator-row:nth-child(even).tabulator-selected:hover {\n background-color: #ee6e73 !important;\n cursor: pointer; } }\n\n.tabulator-row {\n min-height: 46px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n .tabulator-row .tabulator-cell {\n padding: 15px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #fff; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n border-left: none;\n border-right: none; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #666; }\n\n.tabulator-print-table .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.min.css deleted file mode 100644 index efb5783..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{border:1px solid rgba(0,0,0,.12);font-size:16px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#fff;border-bottom:1px solid rgba(0,0,0,.12);box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid rgba(0,0,0,.12);pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#e94047;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid rgba(0,0,0,.12)}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid rgba(0,0,0,.12)}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #aaa;border-top:1px solid rgba(0,0,0,.12);box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#ebebeb!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid rgba(0,0,0,.12)}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid rgba(0,0,0,.12)}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #e94047;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#e94047;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #e94047;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#e6e6e6;border-top:1px solid rgba(0,0,0,.12);color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f3f3f3!important;border-bottom:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12);box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid rgba(0,0,0,.12);border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{border:1px solid rgba(0,0,0,.12);border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:24px;position:relative}.tabulator-row.tabulator-row-even{background-color:#f8f8f8}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#f8f8f8;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#ee6e73}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#ee6e73;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12);pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#e94047;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12);box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid rgba(0,0,0,.12);box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid rgba(0,0,0,.12)}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid rgba(0,0,0,.12)}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #ee6e73;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#ee6e73}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid rgba(0,0,0,.12);border-bottom-left-radius:1px;border-left:2px solid rgba(0,0,0,.12);display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid rgba(0,0,0,.12);border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid rgba(0,0,0,.12);box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:16px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#f8f8f8;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:rgba(0,0,0,.12);border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid rgba(0,0,0,.12)}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:16px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#ee6e73;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #ee6e73}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#ee6e73;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid rgba(0,0,0,.12);color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid rgba(0,0,0,.12);border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid rgba(0,0,0,.12);margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid rgba(0,0,0,.12)}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid rgba(0,0,0,.12)}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid rgba(0,0,0,.12);border-bottom-left-radius:1px;border-left:2px solid rgba(0,0,0,.12);display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid rgba(0,0,0,.12);border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#fff;border:none;max-width:100%;width:100%}.tabulator .tabulator-header{color:inherit}.tabulator .tabulator-header .tabulator-col{border-right:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:15px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{right:-10px}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid rgba(0,0,0,.12)}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:10px}.tabulator .tabulator-header .tabulator-calcs-holder{border-bottom:1px solid rgba(0,0,0,.12);width:100%}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder .tabulator-table{color:inherit}.tabulator .tabulator-footer{background-color:transparent;color:inherit}.tabulator .tabulator-footer .tabulator-paginator{color:inherit}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border-radius:0;border-right:none;margin:5px 0 0;padding:8px 12px}.tabulator .tabulator-footer .tabulator-page:first-of-type,.tabulator .tabulator-footer .tabulator-page[data-page=next]{border-bottom-left-radius:4px;border-top-left-radius:4px}.tabulator .tabulator-footer .tabulator-page:last-of-type,.tabulator .tabulator-footer .tabulator-page[data-page=prev]{border:1px solid rgba(0,0,0,.12);border-bottom-right-radius:4px;border-top-right-radius:4px}.tabulator .tabulator-footer .tabulator-page.active{color:#ee6e73}.tabulator.striped .tabulator-row:nth-child(2n){background-color:#f8f8f8}.tabulator.striped .tabulator-row:nth-child(2n).tabulator-selected{background-color:#ee6e73!important}@media (hover:hover) and (pointer:fine){.tabulator.striped .tabulator-row:nth-child(2n).tabulator-selectable:hover{background-color:#f8f8f8;cursor:pointer}.tabulator.striped .tabulator-row:nth-child(2n).tabulator-selected:hover{background-color:#ee6e73!important;cursor:pointer}}.tabulator-row{border-bottom:1px solid rgba(0,0,0,.12);min-height:46px}.tabulator-row.tabulator-row-even{background-color:#fff}.tabulator-row .tabulator-cell{border-right:none;padding:15px}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell .tabulator-data-tree-control{border:1px solid #ccc}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}.tabulator-row.tabulator-group{background:#fafafa}.tabulator-row.tabulator-group span{color:#666;margin-left:10px}.tabulator-edit-select-list{background:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item{color:inherit}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{color:#fff}}.tabulator-edit-select-list .tabulator-edit-select-list-group,.tabulator-edit-select-list .tabulator-edit-select-list-notice{color:inherit}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:none;border-right:none}.tabulator-print-table .tabulator-print-table-group{background:#fafafa}.tabulator-print-table .tabulator-print-table-group span{color:#666;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{border:1px solid #ccc}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc} -/*# sourceMappingURL=tabulator_materialize.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.min.css.map deleted file mode 100644 index 5007f67..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_materialize.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_materialize.scss"],"names":[],"mappings":"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","file":"tabulator_materialize.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #e94047;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ebebeb !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #e94047; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #e94047;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #e94047; }\n .tabulator .tabulator-footer {\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n background-color: #e6e6e6;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #f3f3f3 !important;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #f3f3f3 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #ee6e73; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #f8f8f8; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #f8f8f8;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #ee6e73; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #ee6e73;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #e94047;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #e94047;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #ee6e73;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #ee6e73; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid rgba(0, 0, 0, 0.12);\n border-bottom: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #f8f8f8; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.12);\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid rgba(0, 0, 0, 0.12); }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #ee6e73; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #ee6e73; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #ee6e73; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid rgba(0, 0, 0, 0.12);\n border-bottom: 2px solid rgba(0, 0, 0, 0.12); }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n border: none;\n background-color: #fff;\n width: 100%;\n max-width: 100%; }\n .tabulator .tabulator-header {\n color: inherit; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 15px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n right: -10px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 10px; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n width: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n min-width: 600%; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder .tabulator-table {\n color: inherit; }\n .tabulator .tabulator-footer {\n background-color: transparent;\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-paginator {\n color: inherit; }\n .tabulator .tabulator-footer .tabulator-page {\n margin: 0;\n margin-top: 5px;\n padding: 8px 12px;\n border-radius: 0;\n border-right: none;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"next\"], .tabulator .tabulator-footer .tabulator-page:first-of-type {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page[data-page=\"prev\"], .tabulator .tabulator-footer .tabulator-page:last-of-type {\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #ee6e73; }\n .tabulator.striped .tabulator-row:nth-child(even) {\n background-color: #f8f8f8; }\n .tabulator.striped .tabulator-row:nth-child(even).tabulator-selected {\n background-color: #ee6e73 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator.striped .tabulator-row:nth-child(even).tabulator-selectable:hover {\n background-color: #f8f8f8;\n cursor: pointer; }\n .tabulator.striped .tabulator-row:nth-child(even).tabulator-selected:hover {\n background-color: #ee6e73 !important;\n cursor: pointer; } }\n\n.tabulator-row {\n min-height: 46px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n .tabulator-row .tabulator-cell {\n padding: 15px;\n border-right: none; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #fff; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n .tabulator-edit-select-list .tabulator-edit-select-list-group {\n color: inherit; }\n\n.tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n border-left: none;\n border-right: none; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #666; }\n\n.tabulator-print-table .tabulator-data-tree-control {\n border: 1px solid #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n background: #ccc; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n background: #ccc; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.css b/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.css deleted file mode 100644 index 38d973d..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.css +++ /dev/null @@ -1,1375 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #333; - background-color: #222; - font-size: 14px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: #333; - color: #fff; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: #333; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #1a1a1a; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #999; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #ccc; - color: #333; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #1a1a1a; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #888; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #888; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: #404040 !important; - border-top: 1px solid #888; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #404040 !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #666; - white-space: nowrap; - overflow: visible; - color: #fff; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #373737 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #888; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #888; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #ccc; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #ccc; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #ccc; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #999; - background-color: #333; - color: #333; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: #404040 !important; - border-bottom: 1px solid #888; - border-top: 1px solid #888; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: #404040 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #333; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #666; -} - -.tabulator-row.tabulator-row-even { - background-color: #444; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #999; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #000; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #888; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #888; - border-bottom: 1px solid #888; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #999; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #ccc; - color: #333; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #ccc; - color: #333; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #888; - border-bottom: 1px solid #888; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #888; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #888; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #888; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #999; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #000; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #888; - border-bottom: 2px solid #888; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #fff; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #666; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #666; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #888; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #666; - border: 1px solid #888; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #444; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #888; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #888; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #fff; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #666; - background: #999; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(102, 102, 102, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #999; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #666; - background: #999; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #fff; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #888; - padding: 4px; - padding-top: 6px; - color: #fff; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #888; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #888; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #888; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #888; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #888; - border-bottom: 2px solid #888; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #888; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #fff; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #fff; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #fff; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #fff; -} - -.tabulator { - background-color: #222; -} - -.tabulator .tabulator-header .tabulator-col { - background-color: #333; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - color: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input, -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter select { - border: 1px solid #999; - background: #444; - color: #fff; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - background: #1a1a1a !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #1a1a1a !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - background: #262626 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #262626 !important; -} - -.tabulator .tabulator-footer .tabulator-paginator label { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page { - color: #333; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator-row.tabulator-group { - min-width: 100%; - color: #333; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group span { - color: #666; -} - -.tabulator-edit-select-list { - background: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - color: #666; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #999; - background: #444; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused { - outline: 1px solid rgba(153, 153, 153, 0.5); -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.focused { - outline: 1px solid #444; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - color: #999; - background: #666; - } -} - -.tabulator-print-table .tabulator-print-table-group { - color: #333; -} - -/*# sourceMappingURL=tabulator_midnight.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.css.map deleted file mode 100644 index df4d2dc..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_midnight.scss"],"names":[],"mappings":"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","file":"tabulator_midnight.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #333;\n background-color: #222;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #333;\n color: #fff;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #333;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #1a1a1a;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #999;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #ccc;\n color: #333; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #1a1a1a; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #888; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #888; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: #404040 !important;\n border-top: 1px solid #888;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #404040 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #666;\n white-space: nowrap;\n overflow: visible;\n color: #fff; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #373737 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #888; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #888; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #ccc; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #ccc;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #ccc; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #333;\n color: #333;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #404040 !important;\n border-bottom: 1px solid #888;\n border-top: 1px solid #888;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #404040 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #333;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #666; }\n .tabulator-row.tabulator-row-even {\n background-color: #444; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #999;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #000; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #888;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #888;\n border-bottom: 1px solid #888;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #999;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #ccc;\n color: #333; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #ccc;\n color: #333; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #888;\n border-bottom: 1px solid #888; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #888;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #888; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #888; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #999;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #000; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #888;\n border-bottom: 2px solid #888; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #fff;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #fff; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #666;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #666; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #888;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #666;\n border: 1px solid #888;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #444; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #888;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #888; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #fff;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #666;\n background: #999; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(102, 102, 102, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #999; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #666;\n background: #999; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #fff;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #888;\n padding: 4px;\n padding-top: 6px;\n color: #fff;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #888;\n border-bottom: 2px solid #888; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #888;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #fff;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #fff; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n\n.tabulator {\n background-color: #222; }\n .tabulator .tabulator-header .tabulator-col {\n background-color: #333; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n color: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input, .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select {\n border: 1px solid #999;\n background: #444;\n color: #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n background: #1a1a1a !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #1a1a1a !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n background: #262626 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: #262626 !important; }\n .tabulator .tabulator-footer .tabulator-paginator label {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page {\n color: #333;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n\n.tabulator-row.tabulator-group {\n min-width: 100%;\n color: #333; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item {\n color: #666; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #999;\n background: #444; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(153, 153, 153, 0.5); }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.focused {\n outline: 1px solid #444; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #999;\n background: #666; } }\n\n.tabulator-print-table .tabulator-print-table-group {\n color: #333; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.min.css deleted file mode 100644 index 98fb857..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{border:1px solid #333;font-size:14px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#333;border-bottom:1px solid #999;box-sizing:border-box;color:#fff;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#333;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#1a1a1a;border:1px solid #999;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#999;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#ccc;color:#333}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#1a1a1a;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #888}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator .tabulator-header .tabulator-calcs-holder{background:#404040!important;border-bottom:1px solid #aaa;border-top:1px solid #888;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#404040!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#666;color:#fff;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#373737!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #888}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #888}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #ccc;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#ccc;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #ccc;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#333;border-top:1px solid #999;color:#333;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#404040!important;border-bottom:1px solid #888;border-top:1px solid #888;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#404040!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#333;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#666;box-sizing:border-box;min-height:22px;position:relative}.tabulator-row.tabulator-row-even{background-color:#444}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#999;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#000}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#888;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #888;border-top:1px solid #888;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#999;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#ccc;color:#333}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #888;border-top:1px solid #888;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #888;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #888}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #999;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#000}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #888;border-bottom-left-radius:1px;border-left:2px solid #888;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #fff;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#fff;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#fff;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#fff;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#666;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#666}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #888;border-top:1px solid #999;box-sizing:border-box;font-weight:700;padding:5px 5px 5px 10px}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#666;border:1px solid #888;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:14px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#444;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#888;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #888}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:14px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#fff;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#999;color:#666}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,40%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #999}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#999;color:#666;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#fff;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #888;color:#fff;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #888;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #888;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #888}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #888}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #888;border-bottom-left-radius:1px;border-left:2px solid #888;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #888;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #fff;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#fff;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#fff;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#fff;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#222}.tabulator .tabulator-header .tabulator-col{background-color:#333}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input,.tabulator .tabulator-header .tabulator-col .tabulator-header-filter select{background:#444;border:1px solid #999;color:#fff}.tabulator .tabulator-header .tabulator-calcs-holder,.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#1a1a1a!important}.tabulator .tabulator-footer .tabulator-calcs-holder,.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#262626!important}.tabulator .tabulator-footer .tabulator-page-counter,.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page{color:#333;font-family:inherit;font-size:inherit;font-weight:inherit}.tabulator-row.tabulator-group{color:#333;min-width:100%}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group span{color:#666}.tabulator-edit-select-list{background:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item{color:#666}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{background:#444;color:#999}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,60%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #444}@media (hover:hover) and (pointer:fine){.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{background:#666;color:#999}}.tabulator-print-table .tabulator-print-table-group{color:#333} -/*# sourceMappingURL=tabulator_midnight.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.min.css.map deleted file mode 100644 index 7901123..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_midnight.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_midnight.scss"],"names":[],"mappings":"AAAA,WAEE,qBAAsB,CAEtB,cAAe,CAEf,eAAgB,CALhB,iBAAkB,CAIlB,eAAgB,CAEhB,+BAAgC,CAChC,4BAA6B,CAC7B,2BAA4B,CAC5B,0BAA2B,CAC3B,uBAA0B,CAC1B,iFACE,cAAiB,CACnB,0CACE,oBAAuB,CAGzB,sGACE,gBAAmB,CACrB,6BAKE,qBAAsB,CADtB,4BAA6B,CAF7B,qBAAsB,CAItB,UAAW,CACX,eAAiB,CAOjB,YAAa,CALb,eAAgB,CARhB,iBAAkB,CASlB,qBAAsB,CACtB,uBAAwB,CACxB,wBAAyB,CACzB,mBAAoB,CALpB,kBAAmB,CALnB,UAWe,CACf,qDACE,YAAe,CACjB,wDAEE,eAAgB,CADhB,iBACkB,CAClB,2EACE,oBAAuB,CAC3B,4CAOE,eAAgB,CADhB,2BAA4B,CAH5B,qBAAsB,CAFtB,mBAAoB,CAGpB,qBAAsB,CACtB,0BAA2B,CAK3B,eAAgB,CARhB,iBAAkB,CAMlB,eAAgB,CAChB,qBACkB,CAClB,6DAGE,kBAAmB,CADnB,qBAAsB,CAEtB,mBAAoB,CAHpB,iBAGsB,CACxB,sEACE,qBAAsB,CACtB,UAAgB,CAClB,qEACE,qBAAsB,CACtB,UAAa,CACf,mEACE,qBAAsB,CAEtB,WAAY,CADZ,iBACc,CACd,kGACE,aAAgB,CAChB,wGACE,cAAe,CACf,UAAa,CACjB,+FACE,iBAAoB,CACtB,wFACE,qBAAsB,CAGtB,eAAgB,CAChB,sBAAuB,CACvB,qBAAsB,CAHtB,kBAAmB,CADnB,UAIwB,CACxB,iHAEE,kBAAsB,CADtB,kBACwB,CAC1B,gHAKE,eAAgB,CAFhB,qBAAsB,CAFtB,qBAAsB,CAGtB,WAAY,CAFZ,UAGkB,CACpB,+IACE,uBAA0B,CAC9B,yFAEE,kBAAmB,CAGnB,QAAS,CAJT,YAAa,CAEb,iBAAkB,CAGlB,SAAU,CAFV,KAEY,CACZ,0GAKE,4BAA6B,CAF7B,iCAAkC,CAClC,kCAAmC,CAFnC,QAAS,CADT,OAI+B,CACrC,0FAGE,yBAA0B,CAD1B,YAAa,CAGb,iBAAkB,CADlB,eAAgB,CAHhB,iBAIoB,CACtB,qEAEE,qBAAsB,CACtB,cAAe,CAFf,iBAAkB,CAIlB,iBAAkB,CADlB,UACoB,CACpB,8EACE,qBAAyB,CAC3B,yEACE,cAAiB,CACnB,sFAEE,QAAS,CADT,OACW,CACf,oFACE,kBAAqB,CACvB,wCACE,kGAEE,wBAAyB,CADzB,cAC2B,CAAE,CACjC,4HACE,UAAa,CACb,wCACE,gLAEE,4BAA6B,CAD7B,cAC+B,CAAE,CACrC,6IAEE,4BAA6B,CAD7B,eAC+B,CACnC,iIACE,UAAa,CACb,wCACE,qLAEE,4BAA6B,CAD7B,cAC+B,CAAE,CACrC,kJAEE,4BAA6B,CAD7B,eAC+B,CACnC,kIACE,UAAa,CACb,wCACE,sLAEE,yBAA0B,CAD1B,cAC4B,CAAE,CAClC,mJACE,kBAAmB,CACnB,yBAA0B,CAC1B,UAAa,CACjB,+GAIE,kBAAmB,CADnB,YAAa,CAEb,sBAAuB,CAHvB,sBAAuB,CADvB,wBAIyB,CAC3B,oHACE,wBAA2B,CAC7B,2GACE,eAAgB,CAChB,gBAAmB,CACrB,uIAEE,mBAAoB,CADpB,eACsB,CACxB,4GAKE,WAAY,CAJZ,sBAAuB,CACvB,MAAO,CACP,OAAQ,CACR,OACc,CAClB,+CAEE,MAAO,CADP,eAAgB,CAEhB,UAAa,CACb,qEACE,2BAA8B,CAChC,sEACE,0BAA6B,CACjC,qDAGE,4BAA8B,CAE9B,4BAA6B,CAD7B,yBAA0B,CAH1B,qBAAsB,CACtB,oBAG+B,CAC/B,oEACE,4BAAgC,CAChC,iGACE,YAAe,CACrB,2DACE,oBAAuB,CACvB,iEACE,YAAe,CACrB,kCAKE,gCAAiC,CADjC,aAAc,CAHd,iBAAkB,CAElB,kBAAmB,CADnB,UAGmC,CACnC,wCACE,YAAe,CACjB,yDAGE,kBAAmB,CAFnB,qBAAsB,CACtB,YAAa,CAEb,sBAAuB,CACvB,cAAe,CACf,UAAa,CACb,wFACE,eAAkB,CACpB,yFAIE,UAAW,CAHX,oBAAqB,CAKrB,cAAe,CADf,eAAiB,CAFjB,YAAa,CADb,iBAAkB,CAKlB,kBAAqB,CACzB,mDAGE,qBAAsB,CAGtB,UAAW,CAJX,oBAAqB,CAGrB,gBAAiB,CAJjB,iBAAkB,CAGlB,kBAEa,CACb,kFAEE,4BAA8B,CAD9B,eACgC,CAChC,sGACE,4BAA+B,CACjC,yGACE,yBAA4B,CAClC,2DAEE,OAAQ,CAER,mBAAoB,CAHpB,iBAAkB,CAElB,UACsB,CACtB,4EAGE,qBAAsB,CADtB,qBAAsB,CADtB,iBAEwB,CACxB,yGAOE,qBAAsB,CACtB,mBAAoB,CAJpB,WAAY,CAHZ,UAAW,CAKX,UAAW,CAJX,iBAAkB,CAClB,UAAW,CAEX,SAGsB,CAC1B,wFAGE,qBAAsB,CADtB,qBAAsB,CADtB,iBAEwB,CAC9B,6BAEE,qBAAsB,CADtB,yBAA0B,CAE1B,UAAW,CACX,eAAiB,CAEjB,gBAAiB,CACjB,qBAAsB,CACtB,uBAAwB,CACxB,wBAAyB,CACzB,mBAAoB,CALpB,kBAKsB,CACtB,wDAGE,kBAAmB,CAFnB,YAAa,CACb,kBAAmB,CAEnB,6BAA8B,CAC9B,gBAAmB,CACnB,8DACE,YAAe,CACnB,qDAIE,4BAA8B,CAC9B,4BAA6B,CAC7B,yBAA0B,CAL1B,qBAAsB,CAMtB,eAAgB,CAJhB,eAAgB,CADhB,UAKkB,CAClB,oEAEE,4BAA8B,CAD9B,oBACgC,CAChC,iGACE,YAAe,CACnB,gEAEE,kBAAmB,CADnB,kBACqB,CACzB,uDACE,gBAAmB,CACrB,qDACE,eAAqB,CACvB,kDAGE,UAAW,CAFX,MAAO,CAGP,mBAAoB,CAEpB,iBAAkB,CADlB,mBAAoB,CAHpB,gBAIoB,CACtB,kDAIE,qBAAsB,CACtB,iBAAkB,CAJlB,oBAAqB,CACrB,YAAa,CACb,eAEoB,CACtB,8CACE,YAAe,CACjB,6CAME,6BAAoC,CAFpC,qBAAsB,CACtB,iBAAkB,CAJlB,oBAAqB,CACrB,YAAa,CACb,eAGsC,CACtC,oDACE,UAAa,CACf,sDACE,UAAa,CACf,wCACE,iEAEE,yBAA8B,CAC9B,UAAW,CAFX,cAEa,CAAE,CACvB,wCAEE,oBAAqB,CAErB,gBAAiB,CACjB,iBAAkB,CAJlB,iBAAkB,CAMlB,qBAAsB,CAJtB,SAAU,CAGV,UACwB,CACxB,wCACE,8CACE,gBAAmB,CAAE,CACzB,qDAEE,cAAe,CADf,SACiB,CACrB,4BAGE,kBAAmB,CAMnB,yBAA8B,CAP9B,YAAa,CAKb,WAAY,CAFZ,MAAO,CAJP,iBAAkB,CASlB,iBAAkB,CANlB,KAAM,CAIN,UAAW,CAFX,WAIoB,CACpB,iDAKE,eAAgB,CADhB,kBAAmB,CAHnB,oBAAqB,CAMrB,cAAe,CADf,eAAiB,CAJjB,aAAc,CACd,iBAIiB,CACjB,2EACE,qBAAsB,CACtB,UAAa,CACf,6EACE,qBAAsB,CACtB,aAAgB,CAExB,eAIE,qBAAsB,CAFtB,qBAAsB,CACtB,eAAgB,CAFhB,iBAGwB,CACxB,kCACE,qBAAwB,CAC1B,wCACE,0CACE,qBAAsB,CACtB,cAAiB,CAAE,CACvB,kCACE,qBAAwB,CAC1B,wCACE,wCACE,qBAAsB,CACtB,cAAiB,CAAE,CACvB,oCAEE,eAAgB,CADhB,qBACkB,CACpB,gCAGE,4BAA6B,CAD7B,yBAA0B,CAE1B,mBAAoB,CAHpB,iBAAkB,CAIlB,UAAa,CACf,oFACE,qBAAsB,CACtB,UAAgB,CAIlB,gMACE,qBAAsB,CACtB,UAAa,CACf,4CAGE,QAAS,CAET,UAAW,CADX,MAAO,CAHP,iBAAkB,CAClB,OAGa,CACb,iDAEE,WAAY,CADZ,KACc,CAChB,wCACE,kDACE,gBAAmB,CAAE,CAC3B,8CAIE,4BAA6B,CAD7B,yBAA0B,CAF1B,qBAAsB,CACtB,WAE+B,CAC/B,oDACE,YAAe,CACjB,oDACE,cAAiB,CACjB,0DACE,iBAAoB,CACpB,wEACE,kBAAqB,CAC7B,+BAKE,2BAA4B,CAF5B,qBAAsB,CAFtB,oBAAqB,CASrB,YAAa,CAFb,eAAgB,CAJhB,WAAY,CAFZ,iBAAkB,CAOlB,sBAAuB,CAHvB,qBAAsB,CACtB,kBAGe,CACf,gDAIE,wBAAyB,CAHzB,oBAAqB,CAErB,MAAO,CADP,eAAgB,CAGhB,UAAa,CACb,sEACE,2BAA8B,CAChC,uEACE,0BAA6B,CACjC,iDACE,qBAAsB,CACtB,YAAa,CACb,SAAY,CACZ,+GAEE,sBAAuB,CADvB,UAAW,CAEX,YAAe,CACnB,yDACE,qBAA2B,CAC3B,+HAEE,sBAAuB,CADvB,UAAW,CAEX,UAAgB,CACpB,oDAEE,kBAAmB,CADnB,mBAAoB,CAEpB,sBAAuB,CACvB,qBAAsB,CACtB,uBAAwB,CACxB,wBAAyB,CACzB,mBAAsB,CACtB,8EACE,SAAY,CACZ,wGAIE,eAAgB,CAFhB,UAAW,CACX,cAAe,CAFf,UAGkB,CACxB,kIACE,qBAAwB,CAC1B,iEACE,oBAAqB,CACrB,SAAY,CACd,2DASE,4BAA6B,CAF7B,6BAA8B,CAC9B,0BAA2B,CAP3B,oBAAqB,CAErB,UAAW,CAGX,gBAAiB,CADjB,eAAgB,CAHhB,qBAAsB,CAEtB,SAK+B,CACjC,4DAGE,kBAAmB,CAOnB,yBAA8B,CAF9B,qBAAsB,CACtB,iBAAkB,CARlB,mBAAoB,CAIpB,WAAY,CAHZ,sBAAuB,CAKvB,gBAAiB,CAIjB,eAAgB,CAPhB,qBAAsB,CAEtB,UAKkB,CAClB,wCACE,kEAEE,yBAA8B,CAD9B,cACgC,CAAE,CACtC,kGAKE,sBAAuB,CAJvB,oBAAqB,CAErB,UAAW,CADX,iBAAkB,CAElB,SACyB,CACzB,wGAOE,eAAgB,CALhB,UAAW,CAGX,UAAW,CAFX,SAAU,CAFV,iBAAkB,CAGlB,OAAQ,CAER,SACkB,CACtB,gGAKE,eAAgB,CAJhB,oBAAqB,CAErB,UAAW,CADX,iBAAkB,CAElB,SACkB,CAClB,sGAOE,eAAgB,CALhB,UAAW,CAGX,UAAW,CAFX,SAAU,CAFV,iBAAkB,CAGlB,OAAQ,CAER,SACkB,CACxB,qEAEE,kBAAmB,CASnB,eAAgB,CADhB,kBAAmB,CAEnB,UAAW,CAXX,mBAAoB,CAapB,eAAgB,CADhB,eAAiB,CALjB,WAAY,CALZ,sBAAuB,CACvB,qBAAsB,CACtB,uBAAwB,CACxB,wBAAyB,CACzB,mBAAoB,CAEpB,UAKkB,CAClB,wCACE,2EAEE,cAAe,CADf,UACiB,CAAE,CACvB,sHACE,eAAkB,CACpB,qHACE,YAAe,CACjB,yEACE,WAAc,CAChB,iHACE,YAAe,CACnB,wDAIE,kBAAmB,CAHnB,oBAAqB,CACrB,WAAY,CACZ,UACqB,CACzB,+BAOE,eAAgB,CALhB,4BAA6B,CAC7B,2BAA4B,CAC5B,yBAA0B,CAH1B,qBAAsB,CAOtB,eAAiB,CAFjB,wBAGiB,CAKjB,wEAKE,eAAgB,CAHhB,iCAAkC,CAClC,kCAAmC,CACnC,yBAA0B,CAH1B,iBAIkB,CACpB,uDACE,iBAAoB,CACtB,uDACE,iBAAoB,CACtB,uDACE,iBAAoB,CACtB,uDACE,iBAAoB,CACtB,uDACE,kBAAqB,CACvB,uDACE,oBAAuB,CACzB,gDAME,mCAAoC,CAEpC,0BAA2B,CAD3B,cAAe,CAFf,gCAAiC,CAJjC,oBAAqB,CAErB,QAAS,CACT,iBAAkB,CAKlB,qBAAsB,CAPtB,OAOwB,CAC1B,oCAEE,UAAW,CADX,gBACa,CAEnB,2BASE,gCAAiC,CALjC,eAAgB,CAChB,qBAAsB,CACtB,mCAAwC,CAHxC,qBAAsB,CADtB,oBAAqB,CAKrB,cAAe,CACf,eAAgB,CAPhB,iBAAkB,CASlB,aAAgB,CAElB,iBAEE,iBAAkB,CADlB,WACoB,CAEtB,mBAGE,iBAAkB,CAClB,eAAgB,CAChB,cAAe,CAJf,yBAA2B,CAC3B,eAAgB,CAIhB,mBAAsB,CAExB,qCAEE,qBAAsB,CACtB,gBAAiB,CAFjB,iBAAkB,CAGlB,gBAAmB,CACnB,kEACE,UAAa,CACf,wCACE,8EAEE,eAAgB,CADhB,cACkB,CAAE,CACxB,iEACE,kBAAqB,CACrB,uEAUE,iBAAkB,CAAlB,kBAAkB,CAAlB,wBAAkB,CAHlB,UAAW,CANX,oBAAqB,CAIrB,UAAW,CAHX,iBAAkB,CAElB,UAAW,CADX,oBAAqB,CASrB,uBAAwB,CADxB,kBAAmB,CALnB,SAM0B,CAEhC,0CACE,yBAA4B,CAE9B,qBAIE,gCAAiC,CAFjC,cAAe,CADf,gBAAiB,CAEjB,eACmC,CACnC,+CAEE,UAAW,CACX,YAAa,CAFb,WAEe,CACf,sDAEE,eAAgB,CADhB,UACkB,CAClB,8DACE,mCAA6C,CACjD,uDACE,sBAAyB,CAC3B,wCACE,qDAGE,eAAgB,CADhB,UAAW,CADX,cAEkB,CAAE,CAC1B,sDAEE,UAAW,CADX,WAAY,CAEZ,iBAAoB,CACtB,gDACE,4BAA6B,CAG7B,UAAW,CACX,eAAiB,CAFjB,mBAEmB,CACrB,mKACE,iBAAoB,CACtB,mKACE,iBAAoB,CACtB,mKACE,iBAAoB,CACtB,mKACE,iBAAoB,CAExB,yBACE,aAAgB,CAElB,yBAEE,aAAc,CADd,kBACgB,CAChB,0DAEE,0BAA2B,CAC3B,oBAAqB,CAFrB,kBAEuB,CACvB,wGAEE,gBAAiB,CADjB,cACmB,CACrB,kGAEE,iBAAkB,CADlB,eACoB,CACtB,uGACE,QAAS,CACT,UAAgB,CACpB,wDAEE,0BAA2B,CAD3B,oBAC6B,CAC7B,oFAGE,2BAAkC,CAClC,8BAA+B,CAC/B,mBAAoB,CACpB,2BAA4B,CAJ5B,eAAgB,CADhB,cAK8B,CAChC,qFAEE,eAAgB,CADhB,cACkB,CACpB,+FACE,0BAA6B,CAC/B,gGACE,2BAA8B,CAClC,kFAEE,aAAc,CACd,iBAAkB,CAFlB,SAEoB,CACtB,mEACE,kBAAqB,CAEzB,4BAGE,QAAS,CACT,MAAO,CAHP,iBAAkB,CAIlB,OAAQ,CAHR,KAAM,CAIN,aAAgB,CAElB,uEACE,sBAA0B,CAE5B,uBACE,wBAA2B,CAC3B,mDASE,4BAA6B,CAF7B,6BAA8B,CAC9B,0BAA2B,CAP3B,oBAAqB,CAErB,UAAW,CAGX,gBAAiB,CADjB,eAAgB,CAHhB,qBAAsB,CAEtB,SAK+B,CACjC,oDAOE,eAAgB,CALhB,4BAA6B,CAC7B,2BAA4B,CAC5B,yBAA0B,CAH1B,qBAAsB,CAOtB,eAAiB,CACjB,cAAe,CAHf,wBAGiB,CACjB,wCACE,0DAEE,+BAAoC,CADpC,cACsC,CAAE,CAC5C,6FAKE,eAAgB,CAHhB,iCAAkC,CAClC,kCAAmC,CACnC,yBAA0B,CAH1B,iBAIkB,CACpB,+EACE,2BAA+B,CACjC,+EACE,2BAA+B,CACjC,+EACE,2BAA+B,CACjC,+EACE,2BAA+B,CACjC,+EACE,4BAAgC,CAClC,4EACE,oBAAuB,CACzB,qEAME,mCAAoC,CAEpC,0BAA2B,CAD3B,cAAe,CAFf,gCAAiC,CAJjC,oBAAqB,CAErB,QAAS,CACT,iBAAkB,CAKlB,qBAAsB,CAPtB,OAOwB,CAC1B,yDAEE,UAAW,CADX,gBACa,CACjB,oDAGE,kBAAmB,CAOnB,yBAA8B,CAF9B,qBAAsB,CACtB,iBAAkB,CARlB,mBAAoB,CAIpB,WAAY,CAHZ,sBAAuB,CAKvB,gBAAiB,CAIjB,eAAgB,CAPhB,qBAAsB,CAEtB,UAKkB,CAClB,wCACE,0DAEE,yBAA8B,CAD9B,cACgC,CAAE,CACtC,0FAKE,sBAAuB,CAJvB,oBAAqB,CAErB,UAAW,CADX,iBAAkB,CAElB,SACyB,CACzB,gGAOE,eAAgB,CALhB,UAAW,CAGX,UAAW,CAFX,SAAU,CAFV,iBAAkB,CAGlB,OAAQ,CAER,SACkB,CACtB,wFAKE,eAAgB,CAJhB,oBAAqB,CAErB,UAAW,CADX,iBAAkB,CAElB,SACkB,CAClB,8FAOE,eAAgB,CALhB,UAAW,CAGX,UAAW,CAFX,SAAU,CAFV,iBAAkB,CAGlB,OAAQ,CAER,SACkB,CAE1B,WACE,qBAAwB,CACxB,4CACE,qBAAwB,CACxB,gHACE,UAAa,CACf,uJAEE,eAAgB,CADhB,qBAAsB,CAEtB,UAAa,CAGf,yHACE,4BAAgC,CAGlC,yHACE,4BAAgC,CAGpC,6GACE,UAAa,CACf,6CACE,UAAW,CACX,mBAAoB,CAEpB,iBAAkB,CADlB,mBACoB,CAExB,+BAEE,UAAW,CADX,cACa,CACb,wCACE,qCAEE,+BAAoC,CADpC,cACsC,CAAE,CAC5C,oCACE,UAAa,CAEjB,4BACE,eAAkB,CAClB,6DACE,UAAa,CACb,oEAEE,eAAgB,CADhB,UACkB,CAClB,4EACE,mCAA6C,CACjD,qEACE,sBAAyB,CAC3B,wCACE,mEAEE,eAAgB,CADhB,UACkB,CAAE,CAE5B,oDACE,UAAa","file":"tabulator_midnight.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #333;\n background-color: #222;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #333;\n color: #fff;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #333;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #1a1a1a;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #999;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #ccc;\n color: #333; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #1a1a1a; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #888; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #888; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: #404040 !important;\n border-top: 1px solid #888;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #404040 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #666;\n white-space: nowrap;\n overflow: visible;\n color: #fff; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #373737 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #888; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #888; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #ccc; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #ccc;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #ccc; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #333;\n color: #333;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #404040 !important;\n border-bottom: 1px solid #888;\n border-top: 1px solid #888;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #404040 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #333;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #666; }\n .tabulator-row.tabulator-row-even {\n background-color: #444; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #999;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #000; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #888;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #888;\n border-bottom: 1px solid #888;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #999;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #ccc;\n color: #333; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #ccc;\n color: #333; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #888;\n border-bottom: 1px solid #888; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #888;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #888; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #888; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #999;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #000; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #888;\n border-bottom: 2px solid #888; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #fff;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #fff; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #666;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #666; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #888;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #666;\n border: 1px solid #888;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #444; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #888;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #888; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #fff;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #666;\n background: #999; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(102, 102, 102, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #999; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #666;\n background: #999; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #fff;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #888;\n padding: 4px;\n padding-top: 6px;\n color: #fff;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #888; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #888;\n border-bottom: 2px solid #888; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #888;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #fff;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #fff; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #fff; }\n\n.tabulator {\n background-color: #222; }\n .tabulator .tabulator-header .tabulator-col {\n background-color: #333; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n color: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input, .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select {\n border: 1px solid #999;\n background: #444;\n color: #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n background: #1a1a1a !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #1a1a1a !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n background: #262626 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: #262626 !important; }\n .tabulator .tabulator-footer .tabulator-paginator label {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page {\n color: #333;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n\n.tabulator-row.tabulator-group {\n min-width: 100%;\n color: #333; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-edit-select-list {\n background: #fff; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item {\n color: #666; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #999;\n background: #444; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(153, 153, 153, 0.5); }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.focused {\n outline: 1px solid #444; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #999;\n background: #666; } }\n\n.tabulator-print-table .tabulator-print-table-group {\n color: #333; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.css b/tmp/tabulator-5.6.1/dist/css/tabulator_modern.css deleted file mode 100644 index 0a6c240..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.css +++ /dev/null @@ -1,1430 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #fff; - background-color: #fff; - font-size: 16px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #3759D7; - background-color: #fff; - color: #3759D7; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #fff; - background: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #3759D7; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #3759D7; - color: #fff; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #2544b7; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #b7c3f1; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #fff; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #e6e6e6; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #b7c3f1; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #b7c3f1; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #3759D7; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #3759D7; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #3759D7; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #3759D7; - color: #3759D7; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #fff; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #fff; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: white !important; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #f3f3f3; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #fff; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #fff; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #2544b7; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #2544b7; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #2544b7; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #999; - background-color: #fff; - color: #3759D7; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: white !important; - border-bottom: 1px solid #fff; - border-top: 1px solid #fff; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #3759D7; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #3759D7; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 24px; - background-color: #f3f3f3; -} - -.tabulator-row.tabulator-row-even { - background-color: #fff; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #3759D7; - color: #fff; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #2544b7; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #2544b7; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 16px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #fff; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #fff; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #fff; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #9ABCEA; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #fff; - border-bottom: 2px solid #fff; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #f3f3f3; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #f3f3f3; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #fff; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #3759D7; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #3759D7; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #f3f3f3; - border: 1px solid #fff; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #fff; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #fff; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #fff; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #f3f3f3; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(243, 243, 243, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #f3f3f3; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #fff; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #fff; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #fff; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #fff; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #fff; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #fff; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #fff; - border-bottom: 2px solid #fff; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #fff; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #3759D7; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #3759D7; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator .tabulator-header { - border-bottom: 3px solid #3759D7; - margin-bottom: 4px; - padding-left: 10px; - font-size: 1.1em; -} - -.tabulator .tabulator-header .tabulator-col { - border-right: 2px solid #fff; - background-color: #fff; -} - -.tabulator .tabulator-header .tabulator-col:nth-child(1) { - padding-left: 10px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - border: 1px solid #3759D7; - font-size: 1em; - color: #3759D7; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - border-top: 2px solid #3759D7; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - padding-left: 10px; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - border-top: 2px solid #3759D7 !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - padding-left: 0 !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell { - background: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder span { - color: #3759D7; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #3759D7; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #3759D7; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - border-top: 3px solid #3759D7 !important; - border-bottom: 2px solid #3759D7 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell { - background: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child { - border-left: 10px solid transparent; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - border-bottom: none !important; -} - -.tabulator-row { - margin-bottom: 2px; -} - -.tabulator-row .tabulator-cell:first-child { - border-left: 10px solid #3759D7; -} - -.tabulator-row:nth-child(even) { - background-color: #627ce0; -} - -.tabulator-row:nth-child(even) .tabulator-cell { - background-color: #fff; -} - -.tabulator-row:nth-child(even) .tabulator-cell:first-child { - border-left: 10px solid #627ce0; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - cursor: pointer; - } - .tabulator-row.tabulator-selectable:hover .tabulator-cell { - background-color: #bbb; - } -} - -.tabulator-row.tabulator-selected .tabulator-cell { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover .tabulator-cell { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-moving { - pointer-events: none !important; -} - -.tabulator-row .tabulator-cell { - padding: 6px 4px; - border-right: 2px solid #fff; - background-color: #f3f3f3; -} - -.tabulator-row.tabulator-group { - min-width: 100%; - margin-bottom: 2px; - border-bottom: 2px solid #3759D7; - border-top: 2px solid #3759D7; - border-right: none; - background: #8ca0e8; -} - -.tabulator-row.tabulator-group span { - color: #3759D7; -} - -.tabulator-edit-select-list { - border: 1px solid #1D68CD; -} - -.tabulator-print-table .tabulator-print-table-group { - border-bottom: 2px solid #3759D7; - border-top: 2px solid #3759D7; - background: #8ca0e8; - margin-bottom: 2px; -} - -.tabulator-print-table .tabulator-print-table-group span { - color: #3759D7; -} - -/*# sourceMappingURL=tabulator_modern.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_modern.css.map deleted file mode 100644 index 61d1b0d..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_modern.scss"],"names":[],"mappings":"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","file":"tabulator_modern.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #fff;\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #3759D7;\n background-color: #fff;\n color: #3759D7;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #fff;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #3759D7;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #3759D7;\n color: #fff; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #2544b7;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #b7c3f1; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #fff;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #b7c3f1; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #b7c3f1; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3759D7; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #3759D7; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3759D7; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #3759D7;\n color: #3759D7; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #fff; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #fff;\n border-bottom: 1px solid #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #f3f3f3;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #fff; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #fff; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2544b7; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2544b7;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2544b7; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #fff;\n color: #3759D7;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #fff;\n border-top: 1px solid #fff;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #3759D7;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #3759D7; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #f3f3f3; }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #fff;\n border-bottom: 1px solid #fff;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #3759D7;\n color: #fff; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #2544b7;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #2544b7;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #fff;\n border-bottom: 1px solid #fff; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #fff;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #fff; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #fff; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #fff;\n border-bottom: 2px solid #fff; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #f3f3f3;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #f3f3f3; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #fff;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3759D7;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3759D7;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #f3f3f3;\n border: 1px solid #fff;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #fff; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #fff;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #fff; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #f3f3f3;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(243, 243, 243, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #f3f3f3;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #fff;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #fff;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #fff;\n border-bottom: 2px solid #fff; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #fff;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3759D7;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3759D7;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator .tabulator-header {\n border-bottom: 3px solid #3759D7;\n margin-bottom: 4px;\n padding-left: 10px;\n font-size: 1.1em; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: 2px solid #fff;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-col:nth-child(1) {\n padding-left: 10px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n border: 1px solid #3759D7;\n font-size: 1em;\n color: #3759D7; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 2px solid #3759D7; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n padding-left: 10px; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n border-top: 2px solid #3759D7 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n padding-left: 0 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n background: none; }\n\n.tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #3759D7; }\n\n.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #3759D7; }\n\n.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #3759D7; }\n\n.tabulator .tabulator-footer .tabulator-calcs-holder {\n border-top: 3px solid #3759D7 !important;\n border-bottom: 2px solid #3759D7 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n background: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child {\n border-left: 10px solid transparent; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n border-bottom: none !important; }\n\n.tabulator-row {\n margin-bottom: 2px; }\n .tabulator-row .tabulator-cell:first-child {\n border-left: 10px solid #3759D7; }\n .tabulator-row:nth-child(even) {\n background-color: #627ce0; }\n .tabulator-row:nth-child(even) .tabulator-cell {\n background-color: #fff; }\n .tabulator-row:nth-child(even) .tabulator-cell:first-child {\n border-left: 10px solid #627ce0; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n cursor: pointer; }\n .tabulator-row.tabulator-selectable:hover .tabulator-cell {\n background-color: #bbb; } }\n .tabulator-row.tabulator-selected .tabulator-cell {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover .tabulator-cell {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-moving {\n pointer-events: none !important; }\n .tabulator-row .tabulator-cell {\n padding: 6px 4px;\n border-right: 2px solid #fff;\n background-color: #f3f3f3; }\n .tabulator-row.tabulator-group {\n min-width: 100%;\n margin-bottom: 2px;\n border-bottom: 2px solid #3759D7;\n border-top: 2px solid #3759D7;\n border-right: none;\n background: #8ca0e8; }\n .tabulator-row.tabulator-group span {\n color: #3759D7; }\n\n.tabulator-edit-select-list {\n border: 1px solid #1D68CD; }\n\n.tabulator-print-table .tabulator-print-table-group {\n border-bottom: 2px solid #3759D7;\n border-top: 2px solid #3759D7;\n background: #8ca0e8;\n margin-bottom: 2px; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #3759D7; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_modern.min.css deleted file mode 100644 index 93d4bad..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{background-color:#fff;border:1px solid #fff;font-size:16px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#fff;border-bottom:1px solid #3759d7;box-sizing:border-box;color:#3759d7;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #fff;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid #3759d7;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#3759d7;color:#fff}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#2544b7;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #b7c3f1;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #fff;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#b7c3f1}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #b7c3f1;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#3759d7}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #3759d7;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#3759d7}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #3759d7;color:#3759d7}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #fff}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #fff;border-top:1px solid #fff;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#f3f3f3;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#f2f2f2!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #fff}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #fff}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2544b7;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2544b7;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2544b7;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#fff;border-top:1px solid #999;color:#3759d7;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #fff;border-top:1px solid #fff;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#3759d7;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#3759d7}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#f3f3f3;box-sizing:border-box;min-height:24px;position:relative}.tabulator-row.tabulator-row-even{background-color:#fff}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #fff;border-top:1px solid #fff;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#3759d7;color:#fff}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#2544b7;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #fff;border-top:1px solid #fff;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #fff;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #fff}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #fff;border-bottom-left-radius:1px;border-left:2px solid #fff;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#f3f3f3;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#f3f3f3}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #fff;border-top:1px solid #999;box-sizing:border-box;font-weight:700;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3759d7;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #3759d7;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#f3f3f3;border:1px solid #fff;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:16px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#fff;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#fff;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #fff}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:16px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#f3f3f3}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,95%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#f3f3f3;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #fff;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #fff;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #fff;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #fff;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #fff}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #fff}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #fff;border-bottom-left-radius:1px;border-left:2px solid #fff;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #fff;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3759d7;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #3759d7;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator .tabulator-header{border-bottom:3px solid #3759d7;font-size:1.1em;margin-bottom:4px;padding-left:10px}.tabulator .tabulator-header .tabulator-col{background-color:#fff;border-right:2px solid #fff}.tabulator .tabulator-header .tabulator-col:first-child{padding-left:10px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{border:1px solid #3759d7;color:#3759d7;font-size:1em}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:2px solid #3759d7}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{padding-left:10px}.tabulator .tabulator-header .tabulator-calcs-holder{border-top:2px solid #3759d7!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{padding-left:0!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell{background:none}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#3759d7}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #3759d7}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #3759d7}.tabulator .tabulator-footer .tabulator-calcs-holder{border-bottom:2px solid #3759d7!important;border-top:3px solid #3759d7!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell{background:none}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child{border-left:10px solid transparent}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none!important}.tabulator-row{margin-bottom:2px}.tabulator-row .tabulator-cell:first-child{border-left:10px solid #3759d7}.tabulator-row:nth-child(2n){background-color:#627ce0}.tabulator-row:nth-child(2n) .tabulator-cell{background-color:#fff}.tabulator-row:nth-child(2n) .tabulator-cell:first-child{border-left:10px solid #627ce0}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{cursor:pointer}.tabulator-row.tabulator-selectable:hover .tabulator-cell{background-color:#bbb}}.tabulator-row.tabulator-selected .tabulator-cell{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover .tabulator-cell{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-moving{pointer-events:none!important}.tabulator-row .tabulator-cell{background-color:#f3f3f3;border-right:2px solid #fff;padding:6px 4px}.tabulator-row.tabulator-group{background:#8ca0e8;border-bottom:2px solid #3759d7;border-right:none;border-top:2px solid #3759d7;margin-bottom:2px;min-width:100%}.tabulator-row.tabulator-group span{color:#3759d7}.tabulator-edit-select-list{border:1px solid #1d68cd}.tabulator-print-table .tabulator-print-table-group{background:#8ca0e8;border-bottom:2px solid #3759d7;border-top:2px solid #3759d7;margin-bottom:2px}.tabulator-print-table .tabulator-print-table-group span{color:#3759d7} -/*# sourceMappingURL=tabulator_modern.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_modern.min.css.map deleted file mode 100644 index fa9eba5..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_modern.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_modern.scss"],"names":[],"mappings":"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","file":"tabulator_modern.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #fff;\n background-color: #fff;\n font-size: 16px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #3759D7;\n background-color: #fff;\n color: #3759D7;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #fff;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #3759D7;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #3759D7;\n color: #fff; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #2544b7;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #b7c3f1; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #fff;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #b7c3f1; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #b7c3f1; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3759D7; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #3759D7; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3759D7; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #3759D7;\n color: #3759D7; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #fff; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #fff;\n border-bottom: 1px solid #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #f3f3f3;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #fff; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #fff; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2544b7; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2544b7;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2544b7; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #fff;\n color: #3759D7;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #fff;\n border-top: 1px solid #fff;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #3759D7;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #3759D7; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 24px;\n background-color: #f3f3f3; }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #fff;\n border-bottom: 1px solid #fff;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #3759D7;\n color: #fff; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #2544b7;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #2544b7;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #fff;\n border-bottom: 1px solid #fff; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 16px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #fff;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #fff; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #fff; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #fff;\n border-bottom: 2px solid #fff; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #f3f3f3;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #f3f3f3; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #fff;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3759D7;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3759D7;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #f3f3f3;\n border: 1px solid #fff;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #fff; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #fff;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #fff; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 16px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #f3f3f3;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(243, 243, 243, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #f3f3f3;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #fff;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #fff;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #fff; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #fff;\n border-bottom: 2px solid #fff; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #fff;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3759D7;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3759D7;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator .tabulator-header {\n border-bottom: 3px solid #3759D7;\n margin-bottom: 4px;\n padding-left: 10px;\n font-size: 1.1em; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: 2px solid #fff;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-col:nth-child(1) {\n padding-left: 10px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n border: 1px solid #3759D7;\n font-size: 1em;\n color: #3759D7; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n border-top: 2px solid #3759D7; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n padding-left: 10px; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n border-top: 2px solid #3759D7 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n padding-left: 0 !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n background: none; }\n\n.tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #3759D7; }\n\n.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #3759D7; }\n\n.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #3759D7; }\n\n.tabulator .tabulator-footer .tabulator-calcs-holder {\n border-top: 3px solid #3759D7 !important;\n border-bottom: 2px solid #3759D7 !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell {\n background: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child {\n border-left: 10px solid transparent; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n border-bottom: none !important; }\n\n.tabulator-row {\n margin-bottom: 2px; }\n .tabulator-row .tabulator-cell:first-child {\n border-left: 10px solid #3759D7; }\n .tabulator-row:nth-child(even) {\n background-color: #627ce0; }\n .tabulator-row:nth-child(even) .tabulator-cell {\n background-color: #fff; }\n .tabulator-row:nth-child(even) .tabulator-cell:first-child {\n border-left: 10px solid #627ce0; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n cursor: pointer; }\n .tabulator-row.tabulator-selectable:hover .tabulator-cell {\n background-color: #bbb; } }\n .tabulator-row.tabulator-selected .tabulator-cell {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover .tabulator-cell {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-moving {\n pointer-events: none !important; }\n .tabulator-row .tabulator-cell {\n padding: 6px 4px;\n border-right: 2px solid #fff;\n background-color: #f3f3f3; }\n .tabulator-row.tabulator-group {\n min-width: 100%;\n margin-bottom: 2px;\n border-bottom: 2px solid #3759D7;\n border-top: 2px solid #3759D7;\n border-right: none;\n background: #8ca0e8; }\n .tabulator-row.tabulator-group span {\n color: #3759D7; }\n\n.tabulator-edit-select-list {\n border: 1px solid #1D68CD; }\n\n.tabulator-print-table .tabulator-print-table-group {\n border-bottom: 2px solid #3759D7;\n border-top: 2px solid #3759D7;\n background: #8ca0e8;\n margin-bottom: 2px; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #3759D7; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.css b/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.css deleted file mode 100644 index 1ac7969..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.css +++ /dev/null @@ -1,2102 +0,0 @@ -/******************************* - Site Settings -*******************************/ - -/*------------------- - Fonts ---------------------*/ - -/*------------------- - Base Sizes ---------------------*/ - -/* This is the single variable that controls them all */ - -/* The size of page text */ - -/*------------------- - Exact Pixel Values ---------------------*/ - -/* - These are used to specify exact pixel values in em - for things like borders that remain constantly - sized as emSize adjusts - - Since there are many more sizes than names for sizes, - these are named by their original pixel values. - -*/ - -/*------------------- - Border Radius ---------------------*/ - -/* See Power-user section below - for explanation of $px variables -*/ - -/*------------------- - Site Colors ---------------------*/ - -/*--- Colors ---*/ - -/*--- Light Colors ---*/ - -/*--- Neutrals ---*/ - -/*--- Colored Backgrounds ---*/ - -/*--- Colored Text ---*/ - -/*--- Colored Headers ---*/ - -/*--- Colored Border ---*/ - -/*------------------- - Alpha Colors ---------------------*/ - -/*------------------- - Brand Colors ---------------------*/ - -/*-------------- - Page Heading ----------------*/ - -/*------------------- - Page ---------------------*/ - -/*-------------- - Form Input ----------------*/ - -/* This adjusts the default form input across all elements */ - -/* Input Text Color */ - -/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ - -/*------------------- - Focused Input ---------------------*/ - -/* Used on inputs, textarea etc */ - -/* Used on dropdowns, other larger blocks */ - -/*------------------- - Sizes ---------------------*/ - -/* - Sizes are all expressed in terms of 14px/em (default em) - This ensures these "ratios" remain constant despite changes in EM -*/ - -/*------------------- - Paragraph ---------------------*/ - -/*------------------- - Links ---------------------*/ - -/*------------------- - Highlighted Text ---------------------*/ - -/*------------------- - Em Sizes ---------------------*/ - -/* - This rounds $size values to the closest pixel then expresses that value in (r)em. - This ensures all size values round to exact pixels -*/ - -/* em */ - -/* rem */ - -/*------------------- - Loader ---------------------*/ - -/*------------------- - Grid ---------------------*/ - -/*------------------- - Transitions ---------------------*/ - -/*------------------- - Breakpoints ---------------------*/ - -/* Columns */ - -/******************************* - Power-User -*******************************/ - -/*------------------- - Emotive Colors ---------------------*/ - -/* Positive */ - -/* Negative */ - -/* Info */ - -/* Warning */ - -/*------------------- - Paths ---------------------*/ - -/* For source only. Modified in gulp for dist */ - -/*------------------- - Icons ---------------------*/ - -/* Maximum Glyph Width of Icon */ - -/*------------------- - Neutral Text ---------------------*/ - -/*------------------- - Brand Colors ---------------------*/ - -/*------------------- - Borders ---------------------*/ - -/*------------------- - Accents ---------------------*/ - -/* Differentiating Neutrals */ - -/* Differentiating Layers */ - -/*------------------- - Derived Values ---------------------*/ - -/* Loaders Position Offset */ - -/* Rendered Scrollbar Width */ - -/* Maximum Single Character Glyph Width, aka Capital "W" */ - -/* Used to match floats with text */ - -/* Header Spacing */ - -/* Minimum Mobile Width */ - -/* Positive / Negative Dupes */ - -/* Responsive */ - -/******************************* - States -*******************************/ - -/*------------------- - Disabled ---------------------*/ - -/*------------------- - Hover ---------------------*/ - -/*--- Shadows ---*/ - -/*--- Colors ---*/ - -/*--- Emotive ---*/ - -/*--- Brand ---*/ - -/*--- Dark Tones ---*/ - -/*--- Light Tones ---*/ - -/*------------------- - Focus ---------------------*/ - -/*--- Colors ---*/ - -/*--- Emotive ---*/ - -/*--- Brand ---*/ - -/*--- Dark Tones ---*/ - -/*--- Light Tones ---*/ - -/*------------------- - Down (:active) ---------------------*/ - -/*--- Colors ---*/ - -/*--- Emotive ---*/ - -/*--- Brand ---*/ - -/*--- Dark Tones ---*/ - -/*--- Light Tones ---*/ - -/*------------------- - Active ---------------------*/ - -/*--- Colors ---*/ - -/*--- Emotive ---*/ - -/*--- Brand ---*/ - -/*--- Dark Tones ---*/ - -/*--- Light Tones ---*/ - -/******************************* - Table -*******************************/ - -/*------------------- - Element ---------------------*/ - -/*-------------- - Parts ----------------*/ - -/* Table Row */ - -/* Table Cell */ - -/* Table Header */ - -/* Table Footer */ - -/* Responsive Size */ - -/*------------------- - Types ---------------------*/ - -/* Definition */ - -/*-------------- - Couplings ----------------*/ - -/*-------------- - States ----------------*/ - -/* Positive */ - -/* Negative */ - -/* Error */ - -/* Warning */ - -/* Active */ - -/*-------------- - Types ----------------*/ - -/* Attached */ - -/* Striped */ - -/* Selectable */ - -/* Sortable */ - -/* Colors */ - -/* Inverted */ - -/* Basic */ - -/* Padded */ - -/* Compact */ - -/* Sizes */ - -.tabulator { - position: relative; - border: 1px solid rgba(34, 36, 38, 0.15); - background-color: #FFFFFF; - font-size: 14px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: #F9FAFB; - color: rgba(0, 0, 0, 0.87); - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #ddd; - background: #F9FAFB; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #dae1e7; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #ddd; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #dae1e7; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: white !important; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #e2e2e2 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #2975DD; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #2975DD; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #2975DD; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #999; - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: white !important; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #EFEFEF; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #ddd; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #DB2828; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #DB2828; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #9ABCEA; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #ddd; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #EFEFEF; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #ddd; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #ddd; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #ddd; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #ddd; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator { - width: 100%; - margin: 1em 0em; - border: 1px solid rgba(34, 36, 38, 0.15); - box-shadow: none; - border-radius: 0.28571rem; - color: rgba(0, 0, 0, 0.87); - /* Red */ - /* Orange */ - /* Yellow */ - /* Olive */ - /* Green */ - /* Teal */ - /* Blue */ - /* Violet */ - /* Purple */ - /* Pink */ - /* Brown */ - /* Grey */ - /* Black */ -} - -.tabulator .tabulator-header { - border-right: none; - border-bottom: 1px solid rgba(34, 36, 38, 0.1); - background-color: #F9FAFB; - box-shadow: none; - color: rgba(0, 0, 0, 0.87); - font-style: none; - font-weight: bold; - text-transform: none; -} - -.tabulator .tabulator-header .tabulator-col { - border-right: none; - background-color: #F9FAFB; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.92857em 0.78571em; -} - -.tabulator .tabulator-tableholder .tabulator-table { - background-color: transparent; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.tabulator .tabulator-footer { - padding: 0.78571em 0.78571em; - border-top: 1px solid rgba(34, 36, 38, 0.15); - box-shadow: none; - background: #F9FAFB; - text-align: right; - color: rgba(0, 0, 0, 0.87); - font-style: normal; - font-weight: normal; - text-transform: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - margin: -0.78571em -0.78571em 0.78571em -0.78571em; - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -0.78571em; - border-bottom: none; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive { - box-shadow: 0px 0px 0px #A3C293 inset; - background: #FCFFF5 !important; - color: #21BA45 !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive:hover, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive:hover { - background: #f7ffe6 !important; - color: #13ae38 !important; - } -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative { - box-shadow: 0px 0px 0px #E0B4B4 inset; - background: #FFF6F6 !important; - color: #DB2828 !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative:hover, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative:hover { - background: #ffe7e7 !important; - color: #d41616 !important; - } -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error { - box-shadow: 0px 0px 0px #E0B4B4 inset; - background: #FFF6F6 !important; - color: #DB2828 !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error:hover, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error:hover { - background: #ffe7e7 !important; - color: #d12323 !important; - } -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning { - box-shadow: 0px 0px 0px #C9BA9B inset; - background: #FFFAF3 !important; - color: #F2C037 !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning:hover, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning:hover { - background: #fff4e4 !important; - color: #f1bb29 !important; - } -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active { - box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset; - background: #E0E0E0 !important; - color: rgba(0, 0, 0, 0.87) !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active:hover, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active:hover { - background: #f7ffe6 !important; - color: #13ae38 !important; - } -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active, -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active { - pointer-events: none; - color: rgba(0, 0, 0, 0.2); -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.disabled:hover { - pointer-events: none; - color: rgba(0, 0, 0, 0.2); - } -} - -.tabulator.inverted { - background: #333333; - color: rgba(255, 255, 255, 0.9); - border: none; -} - -.tabulator.inverted .tabulator-header { - background-color: rgba(0, 0, 0, 0.15); - border-color: rgba(255, 255, 255, 0.1) !important; - color: rgba(255, 255, 255, 0.9); -} - -.tabulator.inverted .tabulator-header .tabulator-col { - border-color: rgba(255, 255, 255, 0.1) !important; -} - -.tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row { - color: rgba(255, 255, 255, 0.9); - border: none; -} - -.tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - border-color: rgba(255, 255, 255, 0.1) !important; -} - -.tabulator.inverted .tabulator-footer { - background: #FFFFFF; -} - -.tabulator.striped .tabulator-row:nth-child(even) { - background-color: #f2f2f2; -} - -.tabulator.celled { - border: 1px solid rgba(34, 36, 38, 0.15); -} - -.tabulator.celled .tabulator-header .tabulator-col { - border-right: 1px solid rgba(34, 36, 38, 0.1); -} - -.tabulator.celled .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid rgba(34, 36, 38, 0.1); -} - -.tabulator[class*="single line"] .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - border-right: none; -} - -.tabulator.red { - border-top: 0.2em solid #DB2828; -} - -.tabulator.inverted.red { - background-color: #DB2828 !important; - color: #FFFFFF !important; -} - -.tabulator.orange { - border-top: 0.2em solid #F2711C; -} - -.tabulator.inverted.orange { - background-color: #F2711C !important; - color: #FFFFFF !important; -} - -.tabulator.yellow { - border-top: 0.2em solid #FBBD08; -} - -.tabulator.inverted.yellow { - background-color: #FBBD08 !important; - color: #FFFFFF !important; -} - -.tabulator.olive { - border-top: 0.2em solid #B5CC18; -} - -.tabulator.inverted.olive { - background-color: #B5CC18 !important; - color: #FFFFFF !important; -} - -.tabulator.green { - border-top: 0.2em solid #21BA45; -} - -.tabulator.inverted.green { - background-color: #21BA45 !important; - color: #FFFFFF !important; -} - -.tabulator.teal { - border-top: 0.2em solid #00B5AD; -} - -.tabulator.inverted.teal { - background-color: #00B5AD !important; - color: #FFFFFF !important; -} - -.tabulator.blue { - border-top: 0.2em solid #2185D0; -} - -.tabulator.inverted.blue { - background-color: #2185D0 !important; - color: #FFFFFF !important; -} - -.tabulator.violet { - border-top: 0.2em solid #6435C9; -} - -.tabulator.inverted.violet { - background-color: #6435C9 !important; - color: #FFFFFF !important; -} - -.tabulator.purple { - border-top: 0.2em solid #A333C8; -} - -.tabulator.inverted.purple { - background-color: #A333C8 !important; - color: #FFFFFF !important; -} - -.tabulator.pink { - border-top: 0.2em solid #E03997; -} - -.tabulator.inverted.pink { - background-color: #E03997 !important; - color: #FFFFFF !important; -} - -.tabulator.brown { - border-top: 0.2em solid #A5673F; -} - -.tabulator.inverted.brown { - background-color: #A5673F !important; - color: #FFFFFF !important; -} - -.tabulator.grey { - border-top: 0.2em solid #767676; -} - -.tabulator.inverted.grey { - background-color: #767676 !important; - color: #FFFFFF !important; -} - -.tabulator.black { - border-top: 0.2em solid #1B1C1D; -} - -.tabulator.inverted.black { - background-color: #1B1C1D !important; - color: #FFFFFF !important; -} - -.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content { - padding: 1em 1em; -} - -.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 20px; -} - -.tabulator.padded .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 1em 1em; -} - -.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content { - padding: 1.5em 1.5em; -} - -.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 26px; -} - -.tabulator.padded.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 1.5em 1.5em; -} - -.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.5em 0.7em; -} - -.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 12px; -} - -.tabulator.compact .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 0.5em 0.7em; -} - -.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.4em 0.6em; -} - -.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 10px; -} - -.tabulator.compact.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell { - padding: 0.4em 0.6em; -} - -.tabulator-row { - border-bottom: 1px solid rgba(34, 36, 38, 0.1); -} - -.tabulator-row.tabulator-row-even { - background-color: #fff; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset; - background: #E0E0E0 !important; - color: rgba(0, 0, 0, 0.87) !important; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA !important; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC !important; - cursor: pointer; - } -} - -.tabulator-row.tabulator-moving { - pointer-events: none !important; -} - -.tabulator-row .tabulator-cell { - padding: 0.78571em 0.78571em; - border-right: none; - vertical-align: middle; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - color: #fff; -} - -.tabulator-row.tabulator-group { - background: #fafafa; -} - -.tabulator-row.tabulator-group span { - color: #666; -} - -.tabulator-menu { - background: #FFFFFF; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - background: #F9FAFB; - } -} - -.tabulator-edit-select-list { - background: #FFFFFF; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #FFFFFF; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - color: #FFFFFF; - } -} - -.tabulator-edit-select-list .tabulator-edit-select-list-notice { - color: inherit; -} - -.tabulator-print-table .tabulator-print-table-group { - background: #fafafa; -} - -.tabulator-print-table .tabulator-print-table-group span { - color: #666; -} - -/*# sourceMappingURL=tabulator_semanticui.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.css.map deleted file mode 100644 index f43129b..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_semanticui.scss"],"names":[],"mappings":"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","file":"tabulator_semanticui.css","sourcesContent":["/*******************************\n Site Settings\n*******************************/\n/*-------------------\n Fonts\n--------------------*/\n/*-------------------\n Base Sizes\n--------------------*/\n/* This is the single variable that controls them all */\n/* The size of page text */\n/*-------------------\n Exact Pixel Values\n--------------------*/\n/*\n These are used to specify exact pixel values in em\n for things like borders that remain constantly\n sized as emSize adjusts\n\n Since there are many more sizes than names for sizes,\n these are named by their original pixel values.\n\n*/\n/*-------------------\n Border Radius\n--------------------*/\n/* See Power-user section below\n for explanation of $px variables\n*/\n/*-------------------\n Site Colors\n--------------------*/\n/*--- Colors ---*/\n/*--- Light Colors ---*/\n/*--- Neutrals ---*/\n/*--- Colored Backgrounds ---*/\n/*--- Colored Text ---*/\n/*--- Colored Headers ---*/\n/*--- Colored Border ---*/\n/*-------------------\n Alpha Colors\n--------------------*/\n/*-------------------\n Brand Colors\n--------------------*/\n/*--------------\n Page Heading\n---------------*/\n/*-------------------\n Page\n--------------------*/\n/*--------------\n Form Input\n---------------*/\n/* This adjusts the default form input across all elements */\n/* Input Text Color */\n/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */\n/*-------------------\n Focused Input\n--------------------*/\n/* Used on inputs, textarea etc */\n/* Used on dropdowns, other larger blocks */\n/*-------------------\n Sizes\n--------------------*/\n/*\n Sizes are all expressed in terms of 14px/em (default em)\n This ensures these \"ratios\" remain constant despite changes in EM\n*/\n/*-------------------\n Paragraph\n--------------------*/\n/*-------------------\n Links\n--------------------*/\n/*-------------------\n Highlighted Text\n--------------------*/\n/*-------------------\n Em Sizes\n--------------------*/\n/*\n This rounds $size values to the closest pixel then expresses that value in (r)em.\n This ensures all size values round to exact pixels\n*/\n/* em */\n/* rem */\n/*-------------------\n Loader\n--------------------*/\n/*-------------------\n Grid\n--------------------*/\n/*-------------------\n Transitions\n--------------------*/\n/*-------------------\n Breakpoints\n--------------------*/\n/* Columns */\n/*******************************\n Power-User\n*******************************/\n/*-------------------\n Emotive Colors\n--------------------*/\n/* Positive */\n/* Negative */\n/* Info */\n/* Warning */\n/*-------------------\n Paths\n--------------------*/\n/* For source only. Modified in gulp for dist */\n/*-------------------\n Icons\n--------------------*/\n/* Maximum Glyph Width of Icon */\n/*-------------------\n Neutral Text\n--------------------*/\n/*-------------------\n Brand Colors\n--------------------*/\n/*-------------------\n Borders\n--------------------*/\n/*-------------------\n Accents\n--------------------*/\n/* Differentiating Neutrals */\n/* Differentiating Layers */\n/*-------------------\n Derived Values\n--------------------*/\n/* Loaders Position Offset */\n/* Rendered Scrollbar Width */\n/* Maximum Single Character Glyph Width, aka Capital \"W\" */\n/* Used to match floats with text */\n/* Header Spacing */\n/* Minimum Mobile Width */\n/* Positive / Negative Dupes */\n/* Responsive */\n/*******************************\n States\n*******************************/\n/*-------------------\n Disabled\n--------------------*/\n/*-------------------\n Hover\n--------------------*/\n/*--- Shadows ---*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\n Focus\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\n Down (:active)\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\n Active\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*******************************\n Table\n*******************************/\n/*-------------------\n Element\n--------------------*/\n/*--------------\n Parts\n---------------*/\n/* Table Row */\n/* Table Cell */\n/* Table Header */\n/* Table Footer */\n/* Responsive Size */\n/*-------------------\n Types\n--------------------*/\n/* Definition */\n/*--------------\n Couplings\n---------------*/\n/*--------------\n States\n---------------*/\n/* Positive */\n/* Negative */\n/* Error */\n/* Warning */\n/* Active */\n/*--------------\n Types\n---------------*/\n/* Attached */\n/* Striped */\n/* Selectable */\n/* Sortable */\n/* Colors */\n/* Inverted */\n/* Basic */\n/* Padded */\n/* Compact */\n/* Sizes */\n.tabulator {\n position: relative;\n border: 1px solid rgba(34, 36, 38, 0.15);\n background-color: #FFFFFF;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #F9FAFB;\n color: rgba(0, 0, 0, 0.87);\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #ddd;\n background: #F9FAFB;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #dae1e7;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #ddd;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #dae1e7; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #e2e2e2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #EFEFEF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #ddd;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #DB2828; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #DB2828; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #ddd;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #EFEFEF; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #ddd;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #ddd; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #ddd;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n width: 100%;\n margin: 1em 0em;\n border: 1px solid rgba(34, 36, 38, 0.15);\n box-shadow: none;\n border-radius: 0.28571rem;\n color: rgba(0, 0, 0, 0.87);\n /* Red */\n /* Orange */\n /* Yellow */\n /* Olive */\n /* Green */\n /* Teal */\n /* Blue */\n /* Violet */\n /* Purple */\n /* Pink */\n /* Brown */\n /* Grey */\n /* Black */ }\n .tabulator .tabulator-header {\n border-right: none;\n border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n background-color: #F9FAFB;\n box-shadow: none;\n color: rgba(0, 0, 0, 0.87);\n font-style: none;\n font-weight: bold;\n text-transform: none; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none;\n background-color: #F9FAFB; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.92857em 0.78571em; }\n .tabulator .tabulator-tableholder .tabulator-table {\n background-color: transparent; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-footer {\n padding: 0.78571em 0.78571em;\n border-top: 1px solid rgba(34, 36, 38, 0.15);\n box-shadow: none;\n background: #F9FAFB;\n text-align: right;\n color: rgba(0, 0, 0, 0.87);\n font-style: normal;\n font-weight: normal;\n text-transform: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n margin: -0.78571em -0.78571em 0.78571em -0.78571em;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -0.78571em;\n border-bottom: none; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive {\n box-shadow: 0px 0px 0px #A3C293 inset;\n background: #FCFFF5 !important;\n color: #21BA45 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive:hover {\n background: #f7ffe6 !important;\n color: #13ae38 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative {\n box-shadow: 0px 0px 0px #E0B4B4 inset;\n background: #FFF6F6 !important;\n color: #DB2828 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative:hover {\n background: #ffe7e7 !important;\n color: #d41616 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error {\n box-shadow: 0px 0px 0px #E0B4B4 inset;\n background: #FFF6F6 !important;\n color: #DB2828 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error:hover {\n background: #ffe7e7 !important;\n color: #d12323 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning {\n box-shadow: 0px 0px 0px #C9BA9B inset;\n background: #FFFAF3 !important;\n color: #F2C037 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning:hover {\n background: #fff4e4 !important;\n color: #f1bb29 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n background: #E0E0E0 !important;\n color: rgba(0, 0, 0, 0.87) !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active:hover {\n background: #f7ffe6 !important;\n color: #13ae38 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active {\n pointer-events: none;\n color: rgba(0, 0, 0, 0.2); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.disabled:hover {\n pointer-events: none;\n color: rgba(0, 0, 0, 0.2); } }\n .tabulator.inverted {\n background: #333333;\n color: rgba(255, 255, 255, 0.9);\n border: none; }\n .tabulator.inverted .tabulator-header {\n background-color: rgba(0, 0, 0, 0.15);\n border-color: rgba(255, 255, 255, 0.1) !important;\n color: rgba(255, 255, 255, 0.9); }\n .tabulator.inverted .tabulator-header .tabulator-col {\n border-color: rgba(255, 255, 255, 0.1) !important; }\n .tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row {\n color: rgba(255, 255, 255, 0.9);\n border: none; }\n .tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-color: rgba(255, 255, 255, 0.1) !important; }\n .tabulator.inverted .tabulator-footer {\n background: #FFFFFF; }\n .tabulator.striped .tabulator-row:nth-child(even) {\n background-color: #f2f2f2; }\n .tabulator.celled {\n border: 1px solid rgba(34, 36, 38, 0.15); }\n .tabulator.celled .tabulator-header .tabulator-col {\n border-right: 1px solid rgba(34, 36, 38, 0.1); }\n .tabulator.celled .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid rgba(34, 36, 38, 0.1); }\n .tabulator[class*=\"single line\"] .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: none; }\n .tabulator.red {\n border-top: 0.2em solid #DB2828; }\n .tabulator.inverted.red {\n background-color: #DB2828 !important;\n color: #FFFFFF !important; }\n .tabulator.orange {\n border-top: 0.2em solid #F2711C; }\n .tabulator.inverted.orange {\n background-color: #F2711C !important;\n color: #FFFFFF !important; }\n .tabulator.yellow {\n border-top: 0.2em solid #FBBD08; }\n .tabulator.inverted.yellow {\n background-color: #FBBD08 !important;\n color: #FFFFFF !important; }\n .tabulator.olive {\n border-top: 0.2em solid #B5CC18; }\n .tabulator.inverted.olive {\n background-color: #B5CC18 !important;\n color: #FFFFFF !important; }\n .tabulator.green {\n border-top: 0.2em solid #21BA45; }\n .tabulator.inverted.green {\n background-color: #21BA45 !important;\n color: #FFFFFF !important; }\n .tabulator.teal {\n border-top: 0.2em solid #00B5AD; }\n .tabulator.inverted.teal {\n background-color: #00B5AD !important;\n color: #FFFFFF !important; }\n .tabulator.blue {\n border-top: 0.2em solid #2185D0; }\n .tabulator.inverted.blue {\n background-color: #2185D0 !important;\n color: #FFFFFF !important; }\n .tabulator.violet {\n border-top: 0.2em solid #6435C9; }\n .tabulator.inverted.violet {\n background-color: #6435C9 !important;\n color: #FFFFFF !important; }\n .tabulator.purple {\n border-top: 0.2em solid #A333C8; }\n .tabulator.inverted.purple {\n background-color: #A333C8 !important;\n color: #FFFFFF !important; }\n .tabulator.pink {\n border-top: 0.2em solid #E03997; }\n .tabulator.inverted.pink {\n background-color: #E03997 !important;\n color: #FFFFFF !important; }\n .tabulator.brown {\n border-top: 0.2em solid #A5673F; }\n .tabulator.inverted.brown {\n background-color: #A5673F !important;\n color: #FFFFFF !important; }\n .tabulator.grey {\n border-top: 0.2em solid #767676; }\n .tabulator.inverted.grey {\n background-color: #767676 !important;\n color: #FFFFFF !important; }\n .tabulator.black {\n border-top: 0.2em solid #1B1C1D; }\n .tabulator.inverted.black {\n background-color: #1B1C1D !important;\n color: #FFFFFF !important; }\n .tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 1em 1em; }\n .tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 20px; }\n .tabulator.padded .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 1em 1em; }\n .tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 1.5em 1.5em; }\n .tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 26px; }\n .tabulator.padded.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 1.5em 1.5em; }\n .tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.5em 0.7em; }\n .tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 12px; }\n .tabulator.compact .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.5em 0.7em; }\n .tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.4em 0.6em; }\n .tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 10px; }\n .tabulator.compact.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.4em 0.6em; }\n\n.tabulator-row {\n border-bottom: 1px solid rgba(34, 36, 38, 0.1); }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n background: #E0E0E0 !important;\n color: rgba(0, 0, 0, 0.87) !important; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC !important;\n cursor: pointer; } }\n .tabulator-row.tabulator-moving {\n pointer-events: none !important; }\n .tabulator-row .tabulator-cell {\n padding: 0.78571em 0.78571em;\n border-right: none;\n vertical-align: middle; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n color: #fff; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-menu {\n background: #FFFFFF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n background: #F9FAFB; } }\n\n.tabulator-edit-select-list {\n background: #FFFFFF; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #FFFFFF; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #FFFFFF; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.min.css deleted file mode 100644 index 06a15cf..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{background-color:#fff;font-size:14px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{border-bottom:1px solid #999;box-sizing:border-box;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#f9fafb;border-right:1px solid #ddd;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#dae1e7;border:1px solid #999;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #ddd;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#dae1e7;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #ddd;border-top:1px solid #ddd;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#e2e2e2!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#fff;border-top:1px solid #999;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{border-bottom:1px solid #ddd;border-top:1px solid #ddd;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:22px;position:relative}.tabulator-row.tabulator-row-even{background-color:#efefef}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #ddd;border-top:1px solid #ddd;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #ddd;border-top:1px solid #ddd;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #ddd;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #db2828}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#db2828}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #ddd;border-bottom-left-radius:1px;border-left:2px solid #ddd;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #ddd;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:14px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#efefef;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#ddd;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #ddd}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:14px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #ddd;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #ddd;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #ddd;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #ddd;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #ddd;border-bottom-left-radius:1px;border-left:2px solid #ddd;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{border:1px solid rgba(34,36,38,.15);border-radius:.28571rem;box-shadow:none;color:rgba(0,0,0,.87);margin:1em 0;width:100%}.tabulator .tabulator-header{border-bottom:1px solid rgba(34,36,38,.1);box-shadow:none;color:rgba(0,0,0,.87);font-style:none;font-weight:700;text-transform:none}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{background-color:#f9fafb;border-right:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:.92857em .78571em}.tabulator .tabulator-tableholder .tabulator-table{background-color:transparent}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#f2f2f2!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.tabulator .tabulator-footer{background:#f9fafb;border-top:1px solid rgba(34,36,38,.15);box-shadow:none;color:rgba(0,0,0,.87);font-style:normal;font-weight:400;padding:.78571em;text-align:right;text-transform:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#fff!important;margin:-.78571em -.78571em .78571em}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-.78571em}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive{background:#fcfff5!important;box-shadow:inset 0 0 0 #a3c293;color:#21ba45!important}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive:hover,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive:hover{background:#f7ffe6!important;color:#13ae38!important}}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative{background:#fff6f6!important;box-shadow:inset 0 0 0 #e0b4b4;color:#db2828!important}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative:hover,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative:hover{background:#ffe7e7!important;color:#d41616!important}}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error{background:#fff6f6!important;box-shadow:inset 0 0 0 #e0b4b4;color:#db2828!important}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error:hover,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error:hover{background:#ffe7e7!important;color:#d12323!important}}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning{background:#fffaf3!important;box-shadow:inset 0 0 0 #c9ba9b;color:#f2c037!important}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning:hover,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning:hover{background:#fff4e4!important;color:#f1bb29!important}}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active{background:#e0e0e0!important;box-shadow:inset 0 0 0 rgba(0,0,0,.87);color:rgba(0,0,0,.87)!important}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active:hover,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active:hover{background:#f7ffe6!important;color:#13ae38!important}}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active,.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active{color:rgba(0,0,0,.2);pointer-events:none}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.disabled:hover{color:rgba(0,0,0,.2);pointer-events:none}}.tabulator.inverted{background:#333;border:none;color:hsla(0,0%,100%,.9)}.tabulator.inverted .tabulator-header{background-color:rgba(0,0,0,.15);color:hsla(0,0%,100%,.9)}.tabulator.inverted .tabulator-header,.tabulator.inverted .tabulator-header .tabulator-col{border-color:hsla(0,0%,100%,.1)!important}.tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row{border:none;color:hsla(0,0%,100%,.9)}.tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-color:hsla(0,0%,100%,.1)!important}.tabulator.inverted .tabulator-footer{background:#fff}.tabulator.striped .tabulator-row:nth-child(2n){background-color:#f2f2f2}.tabulator.celled{border:1px solid rgba(34,36,38,.15)}.tabulator.celled .tabulator-header .tabulator-col,.tabulator.celled .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid rgba(34,36,38,.1)}.tabulator[class*="single line"] .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:none}.tabulator.red{border-top:.2em solid #db2828}.tabulator.inverted.red{background-color:#db2828!important;color:#fff!important}.tabulator.orange{border-top:.2em solid #f2711c}.tabulator.inverted.orange{background-color:#f2711c!important;color:#fff!important}.tabulator.yellow{border-top:.2em solid #fbbd08}.tabulator.inverted.yellow{background-color:#fbbd08!important;color:#fff!important}.tabulator.olive{border-top:.2em solid #b5cc18}.tabulator.inverted.olive{background-color:#b5cc18!important;color:#fff!important}.tabulator.green{border-top:.2em solid #21ba45}.tabulator.inverted.green{background-color:#21ba45!important;color:#fff!important}.tabulator.teal{border-top:.2em solid #00b5ad}.tabulator.inverted.teal{background-color:#00b5ad!important;color:#fff!important}.tabulator.blue{border-top:.2em solid #2185d0}.tabulator.inverted.blue{background-color:#2185d0!important;color:#fff!important}.tabulator.violet{border-top:.2em solid #6435c9}.tabulator.inverted.violet{background-color:#6435c9!important;color:#fff!important}.tabulator.purple{border-top:.2em solid #a333c8}.tabulator.inverted.purple{background-color:#a333c8!important;color:#fff!important}.tabulator.pink{border-top:.2em solid #e03997}.tabulator.inverted.pink{background-color:#e03997!important;color:#fff!important}.tabulator.brown{border-top:.2em solid #a5673f}.tabulator.inverted.brown{background-color:#a5673f!important;color:#fff!important}.tabulator.grey{border-top:.2em solid #767676}.tabulator.inverted.grey{background-color:#767676!important;color:#fff!important}.tabulator.black{border-top:.2em solid #1b1c1d}.tabulator.inverted.black{background-color:#1b1c1d!important;color:#fff!important}.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content{padding:1em}.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:20px}.tabulator.padded .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:1em}.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content{padding:1.5em}.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:26px}.tabulator.padded.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:1.5em}.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content{padding:.5em .7em}.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:12px}.tabulator.compact .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:.5em .7em}.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content{padding:.4em .6em}.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:10px}.tabulator.compact.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:.4em .6em}.tabulator-row{border-bottom:1px solid rgba(34,36,38,.1)}.tabulator-row.tabulator-row-even{background-color:#fff}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background:#e0e0e0!important;box-shadow:inset 0 0 0 rgba(0,0,0,.87);color:rgba(0,0,0,.87)!important}}.tabulator-row.tabulator-selected{background-color:#9abcea!important}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc!important;cursor:pointer}}.tabulator-row.tabulator-moving{pointer-events:none!important}.tabulator-row .tabulator-cell{border-right:none;padding:.78571em;vertical-align:middle}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{color:#fff}.tabulator-row.tabulator-group{background:#fafafa}.tabulator-row.tabulator-group span{color:#666}.tabulator-menu{background:#fff}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#f9fafb}}.tabulator-edit-select-list{background:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{color:#fff}}.tabulator-edit-select-list .tabulator-edit-select-list-notice{color:inherit}.tabulator-print-table .tabulator-print-table-group{background:#fafafa}.tabulator-print-table .tabulator-print-table-group span{color:#666} -/*# sourceMappingURL=tabulator_semanticui.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.min.css.map deleted file mode 100644 index c579bcd..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_semanticui.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_semanticui.scss"],"names":[],"mappings":"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","file":"tabulator_semanticui.min.css","sourcesContent":["/*******************************\n Site Settings\n*******************************/\n/*-------------------\n Fonts\n--------------------*/\n/*-------------------\n Base Sizes\n--------------------*/\n/* This is the single variable that controls them all */\n/* The size of page text */\n/*-------------------\n Exact Pixel Values\n--------------------*/\n/*\n These are used to specify exact pixel values in em\n for things like borders that remain constantly\n sized as emSize adjusts\n\n Since there are many more sizes than names for sizes,\n these are named by their original pixel values.\n\n*/\n/*-------------------\n Border Radius\n--------------------*/\n/* See Power-user section below\n for explanation of $px variables\n*/\n/*-------------------\n Site Colors\n--------------------*/\n/*--- Colors ---*/\n/*--- Light Colors ---*/\n/*--- Neutrals ---*/\n/*--- Colored Backgrounds ---*/\n/*--- Colored Text ---*/\n/*--- Colored Headers ---*/\n/*--- Colored Border ---*/\n/*-------------------\n Alpha Colors\n--------------------*/\n/*-------------------\n Brand Colors\n--------------------*/\n/*--------------\n Page Heading\n---------------*/\n/*-------------------\n Page\n--------------------*/\n/*--------------\n Form Input\n---------------*/\n/* This adjusts the default form input across all elements */\n/* Input Text Color */\n/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */\n/*-------------------\n Focused Input\n--------------------*/\n/* Used on inputs, textarea etc */\n/* Used on dropdowns, other larger blocks */\n/*-------------------\n Sizes\n--------------------*/\n/*\n Sizes are all expressed in terms of 14px/em (default em)\n This ensures these \"ratios\" remain constant despite changes in EM\n*/\n/*-------------------\n Paragraph\n--------------------*/\n/*-------------------\n Links\n--------------------*/\n/*-------------------\n Highlighted Text\n--------------------*/\n/*-------------------\n Em Sizes\n--------------------*/\n/*\n This rounds $size values to the closest pixel then expresses that value in (r)em.\n This ensures all size values round to exact pixels\n*/\n/* em */\n/* rem */\n/*-------------------\n Loader\n--------------------*/\n/*-------------------\n Grid\n--------------------*/\n/*-------------------\n Transitions\n--------------------*/\n/*-------------------\n Breakpoints\n--------------------*/\n/* Columns */\n/*******************************\n Power-User\n*******************************/\n/*-------------------\n Emotive Colors\n--------------------*/\n/* Positive */\n/* Negative */\n/* Info */\n/* Warning */\n/*-------------------\n Paths\n--------------------*/\n/* For source only. Modified in gulp for dist */\n/*-------------------\n Icons\n--------------------*/\n/* Maximum Glyph Width of Icon */\n/*-------------------\n Neutral Text\n--------------------*/\n/*-------------------\n Brand Colors\n--------------------*/\n/*-------------------\n Borders\n--------------------*/\n/*-------------------\n Accents\n--------------------*/\n/* Differentiating Neutrals */\n/* Differentiating Layers */\n/*-------------------\n Derived Values\n--------------------*/\n/* Loaders Position Offset */\n/* Rendered Scrollbar Width */\n/* Maximum Single Character Glyph Width, aka Capital \"W\" */\n/* Used to match floats with text */\n/* Header Spacing */\n/* Minimum Mobile Width */\n/* Positive / Negative Dupes */\n/* Responsive */\n/*******************************\n States\n*******************************/\n/*-------------------\n Disabled\n--------------------*/\n/*-------------------\n Hover\n--------------------*/\n/*--- Shadows ---*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\n Focus\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\n Down (:active)\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\n Active\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*******************************\n Table\n*******************************/\n/*-------------------\n Element\n--------------------*/\n/*--------------\n Parts\n---------------*/\n/* Table Row */\n/* Table Cell */\n/* Table Header */\n/* Table Footer */\n/* Responsive Size */\n/*-------------------\n Types\n--------------------*/\n/* Definition */\n/*--------------\n Couplings\n---------------*/\n/*--------------\n States\n---------------*/\n/* Positive */\n/* Negative */\n/* Error */\n/* Warning */\n/* Active */\n/*--------------\n Types\n---------------*/\n/* Attached */\n/* Striped */\n/* Selectable */\n/* Sortable */\n/* Colors */\n/* Inverted */\n/* Basic */\n/* Padded */\n/* Compact */\n/* Sizes */\n.tabulator {\n position: relative;\n border: 1px solid rgba(34, 36, 38, 0.15);\n background-color: #FFFFFF;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #F9FAFB;\n color: rgba(0, 0, 0, 0.87);\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #ddd;\n background: #F9FAFB;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #dae1e7;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #ddd;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #dae1e7; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #e2e2e2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #EFEFEF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #ddd;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #DB2828; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #DB2828; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #ddd;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #EFEFEF; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #ddd;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #ddd; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #ddd;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n width: 100%;\n margin: 1em 0em;\n border: 1px solid rgba(34, 36, 38, 0.15);\n box-shadow: none;\n border-radius: 0.28571rem;\n color: rgba(0, 0, 0, 0.87);\n /* Red */\n /* Orange */\n /* Yellow */\n /* Olive */\n /* Green */\n /* Teal */\n /* Blue */\n /* Violet */\n /* Purple */\n /* Pink */\n /* Brown */\n /* Grey */\n /* Black */ }\n .tabulator .tabulator-header {\n border-right: none;\n border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n background-color: #F9FAFB;\n box-shadow: none;\n color: rgba(0, 0, 0, 0.87);\n font-style: none;\n font-weight: bold;\n text-transform: none; }\n .tabulator .tabulator-header .tabulator-col {\n border-right: none;\n background-color: #F9FAFB; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.92857em 0.78571em; }\n .tabulator .tabulator-tableholder .tabulator-table {\n background-color: transparent; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-footer {\n padding: 0.78571em 0.78571em;\n border-top: 1px solid rgba(34, 36, 38, 0.15);\n box-shadow: none;\n background: #F9FAFB;\n text-align: right;\n color: rgba(0, 0, 0, 0.87);\n font-style: normal;\n font-weight: normal;\n text-transform: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n margin: -0.78571em -0.78571em 0.78571em -0.78571em;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -0.78571em;\n border-bottom: none; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive {\n box-shadow: 0px 0px 0px #A3C293 inset;\n background: #FCFFF5 !important;\n color: #21BA45 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.positive:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.positive:hover {\n background: #f7ffe6 !important;\n color: #13ae38 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative {\n box-shadow: 0px 0px 0px #E0B4B4 inset;\n background: #FFF6F6 !important;\n color: #DB2828 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.negative:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.negative:hover {\n background: #ffe7e7 !important;\n color: #d41616 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error {\n box-shadow: 0px 0px 0px #E0B4B4 inset;\n background: #FFF6F6 !important;\n color: #DB2828 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.error:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.error:hover {\n background: #ffe7e7 !important;\n color: #d12323 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning {\n box-shadow: 0px 0px 0px #C9BA9B inset;\n background: #FFFAF3 !important;\n color: #F2C037 !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.warning:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.warning:hover {\n background: #fff4e4 !important;\n color: #f1bb29 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n background: #E0E0E0 !important;\n color: rgba(0, 0, 0, 0.87) !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active:hover, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active:hover {\n background: #f7ffe6 !important;\n color: #13ae38 !important; } }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.active {\n pointer-events: none;\n color: rgba(0, 0, 0, 0.2); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.disabled:hover {\n pointer-events: none;\n color: rgba(0, 0, 0, 0.2); } }\n .tabulator.inverted {\n background: #333333;\n color: rgba(255, 255, 255, 0.9);\n border: none; }\n .tabulator.inverted .tabulator-header {\n background-color: rgba(0, 0, 0, 0.15);\n border-color: rgba(255, 255, 255, 0.1) !important;\n color: rgba(255, 255, 255, 0.9); }\n .tabulator.inverted .tabulator-header .tabulator-col {\n border-color: rgba(255, 255, 255, 0.1) !important; }\n .tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row {\n color: rgba(255, 255, 255, 0.9);\n border: none; }\n .tabulator.inverted .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-color: rgba(255, 255, 255, 0.1) !important; }\n .tabulator.inverted .tabulator-footer {\n background: #FFFFFF; }\n .tabulator.striped .tabulator-row:nth-child(even) {\n background-color: #f2f2f2; }\n .tabulator.celled {\n border: 1px solid rgba(34, 36, 38, 0.15); }\n .tabulator.celled .tabulator-header .tabulator-col {\n border-right: 1px solid rgba(34, 36, 38, 0.1); }\n .tabulator.celled .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid rgba(34, 36, 38, 0.1); }\n .tabulator[class*=\"single line\"] .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: none; }\n .tabulator.red {\n border-top: 0.2em solid #DB2828; }\n .tabulator.inverted.red {\n background-color: #DB2828 !important;\n color: #FFFFFF !important; }\n .tabulator.orange {\n border-top: 0.2em solid #F2711C; }\n .tabulator.inverted.orange {\n background-color: #F2711C !important;\n color: #FFFFFF !important; }\n .tabulator.yellow {\n border-top: 0.2em solid #FBBD08; }\n .tabulator.inverted.yellow {\n background-color: #FBBD08 !important;\n color: #FFFFFF !important; }\n .tabulator.olive {\n border-top: 0.2em solid #B5CC18; }\n .tabulator.inverted.olive {\n background-color: #B5CC18 !important;\n color: #FFFFFF !important; }\n .tabulator.green {\n border-top: 0.2em solid #21BA45; }\n .tabulator.inverted.green {\n background-color: #21BA45 !important;\n color: #FFFFFF !important; }\n .tabulator.teal {\n border-top: 0.2em solid #00B5AD; }\n .tabulator.inverted.teal {\n background-color: #00B5AD !important;\n color: #FFFFFF !important; }\n .tabulator.blue {\n border-top: 0.2em solid #2185D0; }\n .tabulator.inverted.blue {\n background-color: #2185D0 !important;\n color: #FFFFFF !important; }\n .tabulator.violet {\n border-top: 0.2em solid #6435C9; }\n .tabulator.inverted.violet {\n background-color: #6435C9 !important;\n color: #FFFFFF !important; }\n .tabulator.purple {\n border-top: 0.2em solid #A333C8; }\n .tabulator.inverted.purple {\n background-color: #A333C8 !important;\n color: #FFFFFF !important; }\n .tabulator.pink {\n border-top: 0.2em solid #E03997; }\n .tabulator.inverted.pink {\n background-color: #E03997 !important;\n color: #FFFFFF !important; }\n .tabulator.brown {\n border-top: 0.2em solid #A5673F; }\n .tabulator.inverted.brown {\n background-color: #A5673F !important;\n color: #FFFFFF !important; }\n .tabulator.grey {\n border-top: 0.2em solid #767676; }\n .tabulator.inverted.grey {\n background-color: #767676 !important;\n color: #FFFFFF !important; }\n .tabulator.black {\n border-top: 0.2em solid #1B1C1D; }\n .tabulator.inverted.black {\n background-color: #1B1C1D !important;\n color: #FFFFFF !important; }\n .tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 1em 1em; }\n .tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 20px; }\n .tabulator.padded .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 1em 1em; }\n .tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 1.5em 1.5em; }\n .tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 26px; }\n .tabulator.padded.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 1.5em 1.5em; }\n .tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.5em 0.7em; }\n .tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 12px; }\n .tabulator.compact .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.5em 0.7em; }\n .tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.4em 0.6em; }\n .tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 10px; }\n .tabulator.compact.very .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.4em 0.6em; }\n\n.tabulator-row {\n border-bottom: 1px solid rgba(34, 36, 38, 0.1); }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n background: #E0E0E0 !important;\n color: rgba(0, 0, 0, 0.87) !important; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA !important; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC !important;\n cursor: pointer; } }\n .tabulator-row.tabulator-moving {\n pointer-events: none !important; }\n .tabulator-row .tabulator-cell {\n padding: 0.78571em 0.78571em;\n border-right: none;\n vertical-align: middle; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n color: #fff; }\n .tabulator-row.tabulator-group {\n background: #fafafa; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-menu {\n background: #FFFFFF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n background: #F9FAFB; } }\n\n.tabulator-edit-select-list {\n background: #FFFFFF; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #FFFFFF; }\n .tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n color: #FFFFFF; } }\n .tabulator-edit-select-list .tabulator-edit-select-list-notice {\n color: inherit; }\n\n.tabulator-print-table .tabulator-print-table-group {\n background: #fafafa; }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #666; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.css b/tmp/tabulator-5.6.1/dist/css/tabulator_simple.css deleted file mode 100644 index 057dabd..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.css +++ /dev/null @@ -1,1321 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #999; - background-color: #fff; - font-size: 14px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #ddd; - background: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #ddd; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #e6e6e6; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #666; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #666; - color: #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: white !important; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #2975DD; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #2975DD; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #2975DD; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #999; - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: white !important; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #fff; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #D6D6D6; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #3876ca; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #ddd; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #9ABCEA; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #ddd; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #fff; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #ddd; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #ddd; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #ddd; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #ddd; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #ddd; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator { - border: none; - background-color: #fff; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - background: #f2f2f2 !important; - border-bottom: 1px solid #999; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder span { - color: #000; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - background: #f2f2f2 !important; - border-bottom: 1px solid #fff; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #f2f2f2 !important; -} - -.tabulator-row { - border-bottom: 1px solid #ddd; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row.tabulator-group span { - color: #666; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #666; -} - -/*# sourceMappingURL=tabulator_simple.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_simple.css.map deleted file mode 100644 index 3091baf..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_simple.scss"],"names":[],"mappings":"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","file":"tabulator_simple.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #999;\n background-color: #fff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #ddd;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #ddd;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #ddd;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #ddd;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #fff; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #ddd;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #ddd; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #ddd;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n border: none;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n background: #f2f2f2 !important;\n border-bottom: 1px solid #999; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n background: #f2f2f2 !important;\n border-bottom: 1px solid #fff; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: #f2f2f2 !important; }\n\n.tabulator-row {\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #666; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_simple.min.css deleted file mode 100644 index 2add1d0..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{border:1px solid #999;font-size:14px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#fff;border-bottom:1px solid #999;box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #ddd;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid #999;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #ddd;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #ddd;border-top:1px solid #ddd;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#f2f2f2!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#fff;border-top:1px solid #999;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #ddd;border-top:1px solid #ddd;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#fff!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{box-sizing:border-box;min-height:22px;position:relative}.tabulator-row,.tabulator-row.tabulator-row-even{background-color:#fff}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #ddd;border-top:1px solid #ddd;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #ddd;border-top:1px solid #ddd;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #ddd;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #ddd;border-bottom-left-radius:1px;border-left:2px solid #ddd;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #ddd;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:14px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#fff;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#ddd;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #ddd}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:14px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #ddd;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #ddd;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #ddd;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #ddd;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #ddd;border-bottom-left-radius:1px;border-left:2px solid #ddd;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#fff;border:none}.tabulator .tabulator-header .tabulator-calcs-holder{background:#f2f2f2!important;border-bottom:1px solid #999}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!important}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#000}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f2f2f2!important;border-bottom:1px solid #fff}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!important}.tabulator-row{border-bottom:1px solid #ddd}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row.tabulator-group span{color:#666}.tabulator-print-table .tabulator-print-table-group span{color:#666;margin-left:10px} -/*# sourceMappingURL=tabulator_simple.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_simple.min.css.map deleted file mode 100644 index 83d4bcb..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_simple.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_simple.scss"],"names":[],"mappings":"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","file":"tabulator_simple.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #999;\n background-color: #fff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #999;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #ddd;\n background: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #e6e6e6;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #ddd;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #e6e6e6; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #666; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #666;\n color: #666; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #2975DD; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #2975DD;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #2975DD; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #999;\n background-color: #fff;\n color: #555;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: white !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #d00; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #9ABCEA; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #D6D6D6;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #3876ca;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #ddd;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #9ABCEA; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #ddd;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #fff; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #ddd;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #ddd; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #ddd;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #ddd; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n border: none;\n background-color: #fff; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n background: #f2f2f2 !important;\n border-bottom: 1px solid #999; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #f2f2f2 !important; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #000; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n background: #f2f2f2 !important;\n border-bottom: 1px solid #fff; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: #f2f2f2 !important; }\n\n.tabulator-row {\n border-bottom: 1px solid #ddd; }\n .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator-row.tabulator-group span {\n color: #666; }\n\n.tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #666; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_site.css b/tmp/tabulator-5.6.1/dist/css/tabulator_site.css deleted file mode 100644 index 7af39d8..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_site.css +++ /dev/null @@ -1,1406 +0,0 @@ -.tabulator { - position: relative; - border: 1px solid #222; - background-color: #fff; - font-size: 14px; - text-align: left; - overflow: hidden; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableholder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitDataTable"] { - display: inline-block; -} - -.tabulator.tabulator-block-select { - user-select: none; -} - -.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) { - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #3FB449; - background-color: #222; - color: #fff; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - outline: none; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-header-contents { - position: relative; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-flex; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: flex-start; - border-right: 1px solid #aaa; - background: #222; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #3FB449; - background: #090909; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight { - background-color: #70c28e; - color: #000000; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-range-selected { - background-color: #269b51; - color: #FFFFFF; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button { - padding: 0 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover { - cursor: pointer; - opacity: .6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap { - white-space: normal; - text-overflow: initial; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: flex; - align-items: center; - position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover { - cursor: pointer; - background-color: #090909; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter { - color: #3FB449; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-bottom: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #3FB449; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter { - color: #3FB449; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover { - cursor: pointer; - border-top: 6px solid #555; - } -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { - border-bottom: none; - border-top: 6px solid #3FB449; - color: #3FB449; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - writing-mode: vertical-rl; - text-orientation: mixed; - display: flex; - align-items: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; -} - -.tabulator .tabulator-header .tabulator-frozen { - position: sticky; - left: 0; - z-index: 11; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - display: inline-block; - background: #2f2f2f !important; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #2f2f2f !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - display: inline-block; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableholder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableholder:focus { - outline: none; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder { - box-sizing: border-box; - display: flex; - align-items: center; - justify-content: center; - min-width: 100%; - width: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode="virtual"] { - min-height: 100%; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; - white-space: normal; -} - -.tabulator .tabulator-tableholder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #e2e2e2 !important; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #aaa; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #aaa; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid #269b51; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: #269b51; - border-radius: 999px; -} - -.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid #269b51; -} - -.tabulator .tabulator-footer { - border-top: 1px solid #3FB449; - background-color: #222; - color: #222; - font-weight: bold; - white-space: nowrap; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 5px 10px; -} - -.tabulator .tabulator-footer .tabulator-footer-contents:empty { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - text-align: left; - background: #2f2f2f !important; - border-bottom: 1px solid #aaa; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - display: inline-block; - background: #2f2f2f !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer > * + .tabulator-page-counter { - margin-left: 10px; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - font-weight: normal; -} - -.tabulator .tabulator-footer .tabulator-paginator { - flex: 1; - text-align: right; - color: #222; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page-size { - display: inline-block; - margin: 0 5px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #3FB449; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-footer .tabulator-page:not(disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; - } -} - -.tabulator .tabulator-col-resize-handle { - position: relative; - display: inline-block; - width: 6px; - margin-left: -3px; - margin-right: -3px; - z-index: 11; - vertical-align: middle; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; - } -} - -.tabulator .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-right: 0; -} - -.tabulator .tabulator-alert { - position: absolute; - display: flex; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-alert .tabulator-alert-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #EFEFEF; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; - } -} - -.tabulator-row.tabulator-selected { - background-color: #70c28e; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-selected:hover { - background-color: #269b51; - cursor: pointer; - } -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - pointer-events: none; - z-index: 15; -} - -.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header { - background-color: #70c28e; - color: #000000; -} - -.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #269b51; - color: #FFFFFF; -} - -.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header { - background-color: #269b51; - color: #FFFFFF; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; - } -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #aaa; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-frozen { - display: inline-block; - position: sticky; - left: 0; - background-color: inherit; - z-index: 11; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - outline: none; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, -.tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; - outline: none; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, -.tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) { - background-color: #70c28e; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty { - display: inline-block; - width: 7px; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; - cursor: pointer; - } -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg { - stroke: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-traffic-light { - display: inline-block; - height: 14px; - width: 14px; - border-radius: 14px; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #aaa; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #3FB449; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 { - padding-left: 30px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 { - padding-left: 50px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 { - padding-left: 70px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 { - padding-left: 90px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 { - padding-left: 110px; -} - -.tabulator-row.tabulator-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #3FB449; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-popup-container { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #aaa; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-popup { - padding: 5px; - border-radius: 3px; -} - -.tabulator-tooltip { - max-width: Min(500px, 100%); - padding: 3px 5px; - border-radius: 2px; - box-shadow: none; - font-size: 12px; - pointer-events: none; -} - -.tabulator-menu .tabulator-menu-item { - position: relative; - box-sizing: border-box; - padding: 5px 10px; - user-select: none; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled { - opacity: .5; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover { - cursor: pointer; - background: #EFEFEF; - } -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu { - padding-right: 25px; -} - -.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after { - display: inline-block; - position: absolute; - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - content: ''; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #aaa; - vertical-align: top; - transform: rotate(45deg); -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #aaa; -} - -.tabulator-edit-list { - max-height: 200px; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator-edit-list .tabulator-edit-list-item { - padding: 4px; - color: #333; - outline: none; -} - -.tabulator-edit-list .tabulator-edit-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-list .tabulator-edit-list-item.active.focused { - outline: 1px solid rgba(255, 255, 255, 0.5); -} - -.tabulator-edit-list .tabulator-edit-list-item.focused { - outline: 1px solid #1D68CD; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-edit-list .tabulator-edit-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; - } -} - -.tabulator-edit-list .tabulator-edit-list-placeholder { - padding: 4px; - color: #333; - text-align: center; -} - -.tabulator-edit-list .tabulator-edit-list-group { - border-bottom: 1px solid #aaa; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 { - padding-left: 12px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 { - padding-left: 20px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 { - padding-left: 28px; -} - -.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, -.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 { - padding-left: 36px; -} - -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { - border-left: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right { - border-right: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type { - width: 3px; - margin-left: 0; - margin-right: -3px; -} - -.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder { - text-align: initial; -} - -.tabulator-print-fullscreen { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { - display: none !important; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-print-table .tabulator-print-table-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #aaa; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); - } -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #3FB449; - border-bottom: 0; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td { - padding-left: 30px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td { - padding-left: 50px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td { - padding-left: 70px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td { - padding-left: 90px !important; -} - -.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td { - padding-left: 110px !important; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle { - display: inline-block; -} - -.tabulator-print-table .tabulator-print-table-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #3FB449; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-print-table .tabulator-data-tree-control { - display: inline-flex; - justify-content: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - } -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator { - border: none; - border-bottom: 5px solid #222; -} - -.tabulator[tabulator-layout="fitColumns"] .tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator .tabulator-header { - border-bottom: 3px solid #3FB449; -} - -.tabulator .tabulator-header .tabulator-col { - background-color: #222; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - padding: 8px; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - background: #3c3c3c !important; - border-top: 1px solid #aaa; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #3c3c3c !important; -} - -.tabulator .tabulator-tableholder .tabulator-placeholder span { - color: #3FB449; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #484848 !important; - color: #fff; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-top { - border-bottom: none; -} - -.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-bottom { - border-top: none; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - padding-top: 8px; - border-top: 3px solid #3FB449; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - margin: -8px -10px 8px -10px; - background: #3c3c3c !important; - border-top: none; - border-bottom: 1px solid #aaa; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #3c3c3c !important; - color: #fff !important; -} - -.tabulator .tabulator-footer .tabulator-paginator label { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page-counter { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page { - background-color: #fff; - color: #222; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator-row .tabulator-cell { - padding: 6px; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - background: #3FB449; -} - -.tabulator-row.tabulator-group { - border-right: 1px solid #aaa; - border-top: 1px solid #000; - border-bottom: 2px solid #3FB449; - background: #222; - color: #fff; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-row.tabulator-group:hover { - background-color: #090909; - } -} - -.tabulator-row.tabulator-group span { - color: #3FB449; -} - -.tabulator-print-table { - border-collapse: collapse; -} - -.tabulator-print-table .tabulator-print-table-group { - border-bottom: 2px solid #3FB449; - background: #222; - color: #fff; -} - -@media (hover: hover) and (pointer: fine) { - .tabulator-print-table .tabulator-print-table-group:hover { - background-color: #090909; - } -} - -.tabulator-print-table .tabulator-print-table-group span { - color: #3FB449; -} - -/*# sourceMappingURL=tabulator_site.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_site.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_site.css.map deleted file mode 100644 index 0bf269c..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_site.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"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","file":"tabulator_site.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #222;\n background-color: #fff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #3FB449;\n background-color: #222;\n color: #fff;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #222;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #3FB449;\n background: #090909;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #70c28e;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #269b51;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #090909; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3FB449; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #3FB449; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3FB449; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #3FB449;\n color: #3FB449; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: #2f2f2f !important;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #2f2f2f !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #e2e2e2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #269b51; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #269b51;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #269b51; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #3FB449;\n background-color: #222;\n color: #222;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #2f2f2f !important;\n border-bottom: 1px solid #aaa;\n border-top: 1px solid #aaa;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #2f2f2f !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #222;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #3FB449; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #EFEFEF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #70c28e; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #269b51;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #70c28e;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #269b51;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #269b51;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #aaa;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #70c28e; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3FB449;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3FB449;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #aaa;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #EFEFEF; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #aaa;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #aaa; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #aaa;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3FB449;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3FB449;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n border: none;\n border-bottom: 5px solid #222; }\n .tabulator[tabulator-layout=\"fitColumns\"] .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator .tabulator-header {\n border-bottom: 3px solid #3FB449; }\n .tabulator .tabulator-header .tabulator-col {\n background-color: #222; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 8px; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n background: #3c3c3c !important;\n border-top: 1px solid #aaa;\n border-bottom: none; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #3c3c3c !important; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #3FB449; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #484848 !important;\n color: #fff; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-top {\n border-bottom: none; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-bottom {\n border-top: none; }\n .tabulator .tabulator-footer {\n padding: 5px 10px;\n padding-top: 8px;\n border-top: 3px solid #3FB449; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n margin: -8px -10px 8px -10px;\n background: #3c3c3c !important;\n border-top: none;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: #3c3c3c !important;\n color: #fff !important; }\n .tabulator .tabulator-footer .tabulator-paginator label {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page {\n background-color: #fff;\n color: #222;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n\n.tabulator-row .tabulator-cell {\n padding: 6px; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n background: #3FB449; }\n\n.tabulator-row.tabulator-group {\n border-right: 1px solid #aaa;\n border-top: 1px solid #000;\n border-bottom: 2px solid #3FB449;\n background: #222;\n color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n background-color: #090909; } }\n .tabulator-row.tabulator-group span {\n color: #3FB449; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-print-table-group {\n border-bottom: 2px solid #3FB449;\n background: #222;\n color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n background-color: #090909; } }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #3FB449; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_site.min.css b/tmp/tabulator-5.6.1/dist/css/tabulator_site.min.css deleted file mode 100644 index 2b6e1a4..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_site.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{background-color:#fff;border:1px solid #222;font-size:14px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#222;border-bottom:1px solid #3fb449;box-sizing:border-box;color:#fff;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#222;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#090909;border:1px solid #3fb449;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#70c28e;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#269b51;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#090909;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#3fb449}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #3fb449;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#3fb449}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #3fb449;color:#3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{background:#2f2f2f!important;border-bottom:1px solid #aaa;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#2f2f2f!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#e2e2e2!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #269b51;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#269b51;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #269b51;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#222;border-top:1px solid #3fb449;color:#222;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#2f2f2f!important;border-top:1px solid #aaa;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#2f2f2f!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#222;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #aaa;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page.active{color:#3fb449}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:22px;position:relative}.tabulator-row.tabulator-row-even{background-color:#efefef}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#70c28e}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#269b51;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #aaa;border-top:1px solid #aaa;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#70c28e;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#269b51;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #aaa;border-top:1px solid #aaa;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #aaa;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#70c28e}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #aaa;border-bottom-left-radius:1px;border-left:2px solid #aaa;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #3fb449;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-popup-container{-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:14px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:Min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#efefef;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#aaa;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:14px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd;color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #aaa;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #aaa;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #aaa;border-bottom-left-radius:1px;border-left:2px solid #aaa;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #3fb449;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{border:none;border-bottom:5px solid #222}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator .tabulator-header{border-bottom:3px solid #3fb449}.tabulator .tabulator-header .tabulator-col{background-color:#222}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:8px}.tabulator .tabulator-header .tabulator-calcs-holder{background:#3c3c3c!important;border-bottom:none;border-top:1px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#3fb449}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#484848!important;color:#fff;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-top{border-bottom:none}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-bottom{border-top:none}.tabulator .tabulator-footer{border-top:3px solid #3fb449;padding:8px 10px 5px}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#3c3c3c!important;border-bottom:1px solid #aaa;border-top:none;margin:-8px -10px 8px}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-page-counter,.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page{background-color:#fff;color:#222;font-family:inherit;font-size:inherit;font-weight:inherit}.tabulator-row .tabulator-cell{padding:6px}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#3fb449}.tabulator-row.tabulator-group{background:#222;border-bottom:2px solid #3fb449;border-right:1px solid #aaa;border-top:1px solid #000;color:#fff}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:#090909}}.tabulator-row.tabulator-group span{color:#3fb449}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{background:#222;border-bottom:2px solid #3fb449;color:#fff}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:#090909}}.tabulator-print-table .tabulator-print-table-group span{color:#3fb449} -/*# sourceMappingURL=tabulator_site.min.css.map */ \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/css/tabulator_site.min.css.map b/tmp/tabulator-5.6.1/dist/css/tabulator_site.min.css.map deleted file mode 100644 index 7076256..0000000 --- a/tmp/tabulator-5.6.1/dist/css/tabulator_site.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"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","file":"tabulator_site.min.css","sourcesContent":[".tabulator {\n position: relative;\n border: 1px solid #222;\n background-color: #fff;\n font-size: 14px;\n text-align: left;\n overflow: hidden;\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n -o-transform: translateZ(0);\n transform: translateZ(0); }\n .tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableholder .tabulator-table {\n min-width: 100%; }\n .tabulator[tabulator-layout=\"fitDataTable\"] {\n display: inline-block; }\n .tabulator.tabulator-block-select {\n user-select: none; }\n .tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing) {\n user-select: none; }\n .tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid #3FB449;\n background-color: #222;\n color: #fff;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n outline: none; }\n .tabulator .tabulator-header.tabulator-header-hidden {\n display: none; }\n .tabulator .tabulator-header .tabulator-header-contents {\n position: relative;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-header-contents .tabulator-headers {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-col {\n display: inline-flex;\n position: relative;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: flex-start;\n border-right: 1px solid #aaa;\n background: #222;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden; }\n .tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #3FB449;\n background: #090909;\n pointer-events: none; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-highlight {\n background-color: #70c28e;\n color: #000000; }\n .tabulator .tabulator-header .tabulator-col.tabulator-range-selected {\n background-color: #269b51;\n color: #FFFFFF; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button {\n padding: 0 8px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover {\n cursor: pointer;\n opacity: .6; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {\n position: relative; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap {\n white-space: normal;\n text-overflow: initial; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button + .tabulator-title-editor {\n width: calc(100% - 22px); }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 4px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: flex;\n border-top: 1px solid #aaa;\n overflow: hidden;\n margin-right: -1px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px; }\n .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover {\n cursor: pointer;\n background-color: #090909; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter {\n color: #bbb; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3FB449; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-bottom: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"ascending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #3FB449; }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter {\n color: #3FB449; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover {\n cursor: pointer;\n border-top: 6px solid #555; } }\n .tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"descending\"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {\n border-bottom: none;\n border-top: 6px solid #3FB449;\n color: #3FB449; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: flex;\n align-items: center;\n justify-content: center; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n transform: rotate(180deg); }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px; }\n .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {\n justify-content: center;\n left: 0;\n right: 0;\n top: 4px;\n bottom: auto; }\n .tabulator .tabulator-header .tabulator-frozen {\n position: sticky;\n left: 0;\n z-index: 11; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n display: inline-block;\n background: #2f2f2f !important;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #2f2f2f !important; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder {\n display: inline-block; }\n .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none; }\n .tabulator .tabulator-tableholder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator .tabulator-tableholder:focus {\n outline: none; }\n .tabulator .tabulator-tableholder .tabulator-placeholder {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 100%;\n width: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n min-height: 100%; }\n .tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents {\n display: inline-block;\n text-align: center;\n padding: 10px;\n color: #ccc;\n font-weight: bold;\n font-size: 20px;\n white-space: normal; }\n .tabulator .tabulator-tableholder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n color: #333; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #e2e2e2 !important; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #aaa; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay {\n position: absolute;\n inset: 0;\n z-index: 10;\n pointer-events: none; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range {\n position: absolute;\n box-sizing: border-box;\n border: 1px solid #269b51; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active::after {\n content: '';\n position: absolute;\n right: -3px;\n bottom: -3px;\n width: 6px;\n height: 6px;\n background-color: #269b51;\n border-radius: 999px; }\n .tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active {\n position: absolute;\n box-sizing: border-box;\n border: 2px solid #269b51; }\n .tabulator .tabulator-footer {\n border-top: 1px solid #3FB449;\n background-color: #222;\n color: #222;\n font-weight: bold;\n white-space: nowrap;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator .tabulator-footer .tabulator-footer-contents {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px; }\n .tabulator .tabulator-footer .tabulator-footer-contents:empty {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n text-align: left;\n background: #2f2f2f !important;\n border-bottom: 1px solid #aaa;\n border-top: 1px solid #aaa;\n overflow: hidden; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n display: inline-block;\n background: #2f2f2f !important; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none; }\n .tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none; }\n .tabulator .tabulator-footer > * + .tabulator-page-counter {\n margin-left: 10px; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n font-weight: normal; }\n .tabulator .tabulator-footer .tabulator-paginator {\n flex: 1;\n text-align: right;\n color: #222;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n .tabulator .tabulator-footer .tabulator-page-size {\n display: inline-block;\n margin: 0 5px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px; }\n .tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px; }\n .tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n padding: 2px 5px;\n border: 1px solid #aaa;\n border-radius: 3px;\n background: rgba(255, 255, 255, 0.2); }\n .tabulator .tabulator-footer .tabulator-page.active {\n color: #3FB449; }\n .tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-footer .tabulator-page:not(disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff; } }\n .tabulator .tabulator-col-resize-handle {\n position: relative;\n display: inline-block;\n width: 6px;\n margin-left: -3px;\n margin-right: -3px;\n z-index: 11;\n vertical-align: middle; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize; } }\n .tabulator .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-right: 0; }\n .tabulator .tabulator-alert {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center; }\n .tabulator .tabulator-alert .tabulator-alert-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg {\n border: 4px solid #333;\n color: #000; }\n .tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error {\n border: 4px solid #D00;\n color: #590000; }\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n background-color: #fff; }\n .tabulator-row.tabulator-row-even {\n background-color: #EFEFEF; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selectable:hover {\n background-color: #bbb;\n cursor: pointer; } }\n .tabulator-row.tabulator-selected {\n background-color: #70c28e; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-selected:hover {\n background-color: #269b51;\n cursor: pointer; } }\n .tabulator-row.tabulator-row-moving {\n border: 1px solid #000;\n background: #fff; }\n .tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa;\n pointer-events: none;\n z-index: 15; }\n .tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header {\n background-color: #70c28e;\n color: #000000; }\n .tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #269b51;\n color: #FFFFFF; }\n .tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header {\n background-color: #269b51;\n color: #FFFFFF; }\n .tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px; }\n .tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize; } }\n .tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #aaa; }\n .tabulator-row .tabulator-responsive-collapse:empty {\n display: none; }\n .tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px; }\n .tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative; }\n .tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px; }\n .tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 4px;\n border-right: 1px solid #aaa;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-frozen {\n display: inline-block;\n position: sticky;\n left: 0;\n background-color: inherit;\n z-index: 11; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #aaa; }\n .tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n outline: none;\n padding: 0; }\n .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n outline: none; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000; }\n .tabulator-row .tabulator-cell.tabulator-row-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666; }\n .tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header) {\n background-color: #70c28e; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty {\n display: inline-block;\n width: 7px; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n cursor: pointer; } }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg {\n stroke: #fff; }\n .tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none; }\n .tabulator-row .tabulator-cell .tabulator-traffic-light {\n display: inline-block;\n height: 14px;\n width: 14px;\n border-radius: 14px; }\n .tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3FB449;\n border-bottom: 0; }\n .tabulator-row.tabulator-group.tabulator-group-level-1 {\n padding-left: 30px; }\n .tabulator-row.tabulator-group.tabulator-group-level-2 {\n padding-left: 50px; }\n .tabulator-row.tabulator-group.tabulator-group-level-3 {\n padding-left: 70px; }\n .tabulator-row.tabulator-group.tabulator-group-level-4 {\n padding-left: 90px; }\n .tabulator-row.tabulator-group.tabulator-group-level-5 {\n padding-left: 110px; }\n .tabulator-row.tabulator-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3FB449;\n vertical-align: middle; }\n .tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #d00; }\n\n.tabulator-popup-container {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #aaa;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000; }\n\n.tabulator-popup {\n padding: 5px;\n border-radius: 3px; }\n\n.tabulator-tooltip {\n max-width: Min(500px, 100%);\n padding: 3px 5px;\n border-radius: 2px;\n box-shadow: none;\n font-size: 12px;\n pointer-events: none; }\n\n.tabulator-menu .tabulator-menu-item {\n position: relative;\n box-sizing: border-box;\n padding: 5px 10px;\n user-select: none; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {\n opacity: .5; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {\n cursor: pointer;\n background: #EFEFEF; } }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {\n padding-right: 25px; }\n .tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {\n display: inline-block;\n position: absolute;\n top: calc(5px + .4em);\n right: 10px;\n height: 7px;\n width: 7px;\n content: '';\n border-width: 1px 1px 0 0;\n border-style: solid;\n border-color: #aaa;\n vertical-align: top;\n transform: rotate(45deg); }\n\n.tabulator-menu .tabulator-menu-separator {\n border-top: 1px solid #aaa; }\n\n.tabulator-edit-list {\n max-height: 200px;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; }\n .tabulator-edit-list .tabulator-edit-list-item {\n padding: 4px;\n color: #333;\n outline: none; }\n .tabulator-edit-list .tabulator-edit-list-item.active {\n color: #fff;\n background: #1D68CD; }\n .tabulator-edit-list .tabulator-edit-list-item.active.focused {\n outline: 1px solid rgba(255, 255, 255, 0.5); }\n .tabulator-edit-list .tabulator-edit-list-item.focused {\n outline: 1px solid #1D68CD; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-edit-list .tabulator-edit-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD; } }\n .tabulator-edit-list .tabulator-edit-list-placeholder {\n padding: 4px;\n color: #333;\n text-align: center; }\n .tabulator-edit-list .tabulator-edit-list-group {\n border-bottom: 1px solid #aaa;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2 {\n padding-left: 12px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3 {\n padding-left: 20px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4 {\n padding-left: 28px; }\n .tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5, .tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5 {\n padding-left: 36px; }\n\n.tabulator.tabulator-ltr {\n direction: ltr; }\n\n.tabulator.tabulator-rtl {\n text-align: initial;\n direction: rtl; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col {\n text-align: initial;\n border-left: 1px solid #aaa;\n border-right: initial; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n margin-right: initial;\n margin-left: -1px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-left: 25px; }\n .tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {\n left: 8px;\n right: initial; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell {\n border-right: initial;\n border-left: 1px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n margin-right: initial;\n margin-left: 5px;\n border-bottom-left-radius: initial;\n border-bottom-right-radius: 1px;\n border-left: initial;\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {\n margin-right: initial;\n margin-left: 5px; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left {\n border-left: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right {\n border-right: 2px solid #aaa; }\n .tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type {\n width: 3px;\n margin-left: 0;\n margin-right: -3px; }\n .tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder {\n text-align: initial; }\n\n.tabulator-print-fullscreen {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000; }\n\nbody.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {\n display: none !important; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #aaa;\n border-bottom: 2px solid #aaa; }\n .tabulator-print-table .tabulator-print-table-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #aaa;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #ccc;\n font-weight: bold;\n min-width: 100%; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1); } }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #3FB449;\n border-bottom: 0; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {\n padding-left: 30px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {\n padding-left: 50px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {\n padding-left: 70px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {\n padding-left: 90px !important; }\n .tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {\n padding-left: 110px !important; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {\n display: inline-block; }\n .tabulator-print-table .tabulator-print-table-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #3FB449;\n vertical-align: middle; }\n .tabulator-print-table .tabulator-print-table-group span {\n margin-left: 10px;\n color: #d00; }\n .tabulator-print-table .tabulator-data-tree-control {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2); } }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333; }\n .tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333; }\n\n.tabulator {\n border: none;\n border-bottom: 5px solid #222; }\n .tabulator[tabulator-layout=\"fitColumns\"] .tabulator-row .tabulator-cell:last-of-type {\n border-right: none; }\n .tabulator .tabulator-header {\n border-bottom: 3px solid #3FB449; }\n .tabulator .tabulator-header .tabulator-col {\n background-color: #222; }\n .tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 8px; }\n .tabulator .tabulator-header .tabulator-calcs-holder {\n background: #3c3c3c !important;\n border-top: 1px solid #aaa;\n border-bottom: none; }\n .tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: #3c3c3c !important; }\n .tabulator .tabulator-tableholder .tabulator-placeholder span {\n color: #3FB449; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #484848 !important;\n color: #fff; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-top {\n border-bottom: none; }\n .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs-bottom {\n border-top: none; }\n .tabulator .tabulator-footer {\n padding: 5px 10px;\n padding-top: 8px;\n border-top: 3px solid #3FB449; }\n .tabulator .tabulator-footer .tabulator-calcs-holder {\n margin: -8px -10px 8px -10px;\n background: #3c3c3c !important;\n border-top: none;\n border-bottom: 1px solid #aaa; }\n .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: #3c3c3c !important;\n color: #fff !important; }\n .tabulator .tabulator-footer .tabulator-paginator label {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page-counter {\n color: #fff; }\n .tabulator .tabulator-footer .tabulator-page {\n background-color: #fff;\n color: #222;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit; }\n\n.tabulator-row .tabulator-cell {\n padding: 6px; }\n .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n background: #3FB449; }\n\n.tabulator-row.tabulator-group {\n border-right: 1px solid #aaa;\n border-top: 1px solid #000;\n border-bottom: 2px solid #3FB449;\n background: #222;\n color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-row.tabulator-group:hover {\n background-color: #090909; } }\n .tabulator-row.tabulator-group span {\n color: #3FB449; }\n\n.tabulator-print-table {\n border-collapse: collapse; }\n .tabulator-print-table .tabulator-print-table-group {\n border-bottom: 2px solid #3FB449;\n background: #222;\n color: #fff; }\n @media (hover: hover) and (pointer: fine) {\n .tabulator-print-table .tabulator-print-table-group:hover {\n background-color: #090909; } }\n .tabulator-print-table .tabulator-print-table-group span {\n color: #3FB449; }\n"]} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/js/jquery_wrapper.js b/tmp/tabulator-5.6.1/dist/js/jquery_wrapper.js deleted file mode 100644 index aef69a3..0000000 --- a/tmp/tabulator-5.6.1/dist/js/jquery_wrapper.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of the Tabulator package. - * - * (c) Oliver Folkerd - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - * Full Documentation & Demos can be found at: http://olifolkerd.github.io/tabulator/ - * - */ - -(function (root, factory) { - "use strict"; - if (typeof define === 'function' && define.amd) { - define(['jquery', 'tabulator', 'jquery-ui'], factory); - } - else if(typeof module !== 'undefined' && module.exports) { - module.exports = factory( - require('jquery'), - require('tabulator'), - require('jquery-ui') - ); - } - else { - factory(root.jQuery, root.Tabulator); - } -}(this, function ($, Tabulator) { - - $.widget("ui.tabulator", { - _create:function(){ - var options = Object.assign({}, this.options); - var props = []; - - delete options.create; - delete options.disabled; - - this.table = new Tabulator(this.element[0], options); - window.table = this.table; - - //retrieve properties on prototype - props = Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(this.table))); - - //retrieve properties added by modules - props = props.concat(Object.getOwnPropertyNames(this.table)); - - //map tabulator functions to jquery wrapper - for(let key of props){ - if(typeof this.table[key] === "function" && key.charAt(0) !== "_"){ - this[key] = this.table[key].bind(this.table); - } - } - }, - - _setOption: function(option, value){ - console.error("Tabulator jQuery wrapper does not support setting options after the table has been instantiated"); - }, - - _destroy: function(option, value){ - this.table.destroy(); - }, - }); -})); diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator.js b/tmp/tabulator-5.6.1/dist/js/tabulator.js deleted file mode 100644 index ce8b256..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator.js +++ /dev/null @@ -1,28005 +0,0 @@ -/* Tabulator v5.6.1 (c) Oliver Folkerd 2024 */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tabulator = factory()); -}(this, (function () { 'use strict'; - - var defaultOptions = { - - debugEventsExternal:false, //flag to console log events - debugEventsInternal:false, //flag to console log events - debugInvalidOptions:true, //allow toggling of invalid option warnings - debugInvalidComponentFuncs:true, //allow toggling of invalid component warnings - debugInitialization:true, //allow toggling of pre initialization function call warnings - debugDeprecation:true, //allow toggling of deprecation warnings - - height:false, //height of tabulator - minHeight:false, //minimum height of tabulator - maxHeight:false, //maximum height of tabulator - - columnHeaderVertAlign:"top", //vertical alignment of column headers - - popupContainer:false, - - columns:[],//store for colum header info - columnDefaults:{}, //store column default props - - data:false, //default starting data - - autoColumns:false, //build columns from data row structure - autoColumnsDefinitions:false, - - nestedFieldSeparator:".", //separator for nested data - - footerElement:false, //hold footer element - - index:"id", //filed for row index - - textDirection:"auto", - - addRowPos:"bottom", //position to insert blank rows, top|bottom - - headerVisible:true, //hide header - - renderVertical:"virtual", - renderHorizontal:"basic", - renderVerticalBuffer:0, // set virtual DOM buffer size - - scrollToRowPosition:"top", - scrollToRowIfVisible:true, - - scrollToColumnPosition:"left", - scrollToColumnIfVisible:true, - - rowFormatter:false, - rowFormatterPrint:null, - rowFormatterClipboard:null, - rowFormatterHtmlOutput:null, - - rowHeight:null, - - placeholder:false, - - dataLoader:true, - dataLoaderLoading:false, - dataLoaderError:false, - dataLoaderErrorTimeout:3000, - - dataSendParams:{}, - - dataReceiveParams:{}, - }; - - class CoreFeature{ - - constructor(table){ - this.table = table; - } - - ////////////////////////////////////////// - /////////////// DataLoad ///////////////// - ////////////////////////////////////////// - - reloadData(data, silent, columnsChanged){ - return this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged); - } - - ////////////////////////////////////////// - ///////////// Localization /////////////// - ////////////////////////////////////////// - - langText(){ - return this.table.modules.localize.getText(...arguments); - } - - langBind(){ - return this.table.modules.localize.bind(...arguments); - } - - langLocale(){ - return this.table.modules.localize.getLocale(...arguments); - } - - - ////////////////////////////////////////// - ////////// Inter Table Comms ///////////// - ////////////////////////////////////////// - - commsConnections(){ - return this.table.modules.comms.getConnections(...arguments); - } - - commsSend(){ - return this.table.modules.comms.send(...arguments); - } - - ////////////////////////////////////////// - //////////////// Layout ///////////////// - ////////////////////////////////////////// - - layoutMode(){ - return this.table.modules.layout.getMode(); - } - - layoutRefresh(force){ - return this.table.modules.layout.layout(force); - } - - - ////////////////////////////////////////// - /////////////// Event Bus //////////////// - ////////////////////////////////////////// - - subscribe(){ - return this.table.eventBus.subscribe(...arguments); - } - - unsubscribe(){ - return this.table.eventBus.unsubscribe(...arguments); - } - - subscribed(key){ - return this.table.eventBus.subscribed(key); - } - - subscriptionChange(){ - return this.table.eventBus.subscriptionChange(...arguments); - } - - dispatch(){ - return this.table.eventBus.dispatch(...arguments); - } - - chain(){ - return this.table.eventBus.chain(...arguments); - } - - confirm(){ - return this.table.eventBus.confirm(...arguments); - } - - dispatchExternal(){ - return this.table.externalEvents.dispatch(...arguments); - } - - subscribedExternal(key){ - return this.table.externalEvents.subscribed(key); - } - - subscriptionChangeExternal(){ - return this.table.externalEvents.subscriptionChange(...arguments); - } - - ////////////////////////////////////////// - //////////////// Options ///////////////// - ////////////////////////////////////////// - - options(key){ - return this.table.options[key]; - } - - setOption(key, value){ - if(typeof value !== "undefined"){ - this.table.options[key] = value; - } - - return this.table.options[key]; - } - - ////////////////////////////////////////// - /////////// Deprecation Checks /////////// - ////////////////////////////////////////// - - deprecationCheck(oldOption, newOption, convert){ - return this.table.deprecationAdvisor.check(oldOption, newOption, convert); - } - - deprecationCheckMsg(oldOption, msg){ - return this.table.deprecationAdvisor.checkMsg(oldOption, msg); - } - - deprecationMsg(msg){ - return this.table.deprecationAdvisor.msg(msg); - } - ////////////////////////////////////////// - //////////////// Modules ///////////////// - ////////////////////////////////////////// - - module(key){ - return this.table.module(key); - } - } - - //public column object - class ColumnComponent { - constructor (column){ - this._column = column; - this.type = "ColumnComponent"; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._column.table.componentFunctionBinder.handle("column", target._column, name); - } - } - }); - } - - getElement(){ - return this._column.getElement(); - } - - getDefinition(){ - return this._column.getDefinition(); - } - - getField(){ - return this._column.getField(); - } - - getTitleDownload() { - return this._column.getTitleDownload(); - } - - getCells(){ - var cells = []; - - this._column.cells.forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - isVisible(){ - return this._column.visible; - } - - show(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.show(); - }); - }else { - this._column.show(); - } - } - - hide(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.hide(); - }); - }else { - this._column.hide(); - } - } - - toggle(){ - if(this._column.visible){ - this.hide(); - }else { - this.show(); - } - } - - delete(){ - return this._column.delete(); - } - - getSubColumns(){ - var output = []; - - if(this._column.columns.length){ - this._column.columns.forEach(function(column){ - output.push(column.getComponent()); - }); - } - - return output; - } - - getParentColumn(){ - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; - } - - _getSelf(){ - return this._column; - } - - scrollTo(position, ifVisible){ - return this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible); - } - - getTable(){ - return this._column.table; - } - - move(to, after){ - var toColumn = this._column.table.columnManager.findColumn(to); - - if(toColumn){ - this._column.table.columnManager.moveColumn(this._column, toColumn, after); - }else { - console.warn("Move Error - No matching column found:", toColumn); - } - } - - getNextColumn(){ - var nextCol = this._column.nextColumn(); - - return nextCol ? nextCol.getComponent() : false; - } - - getPrevColumn(){ - var prevCol = this._column.prevColumn(); - - return prevCol ? prevCol.getComponent() : false; - } - - updateDefinition(updates){ - return this._column.updateDefinition(updates); - } - - getWidth(){ - return this._column.getWidth(); - } - - setWidth(width){ - var result; - - if(width === true){ - result = this._column.reinitializeWidth(true); - }else { - result = this._column.setWidth(width); - } - - this._column.table.columnManager.rerenderColumns(true); - - return result; - } - } - - var defaultColumnOptions = { - "title": undefined, - "field": undefined, - "columns": undefined, - "visible": undefined, - "hozAlign": undefined, - "vertAlign": undefined, - "width": undefined, - "minWidth": 40, - "maxWidth": undefined, - "maxInitialWidth": undefined, - "cssClass": undefined, - "variableHeight": undefined, - "headerVertical": undefined, - "headerHozAlign": undefined, - "headerWordWrap": false, - "editableTitle": undefined, - }; - - //public cell object - class CellComponent { - - constructor (cell){ - this._cell = cell; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._cell.table.componentFunctionBinder.handle("cell", target._cell, name); - } - } - }); - } - - getValue(){ - return this._cell.getValue(); - } - - getOldValue(){ - return this._cell.getOldValue(); - } - - getInitialValue(){ - return this._cell.initialValue; - } - - getElement(){ - return this._cell.getElement(); - } - - getRow(){ - return this._cell.row.getComponent(); - } - - getData(transform){ - return this._cell.row.getData(transform); - } - getType(){ - return "cell"; - } - getField(){ - return this._cell.column.getField(); - } - - getColumn(){ - return this._cell.column.getComponent(); - } - - setValue(value, mutate){ - if(typeof mutate == "undefined"){ - mutate = true; - } - - this._cell.setValue(value, mutate); - } - - restoreOldValue(){ - this._cell.setValueActual(this._cell.getOldValue()); - } - - restoreInitialValue(){ - this._cell.setValueActual(this._cell.initialValue); - } - - checkHeight(){ - this._cell.checkHeight(); - } - - getTable(){ - return this._cell.table; - } - - _getSelf(){ - return this._cell; - } - } - - class Cell extends CoreFeature{ - constructor(column, row){ - super(column.table); - - this.table = column.table; - this.column = column; - this.row = row; - this.element = null; - this.value = null; - this.initialValue; - this.oldValue = null; - this.modules = {}; - - this.height = null; - this.width = null; - this.minWidth = null; - - this.component = null; - - this.loaded = false; //track if the cell has been added to the DOM yet - - this.build(); - } - - //////////////// Setup Functions ///////////////// - //generate element - build(){ - this.generateElement(); - - this.setWidth(); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); - - this.initialValue = this.value; - } - - generateElement(){ - this.element = document.createElement('div'); - this.element.className = "tabulator-cell"; - this.element.setAttribute("role", "gridcell"); - } - - _configureCell(){ - var element = this.element, - field = this.column.getField(), - vertAligns = { - top:"flex-start", - bottom:"flex-end", - middle:"center", - }, - hozAligns = { - left:"flex-start", - right:"flex-end", - center:"center", - }; - - //set text alignment - element.style.textAlign = this.column.hozAlign; - - if(this.column.vertAlign){ - element.style.display = "inline-flex"; - - element.style.alignItems = vertAligns[this.column.vertAlign] || ""; - - if(this.column.hozAlign){ - element.style.justifyContent = hozAligns[this.column.hozAlign] || ""; - } - } - - if(field){ - element.setAttribute("tabulator-field", field); - } - - //add class to cell if needed - if(this.column.definition.cssClass){ - var classNames = this.column.definition.cssClass.split(" "); - classNames.forEach((className) => { - element.classList.add(className); - }); - } - - this.dispatch("cell-init", this); - - //hide cell if not visible - if(!this.column.visible){ - this.hide(); - } - } - - //generate cell contents - _generateContents(){ - var val; - - val = this.chain("cell-format", this, null, () => { - return this.element.innerHTML = this.value; - }); - - switch(typeof val){ - case "object": - if(val instanceof Node){ - - //clear previous cell contents - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - this.element.appendChild(val); - }else { - this.element.innerHTML = ""; - - if(val != null){ - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - } - break; - case "undefined": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = val; - } - } - - cellRendered(){ - this.dispatch("cell-rendered", this); - } - - //////////////////// Getters //////////////////// - getElement(containerOnly){ - if(!this.loaded){ - this.loaded = true; - if(!containerOnly){ - this.layoutElement(); - } - } - - return this.element; - } - - getValue(){ - return this.value; - } - - getOldValue(){ - return this.oldValue; - } - - //////////////////// Actions //////////////////// - setValue(value, mutate, force){ - var changed = this.setValueProcessData(value, mutate, force); - - if(changed){ - this.dispatch("cell-value-updated", this); - - this.cellRendered(); - - if(this.column.definition.cellEdited){ - this.column.definition.cellEdited.call(this.table, this.getComponent()); - } - - this.dispatchExternal("cellEdited", this.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - } - } - - setValueProcessData(value, mutate, force){ - var changed = false; - - if(this.value !== value || force){ - - changed = true; - - if(mutate){ - value = this.chain("cell-value-changing", [this, value], null, value); - } - } - - this.setValueActual(value); - - if(changed){ - this.dispatch("cell-value-changed", this); - } - - return changed; - } - - setValueActual(value){ - this.oldValue = this.value; - - this.value = value; - - this.dispatch("cell-value-save-before", this); - - this.column.setFieldValue(this.row.data, value); - - this.dispatch("cell-value-save-after", this); - - if(this.loaded){ - this.layoutElement(); - } - } - - layoutElement(){ - this._generateContents(); - - this.dispatch("cell-layout", this); - } - - setWidth(){ - this.width = this.column.width; - this.element.style.width = this.column.widthStyled; - } - - clearWidth(){ - this.width = ""; - this.element.style.width = ""; - } - - getWidth(){ - return this.width || this.element.offsetWidth; - } - - setMinWidth(){ - this.minWidth = this.column.minWidth; - this.element.style.minWidth = this.column.minWidthStyled; - } - - setMaxWidth(){ - this.maxWidth = this.column.maxWidth; - this.element.style.maxWidth = this.column.maxWidthStyled; - } - - checkHeight(){ - // var height = this.element.css("height"); - this.row.reinitializeHeight(); - } - - clearHeight(){ - this.element.style.height = ""; - this.height = null; - - this.dispatch("cell-height", this, ""); - } - - setHeight(){ - this.height = this.row.height; - this.element.style.height = this.row.heightStyled; - - this.dispatch("cell-height", this, this.row.heightStyled); - } - - getHeight(){ - return this.height || this.element.offsetHeight; - } - - show(){ - this.element.style.display = this.column.vertAlign ? "inline-flex" : ""; - } - - hide(){ - this.element.style.display = "none"; - } - - delete(){ - this.dispatch("cell-delete", this); - - if(!this.table.rowManager.redrawBlock && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.element = false; - this.column.deleteCell(this); - this.row.deleteCell(this); - this.calcs = {}; - } - - getIndex(){ - return this.row.getCellIndex(this); - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new CellComponent(this); - } - - return this.component; - } - } - - class Column extends CoreFeature{ - - constructor(def, parent){ - super(parent.table); - - this.definition = def; //column definition - this.parent = parent; //hold parent object - this.type = "column"; //type of element - this.columns = []; //child columns - this.cells = []; //cells bound to this column - this.element = this.createElement(); //column header element - this.contentElement = false; - this.titleHolderElement = false; - this.titleElement = false; - this.groupElement = this.createGroupElement(); //column group holder element - this.isGroup = false; - this.hozAlign = ""; //horizontal text alignment - this.vertAlign = ""; //vert text alignment - - //multi dimensional filed handling - this.field =""; - this.fieldStructure = ""; - this.getFieldValue = ""; - this.setFieldValue = ""; - - this.titleDownload = null; - this.titleFormatterRendered = false; - - this.mapDefinitions(); - - this.setField(this.definition.field); - - this.modules = {}; //hold module variables; - - this.width = null; //column width - this.widthStyled = ""; //column width pre-styled to improve render efficiency - this.maxWidth = null; //column maximum width - this.maxWidthStyled = ""; //column maximum pre-styled to improve render efficiency - this.maxInitialWidth = null; - this.minWidth = null; //column minimum width - this.minWidthStyled = ""; //column minimum pre-styled to improve render efficiency - this.widthFixed = false; //user has specified a width for this column - - this.visible = true; //default visible state - - this.component = null; - - //initialize column - if(this.definition.columns){ - - this.isGroup = true; - - this.definition.columns.forEach((def, i) => { - var newCol = new Column(def, this); - this.attachColumn(newCol); - }); - - this.checkColumnVisibility(); - }else { - parent.registerColumnField(this); - } - - this._initialize(); - } - - createElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.setAttribute("role", "columnheader"); - el.setAttribute("aria-sort", "none"); - - switch(this.table.options.columnHeaderVertAlign){ - case "middle": - el.style.justifyContent = "center"; - break; - case "bottom": - el.style.justifyContent = "flex-end"; - break; - } - - return el; - } - - createGroupElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; - } - - mapDefinitions(){ - var defaults = this.table.options.columnDefaults; - - //map columnDefaults onto column definitions - if(defaults){ - for(let key in defaults){ - if(typeof this.definition[key] === "undefined"){ - this.definition[key] = defaults[key]; - } - } - } - - this.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition); - } - - checkDefinition(){ - Object.keys(this.definition).forEach((key) => { - if(Column.defaultOptionList.indexOf(key) === -1){ - console.warn("Invalid column definition option in '" + (this.field || this.definition.title) + "' column:", key); - } - }); - } - - setField(field){ - this.field = field; - this.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : []; - this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData; - this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData; - } - - //register column position with column manager - registerColumnPosition(column){ - this.parent.registerColumnPosition(column); - } - - //register column position with column manager - registerColumnField(column){ - this.parent.registerColumnField(column); - } - - //trigger position registration - reRegisterPosition(){ - if(this.isGroup){ - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); - }else { - this.registerColumnPosition(this); - } - } - - //build header element - _initialize(){ - var def = this.definition; - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(def.headerVertical){ - this.element.classList.add("tabulator-col-vertical"); - - if(def.headerVertical === "flip"){ - this.element.classList.add("tabulator-col-vertical-flip"); - } - } - - this.contentElement = this._buildColumnHeaderContent(); - - this.element.appendChild(this.contentElement); - - if(this.isGroup){ - this._buildGroupHeader(); - }else { - this._buildColumnHeader(); - } - - this.dispatch("column-init", this); - } - - //build header element for header - _buildColumnHeader(){ - var def = this.definition; - - this.dispatch("column-layout", this); - - //set column visibility - if(typeof def.visible != "undefined"){ - if(def.visible){ - this.show(true); - }else { - this.hide(true); - } - } - - //assign additional css classes to column header - if(def.cssClass){ - var classNames = def.cssClass.split(" "); - classNames.forEach((className) => { - this.element.classList.add(className); - }); - } - - if(def.field){ - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - this.setMinWidth(parseInt(def.minWidth)); - - if (def.maxInitialWidth) { - this.maxInitialWidth = parseInt(def.maxInitialWidth); - } - - if(def.maxWidth){ - this.setMaxWidth(parseInt(def.maxWidth)); - } - - this.reinitializeWidth(); - - //set horizontal text alignment - this.hozAlign = this.definition.hozAlign; - this.vertAlign = this.definition.vertAlign; - - this.titleElement.style.textAlign = this.definition.headerHozAlign; - } - - _buildColumnHeaderContent(){ - var contentElement = document.createElement("div"); - contentElement.classList.add("tabulator-col-content"); - - this.titleHolderElement = document.createElement("div"); - this.titleHolderElement.classList.add("tabulator-col-title-holder"); - - contentElement.appendChild(this.titleHolderElement); - - this.titleElement = this._buildColumnHeaderTitle(); - - this.titleHolderElement.appendChild(this.titleElement); - - return contentElement; - } - - //build title element of column - _buildColumnHeaderTitle(){ - var def = this.definition; - - var titleHolderElement = document.createElement("div"); - titleHolderElement.classList.add("tabulator-col-title"); - - if(def.headerWordWrap){ - titleHolderElement.classList.add("tabulator-col-title-wrap"); - } - - if(def.editableTitle){ - var titleElement = document.createElement("input"); - titleElement.classList.add("tabulator-title-editor"); - - titleElement.addEventListener("click", (e) => { - e.stopPropagation(); - titleElement.focus(); - }); - - titleElement.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - titleElement.addEventListener("change", () => { - def.title = titleElement.value; - this.dispatchExternal("columnTitleChanged", this.getComponent()); - }); - - titleHolderElement.appendChild(titleElement); - - if(def.field){ - this.langBind("columns|" + def.field, (text) => { - titleElement.value = text || (def.title || " "); - }); - }else { - titleElement.value = def.title || " "; - } - - }else { - if(def.field){ - this.langBind("columns|" + def.field, (text) => { - this._formatColumnHeaderTitle(titleHolderElement, text || (def.title || " ")); - }); - }else { - this._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; - } - - _formatColumnHeaderTitle(el, title){ - var contents = this.chain("column-format", [this, title, el], null, () => { - return title; - }); - - switch(typeof contents){ - case "object": - if(contents instanceof Node){ - el.appendChild(contents); - }else { - el.innerHTML = ""; - console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); - } - break; - case "undefined": - el.innerHTML = ""; - break; - default: - el.innerHTML = contents; - } - } - - //build header element for column group - _buildGroupHeader(){ - this.element.classList.add("tabulator-col-group"); - this.element.setAttribute("role", "columngroup"); - this.element.setAttribute("aria-title", this.definition.title); - - //asign additional css classes to column header - if(this.definition.cssClass){ - var classNames = this.definition.cssClass.split(" "); - classNames.forEach((className) => { - this.element.classList.add(className); - }); - } - - this.titleElement.style.textAlign = this.definition.headerHozAlign; - - this.element.appendChild(this.groupElement); - } - - //flat field lookup - _getFlatData(data){ - return data[this.field]; - } - - //nested field lookup - _getNestedData(data){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for(let i = 0; i < length; i++){ - - dataObj = dataObj[structure[i]]; - - output = dataObj; - - if(!dataObj){ - break; - } - } - - return output; - } - - //flat field set - _setFlatData(data, value){ - if(this.field){ - data[this.field] = value; - } - } - - //nested field set - _setNestedData(data, value){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for(let i = 0; i < length; i++){ - - if(i == length -1){ - dataObj[structure[i]] = value; - }else { - if(!dataObj[structure[i]]){ - if(typeof value !== "undefined"){ - dataObj[structure[i]] = {}; - }else { - break; - } - } - - dataObj = dataObj[structure[i]]; - } - } - } - - //attach column to this group - attachColumn(column){ - if(this.groupElement){ - this.columns.push(column); - this.groupElement.appendChild(column.getElement()); - - column.columnRendered(); - }else { - console.warn("Column Warning - Column being attached to another column instead of column group"); - } - } - - //vertically align header in column - verticalAlign(alignment, height){ - - //calculate height of column header and group holder element - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight); - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - this.element.style.height = parentHeight + "px"; - - this.dispatch("column-height", this, this.element.style.height); - - if(this.isGroup){ - this.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + "px"; - } - - //vertically align cell contents - // if(!this.isGroup && alignment !== "top"){ - // if(alignment === "bottom"){ - // this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + "px"; - // }else{ - // this.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + "px"; - // } - // } - - this.columns.forEach(function(column){ - column.verticalAlign(alignment); - }); - } - - //clear vertical alignment - clearVerticalAlign(){ - this.element.style.paddingTop = ""; - this.element.style.height = ""; - this.element.style.minHeight = ""; - this.groupElement.style.minHeight = ""; - - this.columns.forEach(function(column){ - column.clearVerticalAlign(); - }); - - this.dispatch("column-height", this, ""); - } - - //// Retrieve Column Information //// - //return column header element - getElement(){ - return this.element; - } - - //return column group element - getGroupElement(){ - return this.groupElement; - } - - //return field name - getField(){ - return this.field; - } - - getTitleDownload() { - return this.titleDownload; - } - - //return the first column in a group - getFirstColumn(){ - if(!this.isGroup){ - return this; - }else { - if(this.columns.length){ - return this.columns[0].getFirstColumn(); - }else { - return false; - } - } - } - - //return the last column in a group - getLastColumn(){ - if(!this.isGroup){ - return this; - }else { - if(this.columns.length){ - return this.columns[this.columns.length -1].getLastColumn(); - }else { - return false; - } - } - } - - //return all columns in a group - getColumns(traverse){ - var columns = []; - - if(traverse){ - this.columns.forEach((column) => { - columns.push(column); - - columns = columns.concat(column.getColumns(true)); - }); - }else { - columns = this.columns; - } - - return columns; - } - - //return all columns in a group - getCells(){ - return this.cells; - } - - //retrieve the top column in a group of columns - getTopColumn(){ - if(this.parent.isGroup){ - return this.parent.getTopColumn(); - }else { - return this; - } - } - - //return column definition object - getDefinition(updateBranches){ - var colDefs = []; - - if(this.isGroup && updateBranches){ - this.columns.forEach(function(column){ - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; - } - - //////////////////// Actions //////////////////// - checkColumnVisibility(){ - var visible = false; - - this.columns.forEach(function(column){ - if(column.visible){ - visible = true; - } - }); - - if(visible){ - this.show(); - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); - }else { - this.hide(); - } - } - - //show column - show(silent, responsiveToggle){ - if(!this.visible){ - this.visible = true; - - this.element.style.display = ""; - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.show(); - }); - - if(!this.isGroup && this.width === null){ - this.reinitializeWidth(); - } - - this.table.columnManager.verticalAlignHeaders(); - - this.dispatch("column-show", this, responsiveToggle); - - if(!silent){ - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), true); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - if(!this.silent){ - this.table.columnManager.rerenderColumns(); - } - } - } - - //hide column - hide(silent, responsiveToggle){ - if(this.visible){ - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager.verticalAlignHeaders(); - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.hide(); - }); - - this.dispatch("column-hide", this, responsiveToggle); - - if(!silent){ - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - if(!this.silent){ - this.table.columnManager.rerenderColumns(); - } - } - } - - matchChildWidths(){ - var childWidth = 0; - - if(this.contentElement && this.columns.length){ - this.columns.forEach(function(column){ - if(column.visible){ - childWidth += column.getWidth(); - } - }); - - this.contentElement.style.maxWidth = (childWidth - 1) + "px"; - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - } - } - - removeChild(child){ - var index = this.columns.indexOf(child); - - if(index > -1){ - this.columns.splice(index, 1); - } - - if(!this.columns.length){ - this.delete(); - } - } - - setWidth(width){ - this.widthFixed = true; - this.setWidthActual(width); - } - - setWidthActual(width){ - if(isNaN(width)){ - width = Math.floor((this.table.element.clientWidth/100) * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - if(this.maxWidth){ - width = Math.min(this.maxWidth, width); - } - - this.width = width; - this.widthStyled = width ? width + "px" : ""; - - this.element.style.width = this.widthStyled; - - if(!this.isGroup){ - this.cells.forEach(function(cell){ - cell.setWidth(); - }); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - this.dispatch("column-width", this); - } - - checkCellHeights(){ - var rows = []; - - this.cells.forEach(function(cell){ - if(cell.row.heightInitialized){ - if(cell.row.getElement().offsetParent !== null){ - rows.push(cell.row); - cell.row.clearCellHeight(); - }else { - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function(row){ - row.calcHeight(); - }); - - rows.forEach(function(row){ - row.setCellHeight(); - }); - } - - getWidth(){ - var width = 0; - - if(this.isGroup){ - this.columns.forEach(function(column){ - if(column.visible){ - width += column.getWidth(); - } - }); - }else { - width = this.width; - } - - return width; - } - - getLeftOffset(){ - var offset = this.element.offsetLeft; - - if(this.parent.isGroup){ - offset += this.parent.getLeftOffset(); - } - - return offset; - } - - getHeight(){ - return Math.ceil(this.element.getBoundingClientRect().height); - } - - setMinWidth(minWidth){ - if(this.maxWidth && minWidth > this.maxWidth){ - minWidth = this.maxWidth; - - console.warn("the minWidth ("+ minWidth + "px) for column '" + this.field + "' cannot be bigger that its maxWidth ("+ this.maxWidthStyled + ")"); - } - - this.minWidth = minWidth; - this.minWidthStyled = minWidth ? minWidth + "px" : ""; - - this.element.style.minWidth = this.minWidthStyled; - - this.cells.forEach(function(cell){ - cell.setMinWidth(); - }); - } - - setMaxWidth(maxWidth){ - if(this.minWidth && maxWidth < this.minWidth){ - maxWidth = this.minWidth; - - console.warn("the maxWidth ("+ maxWidth + "px) for column '" + this.field + "' cannot be smaller that its minWidth ("+ this.minWidthStyled + ")"); - } - - this.maxWidth = maxWidth; - this.maxWidthStyled = maxWidth ? maxWidth + "px" : ""; - - this.element.style.maxWidth = this.maxWidthStyled; - - this.cells.forEach(function(cell){ - cell.setMaxWidth(); - }); - } - - delete(){ - return new Promise((resolve, reject) => { - if(this.isGroup){ - this.columns.forEach(function(column){ - column.delete(); - }); - } - - this.dispatch("column-delete", this); - - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.element = false; - this.contentElement = false; - this.titleElement = false; - this.groupElement = false; - - if(this.parent.isGroup){ - this.parent.removeChild(this); - } - - this.table.columnManager.deregisterColumn(this); - - this.table.columnManager.rerenderColumns(true); - - this.dispatch("column-deleted", this); - - resolve(); - }); - } - - columnRendered(){ - if(this.titleFormatterRendered){ - this.titleFormatterRendered(); - } - - this.dispatch("column-rendered", this); - } - - //////////////// Cell Management ///////////////// - //generate cell for this column - generateCell(row){ - var cell = new Cell(this, row); - - this.cells.push(cell); - - return cell; - } - - nextColumn(){ - var index = this.table.columnManager.findColumnIndex(this); - return index > -1 ? this._nextVisibleColumn(index + 1) : false; - } - - _nextVisibleColumn(index){ - var column = this.table.columnManager.getColumnByIndex(index); - return !column || column.visible ? column : this._nextVisibleColumn(index + 1); - } - - prevColumn(){ - var index = this.table.columnManager.findColumnIndex(this); - return index > -1 ? this._prevVisibleColumn(index - 1) : false; - } - - _prevVisibleColumn(index){ - var column = this.table.columnManager.getColumnByIndex(index); - return !column || column.visible ? column : this._prevVisibleColumn(index - 1); - } - - reinitializeWidth(force){ - this.widthFixed = false; - - //set width if present - if(typeof this.definition.width !== "undefined" && !force){ - // maxInitialWidth ignored here as width specified - this.setWidth(this.definition.width); - } - - this.dispatch("column-width-fit-before", this); - - this.fitToData(force); - - this.dispatch("column-width-fit-after", this); - } - - //set column width to maximum cell width for non group columns - fitToData(force){ - if(this.isGroup){ - return; - } - - if(!this.widthFixed){ - this.element.style.width = ""; - - this.cells.forEach((cell) => { - cell.clearWidth(); - }); - } - - var maxWidth = this.element.offsetWidth; - - if(!this.width || !this.widthFixed){ - this.cells.forEach((cell) => { - var width = cell.getWidth(); - - if(width > maxWidth){ - maxWidth = width; - } - }); - - if(maxWidth){ - var setTo = maxWidth + 1; - if (this.maxInitialWidth && !force) { - setTo = Math.min(setTo, this.maxInitialWidth); - } - this.setWidthActual(setTo); - } - } - } - - updateDefinition(updates){ - var definition; - - if(!this.isGroup){ - if(!this.parent.isGroup){ - definition = Object.assign({}, this.getDefinition()); - definition = Object.assign(definition, updates); - - return this.table.columnManager.addColumn(definition, false, this) - .then((column) => { - - if(definition.field == this.field){ - this.field = false; //clear field name to prevent deletion of duplicate column from arrays - } - - return this.delete() - .then(() => { - return column.getComponent(); - }); - - }); - }else { - console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"); - return Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); - } - }else { - console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"); - return Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); - } - } - - deleteCell(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new ColumnComponent(this); - } - - return this.component; - } - - getPosition(){ - return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1; - } - } - - Column.defaultOptionList = defaultColumnOptions; - - class Helpers{ - - static elVisible(el){ - return !(el.offsetWidth <= 0 && el.offsetHeight <= 0); - } - - static elOffset(el){ - var box = el.getBoundingClientRect(); - - return { - top: box.top + window.pageYOffset - document.documentElement.clientTop, - left: box.left + window.pageXOffset - document.documentElement.clientLeft - }; - } - - static retrieveNestedData(separator, field, data){ - var structure = separator ? field.split(separator) : [field], - length = structure.length, - output; - - for(let i = 0; i < length; i++){ - - data = data[structure[i]]; - - output = data; - - if(!data){ - break; - } - } - - return output; - } - - static deepClone(obj, clone, list = []){ - var objectProto = {}.__proto__, - arrayProto = [].__proto__; - - if (!clone){ - clone = Object.assign(Array.isArray(obj) ? [] : {}, obj); - } - - for(var i in obj) { - let subject = obj[i], - match, copy; - - if(subject != null && typeof subject === "object" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){ - match = list.findIndex((item) => { - return item.subject === subject; - }); - - if(match > -1){ - clone[i] = list[match].copy; - }else { - copy = Object.assign(Array.isArray(subject) ? [] : {}, subject); - - list.unshift({subject, copy}); - - clone[i] = this.deepClone(subject, copy, list); - } - } - } - - return clone; - } - } - - class OptionsList { - constructor(table, msgType, defaults = {}){ - this.table = table; - this.msgType = msgType; - this.registeredDefaults = Object.assign({}, defaults); - } - - register(option, value){ - this.registeredDefaults[option] = value; - } - - generate(defaultOptions, userOptions = {}){ - var output = Object.assign({}, this.registeredDefaults), - warn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true; - - Object.assign(output, defaultOptions); - - for (let key in userOptions){ - if(!output.hasOwnProperty(key)){ - if(warn){ - console.warn("Invalid " + this.msgType + " option:", key); - } - - output[key] = userOptions.key; - } - } - - - for (let key in output){ - if(key in userOptions){ - output[key] = userOptions[key]; - }else { - if(Array.isArray(output[key])){ - output[key] = Object.assign([], output[key]); - }else if(typeof output[key] === "object" && output[key] !== null){ - output[key] = Object.assign({}, output[key]); - }else if (typeof output[key] === "undefined"){ - delete output[key]; - } - } - } - - return output; - } - } - - class Renderer extends CoreFeature{ - constructor(table){ - super(table); - - this.elementVertical = table.rowManager.element; - this.elementHorizontal = table.columnManager.element; - this.tableElement = table.rowManager.tableElement; - - this.verticalFillMode = "fit"; // used by row manager to determine how to size the render area ("fit" - fits container to the contents, "fill" - fills the container without resizing it) - } - - - /////////////////////////////////// - /////// Internal Bindings ///////// - /////////////////////////////////// - - initialize(){ - //initialize core functionality - } - - clearRows(){ - //clear down existing rows layout - } - - clearColumns(){ - //clear down existing columns layout - } - - - reinitializeColumnWidths(columns){ - //resize columns to fit data - } - - - renderRows(){ - //render rows from a clean slate - } - - renderColumns(){ - //render columns from a clean slate - } - - rerenderRows(callback){ - // rerender rows and keep position - if(callback){ - callback(); - } - } - - rerenderColumns(update, blockRedraw){ - //rerender columns - } - - renderRowCells(row){ - //render the cells in a row - } - - rerenderRowCells(row, force){ - //rerender the cells in a row - } - - scrollColumns(left, dir){ - //handle horizontal scrolling - } - - scrollRows(top, dir){ - //handle vertical scrolling - } - - resize(){ - //container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION) - } - - scrollToRow(row){ - //scroll to a specific row - } - - scrollToRowNearestTop(row){ - //determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom - } - - visibleRows(includingBuffer){ - //return the visible rows - return []; - } - - /////////////////////////////////// - //////// Helper Functions ///////// - /////////////////////////////////// - - rows(){ - return this.table.rowManager.getDisplayRows(); - } - - styleRow(row, index){ - var rowEl = row.getElement(); - - if(index % 2){ - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - }else { - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } - } - - /////////////////////////////////// - /////// External Triggers ///////// - /////// (DO NOT OVERRIDE) ///////// - /////////////////////////////////// - - clear(){ - //clear down existing layout - this.clearRows(); - this.clearColumns(); - } - - render(){ - //render from a clean slate - this.renderRows(); - this.renderColumns(); - } - - rerender(callback){ - // rerender and keep position - this.rerenderRows(); - this.rerenderColumns(); - } - - scrollToRowPosition(row, position, ifVisible){ - var rowIndex = this.rows().indexOf(row), - rowEl = row.getElement(), - offset = 0; - - return new Promise((resolve, reject) => { - if(rowIndex > -1){ - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToRowIfVisible; - } - - //check row visibility - if(!ifVisible){ - if(Helpers.elVisible(rowEl)){ - offset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top; - - if(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){ - resolve(); - return false; - } - } - } - - if(typeof position === "undefined"){ - position = this.table.options.scrollToRowPosition; - } - - if(position === "nearest"){ - position = this.scrollToRowNearestTop(row) ? "top" : "bottom"; - } - - //scroll to row - this.scrollToRow(row); - - //align to correct position - switch(position){ - case "middle": - case "center": - - if(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){ - this.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2); - }else { - this.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2); - } - - break; - - case "bottom": - - if(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){ - this.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; - }else { - this.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight; - } - - break; - - case "top": - this.elementVertical.scrollTop = rowEl.offsetTop; - break; - } - - resolve(); - - }else { - console.warn("Scroll Error - Row not visible"); - reject("Scroll Error - Row not visible"); - } - }); - } - } - - class BasicHorizontal extends Renderer{ - constructor(table){ - super(table); - } - - renderRowCells(row, inFragment) { - const rowFrag = document.createDocumentFragment(); - row.cells.forEach((cell) => { - rowFrag.appendChild(cell.getElement()); - }); - row.element.appendChild(rowFrag); - - if(!inFragment){ - row.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - } - - reinitializeColumnWidths(columns){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - } - } - - class VirtualDomHorizontal extends Renderer{ - constructor(table){ - super(table); - - this.leftCol = 0; - this.rightCol = 0; - this.scrollLeft = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - - this.fitDataColAvg = 0; - - this.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen - - this.visibleRows = null; - - this.initialized = false; - this.isFitData = false; - - this.columns = []; - } - - initialize(){ - this.compatibilityCheck(); - this.layoutCheck(); - this.vertScrollListen(); - } - - compatibilityCheck(){ - if(this.options("layout") == "fitDataTable"){ - console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"); - } - - if(this.options("responsiveLayout")){ - console.warn("Horizontal Virtual DOM is not compatible with responsive columns"); - } - - if(this.options("rtl")){ - console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction"); - } - } - - layoutCheck(){ - this.isFitData = this.options("layout").startsWith('fitData'); - } - - vertScrollListen(){ - this.subscribe("scroll-vertical", this.clearVisRowCache.bind(this)); - this.subscribe("data-refreshed", this.clearVisRowCache.bind(this)); - } - - clearVisRowCache(){ - this.visibleRows = null; - } - - ////////////////////////////////////// - ///////// Public Functions /////////// - ////////////////////////////////////// - - renderColumns(row, force){ - this.dataChange(); - } - - - scrollColumns(left, dir){ - if(this.scrollLeft != left){ - this.scrollLeft = left; - - this.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer)); - } - } - - calcWindowBuffer(){ - var buffer = this.elementVertical.clientWidth; - - this.table.columnManager.columnsByIndex.forEach((column) => { - if(column.visible){ - var width = column.getWidth(); - - if(width > buffer){ - buffer = width; - } - } - }); - - this.windowBuffer = buffer * 2; - } - - rerenderColumns(update, blockRedraw){ - var old = { - cols:this.columns, - leftCol:this.leftCol, - rightCol:this.rightCol, - }, - colPos = 0; - - if(update && !this.initialized){ - return; - } - - this.clear(); - - this.calcWindowBuffer(); - - this.scrollLeft = this.elementVertical.scrollLeft; - - this.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer; - this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer; - - this.table.columnManager.columnsByIndex.forEach((column) => { - var config = {}, - width; - - if(column.visible){ - if(!column.modules.frozen){ - width = column.getWidth(); - - config.leftPos = colPos; - config.rightPos = colPos + width; - - config.width = width; - - if (this.isFitData) { - config.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true; - } - - if((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){ - //column is visible - - if(this.leftCol == -1){ - this.leftCol = this.columns.length; - this.vDomPadLeft = colPos; - } - - this.rightCol = this.columns.length; - }else { - // column is hidden - if(this.leftCol !== -1){ - this.vDomPadRight += width; - } - } - - this.columns.push(column); - - column.modules.vdomHoz = config; - - colPos += width; - } - } - }); - - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - - this.initialized = true; - - if(!blockRedraw){ - if(!update || this.reinitChanged(old)){ - this.reinitializeRows(); - } - } - - this.elementVertical.scrollLeft = this.scrollLeft; - } - - renderRowCells(row){ - if(this.initialized){ - this.initializeRow(row); - }else { - const rowFrag = document.createDocumentFragment(); - row.cells.forEach((cell) => { - rowFrag.appendChild(cell.getElement()); - }); - row.element.appendChild(rowFrag); - - row.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - } - - rerenderRowCells(row, force){ - this.reinitializeRow(row, force); - } - - reinitializeColumnWidths(columns){ - for(let i = this.leftCol; i <= this.rightCol; i++){ - this.columns[i].reinitializeWidth(); - } - } - - ////////////////////////////////////// - //////// Internal Rendering ////////// - ////////////////////////////////////// - - deinitialize(){ - this.initialized = false; - } - - clear(){ - this.columns = []; - - this.leftCol = -1; - this.rightCol = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - } - - dataChange(){ - var change = false, - row, rowEl; - - if(this.isFitData){ - this.table.columnManager.columnsByIndex.forEach((column) => { - if(!column.definition.width && column.visible){ - change = true; - } - }); - - if(change && this.table.rowManager.getDisplayRows().length){ - this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer; - - row = this.chain("rows-sample", [1], [], () => { - return this.table.rowManager.getDisplayRows(); - })[0]; - - if(row){ - rowEl = row.getElement(); - - row.generateCells(); - - this.tableElement.appendChild(rowEl); - - for(let colEnd = 0; colEnd < row.cells.length; colEnd++){ - let cell = row.cells[colEnd]; - rowEl.appendChild(cell.getElement()); - - cell.column.reinitializeWidth(); - } - - rowEl.parentNode.removeChild(rowEl); - - this.rerenderColumns(false, true); - } - } - }else { - if(this.options("layout") === "fitColumns"){ - this.layoutRefresh(); - this.rerenderColumns(false, true); - } - } - } - - reinitChanged(old){ - var match = true; - - if(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){ - return true; - } - - old.cols.forEach((col, i) => { - if(col !== this.columns[i]){ - match = false; - } - }); - - return !match; - } - - reinitializeRows(){ - var visibleRows = this.getVisibleRows(), - otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row)); - - visibleRows.forEach((row) => { - this.reinitializeRow(row, true); - }); - - otherRows.forEach((row) =>{ - row.deinitialize(); - }); - } - - getVisibleRows(){ - if (!this.visibleRows){ - this.visibleRows = this.table.rowManager.getVisibleRows(); - } - - return this.visibleRows; - } - - scroll(diff){ - this.vDomScrollPosLeft += diff; - this.vDomScrollPosRight += diff; - - if(Math.abs(diff) > (this.windowBuffer / 2)){ - this.rerenderColumns(); - }else { - if(diff > 0){ - //scroll right - this.addColRight(); - this.removeColLeft(); - }else { - //scroll left - this.addColLeft(); - this.removeColRight(); - } - } - } - - colPositionAdjust (start, end, diff){ - for(let i = start; i < end; i++){ - let column = this.columns[i]; - - column.modules.vdomHoz.leftPos += diff; - column.modules.vdomHoz.rightPos += diff; - } - } - - addColRight(){ - var changes = false, - working = true; - - while(working){ - - let column = this.columns[this.rightCol + 1]; - - if(column){ - if(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling); - cell.cellRendered(); - } - }); - - this.fitDataColActualWidthCheck(column); - - this.rightCol++; // Don't move this below the >= check below - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.rightCol = this.rightCol; - } - }); - - if(this.rightCol >= (this.columns.length - 1)){ - this.vDomPadRight = 0; - }else { - this.vDomPadRight -= column.getWidth(); - } - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - } - } - - addColLeft(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.leftCol - 1]; - - if(column){ - if(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement()); - cell.cellRendered(); - } - }); - - this.leftCol--; // don't move this below the <= check below - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.leftCol = this.leftCol; - } - }); - - if(this.leftCol <= 0){ // replicating logic in addColRight - this.vDomPadLeft = 0; - }else { - this.vDomPadLeft -= column.getWidth(); - } - - let diff = this.fitDataColActualWidthCheck(column); - - if(diff){ - this.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff; - this.vDomPadRight -= diff; - } - - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - } - } - - removeColRight(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.rightCol]; - - if(column){ - if(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - - try { - row.getElement().removeChild(cell.getElement()); - } catch (ex) { - console.warn("Could not removeColRight", ex.message); - } - } - }); - - this.vDomPadRight += column.getWidth(); - this.rightCol --; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.rightCol = this.rightCol; - } - }); - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - } - } - - removeColLeft(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.leftCol]; - - if(column){ - if(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - - try { - row.getElement().removeChild(cell.getElement()); - } catch (ex) { - console.warn("Could not removeColLeft", ex.message); - } - } - }); - - this.vDomPadLeft += column.getWidth(); - this.leftCol ++; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.leftCol = this.leftCol; - } - }); - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - } - } - - fitDataColActualWidthCheck(column){ - var newWidth, widthDiff; - - if(column.modules.vdomHoz.fitDataCheck){ - column.reinitializeWidth(); - - newWidth = column.getWidth(); - widthDiff = newWidth - column.modules.vdomHoz.width; - - if(widthDiff){ - column.modules.vdomHoz.rightPos += widthDiff; - column.modules.vdomHoz.width = newWidth; - this.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff); - } - - column.modules.vdomHoz.fitDataCheck = false; - } - - return widthDiff; - } - - initializeRow(row){ - if(row.type !== "group"){ - row.modules.vdomHoz = { - leftCol:this.leftCol, - rightCol:this.rightCol, - }; - - if(this.table.modules.frozenColumns){ - this.table.modules.frozenColumns.leftColumns.forEach((column) => { - this.appendCell(row, column); - }); - } - - for(let i = this.leftCol; i <= this.rightCol; i++){ - this.appendCell(row, this.columns[i]); - } - - if(this.table.modules.frozenColumns){ - this.table.modules.frozenColumns.rightColumns.forEach((column) => { - this.appendCell(row, column); - }); - } - } - } - - appendCell(row, column){ - if(column && column.visible){ - let cell = row.getCell(column); - - row.getElement().appendChild(cell.getElement()); - cell.cellRendered(); - } - } - - reinitializeRow(row, force){ - if(row.type !== "group"){ - if(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){ - - var rowEl = row.getElement(); - while(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild); - - this.initializeRow(row); - } - } - } - } - - class ColumnManager extends CoreFeature { - - constructor (table){ - super(table); - - this.blockHozScrollEvent = false; - this.headersElement = null; - this.contentsElement = null; - this.element = null ; //containing element - this.columns = []; // column definition object - this.columnsByIndex = []; //columns by index - this.columnsByField = {}; //columns by field - this.scrollLeft = 0; - this.optionsList = new OptionsList(this.table, "column definition", defaultColumnOptions); - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing - this.redrawBlockUpdate = null; //store latest redraw update only status - - this.renderer = null; - } - - ////////////// Setup Functions ///////////////// - - initialize(){ - this.initializeRenderer(); - - this.headersElement = this.createHeadersElement(); - this.contentsElement = this.createHeaderContentsElement(); - this.element = this.createHeaderElement(); - - this.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild); - this.element.insertBefore(this.contentsElement, this.element.firstChild); - - this.initializeScrollWheelWatcher(); - - this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); - this.subscribe("scrollbar-vertical", this.padVerticalScrollbar.bind(this)); - } - - padVerticalScrollbar(width){ - if(this.table.rtl){ - this.headersElement.style.marginLeft = width + "px"; - }else { - this.headersElement.style.marginRight = width + "px"; - } - } - - initializeRenderer(){ - var renderClass; - - var renderers = { - "virtual": VirtualDomHorizontal, - "basic": BasicHorizontal, - }; - - if(typeof this.table.options.renderHorizontal === "string"){ - renderClass = renderers[this.table.options.renderHorizontal]; - }else { - renderClass = this.table.options.renderHorizontal; - } - - if(renderClass){ - this.renderer = new renderClass(this.table, this.element, this.tableElement); - this.renderer.initialize(); - }else { - console.error("Unable to find matching renderer:", this.table.options.renderHorizontal); - } - } - - - createHeadersElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - el.setAttribute("role", "row"); - - return el; - } - - createHeaderContentsElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-header-contents"); - el.setAttribute("role", "rowgroup"); - - return el; - } - - createHeaderElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - el.setAttribute("role", "rowgroup"); - - if(!this.table.options.headerVisible){ - el.classList.add("tabulator-header-hidden"); - } - - return el; - } - - //return containing element - getElement(){ - return this.element; - } - - //return containing contents element - getContentsElement(){ - return this.contentsElement; - } - - - //return header containing element - getHeadersElement(){ - return this.headersElement; - } - - //scroll horizontally to match table body - scrollHorizontal(left){ - this.contentsElement.scrollLeft = left; - - this.scrollLeft = left; - - this.renderer.scrollColumns(left); - } - - initializeScrollWheelWatcher(){ - this.contentsElement.addEventListener("wheel", (e) => { - var left; - - if(e.deltaX){ - left = this.contentsElement.scrollLeft + e.deltaX; - - this.table.rowManager.scrollHorizontal(left); - this.table.columnManager.scrollHorizontal(left); - } - }); - } - - ///////////// Column Setup Functions ///////////// - generateColumnsFromRowData(data){ - var cols = [], - definitions = this.table.options.autoColumnsDefinitions, - row, sorter; - - if(data && data.length){ - - row = data[0]; - - for(var key in row){ - let col = { - field:key, - title:key, - }; - - let value = row[key]; - - switch(typeof value){ - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - case "object": - if(Array.isArray(value)){ - sorter = "array"; - }else { - sorter = "string"; - } - break; - - default: - if(!isNaN(value) && value !== ""){ - sorter = "number"; - }else { - if(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){ - sorter = "alphanum"; - }else { - sorter = "string"; - } - } - break; - } - - col.sorter = sorter; - - cols.push(col); - } - - if(definitions){ - - switch(typeof definitions){ - case "function": - this.table.options.columns = definitions.call(this.table, cols); - break; - - case "object": - if(Array.isArray(definitions)){ - cols.forEach((col) => { - var match = definitions.find((def) => { - return def.field === col.field; - }); - - if(match){ - Object.assign(col, match); - } - }); - - }else { - cols.forEach((col) => { - if(definitions[col.field]){ - Object.assign(col, definitions[col.field]); - } - }); - } - - this.table.options.columns = cols; - break; - } - }else { - this.table.options.columns = cols; - } - - this.setColumns(this.table.options.columns); - } - } - - setColumns(cols, row){ - while(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild); - - this.columns = []; - this.columnsByIndex = []; - this.columnsByField = {}; - - this.dispatch("columns-loading"); - - cols.forEach((def, i) => { - this._addColumn(def); - }); - - this._reIndexColumns(); - - this.dispatch("columns-loaded"); - - this.rerenderColumns(false, true); - - this.redraw(true); - } - - _addColumn(definition, before, nextToColumn){ - var column = new Column(definition, this), - colEl = column.getElement(), - index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; - - if(nextToColumn && index > -1){ - var topColumn = nextToColumn.getTopColumn(); - var parentIndex = this.columns.indexOf(topColumn); - var nextEl = topColumn.getElement(); - - if(before){ - this.columns.splice(parentIndex, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl); - }else { - this.columns.splice(parentIndex + 1, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - }else { - if(before){ - this.columns.unshift(column); - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - }else { - this.columns.push(column); - this.headersElement.appendChild(column.getElement()); - } - } - - column.columnRendered(); - - return column; - } - - registerColumnField(col){ - if(col.definition.field){ - this.columnsByField[col.definition.field] = col; - } - } - - registerColumnPosition(col){ - this.columnsByIndex.push(col); - } - - _reIndexColumns(){ - this.columnsByIndex = []; - - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); - } - - //ensure column headers take up the correct amount of space in column groups - verticalAlignHeaders(){ - var minHeight = 0; - - if(!this.redrawBlock){ - - this.headersElement.style.height=""; - - this.columns.forEach((column) => { - column.clearVerticalAlign(); - }); - - this.columns.forEach((column) => { - var height = column.getHeight(); - - if(height > minHeight){ - minHeight = height; - } - }); - - this.headersElement.style.height = minHeight + "px"; - - this.columns.forEach((column) => { - column.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight); - }); - - this.table.rowManager.adjustTableSize(); - } - } - - //////////////// Column Details ///////////////// - findColumn(subject){ - var columns; - - if(typeof subject == "object"){ - - if(subject instanceof Column){ - //subject is column element - return subject; - }else if(subject instanceof ColumnComponent){ - //subject is public column component - return subject._getSelf() || false; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - - columns = []; - - this.columns.forEach((column) => { - columns.push(column); - columns = columns.concat(column.getColumns(true)); - }); - - //subject is a HTML element of the column header - let match = columns.find((column) => { - return column.element === subject; - }); - - return match || false; - } - - }else { - //subject should be treated as the field name of the column - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - return false; - } - - getColumnByField(field){ - return this.columnsByField[field]; - } - - getColumnsByFieldRoot(root){ - var matches = []; - - Object.keys(this.columnsByField).forEach((field) => { - var fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field; - if(fieldRoot === root){ - matches.push(this.columnsByField[field]); - } - }); - - return matches; - } - - getColumnByIndex(index){ - return this.columnsByIndex[index]; - } - - getFirstVisibleColumn(){ - var index = this.columnsByIndex.findIndex((col) => { - return col.visible; - }); - - return index > -1 ? this.columnsByIndex[index] : false; - } - - getVisibleColumnsByIndex() { - return this.columnsByIndex.filter((col) => col.visible); - } - - getColumns(){ - return this.columns; - } - - findColumnIndex(column){ - return this.columnsByIndex.findIndex((col) => { - return column === col; - }); - } - - //return all columns that are not groups - getRealColumns(){ - return this.columnsByIndex; - } - - //traverse across columns and call action - traverse(callback){ - this.columnsByIndex.forEach((column,i) =>{ - callback(column, i); - }); - } - - //get definitions of actual columns - getDefinitions(active){ - var output = []; - - this.columnsByIndex.forEach((column) => { - if(!active || (active && column.visible)){ - output.push(column.getDefinition()); - } - }); - - return output; - } - - //get full nested definition tree - getDefinitionTree(){ - var output = []; - - this.columns.forEach((column) => { - output.push(column.getDefinition(true)); - }); - - return output; - } - - getComponents(structured){ - var output = [], - columns = structured ? this.columns : this.columnsByIndex; - - columns.forEach((column) => { - output.push(column.getComponent()); - }); - - return output; - } - - getWidth(){ - var width = 0; - - this.columnsByIndex.forEach((column) => { - if(column.visible){ - width += column.getWidth(); - } - }); - - return width; - } - - moveColumn(from, to, after){ - to.element.parentNode.insertBefore(from.element, to.element); - - if(after){ - to.element.parentNode.insertBefore(to.element, from.element); - } - - this.moveColumnActual(from, to, after); - - this.verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); - } - - moveColumnActual(from, to, after){ - if(from.parent.isGroup){ - this._moveColumnInArray(from.parent.columns, from, to, after); - }else { - this._moveColumnInArray(this.columns, from, to, after); - } - - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - this.rerenderColumns(true); - - this.dispatch("column-moved", from, to, after); - - if(this.subscribedExternal("columnMoved")){ - this.dispatchExternal("columnMoved", from.getComponent(), this.table.columnManager.getComponents()); - } - } - - _moveColumnInArray(columns, from, to, after, updateRows){ - var fromIndex = columns.indexOf(from), - toIndex, rows = []; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if(after){ - toIndex = toIndex+1; - } - - }else { - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if(updateRows){ - - rows = this.chain("column-moving-rows", [from, to, after], null, []) || []; - - rows = rows.concat(this.table.rowManager.rows); - - rows.forEach(function(row){ - if(row.cells.length){ - var cell = row.cells.splice(fromIndex, 1)[0]; - row.cells.splice(toIndex, 0, cell); - } - }); - - } - } - } - - scrollToColumn(column, position, ifVisible){ - var left = 0, - offset = column.getLeftOffset(), - adjust = 0, - colEl = column.getElement(); - - - return new Promise((resolve, reject) => { - - if(typeof position === "undefined"){ - position = this.table.options.scrollToColumnPosition; - } - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToColumnIfVisible; - } - - if(column.visible){ - - //align to correct position - switch(position){ - case "middle": - case "center": - adjust = -this.element.clientWidth / 2; - break; - - case "right": - adjust = colEl.clientWidth - this.headersElement.clientWidth; - break; - } - - //check column visibility - if(!ifVisible){ - if(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){ - return false; - } - } - - //calculate scroll position - left = offset + adjust; - - left = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0); - - this.table.rowManager.scrollHorizontal(left); - this.scrollHorizontal(left); - - resolve(); - }else { - console.warn("Scroll Error - Column not visible"); - reject("Scroll Error - Column not visible"); - } - - }); - } - - //////////////// Cell Management ///////////////// - generateCells(row){ - var cells = []; - - this.columnsByIndex.forEach((column) => { - cells.push(column.generateCell(row)); - }); - - return cells; - } - - //////////////// Column Management ///////////////// - getFlexBaseWidth(){ - var totalWidth = this.table.element.clientWidth, //table element width - fixedWidth = 0; - - //adjust for vertical scrollbar if present - if(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){ - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - this.columnsByIndex.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width || 0; - - minWidth = parseInt(column.minWidth); - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width) ; - }else { - colWidth = parseInt(width); - } - }else { - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - } - }); - - return fixedWidth; - } - - addColumn(definition, before, nextToColumn){ - return new Promise((resolve, reject) => { - var column = this._addColumn(definition, before, nextToColumn); - - this._reIndexColumns(); - - this.dispatch("column-add", definition, before, nextToColumn); - - if(this.layoutMode() != "fitColumns"){ - column.reinitializeWidth(); - } - - this.redraw(true); - - this.table.rowManager.reinitialize(); - - this.rerenderColumns(); - - resolve(column); - }); - } - - //remove column from system - deregisterColumn(column){ - var field = column.getField(), - index; - - //remove from field list - if(field){ - delete this.columnsByField[field]; - } - - //remove from index list - index = this.columnsByIndex.indexOf(column); - - if(index > -1){ - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - index = this.columns.indexOf(column); - - if(index > -1){ - this.columns.splice(index, 1); - } - - this.verticalAlignHeaders(); - - this.redraw(); - } - - rerenderColumns(update, silent){ - if(!this.redrawBlock){ - this.renderer.rerenderColumns(update, silent); - }else { - if(update === false || (update === true && this.redrawBlockUpdate === null)){ - this.redrawBlockUpdate = update; - } - } - } - - blockRedraw(){ - this.redrawBlock = true; - this.redrawBlockUpdate = null; - } - - restoreRedraw(){ - this.redrawBlock = false; - this.verticalAlignHeaders(); - this.renderer.rerenderColumns(this.redrawBlockUpdate); - - } - - //redraw columns - redraw(force){ - if(Helpers.elVisible(this.element)){ - this.verticalAlignHeaders(); - } - - if(force){ - this.table.rowManager.resetScroll(); - this.table.rowManager.reinitialize(); - } - - if(!this.confirm("table-redrawing", force)){ - this.layoutRefresh(force); - } - - this.dispatch("table-redraw", force); - - this.table.footerManager.redraw(); - } - } - - //public row object - class RowComponent { - - constructor (row){ - this._row = row; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._row.table.componentFunctionBinder.handle("row", target._row, name); - } - } - }); - } - - getData(transform){ - return this._row.getData(transform); - } - - getElement(){ - return this._row.getElement(); - } - - getCells(){ - var cells = []; - - this._row.getCells().forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - getCell(column){ - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; - } - - getIndex(){ - return this._row.getData("data")[this._row.table.options.index]; - } - - getPosition(){ - return this._row.getPosition(); - } - - watchPosition(callback){ - return this._row.watchPosition(callback); - } - - delete(){ - return this._row.delete(); - } - - scrollTo(position, ifVisible){ - return this._row.table.rowManager.scrollToRow(this._row, position, ifVisible); - } - - move(to, after){ - this._row.moveToRow(to, after); - } - - update(data){ - return this._row.updateData(data); - } - - normalizeHeight(){ - this._row.normalizeHeight(true); - } - - _getSelf(){ - return this._row; - } - - reformat(){ - return this._row.reinitialize(); - } - - getTable(){ - return this._row.table; - } - - getNextRow(){ - var row = this._row.nextRow(); - return row ? row.getComponent() : row; - } - - getPrevRow(){ - var row = this._row.prevRow(); - return row ? row.getComponent() : row; - } - } - - class Row extends CoreFeature{ - constructor (data, parent, type = "row"){ - super(parent.table); - - this.parent = parent; - this.data = {}; - this.type = type; //type of element - this.element = false; - this.modules = {}; //hold module variables; - this.cells = []; - this.height = 0; //hold element height - this.heightStyled = ""; //hold element height pre-styled to improve render efficiency - this.manualHeight = false; //user has manually set row height - this.outerHeight = 0; //hold elements outer height - this.initialized = false; //element has been rendered - this.heightInitialized = false; //element has resized cells to fit - this.position = 0; //store position of element in row list - this.positionWatchers = []; - - this.component = null; - - this.created = false; - - this.setData(data); - } - - create(){ - if(!this.created){ - this.created = true; - this.generateElement(); - } - } - - createElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.setAttribute("role", "row"); - - this.element = el; - } - - getElement(){ - this.create(); - return this.element; - } - - detachElement(){ - if (this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - generateElement(){ - this.createElement(); - this.dispatch("row-init", this); - } - - generateCells(){ - this.cells = this.table.columnManager.generateCells(this); - } - - //functions to setup on first render - initialize(force, inFragment){ - this.create(); - - if(!this.initialized || force){ - - this.deleteCells(); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - this.dispatch("row-layout-before", this); - - this.generateCells(); - - this.initialized = true; - - this.table.columnManager.renderer.renderRowCells(this, inFragment); - - if(force){ - this.normalizeHeight(); - } - - this.dispatch("row-layout", this); - - if(this.table.options.rowFormatter){ - this.table.options.rowFormatter(this.getComponent()); - } - - this.dispatch("row-layout-after", this); - }else { - this.table.columnManager.renderer.rerenderRowCells(this, inFragment); - } - } - - rendered(){ - this.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - - reinitializeHeight(){ - this.heightInitialized = false; - - if(this.element && this.element.offsetParent !== null){ - this.normalizeHeight(true); - } - } - - deinitialize(){ - this.initialized = false; - } - - deinitializeHeight(){ - this.heightInitialized = false; - } - - reinitialize(children){ - this.initialized = false; - this.heightInitialized = false; - - if(!this.manualHeight){ - this.height = 0; - this.heightStyled = ""; - } - - if(this.element && this.element.offsetParent !== null){ - this.initialize(true); - } - - this.dispatch("row-relayout", this); - } - - //get heights when doing bulk row style calcs in virtual DOM - calcHeight(force){ - var maxHeight = 0, - minHeight; - - if(this.table.options.rowHeight){ - this.height = this.table.options.rowHeight; - }else { - minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; - - this.cells.forEach(function(cell){ - var height = cell.getHeight(); - if(height > maxHeight){ - maxHeight = height; - } - }); - - if(force){ - this.height = Math.max(maxHeight, minHeight); - }else { - this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight); - } - } - - this.heightStyled = this.height ? this.height + "px" : ""; - this.outerHeight = this.element.offsetHeight; - } - - //set of cells - setCellHeight(){ - this.cells.forEach(function(cell){ - cell.setHeight(); - }); - - this.heightInitialized = true; - } - - clearCellHeight(){ - this.cells.forEach(function(cell){ - cell.clearHeight(); - }); - } - - //normalize the height of elements in the row - normalizeHeight(force){ - if(force && !this.table.options.rowHeight){ - this.clearCellHeight(); - } - - this.calcHeight(force); - - this.setCellHeight(); - } - - //set height of rows - setHeight(height, force){ - if(this.height != height || force){ - - this.manualHeight = true; - - this.height = height; - this.heightStyled = height ? height + "px" : ""; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - this.outerHeight = this.element.offsetHeight; - } - } - - //return rows outer height - getHeight(){ - return this.outerHeight; - } - - //return rows outer Width - getWidth(){ - return this.element.offsetWidth; - } - - //////////////// Cell Management ///////////////// - deleteCell(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } - } - - //////////////// Data Management ///////////////// - setData(data){ - this.data = this.chain("row-data-init-before", [this, data], undefined, data); - - this.dispatch("row-data-init-after", this); - } - - //update the rows data - updateData(updatedData){ - var visible = this.element && Helpers.elVisible(this.element), - tempData = {}, - newRowData; - - return new Promise((resolve, reject) => { - - if(typeof updatedData === "string"){ - updatedData = JSON.parse(updatedData); - } - - this.dispatch("row-data-save-before", this); - - if(this.subscribed("row-data-changing")){ - tempData = Object.assign(tempData, this.data); - tempData = Object.assign(tempData, updatedData); - } - - newRowData = this.chain("row-data-changing", [this, tempData, updatedData], null, updatedData); - - //set data - for (let attrname in newRowData) { - this.data[attrname] = newRowData[attrname]; - } - - this.dispatch("row-data-save-after", this); - - //update affected cells only - for (let attrname in updatedData) { - - let columns = this.table.columnManager.getColumnsByFieldRoot(attrname); - - columns.forEach((column) => { - let cell = this.getCell(column.getField()); - - if(cell){ - let value = column.getFieldValue(newRowData); - if(cell.getValue() !== value){ - cell.setValueProcessData(value); - - if(visible){ - cell.cellRendered(); - } - } - } - }); - } - - //Partial reinitialization if visible - if(visible){ - this.normalizeHeight(true); - - if(this.table.options.rowFormatter){ - this.table.options.rowFormatter(this.getComponent()); - } - }else { - this.initialized = false; - this.height = 0; - this.heightStyled = ""; - } - - this.dispatch("row-data-changed", this, visible, updatedData); - - //this.reinitialize(); - - this.dispatchExternal("rowUpdated", this.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - - resolve(); - }); - } - - getData(transform){ - if(transform){ - return this.chain("row-data-retrieve", [this, transform], null, this.data); - } - - return this.data; - } - - getCell(column){ - var match = false; - - column = this.table.columnManager.findColumn(column); - - if(!this.initialized && this.cells.length === 0){ - this.generateCells(); - } - - match = this.cells.find(function(cell){ - return cell.column === column; - }); - - return match; - } - - getCellIndex(findCell){ - return this.cells.findIndex(function(cell){ - return cell === findCell; - }); - } - - findCell(subject){ - return this.cells.find((cell) => { - return cell.element === subject; - }); - } - - getCells(){ - if(!this.initialized && this.cells.length === 0){ - this.generateCells(); - } - - return this.cells; - } - - nextRow(){ - var row = this.table.rowManager.nextDisplayRow(this, true); - return row || false; - } - - prevRow(){ - var row = this.table.rowManager.prevDisplayRow(this, true); - return row || false; - } - - moveToRow(to, before){ - var toRow = this.table.rowManager.findRow(to); - - if(toRow){ - this.table.rowManager.moveRowActual(this, toRow, !before); - this.table.rowManager.refreshActiveData("display", false, true); - }else { - console.warn("Move Error - No matching row found:", to); - } - } - - ///////////////////// Actions ///////////////////// - delete(){ - this.dispatch("row-delete", this); - - this.deleteActual(); - - return Promise.resolve(); - } - - deleteActual(blockRedraw){ - this.detachModules(); - - this.table.rowManager.deleteRow(this, blockRedraw); - - this.deleteCells(); - - this.initialized = false; - this.heightInitialized = false; - this.element = false; - - this.dispatch("row-deleted", this); - } - - detachModules(){ - this.dispatch("row-deleting", this); - } - - deleteCells(){ - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } - } - - wipe(){ - this.detachModules(); - this.deleteCells(); - - if(this.element){ - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - this.element = false; - this.modules = {}; - } - - isDisplayed(){ - return this.table.rowManager.getDisplayRows().includes(this); - } - - getPosition(){ - return this.isDisplayed() ? this.position : false; - } - - setPosition(position){ - if(position != this.position){ - this.position = position; - - this.positionWatchers.forEach((callback) => { - callback(this.position); - }); - } - } - - watchPosition(callback){ - this.positionWatchers.push(callback); - - callback(this.position); - } - - getGroup(){ - return this.modules.group || false; - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new RowComponent(this); - } - - return this.component; - } - } - - class BasicVertical extends Renderer{ - constructor(table){ - super(table); - - this.verticalFillMode = "fill"; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.scrollTop = 0; - this.scrollLeft = 0; - } - - clearRows(){ - var element = this.tableElement; - - // element.children.detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - element.scrollTop = 0; - element.scrollLeft = 0; - - element.style.minWidth = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - } - - renderRows() { - var element = this.tableElement, - onlyGroupHeaders = true, - tableFrag = document.createDocumentFragment(), - rows = this.rows(); - - rows.forEach((row, index) => { - this.styleRow(row, index); - row.initialize(false, true); - - if (row.type !== "group") { - onlyGroupHeaders = false; - } - - tableFrag.appendChild(row.getElement()); - }); - - element.appendChild(tableFrag); - - rows.forEach((row) => { - row.rendered(); - - if(!row.heightInitialized) { - row.calcHeight(true); - } - }); - - rows.forEach((row) => { - if(!row.heightInitialized) { - row.setCellHeight(); - } - }); - - if(onlyGroupHeaders){ - element.style.minWidth = this.table.columnManager.getWidth() + "px"; - }else { - element.style.minWidth = ""; - } - } - - - rerenderRows(callback){ - this.clearRows(); - - if(callback){ - callback(); - } - - this.renderRows(); - - if(!this.rows().length){ - this.table.rowManager.tableEmpty(); - } - } - - scrollToRowNearestTop(row){ - var rowTop = Helpers.elOffset(row.getElement()).top; - - return !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop)); - } - - scrollToRow(row){ - var rowEl = row.getElement(); - - this.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop; - } - - visibleRows(includingBuffer){ - return this.rows(); - } - - } - - class VirtualDomVertical extends Renderer{ - constructor(table){ - super(table); - - this.verticalFillMode = "fill"; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - this.vDomBottom = 0; //hold position for last rendered row in the virtual DOM - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed - } - - ////////////////////////////////////// - ///////// Public Functions /////////// - ////////////////////////////////////// - - clearRows(){ - var element = this.tableElement; - - // element.children.detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - element.style.paddingTop = ""; - element.style.paddingBottom = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - - this.elementVertical.scrollTop = 0; - this.elementVertical.scrollLeft = 0; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomTop = 0; - this.vDomBottom = 0; - this.vDomTopPad = 0; - this.vDomBottomPad = 0; - this.vDomScrollPosTop = 0; - this.vDomScrollPosBottom = 0; - } - - renderRows(){ - this._virtualRenderFill(); - } - - rerenderRows(callback){ - var scrollTop = this.elementVertical.scrollTop; - var topRow = false; - var topOffset = false; - - var left = this.table.rowManager.scrollLeft; - - var rows = this.rows(); - - for(var i = this.vDomTop; i <= this.vDomBottom; i++){ - - if(rows[i]){ - var diff = scrollTop - rows[i].getElement().offsetTop; - - if(topOffset === false || Math.abs(diff) < topOffset){ - topOffset = diff; - topRow = i; - }else { - break; - } - } - } - - rows.forEach((row) => { - row.deinitializeHeight(); - }); - - if(callback){ - callback(); - } - - if(this.rows().length){ - this._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0); - }else { - this.clear(); - this.table.rowManager.tableEmpty(); - } - - this.scrollColumns(left); - } - - scrollColumns(left){ - this.table.rowManager.scrollHorizontal(left); - } - - scrollRows(top, dir){ - var topDiff = top - this.vDomScrollPosTop; - var bottomDiff = top - this.vDomScrollPosBottom; - var margin = this.vDomWindowBuffer * 2; - var rows = this.rows(); - - this.scrollTop = top; - - if(-topDiff > margin || bottomDiff > margin){ - //if big scroll redraw table; - var left = this.table.rowManager.scrollLeft; - this._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length)); - this.scrollColumns(left); - }else { - - if(dir){ - //scrolling up - if(topDiff < 0){ - this._addTopRow(rows, -topDiff); - } - - if(bottomDiff < 0){ - //hide bottom row if needed - if(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){ - this._removeBottomRow(rows, -bottomDiff); - }else { - this.vDomScrollPosBottom = this.scrollTop; - } - } - }else { - - if(bottomDiff >= 0){ - this._addBottomRow(rows, bottomDiff); - } - - //scrolling down - if(topDiff >= 0){ - //hide top row if needed - if(this.scrollTop > this.vDomWindowBuffer){ - this._removeTopRow(rows, topDiff); - }else { - this.vDomScrollPosTop = this.scrollTop; - } - } - } - } - } - - resize(){ - this.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight; - } - - scrollToRowNearestTop(row){ - var rowIndex = this.rows().indexOf(row); - - return !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex)); - } - - scrollToRow(row){ - var index = this.rows().indexOf(row); - - if(index > -1){ - this._virtualRenderFill(index, true); - } - } - - visibleRows(includingBuffer){ - var topEdge = this.elementVertical.scrollTop, - bottomEdge = this.elementVertical.clientHeight + topEdge, - topFound = false, - topRow = 0, - bottomRow = 0, - rows = this.rows(); - - if(includingBuffer){ - topRow = this.vDomTop; - bottomRow = this.vDomBottom; - }else { - for(var i = this.vDomTop; i <= this.vDomBottom; i++){ - if(rows[i]){ - if(!topFound){ - if((topEdge - rows[i].getElement().offsetTop) >= 0){ - topRow = i; - }else { - topFound = true; - - if(bottomEdge - rows[i].getElement().offsetTop >= 0){ - bottomRow = i; - }else { - break; - } - } - }else { - if(bottomEdge - rows[i].getElement().offsetTop >= 0){ - bottomRow = i; - }else { - break; - } - } - } - } - } - - return rows.slice(topRow, bottomRow + 1); - } - - ////////////////////////////////////// - //////// Internal Rendering ////////// - ////////////////////////////////////// - - //full virtual render - _virtualRenderFill(position, forceMove, offset) { - var element = this.tableElement, - holder = this.elementVertical, - topPad = 0, - rowsHeight = 0, - rowHeight = 0, - heightOccupied = 0, - topPadHeight = 0, - i = 0, - rows = this.rows(), - rowsCount = rows.length, - index = 0, - row, - rowFragment, - renderedRows = [], - totalRowsRendered = 0, - rowsToRender = 0, - fixedHeight = this.table.rowManager.fixedHeight, - containerHeight = this.elementVertical.clientHeight, - avgRowHeight = this.table.options.rowHeight, - resized = true; - - position = position || 0; - - offset = offset || 0; - - if(!position){ - this.clear(); - }else { - while(element.firstChild) element.removeChild(element.firstChild); - - //check if position is too close to bottom of table - heightOccupied = (rowsCount - position + 1) * this.vDomRowHeight; - - if(heightOccupied < containerHeight){ - position -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight); - if(position < 0){ - position = 0; - } - } - - //calculate initial pad - topPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position); - position -= topPad; - } - - if(rowsCount && Helpers.elVisible(this.elementVertical)){ - this.vDomTop = position; - this.vDomBottom = position -1; - - if(fixedHeight || this.table.options.maxHeight) { - if(avgRowHeight) { - rowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight); - } - rowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender)); - } - else { - rowsToRender = rowsCount; - } - - while(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) { - renderedRows = []; - rowFragment = document.createDocumentFragment(); - - i = 0; - - while ((i < rowsToRender) && this.vDomBottom < rowsCount -1) { - index = this.vDomBottom + 1, - row = rows[index]; - - this.styleRow(row, index); - - row.initialize(false, true); - if(!row.heightInitialized && !this.table.options.rowHeight){ - row.clearCellHeight(); - } - - rowFragment.appendChild(row.getElement()); - renderedRows.push(row); - this.vDomBottom ++; - i++; - } - - if(!renderedRows.length){ - break; - } - - element.appendChild(rowFragment); - - // NOTE: The next 3 loops are separate on purpose - // This is to batch up the dom writes and reads which drastically improves performance - - renderedRows.forEach((row) => { - row.rendered(); - - if(!row.heightInitialized) { - row.calcHeight(true); - } - }); - - renderedRows.forEach((row) => { - if(!row.heightInitialized) { - row.setCellHeight(); - } - }); - - renderedRows.forEach((row) => { - rowHeight = row.getHeight(); - - if(totalRowsRendered < topPad){ - topPadHeight += rowHeight; - }else { - rowsHeight += rowHeight; - } - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - totalRowsRendered++; - }); - - resized = this.table.rowManager.adjustTableSize(); - containerHeight = this.elementVertical.clientHeight; - if(resized && (fixedHeight || this.table.options.maxHeight)) - { - avgRowHeight = rowsHeight / totalRowsRendered; - rowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight))); - } - } - - if(!position){ - this.vDomTopPad = 0; - //adjust row height to match average of rendered elements - this.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered); - this.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1); - - this.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight; - }else { - this.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset; - this.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = this.vDomTopPad+"px"; - element.style.paddingBottom = this.vDomBottomPad+"px"; - - if(forceMove){ - this.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0); - } - - this.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight); - - //adjust for horizontal scrollbar if present (and not at top of table) - if(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){ - this.scrollTop += this.elementVertical.offsetHeight - containerHeight; - } - - this.vDomScrollPosTop = this.scrollTop; - this.vDomScrollPosBottom = this.scrollTop; - - holder.scrollTop = this.scrollTop; - - this.dispatch("render-virtual-fill"); - } - } - - _addTopRow(rows, fillableSpace){ - var table = this.tableElement, - addedRows = [], - paddingAdjust = 0, - index = this.vDomTop -1, - i = 0, - working = true; - - while(working){ - if(this.vDomTop){ - let row = rows[index], - rowHeight, initialized; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - initialized = row.initialized; - - if(fillableSpace >= rowHeight){ - - this.styleRow(row, index); - table.insertBefore(row.getElement(), table.firstChild); - - if(!row.initialized || !row.heightInitialized){ - addedRows.push(row); - } - - row.initialize(); - - if(!initialized){ - rowHeight = row.getElement().offsetHeight; - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - } - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - this.vDomTop--; - index--; - i++; - - }else { - working = false; - } - - }else { - working = false; - } - - }else { - working = false; - } - } - - for (let row of addedRows){ - row.clearCellHeight(); - } - - this._quickNormalizeRowHeight(addedRows); - - if(paddingAdjust){ - this.vDomTopPad -= paddingAdjust; - - if(this.vDomTopPad < 0){ - this.vDomTopPad = index * this.vDomRowHeight; - } - - if(index < 1){ - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop -= paddingAdjust; - } - } - - _removeTopRow(rows, fillableSpace){ - var removableRows = [], - paddingAdjust = 0, - i = 0, - working = true; - - while(working){ - let row = rows[this.vDomTop], - rowHeight; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - - if(fillableSpace >= rowHeight){ - this.vDomTop++; - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - removableRows.push(row); - i++; - }else { - working = false; - } - }else { - working = false; - } - } - - for (let row of removableRows){ - let rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - } - - if(paddingAdjust){ - this.vDomTopPad += paddingAdjust; - this.tableElement.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer; - } - } - - _addBottomRow(rows, fillableSpace){ - var table = this.tableElement, - addedRows = [], - paddingAdjust = 0, - index = this.vDomBottom + 1, - i = 0, - working = true; - - while(working){ - let row = rows[index], - rowHeight, initialized; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - initialized = row.initialized; - - if(fillableSpace >= rowHeight){ - - this.styleRow(row, index); - table.appendChild(row.getElement()); - - if(!row.initialized || !row.heightInitialized){ - addedRows.push(row); - } - - row.initialize(); - - if(!initialized){ - rowHeight = row.getElement().offsetHeight; - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - } - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - this.vDomBottom++; - index++; - i++; - }else { - working = false; - } - }else { - working = false; - } - } - - for (let row of addedRows){ - row.clearCellHeight(); - } - - this._quickNormalizeRowHeight(addedRows); - - if(paddingAdjust){ - this.vDomBottomPad -= paddingAdjust; - - if(this.vDomBottomPad < 0 || index == rows.length -1){ - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom += paddingAdjust; - } - } - - _removeBottomRow(rows, fillableSpace){ - var removableRows = [], - paddingAdjust = 0, - i = 0, - working = true; - - while(working){ - let row = rows[this.vDomBottom], - rowHeight; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - - if(fillableSpace >= rowHeight){ - this.vDomBottom --; - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - removableRows.push(row); - i++; - }else { - working = false; - } - }else { - working = false; - } - } - - for (let row of removableRows){ - let rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - } - - if(paddingAdjust){ - this.vDomBottomPad += paddingAdjust; - - if(this.vDomBottomPad < 0){ - this.vDomBottomPad = 0; - } - - this.tableElement.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom -= paddingAdjust; - } - } - - _quickNormalizeRowHeight(rows){ - for(let row of rows){ - row.calcHeight(); - } - - for(let row of rows){ - row.setCellHeight(); - } - } - } - - class RowManager extends CoreFeature{ - - constructor(table){ - super(table); - - this.element = this.createHolderElement(); //containing element - this.tableElement = this.createTableElement(); //table element - this.heightFixer = this.createTableElement(); //table element - this.placeholder = null; //placeholder element - this.placeholderContents = null; //placeholder element - - this.firstRender = false; //handle first render - this.renderMode = "virtual"; //current rendering mode - this.fixedHeight = false; //current rendering mode - - this.rows = []; //hold row data objects - this.activeRowsPipeline = []; //hold calculation of active rows - this.activeRows = []; //rows currently available to on display in the table - this.activeRowsCount = 0; //count of active rows - - this.displayRows = []; //rows currently on display in the table - this.displayRowsCount = 0; //count of display rows - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing - this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed - this.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed - - this.dataPipeline = []; //hold data pipeline tasks - this.displayPipeline = []; //hold data display pipeline tasks - - this.scrollbarWidth = 0; - - this.renderer = null; - } - - //////////////// Setup Functions ///////////////// - - createHolderElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-tableholder"); - el.setAttribute("tabindex", 0); - // el.setAttribute("role", "rowgroup"); - - return el; - } - - createTableElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - el.setAttribute("role", "rowgroup"); - - return el; - } - - initializePlaceholder(){ - var placeholder = this.table.options.placeholder; - - if(typeof placeholder === "function"){ - placeholder = placeholder.call(this.table); - } - - placeholder = this.chain("placeholder", [placeholder], placeholder, placeholder) || placeholder; - - //configure placeholder element - if(placeholder){ - let el = document.createElement("div"); - el.classList.add("tabulator-placeholder"); - - if(typeof placeholder == "string"){ - let contents = document.createElement("div"); - contents.classList.add("tabulator-placeholder-contents"); - contents.innerHTML = placeholder; - - el.appendChild(contents); - - this.placeholderContents = contents; - - }else if(typeof HTMLElement !== "undefined" && placeholder instanceof HTMLElement){ - - el.appendChild(placeholder); - this.placeholderContents = placeholder; - }else { - console.warn("Invalid placeholder provided, must be string or HTML Element", placeholder); - - this.el = null; - } - - this.placeholder = el; - } - } - - //return containing element - getElement(){ - return this.element; - } - - //return table element - getTableElement(){ - return this.tableElement; - } - - initialize(){ - this.initializePlaceholder(); - this.initializeRenderer(); - - //initialize manager - this.element.appendChild(this.tableElement); - - this.firstRender = true; - - //scroll header along with table body - this.element.addEventListener("scroll", () => { - var left = this.element.scrollLeft, - leftDir = this.scrollLeft > left, - top = this.element.scrollTop, - topDir = this.scrollTop > top; - - //handle horizontal scrolling - if(this.scrollLeft != left){ - this.scrollLeft = left; - - this.dispatch("scroll-horizontal", left, leftDir); - this.dispatchExternal("scrollHorizontal", left, leftDir); - - this._positionPlaceholder(); - } - - //handle vertical scrolling - if(this.scrollTop != top){ - this.scrollTop = top; - - this.renderer.scrollRows(top, topDir); - - this.dispatch("scroll-vertical", top, topDir); - this.dispatchExternal("scrollVertical", top, topDir); - } - }); - } - - ////////////////// Row Manipulation ////////////////// - findRow(subject){ - if(typeof subject == "object"){ - if(subject instanceof Row){ - //subject is row element - return subject; - }else if(subject instanceof RowComponent){ - //subject is public row component - return subject._getSelf() || false; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - //subject is a HTML element of the row - let match = this.rows.find((row) => { - return row.getElement() === subject; - }); - - return match || false; - }else if(subject === null){ - return false; - } - }else if(typeof subject == "undefined"){ - return false; - }else { - //subject should be treated as the index of the row - let match = this.rows.find((row) => { - return row.data[this.table.options.index] == subject; - }); - - return match || false; - } - - //catch all for any other type of input - return false; - } - - getRowFromDataObject(data){ - var match = this.rows.find((row) => { - return row.data === data; - }); - - return match || false; - } - - getRowFromPosition(position){ - return this.getDisplayRows().find((row) => { - return row.getPosition() === position && row.isDisplayed(); - }); - } - - scrollToRow(row, position, ifVisible){ - return this.renderer.scrollToRowPosition(row, position, ifVisible); - } - - ////////////////// Data Handling ////////////////// - setData(data, renderInPosition, columnsChanged){ - return new Promise((resolve, reject)=>{ - if(renderInPosition && this.getDisplayRows().length){ - if(this.table.options.pagination){ - this._setDataActual(data, true); - }else { - this.reRenderInPosition(() => { - this._setDataActual(data); - }); - } - }else { - if(this.table.options.autoColumns && columnsChanged && this.table.initialized){ - this.table.columnManager.generateColumnsFromRowData(data); - } - this.resetScroll(); - - this._setDataActual(data); - } - - resolve(); - }); - } - - _setDataActual(data, renderInPosition){ - this.dispatchExternal("dataProcessing", data); - - this._wipeElements(); - - if(Array.isArray(data)){ - this.dispatch("data-processing", data); - - data.forEach((def, i) => { - if(def && typeof def === "object"){ - var row = new Row(def, this); - this.rows.push(row); - }else { - console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); - } - }); - - this.refreshActiveData(false, false, renderInPosition); - - this.dispatch("data-processed", data); - this.dispatchExternal("dataProcessed", data); - }else { - console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data); - } - } - - _wipeElements(){ - this.dispatch("rows-wipe"); - - this.destroy(); - - this.adjustTableSize(); - - this.dispatch("rows-wiped"); - } - - destroy(){ - this.rows.forEach((row) => { - row.wipe(); - }); - - this.rows = []; - this.activeRows = []; - this.activeRowsPipeline = []; - this.activeRowsCount = 0; - this.displayRows = []; - this.displayRowsCount = 0; - } - - deleteRow(row, blockRedraw){ - var allIndex = this.rows.indexOf(row), - activeIndex = this.activeRows.indexOf(row); - - if(activeIndex > -1){ - this.activeRows.splice(activeIndex, 1); - } - - if(allIndex > -1){ - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator((rows) => { - var displayIndex = rows.indexOf(row); - - if(displayIndex > -1){ - rows.splice(displayIndex, 1); - } - }); - - if(!blockRedraw){ - this.reRenderInPosition(); - } - - this.regenerateRowPositions(); - - this.dispatchExternal("rowDeleted", row.getComponent()); - - if(!this.displayRowsCount){ - this.tableEmpty(); - } - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.getData()); - } - } - - addRow(data, pos, index, blockRedraw){ - var row = this.addRowActual(data, pos, index, blockRedraw); - return row; - } - - //add multiple rows - addRows(data, pos, index, refreshDisplayOnly){ - var rows = []; - - return new Promise((resolve, reject) => { - pos = this.findAddRowPos(pos); - - if(!Array.isArray(data)){ - data = [data]; - } - - if((typeof index == "undefined" && pos) || (typeof index !== "undefined" && !pos)){ - data.reverse(); - } - - data.forEach((item, i) => { - var row = this.addRow(item, pos, index, true); - rows.push(row); - this.dispatch("row-added", row, item, pos, index); - }); - - this.refreshActiveData(refreshDisplayOnly ? "displayPipeline" : false, false, true); - - this.regenerateRowPositions(); - - if(this.displayRowsCount){ - this._clearPlaceholder(); - } - - resolve(rows); - }); - } - - findAddRowPos(pos){ - if(typeof pos === "undefined"){ - pos = this.table.options.addRowPos; - } - - if(pos === "pos"){ - pos = true; - } - - if(pos === "bottom"){ - pos = false; - } - - return pos; - } - - addRowActual(data, pos, index, blockRedraw){ - var row = data instanceof Row ? data : new Row(data || {}, this), - top = this.findAddRowPos(pos), - allIndex = -1, - activeIndex, chainResult; - - if(!index){ - chainResult = this.chain("row-adding-position", [row, top], null, {index, top}); - - index = chainResult.index; - top = chainResult.top; - } - - if(typeof index !== "undefined"){ - index = this.findRow(index); - } - - index = this.chain("row-adding-index", [row, index, top], null, index); - - if(index){ - allIndex = this.rows.indexOf(index); - } - - if(index && allIndex > -1){ - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function(rows){ - var displayIndex = rows.indexOf(index); - - if(displayIndex > -1){ - rows.splice((top ? displayIndex : displayIndex + 1), 0, row); - } - }); - - if(activeIndex > -1){ - this.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row); - } - - this.rows.splice((top ? allIndex : allIndex + 1), 0, row); - - }else { - - if(top){ - - this.displayRowIterator(function(rows){ - rows.unshift(row); - }); - - this.activeRows.unshift(row); - this.rows.unshift(row); - }else { - this.displayRowIterator(function(rows){ - rows.push(row); - }); - - this.activeRows.push(row); - this.rows.push(row); - } - } - - this.setActiveRows(this.activeRows); - - this.dispatchExternal("rowAdded", row.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - - if(!blockRedraw){ - this.reRenderInPosition(); - } - - return row; - } - - moveRow(from, to, after){ - this.dispatch("row-move", from, to, after); - - this.moveRowActual(from, to, after); - - this.regenerateRowPositions(); - - this.dispatch("row-moved", from, to, after); - this.dispatchExternal("rowMoved", from.getComponent()); - } - - moveRowActual(from, to, after){ - this.moveRowInArray(this.rows, from, to, after); - this.moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator((rows) => { - this.moveRowInArray(rows, from, to, after); - }); - - this.dispatch("row-moving", from, to, after); - } - - moveRowInArray(rows, from, to, after){ - var fromIndex, toIndex, start, end; - - if(from !== to){ - - fromIndex = rows.indexOf(from); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if(after){ - rows.splice(toIndex+1, 0, from); - }else { - rows.splice(toIndex, 0, from); - } - - }else { - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - if(rows === this.getDisplayRows()){ - - start = fromIndex < toIndex ? fromIndex : toIndex; - end = toIndex > fromIndex ? toIndex : fromIndex +1; - - for(let i = start; i <= end; i++){ - if(rows[i]){ - this.styleRow(rows[i], i); - } - } - } - } - } - - clearData(){ - this.setData([]); - } - - getRowIndex(row){ - return this.findRowIndex(row, this.rows); - } - - getDisplayRowIndex(row){ - var index = this.getDisplayRows().indexOf(row); - return index > -1 ? index : false; - } - - nextDisplayRow(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - nextRow = false; - - - if(index !== false && index < this.displayRowsCount -1){ - nextRow = this.getDisplayRows()[index+1]; - } - - if(nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")){ - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; - } - - prevDisplayRow(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if(index){ - prevRow = this.getDisplayRows()[index-1]; - } - - if(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")){ - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; - } - - findRowIndex(row, list){ - var rowIndex; - - row = this.findRow(row); - - if(row){ - rowIndex = list.indexOf(row); - - if(rowIndex > -1){ - return rowIndex; - } - } - - return false; - } - - getData(active, transform){ - var output = [], - rows = this.getRows(active); - - rows.forEach(function(row){ - if(row.type == "row"){ - output.push(row.getData(transform || "data")); - } - }); - - return output; - } - - getComponents(active){ - var output = [], - rows = this.getRows(active); - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - return output; - } - - getDataCount(active){ - var rows = this.getRows(active); - - return rows.length; - } - - scrollHorizontal(left){ - this.scrollLeft = left; - this.element.scrollLeft = left; - - this.dispatch("scroll-horizontal", left); - } - - registerDataPipelineHandler(handler, priority){ - if(typeof priority !== "undefined"){ - this.dataPipeline.push({handler, priority}); - this.dataPipeline.sort((a, b) => { - return a.priority - b.priority; - }); - }else { - console.error("Data pipeline handlers must have a priority in order to be registered"); - } - } - - registerDisplayPipelineHandler(handler, priority){ - if(typeof priority !== "undefined"){ - this.displayPipeline.push({handler, priority}); - this.displayPipeline.sort((a, b) => { - return a.priority - b.priority; - }); - }else { - console.error("Display pipeline handlers must have a priority in order to be registered"); - } - } - - //set active data set - refreshActiveData(handler, skipStage, renderInPosition){ - var table = this.table, - stage = "", - index = 0, - cascadeOrder = ["all", "dataPipeline", "display", "displayPipeline", "end"]; - - if(!this.table.destroyed){ - if(typeof handler === "function"){ - index = this.dataPipeline.findIndex((item) => { - return item.handler === handler; - }); - - if(index > -1){ - stage = "dataPipeline"; - - if(skipStage){ - if(index == this.dataPipeline.length - 1){ - stage = "display"; - }else { - index++; - } - } - }else { - index = this.displayPipeline.findIndex((item) => { - return item.handler === handler; - }); - - if(index > -1){ - stage = "displayPipeline"; - - if(skipStage){ - if(index == this.displayPipeline.length - 1){ - stage = "end"; - }else { - index++; - } - } - }else { - console.error("Unable to refresh data, invalid handler provided", handler); - return; - } - } - }else { - stage = handler || "all"; - index = 0; - } - - if(this.redrawBlock){ - if(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){ - this.redrawBlockRestoreConfig = { - handler: handler, - skipStage: skipStage, - renderInPosition: renderInPosition, - stage:stage, - index:index, - }; - } - - return; - }else { - if(Helpers.elVisible(this.element)){ - if(renderInPosition){ - this.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition)); - }else { - this.refreshPipelines(handler, stage, index, renderInPosition); - - if(!handler){ - this.table.columnManager.renderer.renderColumns(); - } - - this.renderTable(); - - if(table.options.layoutColumnsOnNewData){ - this.table.columnManager.redraw(true); - } - } - }else { - this.refreshPipelines(handler, stage, index, renderInPosition); - } - - this.dispatch("data-refreshed"); - } - } - } - - refreshPipelines(handler, stage, index, renderInPosition){ - this.dispatch("data-refreshing"); - - if(!handler || !this.activeRowsPipeline[0]){ - this.activeRowsPipeline[0] = this.rows.slice(0); - } - - //cascade through data refresh stages - switch(stage){ - case "all": - //handle case where all data needs refreshing - - case "dataPipeline": - for(let i = index; i < this.dataPipeline.length; i++){ - let result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0)); - - this.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0); - } - - this.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]); - - case "display": - index = 0; - this.resetDisplayRows(); - - case "displayPipeline": - for(let i = index; i < this.displayPipeline.length; i++){ - let result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition); - - this.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i); - } - - case "end": - //case to handle scenario when trying to skip past end stage - this.regenerateRowPositions(); - } - - if(this.getDisplayRows().length){ - this._clearPlaceholder(); - } - } - - //regenerate row positions - regenerateRowPositions(){ - var rows = this.getDisplayRows(); - var index = 1; - - rows.forEach((row) => { - if (row.type === "row"){ - row.setPosition(index); - index++; - } - }); - } - - setActiveRows(activeRows){ - this.activeRows = this.activeRows = Object.assign([], activeRows); - this.activeRowsCount = this.activeRows.length; - } - - //reset display rows array - resetDisplayRows(){ - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - } - - //set display row pipeline data - setDisplayRows(displayRows, index){ - this.displayRows[index] = displayRows; - - if(index == this.displayRows.length -1){ - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; - } - } - - getDisplayRows(index){ - if(typeof index == "undefined"){ - return this.displayRows.length ? this.displayRows[this.displayRows.length -1] : []; - }else { - return this.displayRows[index] || []; - } - } - - getVisibleRows(chain, viewable){ - var rows = Object.assign([], this.renderer.visibleRows(!viewable)); - - if(chain){ - rows = this.chain("rows-visible", [viewable], rows, rows); - } - - return rows; - } - - //repeat action across display rows - displayRowIterator(callback){ - this.activeRowsPipeline.forEach(callback); - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; - } - - //return only actual rows (not group headers etc) - getRows(type){ - var rows = []; - - switch(type){ - case "active": - rows = this.activeRows; - break; - - case "display": - rows = this.table.rowManager.getDisplayRows(); - break; - - case "visible": - rows = this.getVisibleRows(false, true); - break; - - default: - rows = this.chain("rows-retrieve", type, null, this.rows) || this.rows; - } - - return rows; - } - - ///////////////// Table Rendering ///////////////// - //trigger rerender of table in current position - reRenderInPosition(callback){ - if(this.redrawBlock){ - if(callback){ - callback(); - }else { - this.redrawBlockRenderInPosition = true; - } - }else { - this.dispatchExternal("renderStarted"); - - this.renderer.rerenderRows(callback); - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.scrollBarCheck(); - - this.dispatchExternal("renderComplete"); - } - } - - scrollBarCheck(){ - var scrollbarWidth = 0; - - //adjust for vertical scrollbar moving table when present - if(this.element.scrollHeight > this.element.clientHeight){ - scrollbarWidth = this.element.offsetWidth - this.element.clientWidth; - } - - if(scrollbarWidth !== this.scrollbarWidth){ - this.scrollbarWidth = scrollbarWidth; - this.dispatch("scrollbar-vertical", scrollbarWidth); - } - } - - initializeRenderer(){ - var renderClass; - - var renderers = { - "virtual": VirtualDomVertical, - "basic": BasicVertical, - }; - - if(typeof this.table.options.renderVertical === "string"){ - renderClass = renderers[this.table.options.renderVertical]; - }else { - renderClass = this.table.options.renderVertical; - } - - if(renderClass){ - this.renderMode = this.table.options.renderVertical; - - this.renderer = new renderClass(this.table, this.element, this.tableElement); - this.renderer.initialize(); - - if((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){ - this.fixedHeight = true; - }else { - this.fixedHeight = false; - } - }else { - console.error("Unable to find matching renderer:", this.table.options.renderVertical); - } - } - - getRenderMode(){ - return this.renderMode; - } - - renderTable(){ - this.dispatchExternal("renderStarted"); - - this.element.scrollTop = 0; - - this._clearTable(); - - if(this.displayRowsCount){ - this.renderer.renderRows(); - - if(this.firstRender){ - this.firstRender = false; - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.layoutRefresh(true); - } - }else { - this.renderEmptyScroll(); - } - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.dispatch("table-layout"); - - if(!this.displayRowsCount){ - this._showPlaceholder(); - } - - this.scrollBarCheck(); - - this.dispatchExternal("renderComplete"); - } - - //show scrollbars on empty table div - renderEmptyScroll(){ - if(this.placeholder){ - this.tableElement.style.display = "none"; - }else { - this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px"; - // this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; - } - } - - _clearTable(){ - this._clearPlaceholder(); - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.renderer.clearRows(); - } - - tableEmpty(){ - this.renderEmptyScroll(); - this._showPlaceholder(); - } - - checkPlaceholder(){ - if(this.displayRowsCount){ - this._clearPlaceholder(); - }else { - this.tableEmpty(); - } - } - - _showPlaceholder(){ - if(this.placeholder){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.parentNode.removeChild(this.placeholder); - } - - this.initializePlaceholder(); - - this.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - - this.getElement().appendChild(this.placeholder); - this._positionPlaceholder(); - - this.adjustTableSize(); - } - } - - _clearPlaceholder(){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.parentNode.removeChild(this.placeholder); - } - - // clear empty table placeholder min - this.tableElement.style.minWidth = ""; - this.tableElement.style.display = ""; - } - - _positionPlaceholder(){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.style.width = this.table.columnManager.getWidth() + "px"; - this.placeholderContents.style.width = this.table.rowManager.element.clientWidth + "px"; - this.placeholderContents.style.marginLeft = this.scrollLeft + "px"; - } - } - - styleRow(row, index){ - var rowEl = row.getElement(); - - if(index % 2){ - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - }else { - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } - } - - //normalize height of active rows - normalizeHeight(){ - this.activeRows.forEach(function(row){ - row.normalizeHeight(); - }); - } - - //adjust the height of the table holder to fit in the Tabulator element - adjustTableSize(){ - let initialHeight = this.element.clientHeight, minHeight; - let resized = false; - - if(this.renderer.verticalFillMode === "fill"){ - let otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0)); - - if(this.fixedHeight){ - minHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + "px"; - - const height = "calc(100% - " + otherHeight + "px)"; - this.element.style.minHeight = minHeight || "calc(100% - " + otherHeight + "px)"; - this.element.style.height = height; - this.element.style.maxHeight = height; - } else { - this.element.style.height = ""; - this.element.style.height = - this.table.element.clientHeight - otherHeight + "px"; - this.element.scrollTop = this.scrollTop; - } - - this.renderer.resize(); - - //check if the table has changed size when dealing with variable height tables - if(!this.fixedHeight && initialHeight != this.element.clientHeight){ - resized = true; - if(this.subscribed("table-resize")){ - this.dispatch("table-resize"); - }else { - this.redraw(); - } - } - - this.scrollBarCheck(); - } - - this._positionPlaceholder(); - return resized; - } - - //reinitialize all rows - reinitialize(){ - this.rows.forEach(function(row){ - row.reinitialize(true); - }); - } - - //prevent table from being redrawn - blockRedraw (){ - this.redrawBlock = true; - this.redrawBlockRestoreConfig = false; - } - - //restore table redrawing - restoreRedraw (){ - this.redrawBlock = false; - - if(this.redrawBlockRestoreConfig){ - this.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition); - - this.redrawBlockRestoreConfig = false; - }else { - if(this.redrawBlockRenderInPosition){ - this.reRenderInPosition(); - } - } - - this.redrawBlockRenderInPosition = false; - } - - //redraw table - redraw (force){ - this.adjustTableSize(); - this.table.tableWidth = this.table.element.clientWidth; - - if(!force){ - this.reRenderInPosition(); - this.scrollHorizontal(this.scrollLeft); - }else { - this.renderTable(); - } - } - - resetScroll(){ - this.element.scrollLeft = 0; - this.element.scrollTop = 0; - - if(this.table.browser === "ie"){ - var event = document.createEvent("Event"); - event.initEvent("scroll", false, true); - this.element.dispatchEvent(event); - }else { - this.element.dispatchEvent(new Event('scroll')); - } - } - } - - class FooterManager extends CoreFeature{ - - constructor(table){ - super(table); - - this.active = false; - this.element = this.createElement(); //containing element - this.containerElement = this.createContainerElement(); //containing element - this.external = false; - } - - initialize(){ - this.initializeElement(); - } - - createElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; - } - - - createContainerElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-footer-contents"); - - this.element.appendChild(el); - - return el; - } - - initializeElement(){ - if(this.table.options.footerElement){ - - switch(typeof this.table.options.footerElement){ - case "string": - if(this.table.options.footerElement[0] === "<"){ - this.containerElement.innerHTML = this.table.options.footerElement; - }else { - this.external = true; - this.containerElement = document.querySelector(this.table.options.footerElement); - } - break; - - default: - this.element = this.table.options.footerElement; - break; - } - } - } - - getElement(){ - return this.element; - } - - append(element){ - this.activate(); - - this.containerElement.appendChild(element); - this.table.rowManager.adjustTableSize(); - } - - prepend(element){ - this.activate(); - - this.element.insertBefore(element, this.element.firstChild); - this.table.rowManager.adjustTableSize(); - } - - remove(element){ - element.parentNode.removeChild(element); - this.deactivate(); - } - - deactivate(force){ - if(!this.element.firstChild || force){ - if(!this.external){ - this.element.parentNode.removeChild(this.element); - } - this.active = false; - } - } - - activate(){ - if(!this.active){ - this.active = true; - if(!this.external){ - this.table.element.appendChild(this.getElement()); - this.table.element.style.display = ''; - } - } - } - - redraw(){ - this.dispatch("footer-redraw"); - } - } - - class InteractionManager extends CoreFeature { - - constructor (table){ - super(table); - - this.el = null; - - this.abortClasses = ["tabulator-headers", "tabulator-table"]; - - this.previousTargets = {}; - - this.listeners = [ - "click", - "dblclick", - "contextmenu", - "mouseenter", - "mouseleave", - "mouseover", - "mouseout", - "mousemove", - "mouseup", - "mousedown", - "touchstart", - "touchend", - ]; - - this.componentMap = { - "tabulator-cell":"cell", - "tabulator-row":"row", - "tabulator-group":"group", - "tabulator-col":"column", - }; - - this.pseudoTrackers = { - "row":{ - subscriber:null, - target:null, - }, - "cell":{ - subscriber:null, - target:null, - }, - "group":{ - subscriber:null, - target:null, - }, - "column":{ - subscriber:null, - target:null, - }, - }; - - this.pseudoTracking = false; - } - - initialize(){ - this.el = this.table.element; - - this.buildListenerMap(); - this.bindSubscriptionWatchers(); - } - - buildListenerMap(){ - var listenerMap = {}; - - this.listeners.forEach((listener) => { - listenerMap[listener] = { - handler:null, - components:[], - }; - }); - - this.listeners = listenerMap; - } - - bindPseudoEvents(){ - Object.keys(this.pseudoTrackers).forEach((key) => { - this.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key); - this.subscribe(key + "-mouseover", this.pseudoTrackers[key].subscriber); - }); - - this.pseudoTracking = true; - } - - pseudoMouseEnter(key, e, target){ - if(this.pseudoTrackers[key].target !== target){ - - if(this.pseudoTrackers[key].target){ - this.dispatch(key + "-mouseleave", e, this.pseudoTrackers[key].target); - } - - this.pseudoMouseLeave(key, e); - - this.pseudoTrackers[key].target = target; - - this.dispatch(key + "-mouseenter", e, target); - } - } - - pseudoMouseLeave(key, e){ - var leaveList = Object.keys(this.pseudoTrackers), - linkedKeys = { - "row":["cell"], - "cell":["row"], - }; - - leaveList = leaveList.filter((item) => { - var links = linkedKeys[key]; - return item !== key && (!links || (links && !links.includes(item))); - }); - - - leaveList.forEach((key) => { - var target = this.pseudoTrackers[key].target; - - if(this.pseudoTrackers[key].target){ - this.dispatch(key + "-mouseleave", e, target); - - this.pseudoTrackers[key].target = null; - } - }); - } - - - bindSubscriptionWatchers(){ - var listeners = Object.keys(this.listeners), - components = Object.values(this.componentMap); - - for(let comp of components){ - for(let listener of listeners){ - let key = comp + "-" + listener; - - this.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener)); - } - } - - this.subscribe("table-destroy", this.clearWatchers.bind(this)); - } - - subscriptionChanged(component, key, added){ - var listener = this.listeners[key].components, - index = listener.indexOf(component), - changed = false; - - if(added){ - if(index === -1){ - listener.push(component); - changed = true; - } - }else { - if(!this.subscribed(component + "-" + key)){ - if(index > -1){ - listener.splice(index, 1); - changed = true; - } - } - } - - if((key === "mouseenter" || key === "mouseleave") && !this.pseudoTracking){ - this.bindPseudoEvents(); - } - - if(changed){ - this.updateEventListeners(); - } - } - - updateEventListeners(){ - for(let key in this.listeners){ - let listener = this.listeners[key]; - - if(listener.components.length){ - if(!listener.handler){ - listener.handler = this.track.bind(this, key); - this.el.addEventListener(key, listener.handler); - // this.el.addEventListener(key, listener.handler, {passive: true}) - } - }else { - if(listener.handler){ - this.el.removeEventListener(key, listener.handler); - listener.handler = null; - } - } - } - } - - track(type, e){ - var path = (e.composedPath && e.composedPath()) || e.path; - - var targets = this.findTargets(path); - targets = this.bindComponents(type, targets); - - this.triggerEvents(type, e, targets); - - if(this.pseudoTracking && (type == "mouseover" || type == "mouseleave") && !Object.keys(targets).length){ - this.pseudoMouseLeave("none", e); - } - } - - findTargets(path){ - var targets = {}; - - let componentMap = Object.keys(this.componentMap); - - for (let el of path) { - let classList = el.classList ? [...el.classList] : []; - - let abort = classList.filter((item) => { - return this.abortClasses.includes(item); - }); - - if(abort.length){ - break; - } - - let elTargets = classList.filter((item) => { - return componentMap.includes(item); - }); - - for (let target of elTargets) { - if(!targets[this.componentMap[target]]){ - targets[this.componentMap[target]] = el; - } - } - } - - if(targets.group && targets.group === targets.row){ - delete targets.row; - } - - return targets; - } - - bindComponents(type, targets){ - //ensure row component is looked up before cell - var keys = Object.keys(targets).reverse(), - listener = this.listeners[type], - matches = {}, - targetMatches = {}; - - for(let key of keys){ - let component, - target = targets[key], - previousTarget = this.previousTargets[key]; - - if(previousTarget && previousTarget.target === target){ - component = previousTarget.component; - }else { - switch(key){ - case "row": - case "group": - if(listener.components.includes("row") || listener.components.includes("cell") || listener.components.includes("group")){ - let rows = this.table.rowManager.getVisibleRows(true); - - component = rows.find((row) => { - return row.getElement() === target; - }); - - if(targets["row"] && targets["row"].parentNode && targets["row"].parentNode.closest(".tabulator-row")){ - targets[key] = false; - } - } - break; - - case "column": - if(listener.components.includes("column")){ - component = this.table.columnManager.findColumn(target); - } - break; - - case "cell": - if(listener.components.includes("cell")){ - if(matches["row"] instanceof Row){ - component = matches["row"].findCell(target); - }else { - if(targets["row"]){ - console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"); - } - } - } - break; - } - } - - if(component){ - matches[key] = component; - targetMatches[key] = { - target:target, - component:component, - }; - } - } - - this.previousTargets = targetMatches; - - return matches; - } - - triggerEvents(type, e, targets){ - var listener = this.listeners[type]; - - for(let key in targets){ - if(targets[key] && listener.components.includes(key)){ - this.dispatch(key + "-" + type, e, targets[key]); - } - } - } - - clearWatchers(){ - for(let key in this.listeners){ - let listener = this.listeners[key]; - - if(listener.handler){ - this.el.removeEventListener(key, listener.handler); - listener.handler = null; - } - } - } - } - - class ComponentFunctionBinder{ - - constructor(table){ - this.table = table; - - this.bindings = {}; - } - - bind(type, funcName, handler){ - if(!this.bindings[type]){ - this.bindings[type] = {}; - } - - if(this.bindings[type][funcName]){ - console.warn("Unable to bind component handler, a matching function name is already bound", type, funcName, handler); - }else { - this.bindings[type][funcName] = handler; - } - } - - handle(type, component, name){ - if(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){ - return this.bindings[type][name].bind(null, component); - }else { - if(name !== "then" && typeof name === "string" && !name.startsWith("_")){ - if(this.table.options.debugInvalidComponentFuncs){ - console.error("The " + type + " component does not have a " + name + " function, have you checked that you have the correct Tabulator module installed?"); - } - } - } - } - } - - class DataLoader extends CoreFeature{ - constructor(table){ - super(table); - - this.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request - this.loading = false; - } - - initialize(){} - - load(data, params, config, replace, silent, columnsChanged){ - var requestNo = ++this.requestOrder; - - if(this.table.destroyed){ - return Promise.resolve(); - } - - this.dispatchExternal("dataLoading", data); - - //parse json data to array - if (data && (data.indexOf("{") == 0 || data.indexOf("[") == 0)){ - data = JSON.parse(data); - } - - if(this.confirm("data-loading", [data, params, config, silent])){ - this.loading = true; - - if(!silent){ - this.alertLoader(); - } - - //get params for request - params = this.chain("data-params", [data, config, silent], params || {}, params || {}); - - params = this.mapParams(params, this.table.options.dataSendParams); - - var result = this.chain("data-load", [data, params, config, silent], false, Promise.resolve([])); - - return result.then((response) => { - if(!this.table.destroyed){ - if(!Array.isArray(response) && typeof response == "object"){ - response = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams)); - } - - var rowData = this.chain("data-loaded", response, null, response); - - if(requestNo == this.requestOrder){ - this.clearAlert(); - - if(rowData !== false){ - this.dispatchExternal("dataLoaded", rowData); - this.table.rowManager.setData(rowData, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged); - } - }else { - console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made"); - } - }else { - console.warn("Data Load Response Blocked - Table has been destroyed"); - } - }).catch((error) => { - console.error("Data Load Error: ", error); - this.dispatchExternal("dataLoadError", error); - - if(!silent){ - this.alertError(); - } - - setTimeout(() => { - this.clearAlert(); - }, this.table.options.dataLoaderErrorTimeout); - }) - .finally(() => { - this.loading = false; - }); - }else { - this.dispatchExternal("dataLoaded", data); - - if(!data){ - data = []; - } - - this.table.rowManager.setData(data, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged); - return Promise.resolve(); - } - } - - mapParams(params, map){ - var output = {}; - - for(let key in params){ - output[map.hasOwnProperty(key) ? map[key] : key] = params[key]; - } - - return output; - } - - objectInvert(obj){ - var output = {}; - - for(let key in obj){ - output[obj[key]] = key; - } - - return output; - } - - blockActiveLoad(){ - this.requestOrder++; - } - - alertLoader(){ - var shouldLoad = typeof this.table.options.dataLoader === "function" ? this.table.options.dataLoader() : this.table.options.dataLoader; - - if(shouldLoad){ - this.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText("data|loading")); - } - } - - alertError(){ - this.table.alertManager.alert(this.table.options.dataLoaderError || this.langText("data|error"), "error"); - } - - clearAlert(){ - this.table.alertManager.clear(); - } - } - - class ExternalEventBus { - - constructor(table, optionsList, debug){ - this.table = table; - this.events = {}; - this.optionsList = optionsList || {}; - this.subscriptionNotifiers = {}; - - this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); - this.debug = debug; - } - - subscriptionChange(key, callback){ - if(!this.subscriptionNotifiers[key]){ - this.subscriptionNotifiers[key] = []; - } - - this.subscriptionNotifiers[key].push(callback); - - if(this.subscribed(key)){ - this._notifySubscriptionChange(key, true); - } - } - - subscribe(key, callback){ - if(!this.events[key]){ - this.events[key] = []; - } - - this.events[key].push(callback); - - this._notifySubscriptionChange(key, true); - } - - unsubscribe(key, callback){ - var index; - - if(this.events[key]){ - if(callback){ - index = this.events[key].findIndex((item) => { - return item === callback; - }); - - if(index > -1){ - this.events[key].splice(index, 1); - }else { - console.warn("Cannot remove event, no matching event found:", key, callback); - return; - } - }else { - delete this.events[key]; - } - }else { - console.warn("Cannot remove event, no events set on:", key); - return; - } - - this._notifySubscriptionChange(key, false); - } - - subscribed(key){ - return this.events[key] && this.events[key].length; - } - - _notifySubscriptionChange(key, subscribed){ - var notifiers = this.subscriptionNotifiers[key]; - - if(notifiers){ - notifiers.forEach((callback)=>{ - callback(subscribed); - }); - } - } - - _dispatch(){ - var args = Array.from(arguments), - key = args.shift(), - result; - - if(this.events[key]){ - this.events[key].forEach((callback, i) => { - let callResult = callback.apply(this.table, args); - - if(!i){ - result = callResult; - } - }); - } - - return result; - } - - _debugDispatch(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "ExternalEvent:" + args[0]; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._dispatch(...arguments); - } - } - - class InternalEventBus { - - constructor(debug){ - this.events = {}; - this.subscriptionNotifiers = {}; - - this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); - this.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this); - this.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this); - this.debug = debug; - } - - subscriptionChange(key, callback){ - if(!this.subscriptionNotifiers[key]){ - this.subscriptionNotifiers[key] = []; - } - - this.subscriptionNotifiers[key].push(callback); - - if(this.subscribed(key)){ - this._notifySubscriptionChange(key, true); - } - } - - subscribe(key, callback, priority = 10000){ - if(!this.events[key]){ - this.events[key] = []; - } - - this.events[key].push({callback, priority}); - - this.events[key].sort((a, b) => { - return a.priority - b.priority; - }); - - this._notifySubscriptionChange(key, true); - } - - unsubscribe(key, callback){ - var index; - - if(this.events[key]){ - if(callback){ - index = this.events[key].findIndex((item) => { - return item.callback === callback; - }); - - if(index > -1){ - this.events[key].splice(index, 1); - }else { - console.warn("Cannot remove event, no matching event found:", key, callback); - return; - } - } - }else { - console.warn("Cannot remove event, no events set on:", key); - return; - } - - this._notifySubscriptionChange(key, false); - } - - subscribed(key){ - return this.events[key] && this.events[key].length; - } - - _chain(key, args, initialValue, fallback){ - var value = initialValue; - - if(!Array.isArray(args)){ - args = [args]; - } - - if(this.subscribed(key)){ - this.events[key].forEach((subscriber, i) => { - value = subscriber.callback.apply(this, args.concat([value])); - }); - - return value; - }else { - return typeof fallback === "function" ? fallback() : fallback; - } - } - - _confirm(key, args){ - var confirmed = false; - - if(!Array.isArray(args)){ - args = [args]; - } - - if(this.subscribed(key)){ - this.events[key].forEach((subscriber, i) => { - if(subscriber.callback.apply(this, args)){ - confirmed = true; - } - }); - } - - return confirmed; - } - - _notifySubscriptionChange(key, subscribed){ - var notifiers = this.subscriptionNotifiers[key]; - - if(notifiers){ - notifiers.forEach((callback)=>{ - callback(subscribed); - }); - } - } - - _dispatch(){ - var args = Array.from(arguments), - key = args.shift(); - - if(this.events[key]){ - this.events[key].forEach((subscriber) => { - subscriber.callback.apply(this, args); - }); - } - } - - _debugDispatch(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._dispatch(...arguments); - } - - _debugChain(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._chain(...arguments); - } - - _debugConfirm(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._confirm(...arguments); - } - } - - class DeprecationAdvisor extends CoreFeature{ - - constructor(table){ - super(table); - } - - _warnUser(){ - if(this.options("debugDeprecation")){ - console.warn(...arguments); - } - } - - check(oldOption, newOption, convert){ - var msg = ""; - - if(typeof this.options(oldOption) !== "undefined"){ - msg = "Deprecated Setup Option - Use of the %c" + oldOption + "%c option is now deprecated"; - - if(newOption){ - msg = msg + ", Please use the %c" + newOption + "%c option instead"; - this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;'); - - if(convert){ - this.table.options[newOption] = this.table.options[oldOption]; - } - }else { - this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;'); - } - - return false; - }else { - return true; - } - } - - checkMsg(oldOption, msg){ - if(typeof this.options(oldOption) !== "undefined"){ - this._warnUser("%cDeprecated Setup Option - Use of the %c" + oldOption + " %c option is now deprecated, " + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;'); - - return false; - }else { - return true; - } - } - - msg(msg){ - this._warnUser(msg); - } - } - - class TableRegistry { - - static register(table){ - TableRegistry.tables.push(table); - } - - static deregister(table){ - var index = TableRegistry.tables.indexOf(table); - - if(index > -1){ - TableRegistry.tables.splice(index, 1); - } - } - - static lookupTable(query, silent){ - var results = [], - matches, match; - - if(typeof query === "string"){ - matches = document.querySelectorAll(query); - - if(matches.length){ - for(var i = 0; i < matches.length; i++){ - match = TableRegistry.matchElement(matches[i]); - - if(match){ - results.push(match); - } - } - } - - }else if((typeof HTMLElement !== "undefined" && query instanceof HTMLElement) || query instanceof Tabulator){ - match = TableRegistry.matchElement(query); - - if(match){ - results.push(match); - } - }else if(Array.isArray(query)){ - query.forEach(function(item){ - results = results.concat(TableRegistry.lookupTable(item)); - }); - }else { - if(!silent){ - console.warn("Table Connection Error - Invalid Selector", query); - } - } - - return results; - } - - static matchElement(element){ - return TableRegistry.tables.find(function(table){ - return element instanceof Tabulator ? table === element : table.element === element; - }); - } - } - - TableRegistry.tables = []; - - class Popup extends CoreFeature{ - constructor(table, element, parent){ - super(table); - - this.element = element; - this.container = this._lookupContainer(); - - this.parent = parent; - - this.reversedX = false; - this.childPopup = null; - this.blurable = false; - this.blurCallback = null; - this.blurEventsBound = false; - this.renderedCallback = null; - - this.visible = false; - this.hideable = true; - - this.element.classList.add("tabulator-popup-container"); - - this.blurEvent = this.hide.bind(this, false); - this.escEvent = this._escapeCheck.bind(this); - - this.destroyBinding = this.tableDestroyed.bind(this); - this.destroyed = false; - } - - tableDestroyed(){ - this.destroyed = true; - this.hide(true); - } - - _lookupContainer(){ - var container = this.table.options.popupContainer; - - if(typeof container === "string"){ - container = document.querySelector(container); - - if(!container){ - console.warn("Menu Error - no container element found matching selector:", this.table.options.popupContainer , "(defaulting to document body)"); - } - }else if (container === true){ - container = this.table.element; - } - - if(container && !this._checkContainerIsParent(container)){ - container = false; - console.warn("Menu Error - container element does not contain this table:", this.table.options.popupContainer , "(defaulting to document body)"); - } - - if(!container){ - container = document.body; - } - - return container; - } - - _checkContainerIsParent(container, element = this.table.element){ - if(container === element){ - return true; - }else { - return element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false; - } - } - - renderCallback(callback){ - this.renderedCallback = callback; - } - - containerEventCoords(e){ - var touch = !(e instanceof MouseEvent); - - var x = touch ? e.touches[0].pageX : e.pageX; - var y = touch ? e.touches[0].pageY : e.pageY; - - if(this.container !== document.body){ - let parentOffset = Helpers.elOffset(this.container); - - x -= parentOffset.left; - y -= parentOffset.top; - } - - return {x, y}; - } - - elementPositionCoords(element, position = "right"){ - var offset = Helpers.elOffset(element), - containerOffset, x, y; - - if(this.container !== document.body){ - containerOffset = Helpers.elOffset(this.container); - - offset.left -= containerOffset.left; - offset.top -= containerOffset.top; - } - - switch(position){ - case "right": - x = offset.left + element.offsetWidth; - y = offset.top - 1; - break; - - case "bottom": - x = offset.left; - y = offset.top + element.offsetHeight; - break; - - case "left": - x = offset.left; - y = offset.top - 1; - break; - - case "top": - x = offset.left; - y = offset.top; - break; - - case "center": - x = offset.left + (element.offsetWidth / 2); - y = offset.top + (element.offsetHeight / 2); - break; - - } - - return {x, y, offset}; - } - - show(origin, position){ - var x, y, parentEl, parentOffset, coords; - - if(this.destroyed || this.table.destroyed){ - return this; - } - - if(origin instanceof HTMLElement){ - parentEl = origin; - coords = this.elementPositionCoords(origin, position); - - parentOffset = coords.offset; - x = coords.x; - y = coords.y; - - }else if(typeof origin === "number"){ - parentOffset = {top:0, left:0}; - x = origin; - y = position; - }else { - coords = this.containerEventCoords(origin); - - x = coords.x; - y = coords.y; - - this.reversedX = false; - } - - this.element.style.top = y + "px"; - this.element.style.left = x + "px"; - - this.container.appendChild(this.element); - - if(typeof this.renderedCallback === "function"){ - this.renderedCallback(); - } - - this._fitToScreen(x, y, parentEl, parentOffset, position); - - this.visible = true; - - this.subscribe("table-destroy", this.destroyBinding); - - this.element.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - return this; - } - - _fitToScreen(x, y, parentEl, parentOffset, position){ - var scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop; - - //move menu to start on right edge if it is too close to the edge of the screen - if((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){ - this.element.style.left = ""; - - if(parentEl){ - this.element.style.right = (this.container.offsetWidth - parentOffset.left) + "px"; - }else { - this.element.style.right = (this.container.offsetWidth - x) + "px"; - } - - this.reversedX = true; - } - - //move menu to start on bottom edge if it is too close to the edge of the screen - if((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) { - if(parentEl){ - switch(position){ - case "bottom": - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + "px"; - break; - - default: - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + "px"; - } - - }else { - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + "px"; - } - } - } - - isVisible(){ - return this.visible; - } - - hideOnBlur(callback){ - this.blurable = true; - - if(this.visible){ - setTimeout(() => { - if(this.visible){ - this.table.rowManager.element.addEventListener("scroll", this.blurEvent); - this.subscribe("cell-editing", this.blurEvent); - document.body.addEventListener("click", this.blurEvent); - document.body.addEventListener("contextmenu", this.blurEvent); - document.body.addEventListener("mousedown", this.blurEvent); - window.addEventListener("resize", this.blurEvent); - document.body.addEventListener("keydown", this.escEvent); - - this.blurEventsBound = true; - } - }, 100); - - this.blurCallback = callback; - } - - return this; - } - - _escapeCheck(e){ - if(e.keyCode == 27){ - this.hide(); - } - } - - blockHide(){ - this.hideable = false; - } - - restoreHide(){ - this.hideable = true; - } - - hide(silent = false){ - if(this.visible && this.hideable){ - if(this.blurable && this.blurEventsBound){ - document.body.removeEventListener("keydown", this.escEvent); - document.body.removeEventListener("click", this.blurEvent); - document.body.removeEventListener("contextmenu", this.blurEvent); - document.body.removeEventListener("mousedown", this.blurEvent); - window.removeEventListener("resize", this.blurEvent); - this.table.rowManager.element.removeEventListener("scroll", this.blurEvent); - this.unsubscribe("cell-editing", this.blurEvent); - - this.blurEventsBound = false; - } - - if(this.childPopup){ - this.childPopup.hide(); - } - - if(this.parent){ - this.parent.childPopup = null; - } - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.visible = false; - - if(this.blurCallback && !silent){ - this.blurCallback(); - } - - this.unsubscribe("table-destroy", this.destroyBinding); - } - - return this; - } - - child(element){ - if(this.childPopup){ - this.childPopup.hide(); - } - - this.childPopup = new Popup(this.table, element, this); - - return this.childPopup; - } - } - - class Module extends CoreFeature{ - - constructor(table, name){ - super(table); - - this._handler = null; - } - - initialize(){ - // setup module when table is initialized, to be overridden in module - } - - - /////////////////////////////////// - ////// Options Registration /////// - /////////////////////////////////// - - registerTableOption(key, value){ - this.table.optionsList.register(key, value); - } - - registerColumnOption(key, value){ - this.table.columnManager.optionsList.register(key, value); - } - - /////////////////////////////////// - /// Public Function Registration /// - /////////////////////////////////// - - registerTableFunction(name, func){ - if(typeof this.table[name] === "undefined"){ - this.table[name] = (...args) => { - this.table.initGuard(name); - - return func(...args); - }; - }else { - console.warn("Unable to bind table function, name already in use", name); - } - } - - registerComponentFunction(component, func, handler){ - return this.table.componentFunctionBinder.bind(component, func, handler); - } - - /////////////////////////////////// - ////////// Data Pipeline ////////// - /////////////////////////////////// - - registerDataHandler(handler, priority){ - this.table.rowManager.registerDataPipelineHandler(handler, priority); - this._handler = handler; - } - - registerDisplayHandler(handler, priority){ - this.table.rowManager.registerDisplayPipelineHandler(handler, priority); - this._handler = handler; - } - - displayRows(adjust){ - var index = this.table.rowManager.displayRows.length - 1, - lookupIndex; - - if(this._handler){ - lookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => { - return item.handler === this._handler; - }); - - if(lookupIndex > -1){ - index = lookupIndex; - } - } - - if(adjust){ - index = index + adjust; - } - - if(this._handler){ - if(index > -1){ - return this.table.rowManager.getDisplayRows(index); - }else { - return this.activeRows(); - } - } - } - - activeRows(){ - return this.table.rowManager.activeRows; - } - - refreshData(renderInPosition, handler){ - if(!handler){ - handler = this._handler; - } - - if(handler){ - this.table.rowManager.refreshActiveData(handler, false, renderInPosition); - } - } - - /////////////////////////////////// - //////// Footer Management //////// - /////////////////////////////////// - - footerAppend(element){ - return this.table.footerManager.append(element); - } - - footerPrepend(element){ - return this.table.footerManager.prepend(element); - } - - footerRemove(element){ - return this.table.footerManager.remove(element); - } - - /////////////////////////////////// - //////// Popups Management //////// - /////////////////////////////////// - - popup(menuEl, menuContainer){ - return new Popup(this.table, menuEl, menuContainer); - } - - /////////////////////////////////// - //////// Alert Management //////// - /////////////////////////////////// - - alert(content, type){ - return this.table.alertManager.alert(content, type); - } - - clearAlert(){ - return this.table.alertManager.clear(); - } - - } - - //resize columns to fit data they contain - function fitData(columns, forced){ - if(forced){ - this.table.columnManager.renderer.reinitializeColumnWidths(columns); - } - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - } - - //resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable - function fitDataGeneral(columns, forced){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - } - - //resize columns to fit data the contain and stretch last column to fill table - function fitDataStretch(columns, forced){ - var colsWidth = 0, - tableWidth = this.table.rowManager.element.clientWidth, - gap = 0, - lastCol = false; - - columns.forEach((column, i) => { - if(!column.widthFixed){ - column.reinitializeWidth(); - } - - if(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){ - lastCol = column; - } - - if(column.visible){ - colsWidth += column.getWidth(); - } - }); - - if(lastCol){ - gap = tableWidth - colsWidth + lastCol.getWidth(); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - lastCol.setWidth(0); - this.table.modules.responsiveLayout.update(); - } - - if(gap > 0){ - lastCol.setWidth(gap); - }else { - lastCol.reinitializeWidth(); - } - }else { - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - } - } - - //resize columns to fit - function fitColumns(columns, forced){ - var totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width - var fixedWidth = 0; //total width of columns with a defined width - var flexWidth = 0; //total width available to flexible columns - var flexGrowUnits = 0; //total number of widthGrow blocks across all columns - var flexColWidth = 0; //desired width of flexible columns - var flexColumns = []; //array of flexible width columns - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - var flexShrinkUnits = 0; //total number of widthShrink blocks across all columns - var overflowWidth = 0; //horizontal overflow width - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps - - function calcWidth(width){ - var colWidth; - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width); - }else { - colWidth = parseInt(width); - } - }else { - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - function scaleColumns(columns, freeSpace, colWidth, shrinkCols){ - var oversizeCols = [], - oversizeSpace = 0, - remainingSpace = 0, - nextColWidth = 0, - remainingFlexGrowUnits = flexGrowUnits, - gap = 0, - changeUnits = 0, - undersizeCols = []; - - function calcGrow(col){ - return (colWidth * (col.column.definition.widthGrow || 1)); - } - - function calcShrink(col){ - return (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0))); - } - - columns.forEach(function(col, i){ - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - if(col.column.minWidth >= width){ - oversizeCols.push(col); - }else { - if(col.column.maxWidth && col.column.maxWidth < width){ - col.width = col.column.maxWidth; - freeSpace -= col.column.maxWidth; - - remainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1); - - if(remainingFlexGrowUnits){ - colWidth = Math.floor(freeSpace/remainingFlexGrowUnits); - } - }else { - undersizeCols.push(col); - changeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1); - } - } - }); - - if(oversizeCols.length){ - oversizeCols.forEach(function(col){ - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace; - - gap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - }else { - gap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace; - - undersizeCols.forEach(function(column){ - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - if(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){ - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - columns.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width; - minWidth = parseInt(column.minWidth); - - if(width){ - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if(column.definition.widthShrink){ - fixedShrinkColumns.push({ - column:column, - width:colWidth > minWidth ? colWidth : minWidth - }); - flexShrinkUnits += column.definition.widthShrink; - } - - }else { - flexColumns.push({ - column:column, - width:0, - }); - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - //calculate available space - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - flexColWidth = Math.floor(flexWidth / flexGrowUnits); - - //generate column widths - gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - if(flexColumns.length && gapFill > 0){ - flexColumns[flexColumns.length-1].width += gapFill; - } - - //calculate space for columns to be shrunk into - flexColumns.forEach(function(col){ - flexWidth -= col.width; - }); - - overflowWidth = Math.abs(gapFill) + flexWidth; - - //shrink oversize columns if there is no available space - if(overflowWidth > 0 && flexShrinkUnits){ - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - if(gapFill && fixedShrinkColumns.length){ - fixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill; - } - - flexColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); - - fixedShrinkColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); - } - - var defaultModes = { - fitData:fitData, - fitDataFill:fitDataGeneral, - fitDataTable:fitDataGeneral, - fitDataStretch:fitDataStretch, - fitColumns:fitColumns , - }; - - class Layout extends Module{ - - constructor(table){ - super(table, "layout"); - - this.mode = null; - - this.registerTableOption("layout", "fitData"); //layout type - this.registerTableOption("layoutColumnsOnNewData", false); //update column widths on setData - - this.registerColumnOption("widthGrow"); - this.registerColumnOption("widthShrink"); - } - - //initialize layout system - initialize(){ - var layout = this.table.options.layout; - - if(Layout.modes[layout]){ - this.mode = layout; - }else { - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - initializeColumn(column){ - if(column.definition.widthGrow){ - column.definition.widthGrow = Number(column.definition.widthGrow); - } - if(column.definition.widthShrink){ - column.definition.widthShrink = Number(column.definition.widthShrink); - } - } - - getMode(){ - return this.mode; - } - - //trigger table layout - layout(dataChanged){ - this.dispatch("layout-refreshing"); - Layout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged); - this.dispatch("layout-refreshed"); - } - } - - Layout.moduleName = "layout"; - - //load defaults - Layout.modes = defaultModes; - - var defaultLangs = { - "default":{ //hold default locale text - "groups":{ - "item":"item", - "items":"items", - }, - "columns":{ - }, - "data":{ - "loading":"Loading", - "error":"Error", - }, - "pagination":{ - "page_size":"Page Size", - "page_title":"Show Page", - "first":"First", - "first_title":"First Page", - "last":"Last", - "last_title":"Last Page", - "prev":"Prev", - "prev_title":"Prev Page", - "next":"Next", - "next_title":"Next Page", - "all":"All", - "counter":{ - "showing": "Showing", - "of": "of", - "rows": "rows", - "pages": "pages", - } - }, - "headerFilters":{ - "default":"filter column...", - "columns":{} - } - }, - }; - - class Localize extends Module{ - - constructor(table){ - super(table); - - this.locale = "default"; //current locale - this.lang = false; //current language - this.bindings = {}; //update events to call when locale is changed - this.langList = {}; - - this.registerTableOption("locale", false); //current system language - this.registerTableOption("langs", {}); - } - - initialize(){ - this.langList = Helpers.deepClone(Localize.langs); - - if(this.table.options.columnDefaults.headerFilterPlaceholder !== false){ - this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder); - } - - for(let locale in this.table.options.langs){ - this.installLang(locale, this.table.options.langs[locale]); - } - - this.setLocale(this.table.options.locale); - - this.registerTableFunction("setLocale", this.setLocale.bind(this)); - this.registerTableFunction("getLocale", this.getLocale.bind(this)); - this.registerTableFunction("getLang", this.getLang.bind(this)); - } - - //set header placeholder - setHeaderFilterPlaceholder(placeholder){ - this.langList.default.headerFilters.default = placeholder; - } - - //setup a lang description object - installLang(locale, lang){ - if(this.langList[locale]){ - this._setLangProp(this.langList[locale], lang); - }else { - this.langList[locale] = lang; - } - } - - _setLangProp(lang, values){ - for(let key in values){ - if(lang[key] && typeof lang[key] == "object"){ - this._setLangProp(lang[key], values[key]); - }else { - lang[key] = values[key]; - } - } - } - - //set current locale - setLocale(desiredLocale){ - desiredLocale = desiredLocale || "default"; - - //fill in any matching language values - function traverseLang(trans, path){ - for(var prop in trans){ - if(typeof trans[prop] == "object"){ - if(!path[prop]){ - path[prop] = {}; - } - traverseLang(trans[prop], path[prop]); - }else { - path[prop] = trans[prop]; - } - } - } - - //determining correct locale to load - if(desiredLocale === true && navigator.language){ - //get local from system - desiredLocale = navigator.language.toLowerCase(); - } - - if(desiredLocale){ - //if locale is not set, check for matching top level locale else use default - if(!this.langList[desiredLocale]){ - let prefix = desiredLocale.split("-")[0]; - - if(this.langList[prefix]){ - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - desiredLocale = prefix; - }else { - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - desiredLocale = "default"; - } - } - } - - this.locale = desiredLocale; - - //load default lang template - this.lang = Helpers.deepClone(this.langList.default || {}); - - if(desiredLocale != "default"){ - traverseLang(this.langList[desiredLocale], this.lang); - } - - this.dispatchExternal("localized", this.locale, this.lang); - - this._executeBindings(); - } - - //get current locale - getLocale(locale){ - return this.locale; - } - - //get lang object for given local or current if none provided - getLang(locale){ - return locale ? this.langList[locale] : this.lang; - } - - //get text for current locale - getText(path, value){ - var fillPath = value ? path + "|" + value : path, - pathArray = fillPath.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - // } - - return text || ""; - } - - //traverse langs object and find localized copy - _getLangElement(path, locale){ - var root = this.lang; - - path.forEach(function(level){ - var rootPath; - - if(root){ - rootPath = root[level]; - - if(typeof rootPath != "undefined"){ - root = rootPath; - }else { - root = false; - } - } - }); - - return root; - } - - //set update binding - bind(path, callback){ - if(!this.bindings[path]){ - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); - } - - //iterate through bindings and trigger updates - _executeBindings(){ - for(let path in this.bindings){ - this.bindings[path].forEach((binding) => { - binding(this.getText(path), this.lang); - }); - } - } - } - - Localize.moduleName = "localize"; - - //load defaults - Localize.langs = defaultLangs; - - class Comms extends Module{ - - constructor(table){ - super(table); - } - - initialize(){ - this.registerTableFunction("tableComms", this.receive.bind(this)); - } - - getConnections(selectors){ - var connections = [], - connection; - - connection = TableRegistry.lookupTable(selectors); - - connection.forEach((con) =>{ - if(this.table !== con){ - connections.push(con); - } - }); - - return connections; - } - - send(selectors, module, action, data){ - var connections = this.getConnections(selectors); - - connections.forEach((connection) => { - connection.tableComms(this.table.element, module, action, data); - }); - - if(!connections.length && selectors){ - console.warn("Table Connection Error - No tables matching selector found", selectors); - } - } - - receive(table, module, action, data){ - if(this.table.modExists(module)){ - return this.table.modules[module].commsReceived(table, action, data); - }else { - console.warn("Inter-table Comms Error - no such module:", module); - } - } - } - - Comms.moduleName = "comms"; - - var coreModules = /*#__PURE__*/Object.freeze({ - __proto__: null, - LayoutModule: Layout, - LocalizeModule: Localize, - CommsModule: Comms - }); - - class ModuleBinder { - - constructor(tabulator, modules){ - this.bindStaticFunctionality(tabulator); - this.bindModules(tabulator, coreModules, true); - - if(modules){ - this.bindModules(tabulator, modules); - } - } - - bindStaticFunctionality(tabulator){ - tabulator.moduleBindings = {}; - - tabulator.extendModule = function(name, property, values){ - if(tabulator.moduleBindings[name]){ - var source = tabulator.moduleBindings[name][property]; - - if(source){ - if(typeof values == "object"){ - for(let key in values){ - source[key] = values[key]; - } - }else { - console.warn("Module Error - Invalid value type, it must be an object"); - } - }else { - console.warn("Module Error - property does not exist:", property); - } - }else { - console.warn("Module Error - module does not exist:", name); - } - }; - - tabulator.registerModule = function(modules){ - if(!Array.isArray(modules)){ - modules = [modules]; - } - - modules.forEach((mod) => { - tabulator.registerModuleBinding(mod); - }); - }; - - tabulator.registerModuleBinding = function(mod){ - tabulator.moduleBindings[mod.moduleName] = mod; - }; - - tabulator.findTable = function(query){ - var results = TableRegistry.lookupTable(query, true); - return Array.isArray(results) && !results.length ? false : results; - }; - - //ensure that module are bound to instantiated function - tabulator.prototype.bindModules = function(){ - var orderedStartMods = [], - orderedEndMods = [], - unOrderedMods = []; - - this.modules = {}; - - for(var name in tabulator.moduleBindings){ - let mod = tabulator.moduleBindings[name]; - let module = new mod(this); - - this.modules[name] = module; - - if(mod.prototype.moduleCore){ - this.modulesCore.push(module); - }else { - if(mod.moduleInitOrder){ - if(mod.moduleInitOrder < 0){ - orderedStartMods.push(module); - }else { - orderedEndMods.push(module); - } - - }else { - unOrderedMods.push(module); - } - } - } - - orderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1); - orderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1); - - this.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods)); - }; - } - - bindModules(tabulator, modules, core){ - var mods = Object.values(modules); - - if(core){ - mods.forEach((mod) => { - mod.prototype.moduleCore = true; - }); - } - - tabulator.registerModule(mods); - } - } - - class Alert extends CoreFeature{ - constructor(table){ - super(table); - - this.element = this._createAlertElement(); - this.msgElement = this._createMsgElement(); - this.type = null; - - this.element.appendChild(this.msgElement); - } - - _createAlertElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-alert"); - return el; - } - - _createMsgElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-alert-msg"); - el.setAttribute("role", "alert"); - return el; - } - - _typeClass(){ - return "tabulator-alert-state-" + this.type; - } - - alert(content, type = "msg"){ - if(content){ - this.clear(); - - this.dispatch("alert-show", type); - - this.type = type; - - while(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild); - - this.msgElement.classList.add(this._typeClass()); - - if(typeof content === "function"){ - content = content(); - } - - if(content instanceof HTMLElement){ - this.msgElement.appendChild(content); - }else { - this.msgElement.innerHTML = content; - } - - this.table.element.appendChild(this.element); - } - } - - clear(){ - this.dispatch("alert-hide", this.type); - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.msgElement.classList.remove(this._typeClass()); - } - } - - class Tabulator { - - constructor(element, options){ - - this.options = {}; - - this.columnManager = null; // hold Column Manager - this.rowManager = null; //hold Row Manager - this.footerManager = null; //holder Footer Manager - this.alertManager = null; //hold Alert Manager - this.vdomHoz = null; //holder horizontal virtual dom - this.externalEvents = null; //handle external event messaging - this.eventBus = null; //handle internal event messaging - this.interactionMonitor = false; //track user interaction - this.browser = ""; //hold current browser type - this.browserSlow = false; //handle reduced functionality for slower browsers - this.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance - this.rtl = false; //check if the table is in RTL mode - this.originalElement = null; //hold original table element if it has been replaced - - this.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions - this.dataLoader = false; //bind component functions - - this.modules = {}; //hold all modules bound to this table - this.modulesCore = []; //hold core modules bound to this table (for initialization purposes) - this.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes) - - this.deprecationAdvisor = new DeprecationAdvisor(this); - this.optionsList = new OptionsList(this, "table constructor"); - - this.initialized = false; - this.destroyed = false; - - if(this.initializeElement(element)){ - - this.initializeCoreSystems(options); - - //delay table creation to allow event bindings immediately after the constructor - setTimeout(() => { - this._create(); - }); - } - - TableRegistry.register(this); //register table for inter-device communication - } - - initializeElement(element){ - if(typeof HTMLElement !== "undefined" && element instanceof HTMLElement){ - this.element = element; - return true; - }else if(typeof element === "string"){ - this.element = document.querySelector(element); - - if(this.element){ - return true; - }else { - console.error("Tabulator Creation Error - no element found matching selector: ", element); - return false; - } - }else { - console.error("Tabulator Creation Error - Invalid element provided:", element); - return false; - } - } - - initializeCoreSystems(options){ - this.columnManager = new ColumnManager(this); - this.rowManager = new RowManager(this); - this.footerManager = new FooterManager(this); - this.dataLoader = new DataLoader(this); - this.alertManager = new Alert(this); - - this.bindModules(); - - this.options = this.optionsList.generate(Tabulator.defaultOptions, options); - - this._clearObjectPointers(); - - this._mapDeprecatedFunctionality(); - - this.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal); - this.eventBus = new InternalEventBus(this.options.debugEventsInternal); - - this.interactionMonitor = new InteractionManager(this); - - this.dataLoader.initialize(); - // this.columnManager.initialize(); - // this.rowManager.initialize(); - this.footerManager.initialize(); - } - - //convert deprecated functionality to new functions - _mapDeprecatedFunctionality(){ - //all previously deprecated functionality removed in the 5.0 release - } - - _clearSelection(){ - - this.element.classList.add("tabulator-block-select"); - - if (window.getSelection) { - if (window.getSelection().empty) { // Chrome - window.getSelection().empty(); - } else if (window.getSelection().removeAllRanges) { // Firefox - window.getSelection().removeAllRanges(); - } - } else if (document.selection) { // IE? - document.selection.empty(); - } - - this.element.classList.remove("tabulator-block-select"); - } - - //create table - _create(){ - this.externalEvents.dispatch("tableBuilding"); - this.eventBus.dispatch("table-building"); - - this._rtlCheck(); - - this._buildElement(); - - this._initializeTable(); - - this._loadInitialData(); - - this.initialized = true; - - this.externalEvents.dispatch("tableBuilt"); - } - - _rtlCheck(){ - var style = window.getComputedStyle(this.element); - - switch(this.options.textDirection){ - case"auto": - if(style.direction !== "rtl"){ - break; - } - - case "rtl": - this.element.classList.add("tabulator-rtl"); - this.rtl = true; - break; - - case "ltr": - this.element.classList.add("tabulator-ltr"); - - default: - this.rtl = false; - } - } - - //clear pointers to objects in default config object - _clearObjectPointers(){ - this.options.columns = this.options.columns.slice(0); - - if(Array.isArray(this.options.data) && !this.options.reactiveData){ - this.options.data = this.options.data.slice(0); - } - } - - //build tabulator element - _buildElement(){ - var element = this.element, - options = this.options, - newElement; - - if(element.tagName === "TABLE"){ - this.originalElement = this.element; - newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - for(var i in attributes){ - if(typeof attributes[i] == "object"){ - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - this.element = element = newElement; - } - - element.classList.add("tabulator"); - element.setAttribute("role", "grid"); - - //empty element - while(element.firstChild) element.removeChild(element.firstChild); - - //set table height - if(options.height){ - options.height = isNaN(options.height) ? options.height : options.height + "px"; - element.style.height = options.height; - } - - //set table min height - if(options.minHeight !== false){ - options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px"; - element.style.minHeight = options.minHeight; - } - - //set table maxHeight - if(options.maxHeight !== false){ - options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px"; - element.style.maxHeight = options.maxHeight; - } - } - - //initialize core systems and modules - _initializeTable(){ - var element = this.element, - options = this.options; - - this.interactionMonitor.initialize(); - - this.columnManager.initialize(); - this.rowManager.initialize(); - - this._detectBrowser(); - - //initialize core modules - this.modulesCore.forEach((mod) => { - mod.initialize(); - }); - - //build table elements - element.appendChild(this.columnManager.getElement()); - element.appendChild(this.rowManager.getElement()); - - if(options.footerElement){ - this.footerManager.activate(); - } - - if(options.autoColumns && options.data){ - - this.columnManager.generateColumnsFromRowData(this.options.data); - } - - //initialize regular modules - this.modulesRegular.forEach((mod) => { - mod.initialize(); - }); - - this.columnManager.setColumns(options.columns); - - this.eventBus.dispatch("table-built"); - } - - _loadInitialData(){ - this.dataLoader.load(this.options.data); - this.columnManager.verticalAlignHeaders(); - } - - //deconstructor - destroy(){ - var element = this.element; - - this.destroyed = true; - - TableRegistry.deregister(this); //deregister table from inter-device communication - - this.eventBus.dispatch("table-destroy"); - - //clear row data - this.rowManager.destroy(); - - //clear DOM - while(element.firstChild) element.removeChild(element.firstChild); - element.classList.remove("tabulator"); - - this.externalEvents.dispatch("tableDestroyed"); - } - - _detectBrowser(){ - var ua = navigator.userAgent||navigator.vendor||window.opera; - - if(ua.indexOf("Trident") > -1){ - this.browser = "ie"; - this.browserSlow = true; - }else if(ua.indexOf("Edge") > -1){ - this.browser = "edge"; - this.browserSlow = true; - }else if(ua.indexOf("Firefox") > -1){ - this.browser = "firefox"; - this.browserSlow = false; - }else if(ua.indexOf("Mac OS") > -1){ - this.browser = "safari"; - this.browserSlow = false; - }else { - this.browser = "other"; - this.browserSlow = false; - } - - this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4)); - } - - initGuard(func, msg){ - var stack, line; - - if(this.options.debugInitialization && !this.initialized){ - if(!func){ - stack = new Error().stack.split("\n"); - - line = stack[0] == "Error" ? stack[2] : stack[1]; - - if(line[0] == " "){ - func = line.trim().split(" ")[1].split(".")[1]; - }else { - func = line.trim().split("@")[0]; - } - } - - console.warn("Table Not Initialized - Calling the " + func + " function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function." + (msg ? " " + msg : "")); - } - - return this.initialized; - } - - ////////////////// Data Handling ////////////////// - //block table redrawing - blockRedraw(){ - this.initGuard(); - - this.eventBus.dispatch("redraw-blocking"); - - this.rowManager.blockRedraw(); - this.columnManager.blockRedraw(); - - this.eventBus.dispatch("redraw-blocked"); - } - - //restore table redrawing - restoreRedraw(){ - this.initGuard(); - - this.eventBus.dispatch("redraw-restoring"); - - this.rowManager.restoreRedraw(); - this.columnManager.restoreRedraw(); - - this.eventBus.dispatch("redraw-restored"); - } - - //load data - setData(data, params, config){ - this.initGuard(false, "To set initial data please use the 'data' property in the table constructor."); - - return this.dataLoader.load(data, params, config, false); - } - - //clear data - clearData(){ - this.initGuard(); - - this.dataLoader.blockActiveLoad(); - this.rowManager.clearData(); - } - - //get table data array - getData(active){ - return this.rowManager.getData(active); - } - - //get table data array count - getDataCount(active){ - return this.rowManager.getDataCount(active); - } - - //replace data, keeping table in position with same sort - replaceData(data, params, config){ - this.initGuard(); - - return this.dataLoader.load(data, params, config, true, true); - } - - //update table data - updateData(data){ - var responses = 0; - - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data && data.length > 0){ - data.forEach((item) => { - var row = this.rowManager.findRow(item[this.options.index]); - - if(row){ - responses++; - - row.updateData(item) - .then(()=>{ - responses--; - - if(!responses){ - resolve(); - } - }) - .catch((e) => { - reject("Update Error - Unable to update row", item, e); - }); - }else { - reject("Update Error - Unable to find row", item); - } - }); - }else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - addData(data, pos, index){ - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data){ - this.rowManager.addRows(data, pos, index) - .then((rows) => { - var output = []; - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - resolve(output); - }); - }else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - //update table data - updateOrAddData(data){ - var rows = [], - responses = 0; - - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data && data.length > 0){ - data.forEach((item) => { - var row = this.rowManager.findRow(item[this.options.index]); - - responses++; - - if(row){ - row.updateData(item) - .then(()=>{ - responses--; - rows.push(row.getComponent()); - - if(!responses){ - resolve(rows); - } - }); - }else { - this.rowManager.addRows(item) - .then((newRows)=>{ - responses--; - rows.push(newRows[0].getComponent()); - - if(!responses){ - resolve(rows); - } - }); - } - }); - }else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - //get row object - getRow(index){ - var row = this.rowManager.findRow(index); - - if(row){ - return row.getComponent(); - }else { - console.warn("Find Error - No matching row found:", index); - return false; - } - } - - //get row object - getRowFromPosition(position){ - var row = this.rowManager.getRowFromPosition(position); - - if(row){ - return row.getComponent(); - }else { - console.warn("Find Error - No matching row found:", position); - return false; - } - } - - //delete row from table - deleteRow(index){ - var foundRows = []; - - this.initGuard(); - - if(!Array.isArray(index)){ - index = [index]; - } - - //find matching rows - for(let item of index){ - let row = this.rowManager.findRow(item, true); - - if(row){ - foundRows.push(row); - }else { - console.error("Delete Error - No matching row found:", item); - return Promise.reject("Delete Error - No matching row found"); - } - } - - //sort rows into correct order to ensure smooth delete from table - foundRows.sort((a, b) => { - return this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1; - }); - - //delete rows - foundRows.forEach((row) =>{ - row.delete(); - }); - - this.rowManager.reRenderInPosition(); - - return Promise.resolve(); - } - - //add row to table - addRow(data, pos, index){ - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - return this.rowManager.addRows(data, pos, index, true) - .then((rows)=>{ - return rows[0].getComponent(); - }); - } - - //update a row if it exists otherwise create it - updateOrAddRow(index, data){ - var row = this.rowManager.findRow(index); - - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - return row.updateData(data) - .then(()=>{ - return row.getComponent(); - }); - }else { - return this.rowManager.addRows(data) - .then((rows)=>{ - return rows[0].getComponent(); - }); - } - } - - //update row data - updateRow(index, data){ - var row = this.rowManager.findRow(index); - - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - return row.updateData(data) - .then(()=>{ - return Promise.resolve(row.getComponent()); - }); - }else { - console.warn("Update Error - No matching row found:", index); - return Promise.reject("Update Error - No matching row found"); - } - } - - //scroll to row in DOM - scrollToRow(index, position, ifVisible){ - var row = this.rowManager.findRow(index); - - if(row){ - return this.rowManager.scrollToRow(row, position, ifVisible); - }else { - console.warn("Scroll Error - No matching row found:", index); - return Promise.reject("Scroll Error - No matching row found"); - } - } - - moveRow(from, to, after){ - var fromRow = this.rowManager.findRow(from); - - this.initGuard(); - - if(fromRow){ - fromRow.moveToRow(to, after); - }else { - console.warn("Move Error - No matching row found:", from); - } - } - - getRows(active){ - return this.rowManager.getComponents(active); - } - - //get position of row in table - getRowPosition(index){ - var row = this.rowManager.findRow(index); - - if(row){ - return row.getPosition(); - }else { - console.warn("Position Error - No matching row found:", index); - return false; - } - } - - /////////////// Column Functions /////////////// - setColumns(definition){ - this.initGuard(false, "To set initial columns please use the 'columns' property in the table constructor"); - - this.columnManager.setColumns(definition); - } - - getColumns(structured){ - return this.columnManager.getComponents(structured); - } - - getColumn(field){ - var column = this.columnManager.findColumn(field); - - if(column){ - return column.getComponent(); - }else { - console.warn("Find Error - No matching column found:", field); - return false; - } - } - - getColumnDefinitions(){ - return this.columnManager.getDefinitionTree(); - } - - showColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - column.show(); - }else { - console.warn("Column Show Error - No matching column found:", field); - return false; - } - } - - hideColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - column.hide(); - }else { - console.warn("Column Hide Error - No matching column found:", field); - return false; - } - } - - toggleColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - if(column.visible){ - column.hide(); - }else { - column.show(); - } - }else { - console.warn("Column Visibility Toggle Error - No matching column found:", field); - return false; - } - } - - addColumn(definition, before, field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - return this.columnManager.addColumn(definition, before, column) - .then((column) => { - return column.getComponent(); - }); - } - - deleteColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - return column.delete(); - }else { - console.warn("Column Delete Error - No matching column found:", field); - return Promise.reject(); - } - } - - updateColumnDefinition(field, definition){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - return column.updateDefinition(definition); - }else { - console.warn("Column Update Error - No matching column found:", field); - return Promise.reject(); - } - } - - moveColumn(from, to, after){ - var fromColumn = this.columnManager.findColumn(from), - toColumn = this.columnManager.findColumn(to); - - this.initGuard(); - - if(fromColumn){ - if(toColumn){ - this.columnManager.moveColumn(fromColumn, toColumn, after); - }else { - console.warn("Move Error - No matching column found:", toColumn); - } - }else { - console.warn("Move Error - No matching column found:", from); - } - } - - //scroll to column in DOM - scrollToColumn(field, position, ifVisible){ - return new Promise((resolve, reject) => { - var column = this.columnManager.findColumn(field); - - if(column){ - return this.columnManager.scrollToColumn(column, position, ifVisible); - }else { - console.warn("Scroll Error - No matching column found:", field); - return Promise.reject("Scroll Error - No matching column found"); - } - }); - } - - //////////// General Public Functions //////////// - //redraw list without updating data - redraw(force){ - this.initGuard(); - - this.columnManager.redraw(force); - this.rowManager.redraw(force); - } - - setHeight(height){ - this.options.height = isNaN(height) ? height : height + "px"; - this.element.style.height = this.options.height; - this.rowManager.initializeRenderer(); - this.rowManager.redraw(true); - } - - //////////////////// Event Bus /////////////////// - - on(key, callback){ - this.externalEvents.subscribe(key, callback); - } - - off(key, callback){ - this.externalEvents.unsubscribe(key, callback); - } - - dispatchEvent(){ - var args = Array.from(arguments); - args.shift(); - - this.externalEvents.dispatch(...arguments); - } - - //////////////////// Alerts /////////////////// - - alert(contents, type){ - this.initGuard(); - - this.alertManager.alert(contents, type); - } - - clearAlert(){ - this.initGuard(); - - this.alertManager.clear(); - } - - ////////////// Extension Management ////////////// - modExists(plugin, required){ - if(this.modules[plugin]){ - return true; - }else { - if(required){ - console.error("Tabulator Module Not Installed: " + plugin); - } - return false; - } - } - - module(key){ - var mod = this.modules[key]; - - if(!mod){ - console.error("Tabulator module not installed: " + key); - } - - return mod; - } - } - - //default setup options - Tabulator.defaultOptions = defaultOptions; - - //bind modules and static functionality - new ModuleBinder(Tabulator); - - var defaultAccessors = {}; - - class Accessor extends Module{ - - constructor(table){ - super(table); - - this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types - - this.registerColumnOption("accessor"); - this.registerColumnOption("accessorParams"); - this.registerColumnOption("accessorData"); - this.registerColumnOption("accessorDataParams"); - this.registerColumnOption("accessorDownload"); - this.registerColumnOption("accessorDownloadParams"); - this.registerColumnOption("accessorClipboard"); - this.registerColumnOption("accessorClipboardParams"); - this.registerColumnOption("accessorPrint"); - this.registerColumnOption("accessorPrintParams"); - this.registerColumnOption("accessorHtmlOutput"); - this.registerColumnOption("accessorHtmlOutputParams"); - } - - initialize(){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("row-data-retrieve", this.transformRow.bind(this)); - } - - //initialize column accessor - initializeColumn(column){ - var match = false, - config = {}; - - this.allowedTypes.forEach((type) => { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if(column.definition[key]){ - accessor = this.lookupAccessor(column.definition[key]); - - if(accessor){ - match = true; - - config[key] = { - accessor:accessor, - params: column.definition[key + "Params"] || {}, - }; - } - } - }); - - if(match){ - column.modules.accessor = config; - } - } - - lookupAccessor(value){ - var accessor = false; - - //set column accessor - switch(typeof value){ - case "string": - if(Accessor.accessors[value]){ - accessor = Accessor.accessors[value]; - }else { - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; - } - - //apply accessor to row - transformRow(row, type){ - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - rowComponent = row.getComponent(); - - //clone data object with deep copy to isolate internal data from returned result - var data = Helpers.deepClone(row.data || {}); - - this.table.columnManager.traverse(function(column){ - var value, accessor, params, colComponent; - - if(column.modules.accessor){ - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if(accessor){ - value = column.getFieldValue(data); - - if(value != "undefined"){ - colComponent = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent)); - } - } - } - }); - - return data; - } - } - - //load defaults - Accessor.moduleName = "accessor"; - Accessor.accessors = defaultAccessors; - - var defaultConfig = { - method: "GET", - }; - - function generateParamsList(data, prefix){ - var output = []; - - prefix = prefix || ""; - - if(Array.isArray(data)){ - data.forEach((item, i) => { - output = output.concat(generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - }else if (typeof data === "object"){ - for (var key in data){ - output = output.concat(generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - }else { - output.push({key:prefix, value:data}); - } - - return output; - } - - function serializeParams(params){ - var output = generateParamsList(params), - encoded = []; - - output.forEach(function(item){ - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); - } - - function urlBuilder(url, config, params){ - if(url){ - if(params && Object.keys(params).length){ - if(!config.method || config.method.toLowerCase() == "get"){ - config.method = "get"; - - url += (url.includes("?") ? "&" : "?") + serializeParams(params); - } - } - } - - return url; - } - - function defaultLoaderPromise(url, config, params){ - var contentType; - - return new Promise((resolve, reject) => { - //set url - url = this.urlGenerator.call(this.table, url, config, params); - - //set body content if not GET request - if(config.method.toUpperCase() != "GET"){ - contentType = typeof this.table.options.ajaxContentType === "object" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType]; - if(contentType){ - - for(var key in contentType.headers){ - if(!config.headers){ - config.headers = {}; - } - - if(typeof config.headers[key] === "undefined"){ - config.headers[key] = contentType.headers[key]; - } - } - - config.body = contentType.body.call(this, url, config, params); - - }else { - console.warn("Ajax Error - Invalid ajaxContentType value:", this.table.options.ajaxContentType); - } - } - - if(url){ - //configure headers - if(typeof config.headers === "undefined"){ - config.headers = {}; - } - - if(typeof config.headers.Accept === "undefined"){ - config.headers.Accept = "application/json"; - } - - if(typeof config.headers["X-Requested-With"] === "undefined"){ - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - if(typeof config.mode === "undefined"){ - config.mode = "cors"; - } - - if(config.mode == "cors"){ - if(typeof config.headers["Origin"] === "undefined"){ - config.headers["Origin"] = window.location.origin; - } - - if(typeof config.credentials === "undefined"){ - config.credentials = 'same-origin'; - } - }else { - if(typeof config.credentials === "undefined"){ - config.credentials = 'include'; - } - } - - //send request - fetch(url, config) - .then((response)=>{ - if(response.ok) { - response.json() - .then((data)=>{ - resolve(data); - }).catch((error)=>{ - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - }else { - console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText); - reject(response); - } - }) - .catch((error)=>{ - console.error("Ajax Load Error - Connection Error: ", error); - reject(error); - }); - }else { - console.warn("Ajax Load Error - No URL Set"); - resolve([]); - } - }); - } - - function generateParamsList$1(data, prefix){ - var output = []; - - prefix = prefix || ""; - - if(Array.isArray(data)){ - data.forEach((item, i) => { - output = output.concat(generateParamsList$1(item, prefix ? prefix + "[" + i + "]" : i)); - }); - }else if (typeof data === "object"){ - for (var key in data){ - output = output.concat(generateParamsList$1(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - }else { - output.push({key:prefix, value:data}); - } - - return output; - } - - var defaultContentTypeFormatters = { - "json":{ - headers:{ - 'Content-Type': 'application/json', - }, - body:function(url, config, params){ - return JSON.stringify(params); - }, - }, - "form":{ - headers:{ - }, - body:function(url, config, params){ - - var output = generateParamsList$1(params), - form = new FormData(); - - output.forEach(function(item){ - form.append(item.key, item.value); - }); - - return form; - }, - }, - }; - - class Ajax extends Module{ - - constructor(table){ - super(table); - - this.config = {}; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderPromise = false; - - this.registerTableOption("ajaxURL", false); //url for ajax loading - this.registerTableOption("ajaxURLGenerator", false); - this.registerTableOption("ajaxParams", {}); //params for ajax loading - this.registerTableOption("ajaxConfig", "get"); //ajax request type - this.registerTableOption("ajaxContentType", "form"); //ajax request type - this.registerTableOption("ajaxRequestFunc", false); //promise function - - this.registerTableOption("ajaxRequesting", function(){}); - this.registerTableOption("ajaxResponse", false); - - this.contentTypeFormatters = Ajax.contentTypeFormatters; - } - - //initialize setup options - initialize(){ - this.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise; - this.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator; - - if(this.table.options.ajaxURL){ - this.setUrl(this.table.options.ajaxURL); - } - - - this.setDefaultConfig(this.table.options.ajaxConfig); - - this.registerTableFunction("getAjaxUrl", this.getUrl.bind(this)); - - this.subscribe("data-loading", this.requestDataCheck.bind(this)); - this.subscribe("data-params", this.requestParams.bind(this)); - this.subscribe("data-load", this.requestData.bind(this)); - } - - requestParams(data, config, silent, params){ - var ajaxParams = this.table.options.ajaxParams; - - if(ajaxParams){ - if(typeof ajaxParams === "function"){ - ajaxParams = ajaxParams.call(this.table); - } - - params = Object.assign(Object.assign({}, ajaxParams), params); - } - - return params; - } - - requestDataCheck(data, params, config, silent){ - return !!((!data && this.url) || typeof data === "string"); - } - - requestData(url, params, config, silent, previousData){ - var ajaxConfig; - - if(!previousData && this.requestDataCheck(url)){ - if(url){ - this.setUrl(url); - } - - ajaxConfig = this.generateConfig(config); - - return this.sendRequest(this.url, params, ajaxConfig); - }else { - return previousData; - } - } - - setDefaultConfig(config = {}){ - this.config = Object.assign({}, Ajax.defaultConfig); - - if(typeof config == "string"){ - this.config.method = config; - }else { - Object.assign(this.config, config); - } - } - - //load config object - generateConfig(config = {}){ - var ajaxConfig = Object.assign({}, this.config); - - if(typeof config == "string"){ - ajaxConfig.method = config; - }else { - Object.assign(ajaxConfig, config); - } - - return ajaxConfig; - } - - //set request url - setUrl(url){ - this.url = url; - } - - //get request url - getUrl(){ - return this.url; - } - - //send ajax request - sendRequest(url, params, config){ - if(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){ - return this.loaderPromise(url, config, params) - .then((data)=>{ - if(this.table.options.ajaxResponse){ - data = this.table.options.ajaxResponse.call(this.table, url, params, data); - } - - return data; - }); - }else { - return Promise.reject(); - } - } - } - - Ajax.moduleName = "ajax"; - - //load defaults - Ajax.defaultConfig = defaultConfig; - Ajax.defaultURLGenerator = urlBuilder; - Ajax.defaultLoaderPromise = defaultLoaderPromise; - Ajax.contentTypeFormatters = defaultContentTypeFormatters; - - var defaultPasteActions = { - replace:function(data){ - return this.table.setData(data); - }, - update:function(data){ - return this.table.updateOrAddData(data); - }, - insert:function(data){ - return this.table.addData(data); - }, - range:function(data){ - var rows = [], - range = this.table.modules.selectRange.activeRange, - singleCell = false, - bounds, startCell, startRow, rowWidth, dataLength; - - dataLength = data.length; - - if(range){ - bounds = range.getBounds(); - startCell = bounds.start; - - if(bounds.start === bounds.end){ - singleCell = true; - } - - if(startCell){ - rows = this.table.rowManager.activeRows.slice(); - startRow = rows.indexOf(startCell.row); - - if(singleCell){ - rowWidth = data.length; - }else { - rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1; - } - - - if(startRow >-1){ - this.table.blockRedraw(); - - rows = rows.slice(startRow, startRow + rowWidth); - - rows.forEach((row, i) => { - row.updateData(data[i % dataLength]); - }); - - this.table.restoreRedraw(); - } - } - } - - return rows; - } - }; - - var defaultPasteParsers = { - table:function(clipboard){ - var data = [], - headerFindSuccess = true, - columns = this.table.columnManager.columns, - columnMap = [], - rows = []; - - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function(row){ - data.push(row.split("\t")); - }); - - if(data.length && !(data.length === 1 && data[0].length < 2)){ - - //check if headers are present by title - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else { - headerFindSuccess = false; - } - }); - - //check if column headers are present by field - if(!headerFindSuccess){ - headerFindSuccess = true; - columnMap = []; - - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.field && value.trim() && column.field.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else { - headerFindSuccess = false; - } - }); - - if(!headerFindSuccess){ - columnMap = this.table.columnManager.columnsByIndex; - } - } - - //remove header row if found - if(headerFindSuccess){ - data.shift(); - } - - data.forEach(function(item){ - var row = {}; - - item.forEach(function(value, i){ - if(columnMap[i]){ - row[columnMap[i].field] = value; - } - }); - - rows.push(row); - }); - - return rows; - }else { - return false; - } - }, - range:function(clipboard){ - var data = [], - rows = [], - range = this.table.modules.selectRange.activeRange, - singleCell = false, - bounds, startCell, colWidth, columnMap, startCol; - - if(range){ - bounds = range.getBounds(); - startCell = bounds.start; - - if(bounds.start === bounds.end){ - singleCell = true; - } - - if(startCell){ - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function(row){ - data.push(row.split("\t")); - }); - - if(data.length){ - columnMap = this.table.columnManager.getVisibleColumnsByIndex(); - startCol = columnMap.indexOf(startCell.column); - - if(startCol > -1){ - if(singleCell){ - colWidth = data[0].length; - }else { - colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1; - } - - columnMap = columnMap.slice(startCol, startCol + colWidth); - - data.forEach((item) => { - var row = {}; - var itemLength = item.length; - - columnMap.forEach(function(col, i){ - row[col.field] = item[i % itemLength]; - }); - - rows.push(row); - }); - - return rows; - } - } - } - } - - return false; - } - }; - - class Clipboard extends Module{ - - constructor(table){ - super(table); - - this.mode = true; - this.pasteParser = function(){}; - this.pasteAction = function(){}; - this.customSelection = false; - this.rowRange = false; - this.blocked = true; //block copy actions not originating from this command - - this.registerTableOption("clipboard", false); //enable clipboard - this.registerTableOption("clipboardCopyStyled", true); //formatted table data - this.registerTableOption("clipboardCopyConfig", false); //clipboard config - this.registerTableOption("clipboardCopyFormatter", false); //DEPRECATED - REMOVE in 5.0 - this.registerTableOption("clipboardCopyRowRange", "active"); //restrict clipboard to visible rows only - this.registerTableOption("clipboardPasteParser", "table"); //convert pasted clipboard data to rows - this.registerTableOption("clipboardPasteAction", "insert"); //how to insert pasted data into the table - - this.registerColumnOption("clipboard"); - this.registerColumnOption("titleClipboard"); - } - - initialize(){ - this.mode = this.table.options.clipboard; - - this.rowRange = this.table.options.clipboardCopyRowRange; - - if(this.mode === true || this.mode === "copy"){ - this.table.element.addEventListener("copy", (e) => { - var plain, html, list; - - if(!this.blocked){ - e.preventDefault(); - - if(this.customSelection){ - plain = this.customSelection; - - if(this.table.options.clipboardCopyFormatter){ - plain = this.table.options.clipboardCopyFormatter("plain", plain); - } - }else { - - list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, "clipboard"); - - html = this.table.modules.export.generateHTMLTable(list); - plain = html ? this.generatePlainContent(list) : ""; - - if(this.table.options.clipboardCopyFormatter){ - plain = this.table.options.clipboardCopyFormatter("plain", plain); - html = this.table.options.clipboardCopyFormatter("html", html); - } - } - - if (window.clipboardData && window.clipboardData.setData) { - window.clipboardData.setData('Text', plain); - } else if (e.clipboardData && e.clipboardData.setData) { - e.clipboardData.setData('text/plain', plain); - if(html){ - e.clipboardData.setData('text/html', html); - } - } else if (e.originalEvent && e.originalEvent.clipboardData.setData) { - e.originalEvent.clipboardData.setData('text/plain', plain); - if(html){ - e.originalEvent.clipboardData.setData('text/html', html); - } - } - - this.dispatchExternal("clipboardCopied", plain, html); - - this.reset(); - } - }); - } - - if(this.mode === true || this.mode === "paste"){ - this.table.element.addEventListener("paste", (e) => { - this.paste(e); - }); - } - - this.setPasteParser(this.table.options.clipboardPasteParser); - this.setPasteAction(this.table.options.clipboardPasteAction); - - this.registerTableFunction("copyToClipboard", this.copy.bind(this)); - } - - reset(){ - this.blocked = true; - this.customSelection = false; - } - - generatePlainContent (list) { - var output = []; - - list.forEach((row) => { - var rowData = []; - - row.columns.forEach((col) => { - var value = ""; - - if(col){ - - if(row.type === "group"){ - col.value = col.component.getKey(); - } - - if(col.value === null){ - value = ""; - }else { - switch(typeof col.value){ - case "object": - value = JSON.stringify(col.value); - break; - - case "undefined": - value = ""; - break; - - default: - value = col.value; - } - } - } - - rowData.push(value); - }); - - output.push(rowData.join("\t")); - }); - - return output.join("\n"); - } - - copy (range, internal) { - var sel, textRange; - this.blocked = false; - this.customSelection = false; - - - if (this.mode === true || this.mode === "copy") { - - this.rowRange = range || this.table.options.clipboardCopyRowRange; - - if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") { - range = document.createRange(); - range.selectNodeContents(this.table.element); - sel = window.getSelection(); - - if (sel.toString() && internal) { - this.customSelection = sel.toString(); - } - - sel.removeAllRanges(); - sel.addRange(range); - } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") { - textRange = document.body.createTextRange(); - textRange.moveToElementText(this.table.element); - textRange.select(); - } - - document.execCommand('copy'); - - if (sel) { - sel.removeAllRanges(); - } - } - } - - //PASTE EVENT HANDLING - setPasteAction(action){ - - switch(typeof action){ - case "string": - this.pasteAction = Clipboard.pasteActions[action]; - - if(!this.pasteAction){ - console.warn("Clipboard Error - No such paste action found:", action); - } - break; - - case "function": - this.pasteAction = action; - break; - } - } - - setPasteParser(parser){ - switch(typeof parser){ - case "string": - this.pasteParser = Clipboard.pasteParsers[parser]; - - if(!this.pasteParser){ - console.warn("Clipboard Error - No such paste parser found:", parser); - } - break; - - case "function": - this.pasteParser = parser; - break; - } - } - - paste(e){ - var data, rowData, rows; - - if(this.checkPasteOrigin(e)){ - - data = this.getPasteData(e); - - rowData = this.pasteParser.call(this, data); - - if(rowData){ - e.preventDefault(); - - if(this.table.modExists("mutator")){ - rowData = this.mutateData(rowData); - } - - rows = this.pasteAction.call(this, rowData); - - this.dispatchExternal("clipboardPasted", data, rowData, rows); - }else { - this.dispatchExternal("clipboardPasteError", data); - } - } - } - - mutateData(data){ - var output = []; - - if(Array.isArray(data)){ - data.forEach((row) => { - output.push(this.table.modules.mutator.transformRow(row, "clipboard")); - }); - }else { - output = data; - } - - return output; - } - - - checkPasteOrigin(e){ - var valid = true; - var blocked = this.confirm("clipboard-paste", [e]); - - if(blocked || !["DIV", "SPAN"].includes(e.target.tagName)){ - valid = false; - } - - return valid; - } - - getPasteData(e){ - var data; - - if (window.clipboardData && window.clipboardData.getData) { - data = window.clipboardData.getData('Text'); - } else if (e.clipboardData && e.clipboardData.getData) { - data = e.clipboardData.getData('text/plain'); - } else if (e.originalEvent && e.originalEvent.clipboardData.getData) { - data = e.originalEvent.clipboardData.getData('text/plain'); - } - - return data; - } - } - - Clipboard.moduleName = "clipboard"; - - //load defaults - Clipboard.pasteActions = defaultPasteActions; - Clipboard.pasteParsers = defaultPasteParsers; - - class CalcComponent{ - constructor (row){ - this._row = row; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._row.table.componentFunctionBinder.handle("row", target._row, name); - } - } - }); - } - - getData(transform){ - return this._row.getData(transform); - } - - getElement(){ - return this._row.getElement(); - } - - getTable(){ - return this._row.table; - } - - getCells(){ - var cells = []; - - this._row.getCells().forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - getCell(column){ - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; - } - - _getSelf(){ - return this._row; - } - } - - var defaultCalculations = { - "avg":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2; - - if(values.length){ - output = values.reduce(function(sum, value){ - return Number(sum) + Number(value); - }); - - output = output / values.length; - - output = precision !== false ? output.toFixed(precision) : output; - } - - return parseFloat(output).toString(); - }, - "max":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value > output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "min":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value < output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "sum":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if(values.length){ - values.forEach(function(value){ - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - output = values.reduce(function(sum, value){ - return String(sum) + String(value); - }); - } - - return output; - }, - "count":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - values.forEach(function(value){ - if(value){ - output ++; - } - }); - } - - return output; - }, - "unique":function(values, data, calcParams){ - var unique = values.filter((value, index) => { - return (values || value === 0) && values.indexOf(value) === index; - }); - - return unique.length; - }, - }; - - class ColumnCalcs extends Module{ - - constructor(table){ - super(table); - - this.topCalcs = []; - this.botCalcs = []; - this.genColumn = false; - this.topElement = this.createElement(); - this.botElement = this.createElement(); - this.topRow = false; - this.botRow = false; - this.topInitialized = false; - this.botInitialized = false; - - this.blocked = false; - this.recalcAfterBlock = false; - - this.registerTableOption("columnCalcs", true); - - this.registerColumnOption("topCalc"); - this.registerColumnOption("topCalcParams"); - this.registerColumnOption("topCalcFormatter"); - this.registerColumnOption("topCalcFormatterParams"); - this.registerColumnOption("bottomCalc"); - this.registerColumnOption("bottomCalcParams"); - this.registerColumnOption("bottomCalcFormatter"); - this.registerColumnOption("bottomCalcFormatterParams"); - } - - createElement (){ - var el = document.createElement("div"); - el.classList.add("tabulator-calcs-holder"); - return el; - } - - initialize(){ - this.genColumn = new Column({field:"value"}, this); - - this.subscribe("cell-value-changed", this.cellValueChanged.bind(this)); - this.subscribe("column-init", this.initializeColumnCheck.bind(this)); - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); - this.subscribe("row-added", this.rowsUpdated.bind(this)); - this.subscribe("column-moved", this.recalcActiveRows.bind(this)); - this.subscribe("column-add", this.recalcActiveRows.bind(this)); - this.subscribe("data-refreshed", this.recalcActiveRowsRefresh.bind(this)); - this.subscribe("table-redraw", this.tableRedraw.bind(this)); - this.subscribe("rows-visible", this.visibleRows.bind(this)); - this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this)); - - this.subscribe("redraw-blocked", this.blockRedraw.bind(this)); - this.subscribe("redraw-restored", this.restoreRedraw.bind(this)); - - this.subscribe("table-redrawing", this.resizeHolderWidth.bind(this)); - this.subscribe("column-resized", this.resizeHolderWidth.bind(this)); - this.subscribe("column-show", this.resizeHolderWidth.bind(this)); - this.subscribe("column-hide", this.resizeHolderWidth.bind(this)); - - this.registerTableFunction("getCalcResults", this.getResults.bind(this)); - this.registerTableFunction("recalc", this.userRecalc.bind(this)); - - - this.resizeHolderWidth(); - } - - resizeHolderWidth(){ - this.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + "px"; - } - - - tableRedraw(force){ - this.recalc(this.table.rowManager.activeRows); - - if(force){ - this.redraw(); - } - } - - blockRedraw(){ - this.blocked = true; - this.recalcAfterBlock = false; - } - - - restoreRedraw(){ - this.blocked = false; - - if(this.recalcAfterBlock){ - this.recalcAfterBlock = false; - this.recalcActiveRowsRefresh(); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - userRecalc(){ - this.recalc(this.table.rowManager.activeRows); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - blockCheck(){ - if(this.blocked){ - this.recalcAfterBlock = true; - } - - return this.blocked; - } - - visibleRows(viewable, rows){ - if(this.topRow){ - rows.unshift(this.topRow); - } - - if(this.botRow){ - rows.push(this.botRow); - } - - return rows; - } - - rowsUpdated(row){ - if(this.table.options.groupBy){ - this.recalcRowGroup(row); - }else { - this.recalcActiveRows(); - } - } - - recalcActiveRowsRefresh(){ - if(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){ - this.recalcAll(); - }else { - this.recalcActiveRows(); - } - } - - recalcActiveRows(){ - this.recalc(this.table.rowManager.activeRows); - } - - cellValueChanged(cell){ - if(cell.column.definition.topCalc || cell.column.definition.bottomCalc){ - if(this.table.options.groupBy){ - if(this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both"){ - this.recalcActiveRows(); - } - - if(this.table.options.columnCalcs != "table"){ - this.recalcRowGroup(cell.row); - } - }else { - this.recalcActiveRows(); - } - } - } - - initializeColumnCheck(column){ - if(column.definition.topCalc || column.definition.bottomCalc){ - this.initializeColumn(column); - } - } - - //initialize column calcs - initializeColumn(column){ - var def = column.definition; - - var config = { - topCalcParams:def.topCalcParams || {}, - botCalcParams:def.bottomCalcParams || {}, - }; - - if(def.topCalc){ - - switch(typeof def.topCalc){ - case "string": - if(ColumnCalcs.calculations[def.topCalc]){ - config.topCalc = ColumnCalcs.calculations[def.topCalc]; - }else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc); - } - break; - - case "function": - config.topCalc = def.topCalc; - break; - - } - - if(config.topCalc){ - column.modules.columnCalcs = config; - this.topCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeTopRow(); - } - } - - } - - if(def.bottomCalc){ - switch(typeof def.bottomCalc){ - case "string": - if(ColumnCalcs.calculations[def.bottomCalc]){ - config.botCalc = ColumnCalcs.calculations[def.bottomCalc]; - }else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc); - } - break; - - case "function": - config.botCalc = def.bottomCalc; - break; - - } - - if(config.botCalc){ - column.modules.columnCalcs = config; - this.botCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeBottomRow(); - } - } - } - - } - - //dummy functions to handle being mock column manager - registerColumnField(){} - - removeCalcs(){ - var changed = false; - - if(this.topInitialized){ - this.topInitialized = false; - this.topElement.parentNode.removeChild(this.topElement); - changed = true; - } - - if(this.botInitialized){ - this.botInitialized = false; - this.footerRemove(this.botElement); - changed = true; - } - - if(changed){ - this.table.rowManager.adjustTableSize(); - } - } - - reinitializeCalcs(){ - if(this.topCalcs.length){ - this.initializeTopRow(); - } - - if(this.botCalcs.length){ - this.initializeBottomRow(); - } - } - - initializeTopRow(){ - var fragment = document.createDocumentFragment(); - - if(!this.topInitialized){ - - fragment.appendChild(document.createElement("br")); - fragment.appendChild(this.topElement); - - this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling); - this.topInitialized = true; - } - } - - initializeBottomRow(){ - if(!this.botInitialized){ - this.footerPrepend(this.botElement); - this.botInitialized = true; - } - } - - scrollHorizontal(left){ - if(this.botInitialized && this.botRow){ - this.botElement.scrollLeft = left; - } - } - - recalc(rows){ - var data, row; - - if(!this.blockCheck()){ - if(this.topInitialized || this.botInitialized){ - data = this.rowsToData(rows); - - if(this.topInitialized){ - if(this.topRow){ - this.topRow.deleteCells(); - } - - row = this.generateRow("top", data); - this.topRow = row; - while(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild); - this.topElement.appendChild(row.getElement()); - row.initialize(true); - } - - if(this.botInitialized){ - if(this.botRow){ - this.botRow.deleteCells(); - } - - row = this.generateRow("bottom", data); - this.botRow = row; - while(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild); - this.botElement.appendChild(row.getElement()); - row.initialize(true); - } - - this.table.rowManager.adjustTableSize(); - - //set resizable handles - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layout(); - } - } - } - } - - recalcRowGroup(row){ - this.recalcGroup(this.table.modules.groupRows.getRowGroup(row)); - } - - recalcAll(){ - if(this.topCalcs.length || this.botCalcs.length){ - if(this.table.options.columnCalcs !== "group"){ - this.recalcActiveRows(); - } - - if(this.table.options.groupBy && this.table.options.columnCalcs !== "table"){ - - var groups = this.table.modules.groupRows.getChildGroups(); - - groups.forEach((group) => { - this.recalcGroup(group); - }); - } - } - } - - recalcGroup(group){ - var data, rowData; - - if(!this.blockCheck()){ - if(group){ - if(group.calcs){ - if(group.calcs.bottom){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("bottom", data); - - group.calcs.bottom.updateData(rowData); - group.calcs.bottom.reinitialize(); - } - - if(group.calcs.top){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("top", data); - - group.calcs.top.updateData(rowData); - group.calcs.top.reinitialize(); - } - } - } - } - } - - //generate top stats row - generateTopRow(rows){ - return this.generateRow("top", this.rowsToData(rows)); - } - //generate bottom stats row - generateBottomRow(rows){ - return this.generateRow("bottom", this.rowsToData(rows)); - } - - rowsToData(rows){ - var data = []; - - rows.forEach((row) => { - data.push(row.getData()); - - if(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){ - if(row.modules.dataTree && row.modules.dataTree.open){ - var children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row)); - data = data.concat(children); - } - } - }); - - return data; - } - - //generate stats row - generateRow(pos, data){ - var rowData = this.generateRowData(pos, data), - row; - - if(this.table.modExists("mutator")){ - this.table.modules.mutator.disable(); - } - - row = new Row(rowData, this, "calc"); - - if(this.table.modExists("mutator")){ - this.table.modules.mutator.enable(); - } - - row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos); - - row.component = false; - - row.getComponent = () => { - if(!row.component){ - row.component = new CalcComponent(row); - } - - return row.component; - }; - - row.generateCells = () => { - - var cells = []; - - this.table.columnManager.columnsByIndex.forEach((column) => { - - //set field name of mock column - this.genColumn.setField(column.getField()); - this.genColumn.hozAlign = column.hozAlign; - - if(column.definition[pos + "CalcFormatter"] && this.table.modExists("format")){ - this.genColumn.modules.format = { - formatter: this.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]), - params: column.definition[pos + "CalcFormatterParams"] || {}, - }; - }else { - this.genColumn.modules.format = { - formatter: this.table.modules.format.getFormatter("plaintext"), - params:{} - }; - } - - //ensure css class definition is replicated to calculation cell - this.genColumn.definition.cssClass = column.definition.cssClass; - - //generate cell and assign to correct column - var cell = new Cell(this.genColumn, row); - cell.getElement(); - cell.column = column; - cell.setWidth(); - - column.cells.push(cell); - cells.push(cell); - - if(!column.visible){ - cell.hide(); - } - }); - - row.cells = cells; - }; - - return row; - } - - //generate stats row - generateRowData(pos, data){ - var rowData = {}, - calcs = pos == "top" ? this.topCalcs : this.botCalcs, - type = pos == "top" ? "topCalc" : "botCalc", - params, paramKey; - - calcs.forEach(function(column){ - var values = []; - - if(column.modules.columnCalcs && column.modules.columnCalcs[type]){ - data.forEach(function(item){ - values.push(column.getFieldValue(item)); - }); - - paramKey = type + "Params"; - params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey]; - - column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params)); - } - }); - - return rowData; - } - - hasTopCalcs(){ - return !!(this.topCalcs.length); - } - - hasBottomCalcs(){ - return !!(this.botCalcs.length); - } - - //handle table redraw - redraw(){ - if(this.topRow){ - this.topRow.normalizeHeight(true); - } - if(this.botRow){ - this.botRow.normalizeHeight(true); - } - } - - //return the calculated - getResults(){ - var results = {}, - groups; - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - groups = this.table.modules.groupRows.getGroups(true); - - groups.forEach((group) => { - results[group.getKey()] = this.getGroupResults(group); - }); - }else { - results = { - top: this.topRow ? this.topRow.getData() : {}, - bottom: this.botRow ? this.botRow.getData() : {}, - }; - } - - return results; - } - - //get results from a group - getGroupResults(group){ - var groupObj = group._getSelf(), - subGroups = group.getSubGroups(), - subGroupResults = {}, - results = {}; - - subGroups.forEach((subgroup) => { - subGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup); - }); - - results = { - top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {}, - bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {}, - groups: subGroupResults, - }; - - return results; - } - - adjustForScrollbar(width){ - if(this.botRow){ - if(this.table.rtl){ - this.botElement.style.paddingLeft = width + "px"; - }else { - this.botElement.style.paddingRight = width + "px"; - } - } - } - } - - ColumnCalcs.moduleName = "columnCalcs"; - - //load defaults - ColumnCalcs.calculations = defaultCalculations; - - class DataTree extends Module{ - - constructor(table){ - super(table); - - this.indent = 10; - this.field = ""; - this.collapseEl = null; - this.expandEl = null; - this.branchEl = null; - this.elementField = false; - - this.startOpen = function(){}; - - this.registerTableOption("dataTree", false); //enable data tree - this.registerTableOption("dataTreeFilter", true); //filter child rows - this.registerTableOption("dataTreeSort", true); //sort child rows - this.registerTableOption("dataTreeElementColumn", false); - this.registerTableOption("dataTreeBranchElement", true);//show data tree branch element - this.registerTableOption("dataTreeChildIndent", 9); //data tree child indent in px - this.registerTableOption("dataTreeChildField", "_children");//data tre column field to look for child rows - this.registerTableOption("dataTreeCollapseElement", false);//data tree row collapse element - this.registerTableOption("dataTreeExpandElement", false);//data tree row expand element - this.registerTableOption("dataTreeStartExpanded", false); - this.registerTableOption("dataTreeChildColumnCalcs", false);//include visible data tree rows in column calculations - this.registerTableOption("dataTreeSelectPropagate", false);//selecting a parent row selects its children - - //register component functions - this.registerComponentFunction("row", "treeCollapse", this.collapseRow.bind(this)); - this.registerComponentFunction("row", "treeExpand", this.expandRow.bind(this)); - this.registerComponentFunction("row", "treeToggle", this.toggleRow.bind(this)); - this.registerComponentFunction("row", "getTreeParent", this.getTreeParent.bind(this)); - this.registerComponentFunction("row", "getTreeChildren", this.getRowChildren.bind(this)); - this.registerComponentFunction("row", "addTreeChild", this.addTreeChildRow.bind(this)); - this.registerComponentFunction("row", "isTreeExpanded", this.isRowExpanded.bind(this)); - } - - initialize(){ - if(this.table.options.dataTree){ - var dummyEl = null, - options = this.table.options; - - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - - if(this.options("movableRows")){ - console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"); - } - - if(options.dataTreeBranchElement){ - - if(options.dataTreeBranchElement === true){ - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - }else { - if(typeof options.dataTreeBranchElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; - }else { - this.branchEl = options.dataTreeBranchElement; - } - } - }else { - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch-empty"); - } - - if(options.dataTreeCollapseElement){ - if(typeof options.dataTreeCollapseElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; - }else { - this.collapseEl = options.dataTreeCollapseElement; - } - }else { - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.tabIndex = 0; - this.collapseEl.innerHTML = "
    "; - } - - if(options.dataTreeExpandElement){ - if(typeof options.dataTreeExpandElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; - }else { - this.expandEl = options.dataTreeExpandElement; - } - }else { - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.tabIndex = 0; - this.expandEl.innerHTML = "
    "; - } - - - switch(typeof options.dataTreeStartExpanded){ - case "boolean": - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded; - }; - break; - - case "function": - this.startOpen = options.dataTreeStartExpanded; - break; - - default: - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded[index]; - }; - break; - } - - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-layout-after", this.layoutRow.bind(this)); - this.subscribe("row-deleted", this.rowDelete.bind(this),0); - this.subscribe("row-data-changed", this.rowDataChanged.bind(this), 10); - this.subscribe("cell-value-updated", this.cellValueChanged.bind(this)); - this.subscribe("edit-cancelled", this.cellValueChanged.bind(this)); - this.subscribe("column-moving-rows", this.columnMoving.bind(this)); - this.subscribe("table-built", this.initializeElementField.bind(this)); - this.subscribe("table-redrawing", this.tableRedrawing.bind(this)); - - this.registerDisplayHandler(this.getRows.bind(this), 30); - } - } - - tableRedrawing(force){ - var rows; - - if(force){ - rows = this.table.rowManager.getRows(); - - rows.forEach((row) => { - this.reinitializeRowChildren(row); - }); - } - } - - initializeElementField(){ - var firstCol = this.table.columnManager.getFirstVisibleColumn(); - - this.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false); - } - - getRowChildren(row){ - return this.getTreeChildren(row, true); - } - - columnMoving(){ - var rows = []; - - this.table.rowManager.rows.forEach((row) => { - rows = rows.concat(this.getTreeChildren(row, false, true)); - }); - - return rows; - } - - rowDataChanged(row, visible, updatedData){ - if(this.redrawNeeded(updatedData)){ - this.initializeRow(row); - - if(visible){ - this.layoutRow(row); - this.refreshData(true); - } - } - } - - cellValueChanged(cell){ - var field = cell.column.getField(); - - if(field === this.elementField){ - this.layoutRow(cell.row); - } - } - - initializeRow(row){ - var childArray = row.getData()[this.field]; - var isArray = Array.isArray(childArray); - - var children = isArray || (!isArray && typeof childArray === "object" && childArray !== null); - - if(!children && row.modules.dataTree && row.modules.dataTree.branchEl){ - row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl); - } - - if(!children && row.modules.dataTree && row.modules.dataTree.controlEl){ - row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl); - } - - row.modules.dataTree = { - index: row.modules.dataTree ? row.modules.dataTree.index : 0, - open: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false, - controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false, - branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false, - parent: row.modules.dataTree ? row.modules.dataTree.parent : false, - children:children, - }; - } - - reinitializeRowChildren(row){ - var children = this.getTreeChildren(row, false, true); - - children.forEach(function(child){ - child.reinitialize(true); - }); - } - - layoutRow(row){ - var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0], - el = cell.getElement(), - config = row.modules.dataTree; - - if(config.branchEl){ - if(config.branchEl.parentNode){ - config.branchEl.parentNode.removeChild(config.branchEl); - } - config.branchEl = false; - } - - if(config.controlEl){ - if(config.controlEl.parentNode){ - config.controlEl.parentNode.removeChild(config.controlEl); - } - config.controlEl = false; - } - - this.generateControlElement(row, el); - - row.getElement().classList.add("tabulator-tree-level-" + config.index); - - if(config.index){ - if(this.branchEl){ - config.branchEl = this.branchEl.cloneNode(true); - el.insertBefore(config.branchEl, el.firstChild); - - if(this.table.rtl){ - config.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + "px"; - }else { - config.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + "px"; - } - }else { - - if(this.table.rtl){ - el.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + "px"; - }else { - el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + "px"; - } - } - } - } - - generateControlElement(row, el){ - var config = row.modules.dataTree, - oldControl = config.controlEl; - - el = el || row.getCells()[0].getElement(); - - if(config.children !== false){ - - if(config.open){ - config.controlEl = this.collapseEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.collapseRow(row); - }); - }else { - config.controlEl = this.expandEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.expandRow(row); - }); - } - - config.controlEl.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - if(oldControl && oldControl.parentNode === el){ - oldControl.parentNode.replaceChild(config.controlEl,oldControl); - }else { - el.insertBefore(config.controlEl, el.firstChild); - } - } - } - - getRows(rows){ - var output = []; - - rows.forEach((row, i) => { - var config, children; - - output.push(row); - - if(row instanceof Row){ - - row.create(); - - config = row.modules.dataTree; - - if(!config.index && config.children !== false){ - children = this.getChildren(row); - - children.forEach((child) => { - child.create(); - output.push(child); - }); - } - } - }); - - return output; - } - - getChildren(row, allChildren){ - var config = row.modules.dataTree, - children = [], - output = []; - - if(config.children !== false && (config.open || allChildren)){ - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - if(this.table.modExists("filter") && this.table.options.dataTreeFilter){ - children = this.table.modules.filter.filter(config.children); - }else { - children = config.children; - } - - if(this.table.modExists("sort") && this.table.options.dataTreeSort){ - this.table.modules.sort.sort(children); - } - - children.forEach((child) => { - output.push(child); - - var subChildren = this.getChildren(child); - - subChildren.forEach((sub) => { - output.push(sub); - }); - }); - } - - return output; - } - - generateChildren(row){ - var children = []; - - var childArray = row.getData()[this.field]; - - if(!Array.isArray(childArray)){ - childArray = [childArray]; - } - - childArray.forEach((childData) => { - var childRow = new Row(childData || {}, this.table.rowManager); - - childRow.create(); - - childRow.modules.dataTree.index = row.modules.dataTree.index + 1; - childRow.modules.dataTree.parent = row; - - if(childRow.modules.dataTree.children){ - childRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); - } - children.push(childRow); - }); - - return children; - } - - expandRow(row, silent){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = true; - - row.reinitialize(); - - this.refreshData(true); - - this.dispatchExternal("dataTreeRowExpanded", row.getComponent(), row.modules.dataTree.index); - } - } - - collapseRow(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = false; - - row.reinitialize(); - - this.refreshData(true); - - this.dispatchExternal("dataTreeRowCollapsed", row.getComponent(), row.modules.dataTree.index); - } - } - - toggleRow(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - if(config.open){ - this.collapseRow(row); - }else { - this.expandRow(row); - } - } - } - - isRowExpanded(row){ - return row.modules.dataTree.open; - } - - getTreeParent(row){ - return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false; - } - - getTreeParentRoot(row){ - return row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row; - } - - getFilteredTreeChildren(row){ - var config = row.modules.dataTree, - output = [], children; - - if(config.children){ - - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - if(this.table.modExists("filter") && this.table.options.dataTreeFilter){ - children = this.table.modules.filter.filter(config.children); - }else { - children = config.children; - } - - children.forEach((childRow) => { - if(childRow instanceof Row){ - output.push(childRow); - } - }); - } - - return output; - } - - rowDelete(row){ - var parent = row.modules.dataTree.parent, - childIndex; - - if(parent){ - childIndex = this.findChildIndex(row, parent); - - if(childIndex !== false){ - parent.data[this.field].splice(childIndex, 1); - } - - if(!parent.data[this.field].length){ - delete parent.data[this.field]; - } - - this.initializeRow(parent); - this.layoutRow(parent); - } - - this.refreshData(true); - } - - addTreeChildRow(row, data, top, index){ - var childIndex = false; - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(!Array.isArray(row.data[this.field])){ - row.data[this.field] = []; - - row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index); - } - - if(typeof index !== "undefined"){ - childIndex = this.findChildIndex(index, row); - - if(childIndex !== false){ - row.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data); - } - } - - if(childIndex === false){ - if(top){ - row.data[this.field].unshift(data); - }else { - row.data[this.field].push(data); - } - } - - this.initializeRow(row); - this.layoutRow(row); - - this.refreshData(true); - } - - findChildIndex(subject, parent){ - var match = false; - - if(typeof subject == "object"){ - - if(subject instanceof Row){ - //subject is row element - match = subject.data; - }else if(subject instanceof RowComponent){ - //subject is public row component - match = subject._getSelf().data; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - if(parent.modules.dataTree){ - match = parent.modules.dataTree.children.find((childRow) => { - return childRow instanceof Row ? childRow.element === subject : false; - }); - - if(match){ - match = match.data; - } - } - }else if(subject === null){ - match = false; - } - - }else if(typeof subject == "undefined"){ - match = false; - }else { - //subject should be treated as the index of the row - match = parent.data[this.field].find((row) => { - return row.data[this.table.options.index] == subject; - }); - } - - if(match){ - - if(Array.isArray(parent.data[this.field])){ - match = parent.data[this.field].indexOf(match); - } - - if(match == -1){ - match = false; - } - } - - //catch all for any other type of input - - return match; - } - - getTreeChildren(row, component, recurse){ - var config = row.modules.dataTree, - output = []; - - if(config && config.children){ - - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - config.children.forEach((childRow) => { - if(childRow instanceof Row){ - output.push(component ? childRow.getComponent() : childRow); - - if(recurse){ - output = output.concat(this.getTreeChildren(childRow, component, recurse)); - } - } - }); - } - - return output; - } - - getChildField(){ - return this.field; - } - - redrawNeeded(data){ - return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false); - } - } - - DataTree.moduleName = "dataTree"; - - function csv(list, options = {}, setFileContents){ - var delimiter = options.delimiter ? options.delimiter : ",", - fileContents = [], - headers = []; - - list.forEach((row) => { - var item = []; - - switch(row.type){ - case "group": - console.warn("Download Warning - CSV downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - CSV downloader cannot process column calculations"); - break; - - case "header": - row.columns.forEach((col, i) => { - if(col && col.depth === 1){ - headers[i] = typeof col.value == "undefined" || col.value === null ? "" : ('"' + String(col.value).split('"').join('""') + '"'); - } - }); - break; - - case "row": - row.columns.forEach((col) => { - - if(col){ - - switch(typeof col.value){ - case "object": - col.value = col.value !== null ? JSON.stringify(col.value) : ""; - break; - - case "undefined": - col.value = ""; - break; - } - - item.push('"' + String(col.value).split('"').join('""') + '"'); - } - }); - - fileContents.push(item.join(delimiter)); - break; - } - }); - - if(headers.length){ - fileContents.unshift(headers.join(delimiter)); - } - - fileContents = fileContents.join("\n"); - - if(options.bom){ - fileContents = "\ufeff" + fileContents; - } - - setFileContents(fileContents, "text/csv"); - } - - function json(list, options, setFileContents){ - var fileContents = []; - - list.forEach((row) => { - var item = {}; - - switch(row.type){ - case "header": - break; - - case "group": - console.warn("Download Warning - JSON downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - JSON downloader cannot process column calculations"); - break; - - case "row": - row.columns.forEach((col) => { - if(col){ - item[col.component.getTitleDownload() || col.component.getField()] = col.value; - } - }); - - fileContents.push(item); - break; - } - }); - - fileContents = JSON.stringify(fileContents, null, '\t'); - - setFileContents(fileContents, "application/json"); - } - - function pdf(list, options = {}, setFileContents){ - var header = [], - body = [], - autoTableParams = {}, - rowGroupStyles = options.rowGroupStyles || { - fontStyle: "bold", - fontSize: 12, - cellPadding: 6, - fillColor: 220, - }, - rowCalcStyles = options.rowCalcStyles || { - fontStyle: "bold", - fontSize: 10, - cellPadding: 4, - fillColor: 232, - }, - jsPDFParams = options.jsPDF || {}, - title = options.title ? options.title : ""; - - if(!jsPDFParams.orientation){ - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if(!jsPDFParams.unit){ - jsPDFParams.unit = "pt"; - } - - //parse row list - list.forEach((row) => { - switch(row.type){ - case "header": - header.push(parseRow(row)); - break; - - case "group": - body.push(parseRow(row, rowGroupStyles)); - break; - - case "calc": - body.push(parseRow(row, rowCalcStyles)); - break; - - case "row": - body.push(parseRow(row)); - break; - } - }); - - function parseRow(row, styles){ - var rowData = []; - - row.columns.forEach((col) =>{ - var cell; - - if(col){ - switch(typeof col.value){ - case "object": - col.value = col.value !== null ? JSON.stringify(col.value) : ""; - break; - - case "undefined": - col.value = ""; - break; - } - - cell = { - content:col.value, - colSpan:col.width, - rowSpan:col.height, - }; - - if(styles){ - cell.styles = styles; - } - - rowData.push(cell); - } - }); - - return rowData; - } - - - //configure PDF - var doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if(options.autoTable){ - if(typeof options.autoTable === "function"){ - autoTableParams = options.autoTable(doc) || {}; - }else { - autoTableParams = options.autoTable; - } - } - - if(title){ - autoTableParams.didDrawPage = function(data) { - doc.text(title, 40, 30); - }; - } - - autoTableParams.head = header; - autoTableParams.body = body; - - doc.autoTable(autoTableParams); - - if(options.documentProcessing){ - options.documentProcessing(doc); - } - - setFileContents(doc.output("arraybuffer"), "application/pdf"); - } - - function xlsx(list, options, setFileContents){ - var self = this, - sheetName = options.sheetName || "Sheet1", - workbook = XLSX.utils.book_new(), - tableFeatures = new CoreFeature(this), - compression = 'compress' in options ? options.compress : true, - writeOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression}, - output; - - writeOptions.type = 'binary'; - - workbook.SheetNames = []; - workbook.Sheets = {}; - - function generateSheet(){ - var rows = [], - merges = [], - worksheet = {}, - range = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }}; - - //parse row list - list.forEach((row, i) => { - var rowData = []; - - row.columns.forEach(function(col, j){ - - if(col){ - rowData.push(!(col.value instanceof Date) && typeof col.value === "object" ? JSON.stringify(col.value) : col.value); - - if(col.width > 1 || col.height > -1){ - if(col.height > 1 || col.width > 1){ - merges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}}); - } - } - }else { - rowData.push(""); - } - }); - - rows.push(rowData); - }); - - //convert rows to worksheet - XLSX.utils.sheet_add_aoa(worksheet, rows); - - worksheet['!ref'] = XLSX.utils.encode_range(range); - - if(merges.length){ - worksheet["!merges"] = merges; - } - - return worksheet; - } - - if(options.sheetOnly){ - setFileContents(generateSheet()); - return; - } - - if(options.sheets){ - for(var sheet in options.sheets){ - - if(options.sheets[sheet] === true){ - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - }else { - - workbook.SheetNames.push(sheet); - - tableFeatures.commsSend(options.sheets[sheet], "download", "intercept",{ - type:"xlsx", - options:{sheetOnly:true}, - active:self.active, - intercept:function(data){ - workbook.Sheets[sheet] = data; - } - }); - } - } - }else { - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - if(options.documentProcessing){ - workbook = options.documentProcessing(workbook); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; - return buf; - } - - output = XLSX.write(workbook, writeOptions); - - setFileContents(s2ab(output), "application/octet-stream"); - } - - function html(list, options, setFileContents){ - if(this.modExists("export", true)){ - setFileContents(this.modules.export.generateHTMLTable(list), "text/html"); - } - } - - function jsonLines (list, options, setFileContents) { - const fileContents = []; - - list.forEach((row) => { - const item = {}; - - switch (row.type) { - case "header": - break; - - case "group": - console.warn("Download Warning - JSON downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - JSON downloader cannot process column calculations"); - break; - - case "row": - row.columns.forEach((col) => { - if (col) { - item[col.component.getTitleDownload() || col.component.getField()] = col.value; - } - }); - - fileContents.push(JSON.stringify(item)); - break; - } - }); - - setFileContents(fileContents.join("\n"), "application/x-ndjson"); - } - - var defaultDownloaders = { - csv:csv, - json:json, - jsonLines:jsonLines, - pdf:pdf, - xlsx:xlsx, - html:html, - }; - - class Download extends Module{ - - constructor(table){ - super(table); - - this.registerTableOption("downloadEncoder", function(data, mimeType){ - return new Blob([data],{type:mimeType}); - }); //function to manipulate download data - this.registerTableOption("downloadReady", undefined); //warn of function deprecation - this.registerTableOption("downloadConfig", {}); //download config - this.registerTableOption("downloadRowRange", "active"); //restrict download to active rows only - - this.registerColumnOption("download"); - this.registerColumnOption("titleDownload"); - } - - initialize(){ - this.deprecatedOptionsCheck(); - - this.registerTableFunction("download", this.download.bind(this)); - this.registerTableFunction("downloadToTab", this.downloadToTab.bind(this)); - } - - deprecatedOptionsCheck(){ - this.deprecationCheck("downloadReady", "downloadEncoder"); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - downloadToTab(type, filename, options, active){ - this.download(type, filename, options, active, true); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - //trigger file download - download(type, filename, options, range, interceptCallback){ - var downloadFunc = false; - - function buildLink(data, mime){ - if(interceptCallback){ - if(interceptCallback === true){ - this.triggerDownload(data, mime, type, filename, true); - }else { - interceptCallback(data); - } - - }else { - this.triggerDownload(data, mime, type, filename); - } - } - - if(typeof type == "function"){ - downloadFunc = type; - }else { - if(Download.downloaders[type]){ - downloadFunc = Download.downloaders[type]; - }else { - console.warn("Download Error - No such download type found: ", type); - } - } - - if(downloadFunc){ - var list = this.generateExportList(range); - - downloadFunc.call(this.table, list , options || {}, buildLink.bind(this)); - } - } - - generateExportList(range){ - var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download"); - - //assign group header formatter - var groupHeader = this.table.options.groupHeaderDownload; - - if(groupHeader && !Array.isArray(groupHeader)){ - groupHeader = [groupHeader]; - } - - list.forEach((row) => { - var group; - - if(row.type === "group"){ - group = row.columns[0]; - - if(groupHeader && groupHeader[row.indent]){ - group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - }); - - return list; - } - - triggerDownload(data, mime, type, filename, newTab){ - var element = document.createElement('a'), - blob = this.table.options.downloadEncoder(data, mime); - - if(blob){ - if(newTab){ - window.open(window.URL.createObjectURL(blob)); - }else { - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - if(navigator.msSaveOrOpenBlob){ - navigator.msSaveOrOpenBlob(blob, filename); - }else { - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - } - - this.dispatchExternal("downloadComplete"); - } - } - - commsReceived(table, action, data){ - switch(action){ - case "intercept": - this.download(data.type, "", data.options, data.active, data.intercept); - break; - } - } - } - - Download.moduleName = "download"; - - //load defaults - Download.downloaders = defaultDownloaders; - - function maskInput(el, options){ - var mask = options.mask, - maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A", - maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9", - maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*"; - - function fillSymbols(index){ - var symbol = mask[index]; - if(typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){ - el.value = el.value + "" + symbol; - fillSymbols(index+1); - } - } - - el.addEventListener("keydown", (e) => { - var index = el.value.length, - char = e.key; - - if(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){ - if(index >= mask.length){ - e.preventDefault(); - e.stopPropagation(); - return false; - }else { - switch(mask[index]){ - case maskLetter: - if(char.toUpperCase() == char.toLowerCase()){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - break; - - case maskNumber: - if(isNaN(char)){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - break; - - case maskWildcard: - break; - - default: - if(char !== mask[index]){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - } - } - } - - return; - }); - - el.addEventListener("keyup", (e) => { - if(e.keyCode > 46){ - if(options.maskAutoFill){ - fillSymbols(el.value.length); - } - } - }); - - - if(!el.placeholder){ - el.placeholder = mask; - } - - if(options.maskAutoFill){ - fillSymbols(el.value.length); - } - } - - //input element - function input(cell, onRendered, success, cancel, editorParams){ - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", editorParams.search ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = typeof cellValue !== "undefined" ? cellValue : ""; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(e){ - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value !== cellValue){ - if(success(input.value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; - } - - //resizable text area element - function textarea(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "hybrid", - value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""), - input = document.createElement("textarea"), - scrollHeight = 0; - - //create and style input - input.style.display = "block"; - input.style.padding = "2px"; - input.style.height = "100%"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.style.whiteSpace = "pre-wrap"; - input.style.resize = "none"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - input.scrollHeight; - input.style.height = input.scrollHeight + "px"; - cell.getRow().normalizeHeight(); - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(e){ - - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value !== cellValue){ - - if(success(input.value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - - setTimeout(function(){ - cell.getRow().normalizeHeight(); - },300); - }else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - input.addEventListener("keyup", function(){ - - input.style.height = ""; - - var heightNow = input.scrollHeight; - - input.style.height = heightNow + "px"; - - if(heightNow != scrollHeight){ - scrollHeight = heightNow; - cell.getRow().normalizeHeight(); - } - }); - - input.addEventListener("keydown", function(e){ - - switch(e.keyCode){ - - case 13: - if(e.shiftKey && editorParams.shiftEnterSubmit){ - onChange(); - } - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - if(vertNav == "editor" || (vertNav == "hybrid" && input.selectionStart)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - - break; - - case 40: //down arrow - if(vertNav == "editor" || (vertNav == "hybrid" && input.selectionStart !== input.value.length)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; - } - - //input element with type of number - function number(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - input = document.createElement("input"); - - input.setAttribute("type", "number"); - - if(typeof editorParams.max != "undefined"){ - input.setAttribute("max", editorParams.max); - } - - if(typeof editorParams.min != "undefined"){ - input.setAttribute("min", editorParams.min); - } - - if(typeof editorParams.step != "undefined"){ - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - var blurFunc = function(e){ - onChange(); - }; - - onRendered(function () { - if(cell.getType() === "cell"){ - //submit new value on blur - input.removeEventListener("blur", blurFunc); - - input.focus({preventScroll: true}); - input.style.height = "100%"; - - //submit new value on blur - input.addEventListener("blur", blurFunc); - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value !== cellValue){ - if(success(value)){ - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; - } - - //input element with type of number - function range(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "range"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - onRendered(function () { - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - } - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value != cellValue){ - if(success(value)){ - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e){ - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - } - - //input element - function date(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - function convertDate(value){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else { - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - return newDatetime.toFormat("yyyy-MM-dd"); - } - - input.type = "date"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.max){ - input.setAttribute("max", inputFormat ? convertDate(editorParams.max) : editorParams.max); - } - - if(editorParams.min){ - input.setAttribute("min", inputFormat ? convertDate(editorParams.min) : editorParams.min); - } - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - cellValue = convertDate(cellValue); - }else { - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxDate; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxDate = DT.fromFormat(String(value), "yyyy-MM-dd"); - - switch(inputFormat){ - case true: - value = luxDate; - break; - - case "iso": - value = luxDate.toISO(); - break; - - default: - value = luxDate.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; - } - - //input element - function time(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null, - newDatetime; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.type = "time"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - if(DT.isDateTime(cellValue)){ - newDatetime = cellValue; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(cellValue)); - }else { - newDatetime = DT.fromFormat(String(cellValue), inputFormat); - } - - cellValue = newDatetime.toFormat("HH:mm"); - - }else { - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - console.log("val", cellValue); - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() == "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxTime; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxTime = DT.fromFormat(String(value), "hh:mm"); - - switch(inputFormat){ - case true: - value = luxTime; - break; - - case "iso": - value = luxTime.toISO(); - break; - - default: - value = luxTime.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; - } - - //input element - function datetime(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null, - newDatetime; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.type = "datetime-local"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - if(DT.isDateTime(cellValue)){ - newDatetime = cellValue; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(cellValue)); - }else { - newDatetime = DT.fromFormat(String(cellValue), inputFormat); - } - - cellValue = newDatetime.toFormat("yyyy-MM-dd") + "T" + newDatetime.toFormat("HH:mm"); - }else { - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxDateTime; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxDateTime = DT.fromISO(String(value)); - - switch(inputFormat){ - case true: - value = luxDateTime; - break; - - case "iso": - value = luxDateTime.toISO(); - break; - - default: - value = luxDateTime.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; - } - - class Edit{ - constructor(editor, cell, onRendered, success, cancel, editorParams){ - this.edit = editor; - this.table = editor.table; - this.cell = cell; - this.params = this._initializeParams(editorParams); - - this.data = []; - this.displayItems = []; - this.currentItems = []; - this.focusedItem = null; - - this.input = this._createInputElement(); - this.listEl = this._createListElement(); - - this.initialValues = null; - - this.isFilter = cell.getType() === "header"; - - this.filterTimeout = null; - this.filtered = false; - this.typing = false; - - this.values = []; - this.popup = null; - - this.listIteration = 0; - - this.lastAction=""; - this.filterTerm=""; - - this.blurable = true; - - this.actions = { - success:success, - cancel:cancel - }; - - this._deprecatedOptionsCheck(); - this._initializeValue(); - - onRendered(this._onRendered.bind(this)); - } - - _deprecatedOptionsCheck(){ - if(this.params.listItemFormatter){ - this.cell.getTable().deprecationAdvisor.msg("The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.sortValuesList){ - this.cell.getTable().deprecationAdvisor.msg("The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.searchFunc){ - this.cell.getTable().deprecationAdvisor.msg("The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.searchingPlaceholder){ - this.cell.getTable().deprecationAdvisor.msg("The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options"); - } - } - - _initializeValue(){ - var initialValue = this.cell.getValue(); - - if(typeof initialValue === "undefined" && typeof this.params.defaultValue !== "undefined"){ - initialValue = this.params.defaultValue; - } - - this.initialValues = this.params.multiselect ? initialValue : [initialValue]; - - if(this.isFilter){ - this.input.value = this.initialValues ? this.initialValues.join(",") : ""; - this.headerFilterInitialListGen(); - } - } - - _onRendered(){ - var cellEl = this.cell.getElement(); - - function clickStop(e){ - e.stopPropagation(); - } - - if(!this.isFilter){ - this.input.style.height = "100%"; - this.input.focus({preventScroll: true}); - } - - - cellEl.addEventListener("click", clickStop); - - setTimeout(() => { - cellEl.removeEventListener("click", clickStop); - }, 1000); - - this.input.addEventListener("mousedown", this._preventPopupBlur.bind(this)); - } - - _createListElement(){ - var listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-list"); - - listEl.addEventListener("mousedown", this._preventBlur.bind(this)); - listEl.addEventListener("keydown", this._inputKeyDown.bind(this)); - - return listEl; - } - - _setListWidth(){ - var element = this.isFilter ? this.input : this.cell.getElement(); - - this.listEl.style.minWidth = element.offsetWidth + "px"; - - if(this.params.maxWidth){ - if(this.params.maxWidth === true){ - this.listEl.style.maxWidth = element.offsetWidth + "px"; - }else if(typeof this.params.maxWidth === "number"){ - this.listEl.style.maxWidth = this.params.maxWidth + "px"; - }else { - this.listEl.style.maxWidth = this.params.maxWidth; - } - } - - } - - _createInputElement(){ - var attribs = this.params.elementAttributes; - var input = document.createElement("input"); - - input.setAttribute("type", this.params.clearable ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(!this.params.autocomplete){ - input.style.cursor = "default"; - input.style.caretColor = "transparent"; - // input.readOnly = (this.edit.currentCell != false); - } - - if(attribs && typeof attribs == "object"){ - for (let key in attribs){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + attribs["+" + key]); - }else { - input.setAttribute(key, attribs[key]); - } - } - } - - if(this.params.mask){ - maskInput(input, this.params); - } - - this._bindInputEvents(input); - - return input; - } - - _initializeParams(params){ - var valueKeys = ["values", "valuesURL", "valuesLookup"], - valueCheck; - - params = Object.assign({}, params); - - params.verticalNavigation = params.verticalNavigation || "editor"; - params.placeholderLoading = typeof params.placeholderLoading === "undefined" ? "Searching ..." : params.placeholderLoading; - params.placeholderEmpty = typeof params.placeholderEmpty === "undefined" ? "No Results Found" : params.placeholderEmpty; - params.filterDelay = typeof params.filterDelay === "undefined" ? 300 : params.filterDelay; - - params.emptyValue = Object.keys(params).includes("emptyValue") ? params.emptyValue : ""; - - valueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length; - - if(!valueCheck){ - console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"); - }else if(valueCheck > 1){ - console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"); - } - - if(params.autocomplete){ - if(params.multiselect){ - params.multiselect = false; - console.warn("list editor config error - multiselect option is not available when autocomplete is enabled"); - } - }else { - if(params.freetext){ - params.freetext = false; - console.warn("list editor config error - freetext option is only available when autocomplete is enabled"); - } - - if(params.filterFunc){ - params.filterFunc = false; - console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled"); - } - - if(params.filterRemote){ - params.filterRemote = false; - console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled"); - } - - if(params.mask){ - params.mask = false; - console.warn("list editor config error - mask option is only available when autocomplete is enabled"); - } - - if(params.allowEmpty){ - params.allowEmpty = false; - console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled"); - } - - if(params.listOnEmpty){ - params.listOnEmpty = false; - console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"); - } - } - - if(params.filterRemote && !(typeof params.valuesLookup === "function" || params.valuesURL)){ - params.filterRemote = false; - console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source"); - } - return params; - } - ////////////////////////////////////// - ////////// Event Handling //////////// - ////////////////////////////////////// - - _bindInputEvents(input){ - input.addEventListener("focus", this._inputFocus.bind(this)); - input.addEventListener("click", this._inputClick.bind(this)); - input.addEventListener("blur", this._inputBlur.bind(this)); - input.addEventListener("keydown", this._inputKeyDown.bind(this)); - input.addEventListener("search", this._inputSearch.bind(this)); - - if(this.params.autocomplete){ - input.addEventListener("keyup", this._inputKeyUp.bind(this)); - } - } - - - _inputFocus(e){ - this.rebuildOptionsList(); - } - - _filter(){ - if(this.params.filterRemote){ - clearTimeout(this.filterTimeout); - - this.filterTimeout = setTimeout(() => { - this.rebuildOptionsList(); - }, this.params.filterDelay); - }else { - this._filterList(); - } - } - - _inputClick(e){ - e.stopPropagation(); - } - - _inputBlur(e){ - if(this.blurable){ - if(this.popup){ - this.popup.hide(); - }else { - this._resolveValue(true); - } - } - } - - _inputSearch(){ - this._clearChoices(); - } - - _inputKeyDown(e){ - switch(e.keyCode){ - - case 38: //up arrow - this._keyUp(e); - break; - - case 40: //down arrow - this._keyDown(e); - break; - - case 37: //left arrow - case 39: //right arrow - this._keySide(e); - break; - - case 13: //enter - this._keyEnter(); - break; - - case 27: //escape - this._keyEsc(); - break; - - case 36: //home - case 35: //end - this._keyHomeEnd(e); - break; - - case 9: //tab - this._keyTab(e); - break; - - default: - this._keySelectLetter(e); - } - } - - _inputKeyUp(e){ - switch(e.keyCode){ - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: //escape - break; - - default: - this._keyAutoCompLetter(e); - } - } - - _preventPopupBlur(){ - if(this.popup){ - this.popup.blockHide(); - } - - setTimeout(() =>{ - if(this.popup){ - this.popup.restoreHide(); - } - }, 10); - } - - _preventBlur(){ - this.blurable = false; - - setTimeout(() =>{ - this.blurable = true; - }, 10); - } - - ////////////////////////////////////// - //////// Keyboard Navigation ///////// - ////////////////////////////////////// - - _keyTab(e){ - if(this.params.autocomplete && this.lastAction === "typing"){ - this._resolveValue(true); - }else { - if(this.focusedItem){ - this._chooseItem(this.focusedItem, true); - } - } - } - - _keyUp(e){ - var index = this.displayItems.indexOf(this.focusedItem); - - if(this.params.verticalNavigation == "editor" || (this.params.verticalNavigation == "hybrid" && index)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if(index > 0){ - this._focusItem(this.displayItems[index - 1]); - } - } - } - - _keyDown(e){ - var index = this.displayItems.indexOf(this.focusedItem); - - if(this.params.verticalNavigation == "editor" || (this.params.verticalNavigation == "hybrid" && index < this.displayItems.length - 1)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if(index < this.displayItems.length - 1){ - if(index == -1){ - this._focusItem(this.displayItems[0]); - }else { - this._focusItem(this.displayItems[index + 1]); - } - } - } - } - - _keySide(e){ - if(!this.params.autocomplete){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - } - } - - _keyEnter(e){ - if(this.params.autocomplete && this.lastAction === "typing"){ - this._resolveValue(true); - }else { - if(this.focusedItem){ - this._chooseItem(this.focusedItem); - } - } - } - - _keyEsc(e){ - this._cancel(); - } - - _keyHomeEnd(e){ - if(this.params.autocomplete){ - //prevent table navigation while using input element - e.stopImmediatePropagation(); - } - } - - _keySelectLetter(e){ - if(!this.params.autocomplete){ - // if(this.edit.currentCell === false){ - e.preventDefault(); - // } - - if(e.keyCode >= 38 && e.keyCode <= 90){ - this._scrollToValue(e.keyCode); - } - } - } - - _keyAutoCompLetter(e){ - this._filter(); - this.lastAction = "typing"; - this.typing = true; - } - - - _scrollToValue(char){ - clearTimeout(this.filterTimeout); - - var character = String.fromCharCode(char).toLowerCase(); - this.filterTerm += character.toLowerCase(); - - var match = this.displayItems.find((item) => { - return typeof item.label !== "undefined" && item.label.toLowerCase().startsWith(this.filterTerm); - }); - - if(match){ - this._focusItem(match); - } - - this.filterTimeout = setTimeout(() => { - this.filterTerm = ""; - }, 800); - } - - _focusItem(item){ - this.lastAction = "focus"; - - if(this.focusedItem && this.focusedItem.element){ - this.focusedItem.element.classList.remove("focused"); - } - - this.focusedItem = item; - - if(item && item.element){ - item.element.classList.add("focused"); - item.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'}); - } - } - - - ////////////////////////////////////// - /////// Data List Generation ///////// - ////////////////////////////////////// - headerFilterInitialListGen(){ - this._generateOptions(true); - } - - rebuildOptionsList(){ - this._generateOptions() - .then(this._sortOptions.bind(this)) - .then(this._buildList.bind(this)) - .then(this._showList.bind(this)) - .catch((e) => { - if(!Number.isInteger(e)){ - console.error("List generation error", e); - } - }); - } - - _filterList(){ - this._buildList(this._filterOptions()); - this._showList(); - } - - _generateOptions(silent){ - var values = []; - var iteration = ++ this.listIteration; - - this.filtered = false; - - if(this.params.values){ - values = this.params.values; - }else if (this.params.valuesURL){ - values = this._ajaxRequest(this.params.valuesURL, this.input.value); - }else { - if(typeof this.params.valuesLookup === "function"){ - values = this.params.valuesLookup(this.cell, this.input.value); - }else if(this.params.valuesLookup){ - values = this._uniqueColumnValues(this.params.valuesLookupField); - } - } - - if(values instanceof Promise){ - if(!silent){ - this._addPlaceholder(this.params.placeholderLoading); - } - - return values.then() - .then((responseValues) => { - if(this.listIteration === iteration){ - return this._parseList(responseValues); - }else { - return Promise.reject(iteration); - } - }); - }else { - return Promise.resolve(this._parseList(values)); - } - } - - _addPlaceholder(contents){ - var placeholder = document.createElement("div"); - - if(typeof contents === "function"){ - contents = contents(this.cell.getComponent(), this.listEl); - } - - if(contents){ - this._clearList(); - - if(contents instanceof HTMLElement){ - placeholder = contents; - }else { - placeholder.classList.add("tabulator-edit-list-placeholder"); - placeholder.innerHTML = contents; - } - - this.listEl.appendChild(placeholder); - - this._showList(); - } - } - - _ajaxRequest(url, term){ - var params = this.params.filterRemote ? {term:term} : {}; - url = urlBuilder(url, {}, params); - - return fetch(url) - .then((response)=>{ - if(response.ok) { - return response.json() - .catch((error)=>{ - console.warn("List Ajax Load Error - Invalid JSON returned", error); - return Promise.reject(error); - }); - }else { - console.error("List Ajax Load Error - Connection Error: " + response.status, response.statusText); - return Promise.reject(response); - } - }) - .catch((error)=>{ - console.error("List Ajax Load Error - Connection Error: ", error); - return Promise.reject(error); - }); - } - - _uniqueColumnValues(field){ - var output = {}, - data = this.table.getData(this.params.valuesLookup), - column; - - if(field){ - column = this.table.columnManager.getColumnByField(field); - }else { - column = this.cell.getColumn()._getSelf(); - } - - if(column){ - data.forEach((row) => { - var val = column.getFieldValue(row); - - if(val !== null && typeof val !== "undefined" && val !== ""){ - output[val] = true; - } - }); - }else { - console.warn("unable to find matching column to create select lookup list:", field); - output = []; - } - - return Object.keys(output); - } - - - _parseList(inputValues){ - var data = []; - - if(!Array.isArray(inputValues)){ - inputValues = Object.entries(inputValues).map(([key, value]) => { - return { - label:value, - value:key, - }; - }); - } - - inputValues.forEach((value) => { - if(typeof value !== "object"){ - value = { - label:value, - value:value, - }; - } - - this._parseListItem(value, data, 0); - }); - - if(!this.currentItems.length && this.params.freetext){ - this.input.value = this.initialValues; - this.typing = true; - this.lastAction = "typing"; - } - - this.data = data; - - return data; - } - - _parseListItem(option, data, level){ - var item = {}; - - if(option.options){ - item = this._parseListGroup(option, level + 1); - }else { - item = { - label:option.label, - value:option.value, - itemParams:option.itemParams, - elementAttributes: option.elementAttributes, - element:false, - selected:false, - visible:true, - level:level, - original:option, - }; - - if(this.initialValues && this.initialValues.indexOf(option.value) > -1){ - this._chooseItem(item, true); - } - } - - data.push(item); - } - - _parseListGroup(option, level){ - var item = { - label:option.label, - group:true, - itemParams:option.itemParams, - elementAttributes:option.elementAttributes, - element:false, - visible:true, - level:level, - options:[], - original:option, - }; - - option.options.forEach((child) => { - this._parseListItem(child, item.options, level); - }); - - return item; - } - - _sortOptions(options){ - var sorter; - - if(this.params.sort){ - sorter = typeof this.params.sort === "function" ? this.params.sort : this._defaultSortFunction.bind(this); - - this._sortGroup(sorter, options); - } - - return options; - } - - _sortGroup(sorter, options){ - options.sort((a,b) => { - return sorter(a.label, b.label, a.value, b.value, a.original, b.original); - }); - - options.forEach((option) => { - if(option.group){ - this._sortGroup(sorter, option.options); - } - }); - } - - _defaultSortFunction(as, bs){ - var a, b, a1, b1, i= 0, L, rx = /(\d+)|(\D+)/g, rd = /\d/; - var emptyAlign = 0; - - if(this.params.sort === "desc"){ - [as, bs] = [bs, as]; - } - - //handle empty values - if(!as && as!== 0){ - emptyAlign = !bs && bs!== 0 ? 0 : -1; - }else if(!bs && bs!== 0){ - emptyAlign = 1; - }else { - if(isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if(a === b) return 0; - if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while(i < L){ - a1= a[i]; - b1= b[i++]; - if(a1 !== b1){ - if(isFinite(a1) && isFinite(b1)){ - if(a1.charAt(0) === "0") a1 = "." + a1; - if(b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } - else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - return emptyAlign; - } - - _filterOptions(){ - var filterFunc = this.params.filterFunc || this._defaultFilterFunc, - term = this.input.value; - - if(term){ - this.filtered = true; - - this.data.forEach((item) => { - this._filterItem(filterFunc, term, item); - }); - }else { - this.filtered = false; - } - - return this.data; - } - - _filterItem(func, term, item){ - var matches = false; - - if(!item.group){ - item.visible = func(term, item.label, item.value, item.original); - }else { - item.options.forEach((option) => { - if(this._filterItem(func, term, option)){ - matches = true; - } - }); - - item.visible = matches; - } - - return item.visible; - } - - _defaultFilterFunc(term, label, value, item){ - term = String(term).toLowerCase(); - - if(label !== null && typeof label !== "undefined"){ - if(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){ - return true; - } - } - - return false; - } - - ////////////////////////////////////// - /////////// Display List ///////////// - ////////////////////////////////////// - - _clearList(){ - while(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild); - - this.displayItems = []; - } - - _buildList(data){ - this._clearList(); - - data.forEach((option) => { - this._buildItem(option); - }); - - if(!this.displayItems.length){ - this._addPlaceholder(this.params.placeholderEmpty); - } - } - - _buildItem(item){ - var el = item.element, - contents; - - if(!this.filtered || item.visible){ - - if(!el){ - el = document.createElement("div"); - el.tabIndex = 0; - - contents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label; - - if(contents instanceof HTMLElement){ - el.appendChild(contents); - }else { - el.innerHTML = contents; - } - - if(item.group){ - el.classList.add("tabulator-edit-list-group"); - }else { - el.classList.add("tabulator-edit-list-item"); - } - - el.classList.add("tabulator-edit-list-group-level-" + item.level); - - if(item.elementAttributes && typeof item.elementAttributes == "object"){ - for (let key in item.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - el.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes["+" + key]); - }else { - el.setAttribute(key, item.elementAttributes[key]); - } - } - } - - if(item.group){ - el.addEventListener("click", this._groupClick.bind(this, item)); - }else { - el.addEventListener("click", this._itemClick.bind(this, item)); - } - - el.addEventListener("mousedown", this._preventBlur.bind(this)); - - item.element = el; - } - - this._styleItem(item); - - this.listEl.appendChild(el); - - if(item.group){ - item.options.forEach((option) => { - this._buildItem(option); - }); - }else { - this.displayItems.push(item); - } - } - } - - _showList(){ - var startVis = this.popup && this.popup.isVisible(); - - if(this.input.parentNode){ - if(this.params.autocomplete && this.input.value === "" && !this.params.listOnEmpty){ - if(this.popup){ - this.popup.hide(true); - } - return; - } - - this._setListWidth(); - - if(!this.popup){ - this.popup = this.edit.popup(this.listEl); - } - - this.popup.show(this.cell.getElement(), "bottom"); - - if(!startVis){ - setTimeout(() => { - this.popup.hideOnBlur(this._resolveValue.bind(this, true)); - }, 10); - } - } - } - - _styleItem(item){ - if(item && item.element){ - if(item.selected){ - item.element.classList.add("active"); - }else { - item.element.classList.remove("active"); - } - } - } - - ////////////////////////////////////// - ///////// User Interaction /////////// - ////////////////////////////////////// - - _itemClick(item, e){ - e.stopPropagation(); - - this._chooseItem(item); - } - - _groupClick(item, e){ - e.stopPropagation(); - } - - - ////////////////////////////////////// - ////// Current Item Management /////// - ////////////////////////////////////// - - _cancel(){ - this.popup.hide(true); - this.actions.cancel(); - } - - _clearChoices(){ - this.typing = true; - - this.currentItems.forEach((item) => { - item.selected = false; - this._styleItem(item); - }); - - this.currentItems = []; - - this.focusedItem = null; - } - - _chooseItem(item, silent){ - var index; - - this.typing = false; - - if(this.params.multiselect){ - index = this.currentItems.indexOf(item); - - if(index > -1){ - this.currentItems.splice(index, 1); - item.selected = false; - }else { - this.currentItems.push(item); - item.selected = true; - } - - this.input.value = this.currentItems.map(item => item.label).join(","); - - this._styleItem(item); - - }else { - this.currentItems = [item]; - item.selected = true; - - this.input.value = item.label; - - this._styleItem(item); - - if(!silent){ - this._resolveValue(); - } - } - - this._focusItem(item); - } - - _resolveValue(blur){ - var output, initialValue; - - if(this.popup){ - this.popup.hide(true); - } - - if(this.params.multiselect){ - output = this.currentItems.map(item => item.value); - }else { - if(blur && this.params.autocomplete && this.typing){ - if(this.params.freetext || (this.params.allowEmpty && this.input.value === "")){ - output = this.input.value; - }else { - this.actions.cancel(); - return; - } - }else { - if(this.currentItems[0]){ - output = this.currentItems[0].value; - }else { - initialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues; - - if(initialValue === null || typeof initialValue === "undefined" || initialValue === ""){ - output = initialValue; - }else { - output = this.params.emptyValue; - } - } - - } - } - - if(output === ""){ - output = this.params.emptyValue; - } - - this.actions.success(output); - - if(this.isFilter){ - this.initialValues = output && !Array.isArray(output) ? [output] : output; - this.currentItems = []; - } - } - - } - - function select(cell, onRendered, success, cancel, editorParams){ - - this.deprecationMsg("The select editor has been deprecated, please use the new list editor"); - - var list = new Edit(this, cell, onRendered, success, cancel, editorParams); - - return list.input; - } - - function list(cell, onRendered, success, cancel, editorParams){ - var list = new Edit(this, cell, onRendered, success, cancel, editorParams); - - return list.input; - } - - function autocomplete(cell, onRendered, success, cancel, editorParams){ - - this.deprecationMsg("The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam"); - - editorParams.autocomplete = true; - - var list = new Edit(this, cell, onRendered, success, cancel, editorParams); - - return list.input; - } - - //star rating - function star(cell, onRendered, success, cancel, editorParams){ - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - - //change star type - function starChange(val){ - stars.forEach(function(star, i){ - if(i < val){ - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-active"); - }else { - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - }else { - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-inactive"); - }else { - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i){ - - var starHolder = document.createElement("span"); - var nextStar = star.cloneNode(true); - - stars.push(nextStar); - - starHolder.addEventListener("mouseenter", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - starChange(i); - }); - - starHolder.addEventListener("mousemove", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - }); - - starHolder.addEventListener("click", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - success(i); - element.blur(); - }); - - starHolder.appendChild(nextStar); - starsHolder.appendChild(starHolder); - - } - - //handle keyboard navigation value change - function changeValue(val){ - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - star.setAttribute("width", size); - star.setAttribute("height", size); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - starsHolder.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //create correct number of stars - for(var i=1;i<= maxStars;i++){ - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mousemove", function(e){ - starChange(0); - }); - - starsHolder.addEventListener("click", function(e){ - success(0); - }); - - element.addEventListener("blur", function(e){ - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - changeValue(value + 1); - break; - - case 37: //left arrow - changeValue(value - 1); - break; - - case 13: //enter - success(value); - break; - - case 27: //escape - cancel(); - break; - } - }); - - return starsHolder; - } - - //draggable progress bar - function progress(cell, onRendered, success, cancel, editorParams){ - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("max")) || 100) : editorParams.max, - min = typeof editorParams.min === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("min")) || 0) : editorParams.min, - percent = (max - min) / 100, - value = cell.getValue() || 0, - handle = document.createElement("div"), - bar = document.createElement("div"), - mouseDrag, mouseDragWidth; - - //set new value - function updateValue(){ - var style = window.getComputedStyle(element, null); - - var calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue("padding-left")) - parseInt(style.getPropertyValue("padding-right")))/100))) + min; - success(calcVal); - element.setAttribute("aria-valuenow", calcVal); - element.setAttribute("aria-label", value); - } - - //style handle - handle.style.position = "absolute"; - handle.style.right = "0"; - handle.style.top = "0"; - handle.style.bottom = "0"; - handle.style.width = "5px"; - handle.classList.add("tabulator-progress-handle"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "relative"; - // bar.style.top = "8px"; - // bar.style.bottom = "8px"; - // bar.style.left = "4px"; - // bar.style.marginRight = "4px"; - bar.style.height = "100%"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - bar.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //style cell - element.style.padding = "4px 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = Math.round((value - min) / percent); - // bar.style.right = value + "%"; - bar.style.width = value + "%"; - - element.setAttribute("aria-valuemin", min); - element.setAttribute("aria-valuemax", max); - - bar.appendChild(handle); - - handle.addEventListener("mousedown", function(e){ - mouseDrag = e.screenX; - mouseDragWidth = bar.offsetWidth; - }); - - handle.addEventListener("mouseover", function(){ - handle.style.cursor = "ew-resize"; - }); - - element.addEventListener("mousemove", function(e){ - if(mouseDrag){ - bar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + "px"; - } - }); - - element.addEventListener("mouseup", function(e){ - if(mouseDrag){ - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - e.preventDefault(); - bar.style.width = (bar.clientWidth + element.clientWidth/100) + "px"; - break; - - case 37: //left arrow - e.preventDefault(); - bar.style.width = (bar.clientWidth - element.clientWidth/100) + "px"; - break; - - case 9: //tab - case 13: //enter - updateValue(); - break; - - case 27: //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function(){ - cancel(); - }); - - return bar; - } - - //checkbox - function tickCross(cell, onRendered, success, cancel, editorParams){ - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false, - trueValueSet = Object.keys(editorParams).includes("trueValue"), - falseValueSet = Object.keys(editorParams).includes("falseValue"); - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - if(tristate && (typeof value === "undefined" || value === indetermValue || value === "")){ - indetermState = true; - input.indeterminate = true; - } - - if(this.table.browser != "firefox" && this.table.browser != "safari"){ //prevent blur issue on mac firefox - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - } - }); - } - - input.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === "true" || value === "True" || value === 1); - - function setValue(blur){ - var checkedValue = input.checked; - - if(trueValueSet && checkedValue){ - checkedValue = editorParams.trueValue; - }else if(falseValueSet && !checkedValue){ - checkedValue = editorParams.falseValue; - } - - if(tristate){ - if(!blur){ - if(input.checked && !indetermState){ - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - }else { - indetermState = false; - return checkedValue; - } - }else { - if(indetermState){ - return indetermValue; - }else { - return checkedValue; - } - } - }else { - return checkedValue; - } - } - - //submit new value on blur - input.addEventListener("change", function(e){ - success(setValue()); - }); - - input.addEventListener("blur", function(e){ - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - if(e.keyCode == 13){ - success(setValue()); - } - if(e.keyCode == 27){ - cancel(); - } - }); - - return input; - } - - var defaultEditors = { - input:input, - textarea:textarea, - number:number, - range:range, - date:date, - time:time, - datetime:datetime, - select:select, - list:list, - autocomplete:autocomplete, - star:star, - progress:progress, - tickCross:tickCross, - }; - - class Edit$1 extends Module{ - - constructor(table){ - super(table); - - this.currentCell = false; //hold currently editing cell - this.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening - this.recursionBlock = false; //prevent focus recursion - this.invalidEdit = false; - this.editedCells = []; - - this.editors = Edit$1.editors; - - this.registerColumnOption("editable"); - this.registerColumnOption("editor"); - this.registerColumnOption("editorParams"); - - this.registerColumnOption("cellEditing"); - this.registerColumnOption("cellEdited"); - this.registerColumnOption("cellEditCancelled"); - - this.registerTableOption("editTriggerEvent", "focus"); - - this.registerTableFunction("getEditedCells", this.getEditedCells.bind(this)); - this.registerTableFunction("clearCellEdited", this.clearCellEdited.bind(this)); - this.registerTableFunction("navigatePrev", this.navigatePrev.bind(this)); - this.registerTableFunction("navigateNext", this.navigateNext.bind(this)); - this.registerTableFunction("navigateLeft", this.navigateLeft.bind(this)); - this.registerTableFunction("navigateRight", this.navigateRight.bind(this)); - this.registerTableFunction("navigateUp", this.navigateUp.bind(this)); - this.registerTableFunction("navigateDown", this.navigateDown.bind(this)); - - this.registerComponentFunction("cell", "isEdited", this.cellIsEdited.bind(this)); - this.registerComponentFunction("cell", "clearEdited", this.clearEdited.bind(this)); - this.registerComponentFunction("cell", "edit", this.editCell.bind(this)); - this.registerComponentFunction("cell", "cancelEdit", this.cellCancelEdit.bind(this)); - - this.registerComponentFunction("cell", "navigatePrev", this.navigatePrev.bind(this)); - this.registerComponentFunction("cell", "navigateNext", this.navigateNext.bind(this)); - this.registerComponentFunction("cell", "navigateLeft", this.navigateLeft.bind(this)); - this.registerComponentFunction("cell", "navigateRight", this.navigateRight.bind(this)); - this.registerComponentFunction("cell", "navigateUp", this.navigateUp.bind(this)); - this.registerComponentFunction("cell", "navigateDown", this.navigateDown.bind(this)); - } - - initialize(){ - this.subscribe("cell-init", this.bindEditor.bind(this)); - this.subscribe("cell-delete", this.clearEdited.bind(this)); - this.subscribe("cell-value-changed", this.updateCellClass.bind(this)); - this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); - this.subscribe("column-delete", this.columnDeleteCheck.bind(this)); - this.subscribe("row-deleting", this.rowDeleteCheck.bind(this)); - this.subscribe("row-layout", this.rowEditableCheck.bind(this)); - this.subscribe("data-refreshing", this.cancelEdit.bind(this)); - this.subscribe("clipboard-paste", this.pasteBlocker.bind(this)); - - this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this, undefined)); - this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this)); - - - // this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this, undefined)); - // this.subscribe("keybinding-nav-right", this.navigateRight.bind(this, undefined)); - this.subscribe("keybinding-nav-up", this.navigateUp.bind(this, undefined)); - this.subscribe("keybinding-nav-down", this.navigateDown.bind(this, undefined)); - } - - - /////////////////////////////////// - ///////// Paste Negation ////////// - /////////////////////////////////// - - pasteBlocker(e){ - if(this.currentCell){ - return true; - } - } - - - /////////////////////////////////// - ////// Keybinding Functions /////// - /////////////////////////////////// - - keybindingNavigateNext(e){ - var cell = this.currentCell, - newRow = this.options("tabEndNewRow"); - - if(cell){ - if(!this.navigateNext(cell, e)){ - if(newRow){ - cell.getElement().firstChild.blur(); - - if(!this.invalidEdit){ - - if(newRow === true){ - newRow = this.table.addRow({}); - }else { - if(typeof newRow == "function"){ - newRow = this.table.addRow(newRow(cell.row.getComponent())); - }else { - newRow = this.table.addRow(Object.assign({}, newRow)); - } - } - - newRow.then(() => { - setTimeout(() => { - cell.getComponent().navigateNext(); - }); - }); - } - } - } - } - } - - /////////////////////////////////// - ///////// Cell Functions ////////// - /////////////////////////////////// - - cellIsEdited(cell){ - return !! cell.modules.edit && cell.modules.edit.edited; - } - - cellCancelEdit(cell){ - if(cell === this.currentCell){ - this.table.modules.edit.cancelEdit(); - }else { - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } - - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - updateCellClass(cell){ - if(this.allowEdit(cell)) { - cell.getElement().classList.add("tabulator-editable"); - } - else { - cell.getElement().classList.remove("tabulator-editable"); - } - } - - clearCellEdited(cells){ - if(!cells){ - cells = this.table.modules.edit.getEditedCells(); - } - - if(!Array.isArray(cells)){ - cells = [cells]; - } - - cells.forEach((cell) => { - this.table.modules.edit.clearEdited(cell._getSelf()); - }); - } - - navigatePrev(cell = this.currentCell, e){ - var nextCell, prevRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - nextCell = this.navigateLeft(); - - if(nextCell){ - return true; - }else { - prevRow = this.table.rowManager.prevDisplayRow(cell.row, true); - - if(prevRow){ - nextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - } - } - - return false; - } - - navigateNext(cell = this.currentCell, e){ - var nextCell, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - nextCell = this.navigateRight(); - - if(nextCell){ - return true; - }else { - nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); - - if(nextRow){ - nextCell = this.findNextEditableCell(nextRow, -1); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - } - } - - return false; - } - - navigateLeft(cell = this.currentCell, e){ - var index, nextCell; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextCell = this.findPrevEditableCell(cell.row, index); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - - return false; - } - - navigateRight(cell = this.currentCell, e){ - var index, nextCell; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextCell = this.findNextEditableCell(cell.row, index); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - - return false; - } - - navigateUp(cell = this.currentCell, e){ - var index, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextRow = this.table.rowManager.prevDisplayRow(cell.row, true); - - if(nextRow){ - nextRow.cells[index].getComponent().edit(); - return true; - } - } - - return false; - } - - navigateDown(cell = this.currentCell, e){ - var index, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); - - if(nextRow){ - nextRow.cells[index].getComponent().edit(); - return true; - } - } - - return false; - } - - findNextEditableCell(row, index){ - var nextCell = false; - - if(index < row.cells.length-1){ - for(var i = index+1; i < row.cells.length; i++){ - let cell = row.cells[i]; - - if(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){ - let allowEdit = this.allowEdit(cell); - - if(allowEdit){ - nextCell = cell; - break; - } - } - } - } - - return nextCell; - } - - findPrevEditableCell(row, index){ - var prevCell = false; - - if(index > 0){ - for(var i = index-1; i >= 0; i--){ - let cell = row.cells[i]; - - if(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){ - let allowEdit = this.allowEdit(cell); - - if(allowEdit){ - prevCell = cell; - break; - } - } - } - } - - return prevCell; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnCheck(column){ - if(typeof column.definition.editor !== "undefined"){ - this.initializeColumn(column); - } - } - - columnDeleteCheck(column){ - if(this.currentCell && this.currentCell.column === column){ - this.cancelEdit(); - } - } - - rowDeleteCheck(row){ - if(this.currentCell && this.currentCell.row === row){ - this.cancelEdit(); - } - } - - rowEditableCheck(row){ - row.getCells().forEach((cell) => { - if(cell.column.modules.edit && typeof cell.column.modules.edit.check === "function"){ - this.updateCellClass(cell); - } - }); - } - - //initialize column editor - initializeColumn(column){ - var config = { - editor:false, - blocked:false, - check:column.definition.editable, - params:column.definition.editorParams || {} - }; - - //set column editor - switch(typeof column.definition.editor){ - case "string": - if(this.editors[column.definition.editor]){ - config.editor = this.editors[column.definition.editor]; - }else { - console.warn("Editor Error - No such editor found: ", column.definition.editor); - } - break; - - case "function": - config.editor = column.definition.editor; - break; - - case "boolean": - if(column.definition.editor === true){ - if(typeof column.definition.formatter !== "function"){ - if(this.editors[column.definition.formatter]){ - config.editor = this.editors[column.definition.formatter]; - }else { - config.editor = this.editors["input"]; - } - }else { - console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); - } - } - break; - } - - if(config.editor){ - column.modules.edit = config; - } - } - - getCurrentCell(){ - return this.currentCell ? this.currentCell.getComponent() : false; - } - - clearEditor(cancel){ - var cell = this.currentCell, - cellEl; - - this.invalidEdit = false; - - if(cell){ - this.currentCell = false; - - cellEl = cell.getElement(); - - this.dispatch("edit-editor-clear", cell, cancel); - - cellEl.classList.remove("tabulator-editing"); - - while(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild); - - cell.row.getElement().classList.remove("tabulator-editing"); - - cell.table.element.classList.remove("tabulator-editing"); - } - } - - cancelEdit(){ - if(this.currentCell){ - var cell = this.currentCell; - var component = this.currentCell.getComponent(); - - this.clearEditor(true); - cell.setValueActual(cell.getValue()); - cell.cellRendered(); - - if(cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight){ - cell.row.normalizeHeight(true); - } - - if(cell.column.definition.cellEditCancelled){ - cell.column.definition.cellEditCancelled.call(this.table, component); - } - - this.dispatch("edit-cancelled", cell); - this.dispatchExternal("cellEditCancelled", component); - } - } - - //return a formatted value for a cell - bindEditor(cell){ - if(cell.column.modules.edit){ - var self = this, - element = cell.getElement(true); - - this.updateCellClass(cell); - element.setAttribute("tabindex", 0); - - element.addEventListener("mousedown", function(e){ - if (e.button === 2) { - e.preventDefault(); - }else { - self.mouseClick = true; - } - }); - - if(this.options("editTriggerEvent") === "dblclick"){ - element.addEventListener("dblclick", function(e){ - if(!element.classList.contains("tabulator-editing")){ - element.focus({preventScroll: true}); - self.edit(cell, e, false); - } - }); - } - - - if(this.options("editTriggerEvent") === "focus" || this.options("editTriggerEvent") === "click"){ - element.addEventListener("click", function(e){ - if(!element.classList.contains("tabulator-editing")){ - element.focus({preventScroll: true}); - self.edit(cell, e, false); - } - }); - } - - if(this.options("editTriggerEvent") === "focus"){ - element.addEventListener("focus", function(e){ - if(!self.recursionBlock){ - self.edit(cell, e, false); - } - }); - } - } - } - - focusCellNoEvent(cell, block){ - this.recursionBlock = true; - - if(!(block && this.table.browser === "ie")){ - cell.getElement().focus({preventScroll: true}); - } - - this.recursionBlock = false; - } - - editCell(cell, forceEdit){ - this.focusCellNoEvent(cell); - this.edit(cell, false, forceEdit); - } - - focusScrollAdjust(cell){ - if(this.table.rowManager.getRenderMode() == "virtual"){ - var topEdge = this.table.rowManager.element.scrollTop, - bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop, - rowEl = cell.row.getElement(); - - if(rowEl.offsetTop < topEdge){ - this.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop); - }else { - if(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){ - this.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge); - } - } - - var leftEdge = this.table.rowManager.element.scrollLeft, - rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft, - cellEl = cell.getElement(); - - if(this.table.modExists("frozenColumns")){ - leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0); - rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0); - } - - if(this.table.options.renderHorizontal === "virtual"){ - leftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); - rightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); - } - - if(cellEl.offsetLeft < leftEdge){ - this.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft); - }else { - if(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){ - this.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge); - } - } - } - } - - allowEdit(cell) { - var check = cell.column.modules.edit ? true : false; - - if(cell.column.modules.edit){ - switch(typeof cell.column.modules.edit.check){ - case "function": - if(cell.row.initialized){ - check = cell.column.modules.edit.check(cell.getComponent()); - } - break; - - case "string": - check = !!cell.row.data[cell.column.modules.edit.check]; - break; - - case "boolean": - check = cell.column.modules.edit.check; - break; - } - } - - return check; - } - - edit(cell, e, forceEdit){ - var self = this, - allowEdit = true, - rendered = function(){}, - element = cell.getElement(), - editFinished = false, - cellEditor, component, params; - - //prevent editing if another cell is refusing to leave focus (eg. validation fail) - - if(this.currentCell){ - if(!this.invalidEdit && this.currentCell !== cell){ - this.cancelEdit(); - } - return; - } - - //handle successful value change - function success(value){ - if(self.currentCell === cell && !editFinished){ - var valid = self.chain("edit-success", [cell, value], true, true); - - if(valid === true || self.table.options.validationMode === "highlight"){ - - editFinished = true; - - self.clearEditor(); - - if(!cell.modules.edit){ - cell.modules.edit = {}; - } - - cell.modules.edit.edited = true; - - if(self.editedCells.indexOf(cell) == -1){ - self.editedCells.push(cell); - } - - cell.setValue(value, true); - - return valid === true; - }else { - editFinished = true; - self.invalidEdit = true; - self.focusCellNoEvent(cell, true); - rendered(); - - setTimeout(() => { - editFinished = false; - }, 10); - return false; - } - } - } - - //handle aborted edit - function cancel(){ - // editFinished = true; - - if(self.currentCell === cell && !editFinished){ - self.cancelEdit(); - } - } - - function onRendered(callback){ - rendered = callback; - } - - if(!cell.column.modules.edit.blocked){ - if(e){ - e.stopPropagation(); - } - - allowEdit = this.allowEdit(cell); - - if(allowEdit || forceEdit){ - self.cancelEdit(); - - self.currentCell = cell; - - this.focusScrollAdjust(cell); - - component = cell.getComponent(); - - if(this.mouseClick){ - this.mouseClick = false; - - if(cell.column.definition.cellClick){ - cell.column.definition.cellClick.call(this.table, e, component); - } - } - - if(cell.column.definition.cellEditing){ - cell.column.definition.cellEditing.call(this.table, component); - } - - this.dispatch("cell-editing", cell); - this.dispatchExternal("cellEditing", component); - - params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; - - cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); - - //if editor returned, add to DOM, if false, abort edit - if(this.currentCell && cellEditor !== false){ - if(cellEditor instanceof Node){ - element.classList.add("tabulator-editing"); - cell.row.getElement().classList.add("tabulator-editing"); - cell.table.element.classList.add("tabulator-editing"); - while(element.firstChild) element.removeChild(element.firstChild); - element.appendChild(cellEditor); - - //trigger onRendered Callback - rendered(); - - //prevent editing from triggering rowClick event - var children = element.children; - - for (var i = 0; i < children.length; i++) { - children[i].addEventListener("click", function(e){ - e.stopPropagation(); - }); - } - }else { - console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor); - this.blur(element); - return false; - } - }else { - this.blur(element); - return false; - } - - return true; - }else { - this.mouseClick = false; - this.blur(element); - return false; - } - }else { - this.mouseClick = false; - this.blur(element); - return false; - } - } - - blur(element){ - if(!this.confirm("edit-blur", [element]) ){ - element.blur(); - } - } - - getEditedCells(){ - var output = []; - - this.editedCells.forEach((cell) => { - output.push(cell.getComponent()); - }); - - return output; - } - - clearEdited(cell){ - var editIndex; - - if(cell.modules.edit && cell.modules.edit.edited){ - cell.modules.edit.edited = false; - - this.dispatch("edit-edited-clear", cell); - } - - editIndex = this.editedCells.indexOf(cell); - - if(editIndex > -1){ - this.editedCells.splice(editIndex, 1); - } - } - } - - Edit$1.moduleName = "edit"; - - //load defaults - Edit$1.editors = defaultEditors; - - class ExportRow{ - constructor(type, columns, component, indent){ - this.type = type; - this.columns = columns; - this.component = component || false; - this.indent = indent || 0; - } - } - - class ExportColumn{ - constructor(value, component, width, height, depth){ - this.value = value; - this.component = component || false; - this.width = width; - this.height = height; - this.depth = depth; - } - } - - class Export extends Module{ - - constructor(table){ - super(table); - - this.config = {}; - this.cloneTableStyle = true; - this.colVisProp = ""; - - this.registerTableOption("htmlOutputConfig", false); //html output config - - this.registerColumnOption("htmlOutput"); - this.registerColumnOption("titleHtmlOutput"); - } - - initialize(){ - this.registerTableFunction("getHtml", this.getHtml.bind(this)); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - generateExportList(config, style, range, colVisProp){ - this.cloneTableStyle = style; - this.config = config || {}; - this.colVisProp = colVisProp; - - var headers, body; - - if (range === 'range') { - var columns = this.table.modules.selectRange.selectedColumns(); - headers = this.config.columnHeaders !== false - ? this.headersToExportRows(this.generateColumnGroupHeaders(columns)) - : []; - body = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true)); - } else { - headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : []; - body = this.bodyToExportRows(this.rowLookup(range)); - } - - return headers.concat(body); - } - - generateTable(config, style, range, colVisProp){ - var list = this.generateExportList(config, style, range, colVisProp); - - return this.generateTableElement(list); - } - - rowLookup(range){ - var rows = []; - - if(typeof range == "function"){ - range.call(this.table).forEach((row) =>{ - row = this.table.rowManager.findRow(row); - - if(row){ - rows.push(row); - } - }); - }else { - switch(range){ - case true: - case "visible": - rows = this.table.rowManager.getVisibleRows(false, true); - break; - - case "all": - rows = this.table.rowManager.rows; - break; - - case "selected": - rows = this.table.modules.selectRow.selectedRows; - break; - - case "range": - rows = this.table.modules.selectRange.selectedRows(); - break; - - case "active": - default: - if(this.table.options.pagination){ - rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2); - }else { - rows = this.table.rowManager.getDisplayRows(); - } - } - } - - return Object.assign([], rows); - } - - generateColumnGroupHeaders(columns){ - var output = []; - - if (!columns) { - columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex; - } - - columns.forEach((column) => { - var colData = this.processColumnGroup(column); - - if(colData){ - output.push(colData); - } - }); - - return output; - } - - processColumnGroup(column){ - var subGroups = column.columns, - maxDepth = 0, - title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title; - - var groupData = { - title:title, - column:column, - depth:1, - }; - - if(subGroups.length){ - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach((subGroup) => { - var subGroupData = this.processColumnGroup(subGroup); - - if(subGroupData){ - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - - if(subGroupData.depth > maxDepth){ - maxDepth = subGroupData.depth; - } - } - }); - - groupData.depth += maxDepth; - - if(!groupData.width){ - return false; - } - }else { - if(this.columnVisCheck(column)){ - groupData.width = 1; - }else { - return false; - } - } - - return groupData; - } - - columnVisCheck(column){ - var visProp = column.definition[this.colVisProp]; - - if(typeof visProp === "function"){ - visProp = visProp.call(this.table, column.getComponent()); - } - - return visProp !== false && (column.visible || (!column.visible && visProp)); - } - - headersToExportRows(columns){ - var headers = [], - headerDepth = 0, - exportRows = []; - - function parseColumnGroup(column, level){ - - var depth = headerDepth - level; - - if(typeof headers[level] === "undefined"){ - headers[level] = []; - } - - column.height = column.subGroups ? 1 : (depth - column.depth) + 1; - - headers[level].push(column); - - if(column.height > 1){ - for(let i = 1; i < column.height; i ++){ - - if(typeof headers[level + i] === "undefined"){ - headers[level + i] = []; - } - - headers[level + i].push(false); - } - } - - if(column.width > 1){ - for(let i = 1; i < column.width; i ++){ - headers[level].push(false); - } - } - - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - } - } - - //calculate maximum header depth - columns.forEach(function(column){ - if(column.depth > headerDepth){ - headerDepth = column.depth; - } - }); - - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - - headers.forEach((header) => { - var columns = []; - - header.forEach((col) => { - if(col){ - let title = typeof col.title === "undefined" ? "" : col.title; - columns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth)); - }else { - columns.push(null); - } - }); - - exportRows.push(new ExportRow("header", columns)); - }); - - return exportRows; - } - - bodyToExportRows(rows, columns = []){ - var exportRows = []; - - if (columns.length === 0) { - this.table.columnManager.columnsByIndex.forEach((column) => { - if (this.columnVisCheck(column)) { - columns.push(column.getComponent()); - } - }); - } - - if(this.config.columnCalcs !== false && this.table.modExists("columnCalcs")){ - if(this.table.modules.columnCalcs.topInitialized){ - rows.unshift(this.table.modules.columnCalcs.topRow); - } - - if(this.table.modules.columnCalcs.botInitialized){ - rows.push(this.table.modules.columnCalcs.botRow); - } - } - - rows = rows.filter((row) => { - switch(row.type){ - case "group": - return this.config.rowGroups !== false; - - case "calc": - return this.config.columnCalcs !== false; - - case "row": - return !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent); - } - - return true; - }); - - rows.forEach((row, i) => { - var rowData = row.getData(this.colVisProp); - var exportCols = []; - var indent = 0; - - switch(row.type){ - case "group": - indent = row.level; - exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1)); - break; - - case "calc" : - case "row" : - columns.forEach((col) => { - exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1)); - }); - - if(this.table.options.dataTree && this.config.dataTree !== false){ - indent = row.modules.dataTree.index; - } - break; - } - - exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent)); - }); - - return exportRows; - } - - generateTableElement(list){ - var table = document.createElement("table"), - headerEl = document.createElement("thead"), - bodyEl = document.createElement("tbody"), - styles = this.lookupTableStyles(), - rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))], - setup = {}; - - setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter; - - if(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists("columnCalcs")){ - setup.treeElementField = this.table.modules.dataTree.elementField; - } - - //assign group header formatter - setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))]; - - if(setup.groupHeader && !Array.isArray(setup.groupHeader)){ - setup.groupHeader = [setup.groupHeader]; - } - - table.classList.add("tabulator-print-table"); - - this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - - if(list.length > 1000){ - console.warn("It may take a long time to render an HTML table with more than 1000 rows"); - } - - list.forEach((row, i) => { - let rowEl; - - switch(row.type){ - case "header": - headerEl.appendChild(this.generateHeaderElement(row, setup, styles)); - break; - - case "group": - bodyEl.appendChild(this.generateGroupElement(row, setup, styles)); - break; - - case "calc": - bodyEl.appendChild(this.generateCalcElement(row, setup, styles)); - break; - - case "row": - rowEl = this.generateRowElement(row, setup, styles); - - this.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - bodyEl.appendChild(rowEl); - break; - } - }); - - if(headerEl.innerHTML){ - table.appendChild(headerEl); - } - - table.appendChild(bodyEl); - - - this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]); - return table; - } - - lookupTableStyles(){ - var styles = {}; - - //lookup row styles - if(this.cloneTableStyle && window.getComputedStyle){ - styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); - styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); - styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs"); - styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); - styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; - - if(styles.firstRow){ - styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell"); - styles.firstCell = styles.styleCells[0]; - styles.lastCell = styles.styleCells[styles.styleCells.length - 1]; - } - } - - return styles; - } - - generateHeaderElement(row, setup, styles){ - var rowEl = document.createElement("tr"); - - row.columns.forEach((column) => { - if(column){ - var cellEl = document.createElement("th"); - var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : []; - - cellEl.colSpan = column.width; - cellEl.rowSpan = column.height; - - cellEl.innerHTML = column.value; - - if(this.cloneTableStyle){ - cellEl.style.boxSizing = "border-box"; - } - - classNames.forEach(function(className) { - cellEl.classList.add(className); - }); - - this.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - this.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); - - if(column.component._column.visible){ - this.mapElementStyles(column.component.getElement(), cellEl, ["width"]); - }else { - if(column.component._column.definition.width){ - cellEl.style.width = column.component._column.definition.width + "px"; - } - } - - if(column.component._column.parent){ - this.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]); - } - - rowEl.appendChild(cellEl); - } - }); - - return rowEl; - } - - generateGroupElement(row, setup, styles){ - - var rowEl = document.createElement("tr"), - cellEl = document.createElement("td"), - group = row.columns[0]; - - rowEl.classList.add("tabulator-print-table-row"); - - if(setup.groupHeader && setup.groupHeader[row.indent]){ - group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - }else { - if(setup.groupHeader !== false){ - group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - - cellEl.colSpan = group.width; - cellEl.innerHTML = group.value; - - rowEl.classList.add("tabulator-print-table-group"); - rowEl.classList.add("tabulator-group-level-" + row.indent); - - if(group.component.isVisible()){ - rowEl.classList.add("tabulator-group-visible"); - } - - this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); - - rowEl.appendChild(cellEl); - - return rowEl; - } - - generateCalcElement(row, setup, styles){ - var rowEl = this.generateRowElement(row, setup, styles); - - rowEl.classList.add("tabulator-print-table-calcs"); - this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - - return rowEl; - } - - generateRowElement(row, setup, styles){ - var rowEl = document.createElement("tr"); - - rowEl.classList.add("tabulator-print-table-row"); - - row.columns.forEach((col, i) => { - if(col){ - var cellEl = document.createElement("td"), - column = col.component._column, - table = this.table, - index = table.columnManager.findColumnIndex(column), - value = col.value, - cellStyle; - - var cellWrapper = { - modules:{}, - getValue:function(){ - return value; - }, - getField:function(){ - return column.definition.field; - }, - getElement:function(){ - return cellEl; - }, - getType:function(){ - return "cell"; - }, - getColumn:function(){ - return column.getComponent(); - }, - getData:function(){ - return row.component.getData(); - }, - getRow:function(){ - return row.component; - }, - getTable:function(){ - return table; - }, - getComponent:function(){ - return cellWrapper; - }, - column:column, - }; - - var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : []; - - classNames.forEach(function(className) { - cellEl.classList.add(className); - }); - - if(this.table.modExists("format") && this.config.formatCells !== false){ - value = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp); - }else { - switch(typeof value){ - case "object": - value = value !== null ? JSON.stringify(value) : ""; - break; - - case "undefined": - value = ""; - break; - } - } - - if(value instanceof Node){ - cellEl.appendChild(value); - }else { - cellEl.innerHTML = value; - } - - cellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell; - - if(cellStyle){ - this.mapElementStyles(cellStyle, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "text-align"]); - - if(column.definition.align){ - cellEl.style.textAlign = column.definition.align; - } - } - - if(this.table.options.dataTree && this.config.dataTree !== false){ - if((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){ - if(row.component._row.modules.dataTree.controlEl){ - cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild); - } - if(row.component._row.modules.dataTree.branchEl){ - cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild); - } - } - } - - rowEl.appendChild(cellEl); - - if(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){ - cellWrapper.modules.format.renderedCallback(); - } - } - }); - - if(setup.rowFormatter && row.type === "row" && this.config.formatCells !== false){ - let formatComponent = Object.assign(row.component); - - formatComponent.getElement = function(){return rowEl;}; - - setup.rowFormatter(row.component); - } - - return rowEl; - } - - generateHTMLTable(list){ - var holder = document.createElement("div"); - - holder.appendChild(this.generateTableElement(list)); - - return holder.innerHTML; - } - - getHtml(visible, style, config, colVisProp){ - var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput"); - - return this.generateHTMLTable(list); - } - - mapElementStyles(from, to, props){ - if(this.cloneTableStyle && from && to){ - - var lookup = { - "background-color" : "backgroundColor", - "color" : "fontColor", - "width" : "width", - "font-weight" : "fontWeight", - "font-family" : "fontFamily", - "font-size" : "fontSize", - "text-align" : "textAlign", - "border-top" : "borderTop", - "border-left" : "borderLeft", - "border-right" : "borderRight", - "border-bottom" : "borderBottom", - "padding-top" : "paddingTop", - "padding-left" : "paddingLeft", - "padding-right" : "paddingRight", - "padding-bottom" : "paddingBottom", - }; - - if(window.getComputedStyle){ - var fromStyle = window.getComputedStyle(from); - - props.forEach(function(prop){ - if(!to.style[lookup[prop]]){ - to.style[lookup[prop]] = fromStyle.getPropertyValue(prop); - } - }); - } - } - } - } - - Export.moduleName = "export"; - - var defaultFilters = { - - //equal to - "=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal == filterVal ? true : false; - }, - - //less than - "<":function(filterVal, rowVal, rowData, filterParams){ - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">":function(filterVal, rowVal, rowData, filterParams){ - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal != filterVal ? true : false; - }, - - "regex":function(filterVal, rowVal, rowData, filterParams){ - - if(typeof filterVal == "string"){ - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else { - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1; - } - else { - return false; - } - } - }, - - //contains the keywords - "keywords":function(filterVal, rowVal, rowData, filterParams){ - var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator), - value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(), - matches = []; - - keywords.forEach((keyword) =>{ - if(value.includes(keyword)){ - matches.push(true); - } - }); - - return filterParams.matchAll ? matches.length === keywords.length : !!matches.length; - }, - - //starts with the string - "starts":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else { - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase()); - } - else { - return false; - } - } - }, - - //ends with the string - "ends":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else { - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase()); - } - else { - return false; - } - } - }, - - //in array - "in":function(filterVal, rowVal, rowData, filterParams){ - if(Array.isArray(filterVal)){ - return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true; - }else { - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - }, - }; - - class Filter extends Module{ - - constructor(table){ - super(table); - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterColumns = []; //hold columns that use header filters - - this.prevHeaderFilterChangeCheck = ""; - this.prevHeaderFilterChangeCheck = "{}"; - - this.changed = false; //has filtering changed since last render - this.tableInitialized = false; - - this.registerTableOption("filterMode", "local"); //local or remote filtering - - this.registerTableOption("initialFilter", false); //initial filtering criteria - this.registerTableOption("initialHeaderFilter", false); //initial header filtering criteria - this.registerTableOption("headerFilterLiveFilterDelay", 300); //delay before updating column after user types in header filter - this.registerTableOption("placeholderHeaderFilter", false); //placeholder when header filter is empty - - this.registerColumnOption("headerFilter"); - this.registerColumnOption("headerFilterPlaceholder"); - this.registerColumnOption("headerFilterParams"); - this.registerColumnOption("headerFilterEmptyCheck"); - this.registerColumnOption("headerFilterFunc"); - this.registerColumnOption("headerFilterFuncParams"); - this.registerColumnOption("headerFilterLiveFilter"); - - this.registerTableFunction("searchRows", this.searchRows.bind(this)); - this.registerTableFunction("searchData", this.searchData.bind(this)); - - this.registerTableFunction("setFilter", this.userSetFilter.bind(this)); - this.registerTableFunction("refreshFilter", this.userRefreshFilter.bind(this)); - this.registerTableFunction("addFilter", this.userAddFilter.bind(this)); - this.registerTableFunction("getFilters", this.getFilters.bind(this)); - this.registerTableFunction("setHeaderFilterFocus", this.userSetHeaderFilterFocus.bind(this)); - this.registerTableFunction("getHeaderFilterValue", this.userGetHeaderFilterValue.bind(this)); - this.registerTableFunction("setHeaderFilterValue", this.userSetHeaderFilterValue.bind(this)); - this.registerTableFunction("getHeaderFilters", this.getHeaderFilters.bind(this)); - this.registerTableFunction("removeFilter", this.userRemoveFilter.bind(this)); - this.registerTableFunction("clearFilter", this.userClearFilter.bind(this)); - this.registerTableFunction("clearHeaderFilter", this.userClearHeaderFilter.bind(this)); - - this.registerComponentFunction("column", "headerFilterFocus", this.setHeaderFilterFocus.bind(this)); - this.registerComponentFunction("column", "reloadHeaderFilter", this.reloadHeaderFilter.bind(this)); - this.registerComponentFunction("column", "getHeaderFilterValue", this.getHeaderFilterValue.bind(this)); - this.registerComponentFunction("column", "setHeaderFilterValue", this.setHeaderFilterValue.bind(this)); - } - - initialize(){ - this.subscribe("column-init", this.initializeColumnHeaderFilter.bind(this)); - this.subscribe("column-width-fit-before", this.hideHeaderFilterElements.bind(this)); - this.subscribe("column-width-fit-after", this.showHeaderFilterElements.bind(this)); - this.subscribe("table-built", this.tableBuilt.bind(this)); - this.subscribe("placeholder", this.generatePlaceholder.bind(this)); - - if(this.table.options.filterMode === "remote"){ - this.subscribe("data-params", this.remoteFilterParams.bind(this)); - } - - this.registerDataHandler(this.filter.bind(this), 10); - } - - tableBuilt(){ - if(this.table.options.initialFilter){ - this.setFilter(this.table.options.initialFilter); - } - - if(this.table.options.initialHeaderFilter){ - this.table.options.initialHeaderFilter.forEach((item) => { - - var column = this.table.columnManager.findColumn(item.field); - - if(column){ - this.setHeaderFilterValue(column, item.value); - }else { - console.warn("Column Filter Error - No matching column found:", item.field); - return false; - } - }); - } - - this.tableInitialized = true; - } - - remoteFilterParams(data, config, silent, params){ - params.filter = this.getFilters(true, true); - return params; - } - - generatePlaceholder(text){ - if(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){ - return this.table.options.placeholderHeaderFilter; - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - //set standard filters - userSetFilter(field, type, value, params){ - this.setFilter(field, type, value, params); - this.refreshFilter(); - } - - //set standard filters - userRefreshFilter(){ - this.refreshFilter(); - } - - //add filter to array - userAddFilter(field, type, value, params){ - this.addFilter(field, type, value, params); - this.refreshFilter(); - } - - userSetHeaderFilterFocus(field){ - var column = this.table.columnManager.findColumn(field); - - if(column){ - this.setHeaderFilterFocus(column); - }else { - console.warn("Column Filter Focus Error - No matching column found:", field); - return false; - } - } - - userGetHeaderFilterValue(field) { - var column = this.table.columnManager.findColumn(field); - - if(column){ - return this.getHeaderFilterValue(column); - }else { - console.warn("Column Filter Error - No matching column found:", field); - } - } - - userSetHeaderFilterValue(field, value){ - var column = this.table.columnManager.findColumn(field); - - if(column){ - this.setHeaderFilterValue(column, value); - }else { - console.warn("Column Filter Error - No matching column found:", field); - return false; - } - } - - //remove filter from array - userRemoveFilter(field, type, value){ - this.removeFilter(field, type, value); - this.refreshFilter(); - } - - //clear filters - userClearFilter(all){ - this.clearFilter(all); - this.refreshFilter(); - } - - //clear header filters - userClearHeaderFilter(){ - this.clearHeaderFilter(); - this.refreshFilter(); - } - - - //search for specific row components - searchRows(field, type, value){ - return this.search("rows", field, type, value); - } - - //search for specific data - searchData(field, type, value){ - return this.search("data", field, type, value); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnHeaderFilter(column){ - var def = column.definition; - - if(def.headerFilter){ - this.initializeColumn(column); - } - } - - //initialize column header filter - initializeColumn(column, value){ - var self = this, - field = column.getField(); - - //handle successfully value change - function success(value){ - var filterType = (column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text") || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterChangeCheck = "", - filterFunc; - - if(typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value){ - - column.modules.filter.prevSuccess = value; - - if(!column.modules.filter.emptyFunc(value)){ - column.modules.filter.value = value; - - switch(typeof column.definition.headerFilterFunc){ - case "string": - if(Filter.filters[column.definition.headerFilterFunc]){ - type = column.definition.headerFilterFunc; - filterFunc = function(data){ - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params); - }; - }else { - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function(data){ - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if(!filterFunc){ - switch(filterType){ - case "partial": - filterFunc = function(data){ - var colVal = column.getFieldValue(data); - - if(typeof colVal !== 'undefined' && colVal !== null){ - return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - }else { - return false; - } - }; - type = "like"; - break; - - default: - filterFunc = function(data){ - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = {value:value, func:filterFunc, type:type}; - }else { - delete self.headerFilters[field]; - } - - column.modules.filter.value = value; - - filterChangeCheck = JSON.stringify(self.headerFilters); - - if(self.prevHeaderFilterChangeCheck !== filterChangeCheck){ - self.prevHeaderFilterChangeCheck = filterChangeCheck; - - self.trackChanges(); - self.refreshFilter(); - } - } - - return true; - } - - column.modules.filter = { - success:success, - attrType:false, - tagType:false, - emptyFunc:false, - }; - - this.generateHeaderFilterElement(column); - } - - generateHeaderFilterElement(column, initialValue, reinitialize){ - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback; - - column.modules.filter.value = initialValue; - - //handle aborted edit - function cancel(){} - - function onRendered(callback){ - onRenderedCallback = callback; - } - - if(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){ - column.contentElement.removeChild(column.modules.filter.headerElement.parentNode); - } - - if(field){ - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){ - return !value && value !== 0; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch(typeof column.definition.headerFilter){ - case "string": - if(self.table.modules.edit.editors[column.definition.headerFilter]){ - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else { - console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor); - } - break; - - case "function": - editor = column.definition.headerFilter; - break; - - case "boolean": - if(column.modules.edit && column.modules.edit.editor){ - editor = column.modules.edit.editor; - }else { - if(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){ - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else { - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if(editor){ - - cellWrapper = { - getValue:function(){ - return typeof initialValue !== "undefined" ? initialValue : ""; - }, - getField:function(){ - return column.definition.field; - }, - getElement:function(){ - return filterElement; - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - }, - getType:() => { - return "header"; - }, - getRow:function(){ - return { - normalizeHeight:function(){ - - } - }; - } - }; - - params = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table, cellWrapper) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params); - - if(!editorElement){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if(!(editorElement instanceof Node)){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - self.langBind("headerFilters|columns|" + column.definition.field, function(value){ - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : (column.definition.headerFilterPlaceholder || self.langText("headerFilters|default"))); - }); - - //focus on element on click - editorElement.addEventListener("click", function(e){ - e.stopPropagation(); - editorElement.focus(); - }); - - editorElement.addEventListener("focus", (e) => { - var left = this.table.columnManager.contentsElement.scrollLeft; - - var headerPos = this.table.rowManager.element.scrollLeft; - - if(left !== headerPos){ - this.table.rowManager.scrollHorizontal(left); - this.table.columnManager.scrollHorizontal(left); - } - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function(e){ - if(typingTimer){ - clearTimeout(typingTimer); - } - - typingTimer = setTimeout(function(){ - success(editorElement.value); - },self.table.options.headerFilterLiveFilterDelay); - }; - - column.modules.filter.headerElement = editorElement; - column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "" ; - column.modules.filter.tagType = editorElement.tagName.toLowerCase(); - - if(column.definition.headerFilterLiveFilter !== false){ - - if ( - !( - column.definition.headerFilter === 'autocomplete' || - column.definition.headerFilter === 'tickCross' || - ((column.definition.editor === 'autocomplete' || - column.definition.editor === 'tickCross') && - column.definition.headerFilter === true) - ) - ) { - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - - //update number filtered columns on change - if(column.modules.filter.attrType == "number"){ - editorElement.addEventListener("change", function(e){ - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if(column.modules.filter.attrType == "text" && this.table.browser !== "ie"){ - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - - } - - //prevent input and select elements from propagating click to column sorters etc - if(column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea"){ - editorElement.addEventListener("mousedown",function(e){ - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - if(!reinitialize){ - self.headerFilterColumns.push(column); - } - - if(onRenderedCallback){ - onRenderedCallback(); - } - } - }else { - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } - } - - //hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) - hideHeaderFilterElements(){ - this.headerFilterColumns.forEach(function(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.style.display = 'none'; - } - }); - } - - //show all header filter elements (used to ensure correct column widths in "fitData" layout mode) - showHeaderFilterElements(){ - this.headerFilterColumns.forEach(function(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.style.display = ''; - } - }); - } - - //programmatically set focus of header filter - setHeaderFilterFocus(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.focus(); - }else { - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } - } - - //programmatically get value of header filter - getHeaderFilterValue(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - return column.modules.filter.value; - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - - //programmatically set value of header filter - setHeaderFilterValue(column, value){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, value, true); - column.modules.filter.success(value); - }else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - } - - reloadHeaderFilter(column){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, column.modules.filter.value, true); - }else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - } - - refreshFilter(){ - if(this.tableInitialized){ - if(this.table.options.filterMode === "remote"){ - this.reloadData(null, false, false); - }else { - this.refreshData(true); - } - } - - //TODO - Persist left position of row manager - // left = this.scrollLeft; - // this.scrollHorizontal(left); - } - - //check if the filters has changed since last use - trackChanges(){ - this.changed = true; - this.dispatch("filter-changed"); - } - - //check if the filters has changed since last use - hasChanged(){ - var changed = this.changed; - this.changed = false; - return changed; - } - - //set standard filters - setFilter(field, type, value, params){ - this.filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value, params:params}]; - } - - this.addFilter(field); - } - - //add filter to array - addFilter(field, type, value, params){ - var changed = false; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value, params:params}]; - } - - field.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - this.filterList.push(filter); - changed = true; - } - }); - - if(changed){ - this.trackChanges(); - } - } - - findFilter(filter){ - var column; - - if(Array.isArray(filter)){ - return this.findSubFilters(filter); - } - - var filterFunc = false; - - if(typeof filter.field == "function"){ - filterFunc = function(data){ - return filter.field(data, filter.type || {});// pass params to custom filter function - }; - }else { - - if(Filter.filters[filter.type]){ - - column = this.table.columnManager.getColumnByField(filter.field); - - if(column){ - filterFunc = function(data){ - return Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {}); - }; - }else { - filterFunc = function(data){ - return Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {}); - }; - } - - - }else { - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - filter.func = filterFunc; - - return filter.func ? filter : false; - } - - findSubFilters(filters){ - var output = []; - - filters.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - output.push(filter); - } - }); - - return output.length ? output : false; - } - - //get all filters - getFilters(all, ajax){ - var output = []; - - if(all){ - output = this.getHeaderFilters(); - } - - if(ajax){ - output.forEach(function(item){ - if(typeof item.type == "function"){ - item.type = "function"; - } - }); - } - - output = output.concat(this.filtersToArray(this.filterList, ajax)); - - return output; - } - - //filter to Object - filtersToArray(filterList, ajax){ - var output = []; - - filterList.forEach((filter) => { - var item; - - if(Array.isArray(filter)){ - output.push(this.filtersToArray(filter, ajax)); - }else { - item = {field:filter.field, type:filter.type, value:filter.value}; - - if(ajax){ - if(typeof item.type == "function"){ - item.type = "function"; - } - } - - output.push(item); - } - }); - - return output; - } - - //get all filters - getHeaderFilters(){ - var output = []; - - for(var key in this.headerFilters){ - output.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value}); - } - - return output; - } - - //remove filter from array - removeFilter(field, type, value){ - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach((filter) => { - var index = -1; - - if(typeof filter.field == "object"){ - index = this.filterList.findIndex((element) => { - return filter === element; - }); - }else { - index = this.filterList.findIndex((element) => { - return filter.field === element.field && filter.type === element.type && filter.value === element.value; - }); - } - - if(index > -1){ - this.filterList.splice(index, 1); - }else { - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - }); - - this.trackChanges(); - } - - //clear filters - clearFilter(all){ - this.filterList = []; - - if(all){ - this.clearHeaderFilter(); - } - - this.trackChanges(); - } - - //clear header filters - clearHeaderFilter(){ - this.headerFilters = {}; - this.prevHeaderFilterChangeCheck = "{}"; - - this.headerFilterColumns.forEach((column) => { - if(typeof column.modules.filter.value !== "undefined"){ - delete column.modules.filter.value; - } - column.modules.filter.prevSuccess = undefined; - this.reloadHeaderFilter(column); - }); - - this.trackChanges(); - } - - //search data and return matching rows - search (searchType, field, type, value){ - var activeRows = [], - filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach((row) => { - var match = true; - - filterList.forEach((filter) => { - if(!this.filterRecurse(filter, row.getData())){ - match = false; - } - }); - - if(match){ - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - - }); - - return activeRows; - } - - //filter row array - filter(rowList, filters){ - var activeRows = [], - activeRowComponents = []; - - if(this.subscribedExternal("dataFiltering")){ - this.dispatchExternal("dataFiltering", this.getFilters(true)); - } - - if(this.table.options.filterMode !== "remote" && (this.filterList.length || Object.keys(this.headerFilters).length)){ - - rowList.forEach((row) => { - if(this.filterRow(row)){ - activeRows.push(row); - } - }); - - }else { - activeRows = rowList.slice(0); - } - - if(this.subscribedExternal("dataFiltered")){ - - activeRows.forEach((row) => { - activeRowComponents.push(row.getComponent()); - }); - - this.dispatchExternal("dataFiltered", this.getFilters(true), activeRowComponents); - } - - return activeRows; - } - - //filter individual row - filterRow(row, filters){ - var match = true, - data = row.getData(); - - this.filterList.forEach((filter) => { - if(!this.filterRecurse(filter, data)){ - match = false; - } - }); - - - for(var field in this.headerFilters){ - if(!this.headerFilters[field].func(data)){ - match = false; - } - } - - return match; - } - - filterRecurse(filter, data){ - var match = false; - - if(Array.isArray(filter)){ - filter.forEach((subFilter) => { - if(this.filterRecurse(subFilter, data)){ - match = true; - } - }); - }else { - match = filter.func(data); - } - - return match; - } - } - - Filter.moduleName = "filter"; - - //load defaults - Filter.filters = defaultFilters; - - function plaintext(cell, formatterParams, onRendered){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - function html$1(cell, formatterParams, onRendered){ - return cell.getValue(); - } - - function textarea$1(cell, formatterParams, onRendered){ - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - function money(cell, formatterParams, onRendered){ - var floatVal = parseFloat(cell.getValue()), - sign = "", - number, integer, decimal, rgx, value; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var negativeSign = formatterParams.negativeSign || "-"; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if(isNaN(floatVal)){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - if(floatVal < 0){ - floatVal = Math.abs(floatVal); - sign = negativeSign; - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - if (formatterParams.thousand !== false) { - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)){ - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - } - - value = integer + decimal; - - if(sign === true){ - value = "(" + value + ")"; - return after ? value + symbol : symbol + value; - }else { - return after ? sign + value + symbol : sign + symbol + value; - } - } - - function link(cell, formatterParams, onRendered){ - var value = cell.getValue(), - urlPrefix = formatterParams.urlPrefix || "", - download = formatterParams.download, - label = value, - el = document.createElement("a"), - data; - - function labelTraverse(path, data){ - var item = path.shift(), - value = data[item]; - - if(path.length && typeof value === "object"){ - return labelTraverse(path, value); - } - - return value; - } - - if(formatterParams.labelField){ - data = cell.getData(); - label = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data); - } - - if(formatterParams.label){ - switch(typeof formatterParams.label){ - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if(label){ - if(formatterParams.urlField){ - data = cell.getData(); - - value = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data); - } - - if(formatterParams.url){ - switch(typeof formatterParams.url){ - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if(formatterParams.target){ - el.setAttribute("target", formatterParams.target); - } - - if(formatterParams.download){ - - if(typeof download == "function"){ - download = download(cell); - }else { - download = download === true ? "" : download; - } - - el.setAttribute("download", download); - } - - el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label)); - - return el; - }else { - return " "; - } - } - - function image(cell, formatterParams, onRendered){ - var el = document.createElement("img"), - src = cell.getValue(); - - if(formatterParams.urlPrefix){ - src = formatterParams.urlPrefix + cell.getValue(); - } - - if(formatterParams.urlSuffix){ - src = src + formatterParams.urlSuffix; - } - - el.setAttribute("src", src); - - switch(typeof formatterParams.height){ - case "number": - el.style.height = formatterParams.height + "px"; - break; - - case "string": - el.style.height = formatterParams.height; - break; - } - - switch(typeof formatterParams.width){ - case "number": - el.style.width = formatterParams.width + "px"; - break; - - case "string": - el.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function(){ - cell.getRow().normalizeHeight(); - }); - - return el; - } - - function tickCross$1(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - trueValueSet = Object.keys(formatterParams).includes("trueValue"), - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === "true" || value === "True" || value === 1 || value === "1")))){ - element.setAttribute("aria-checked", true); - return tick || ""; - }else { - if(empty && (value === "null" || value === "" || value === null || typeof value === "undefined")){ - element.setAttribute("aria-checked", "mixed"); - return ""; - }else { - element.setAttribute("aria-checked", false); - return cross || ""; - } - } - } - - function datetime$1(cell, formatterParams, onRendered){ - var DT = window.DateTime || luxon.DateTime; - var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss"; - var outputFormat = formatterParams.outputFormat || "dd/MM/yyyy HH:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - if(typeof DT != "undefined"){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else { - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - if(newDatetime.isValid){ - if(formatterParams.timezone){ - newDatetime = newDatetime.setZone(formatterParams.timezone); - } - - return newDatetime.toFormat(outputFormat); - }else { - if(invalid === true || !value){ - return value; - }else if(typeof invalid === "function"){ - return invalid(value); - }else { - return invalid; - } - } - }else { - console.error("Format Error - 'datetime' formatter is dependant on luxon.js"); - } - } - - function datetimediff (cell, formatterParams, onRendered) { - var DT = window.DateTime || luxon.DateTime; - var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : "days"; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : DT.now(); - var value = cell.getValue(); - - if(typeof DT != "undefined"){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else { - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - if (newDatetime.isValid){ - if(humanize){ - return newDatetime.diff(date, unit).toHuman() + (suffix ? " " + suffix : ""); - }else { - return parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? " " + suffix : ""); - } - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }else { - console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js"); - } - } - - function lookup (cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; - } - - function star$1(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5, - stars = document.createElement("span"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"), - starActive = '', - starInactive = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - star.setAttribute("width", "14"); - star.setAttribute("height", "14"); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - value = value && !isNaN(value) ? parseInt(value) : 0; - - value = Math.max(0, Math.min(value, maxStars)); - - for(var i=1;i<= maxStars;i++){ - var nextStar = star.cloneNode(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return stars; - } - - function traffic(cell, formatterParams, onRendered){ - var value = this.sanitizeHTML(cell.getValue()) || 0, - el = document.createElement("span"), - max = formatterParams && formatterParams.max ? formatterParams.max : 100, - min = formatterParams && formatterParams.min ? formatterParams.min : 0, - colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"], - color = "#666666", - percent, percentValue; - - if(isNaN(value) || typeof cell.getValue() === "undefined"){ - return; - } - - el.classList.add("tabulator-traffic-light"); - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set color - switch(typeof colors){ - case "string": - color = colors; - break; - case "function": - color = colors(value); - break; - case "object": - if(Array.isArray(colors)){ - var unit = 100 / colors.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, colors.length - 1); - index = Math.max(index, 0); - color = colors[index]; - break; - } - } - - el.style.backgroundColor = color; - - return el; - } - - function progress$1(cell, formatterParams = {}, onRendered){ //progress bar - var value = this.sanitizeHTML(cell.getValue()) || 0, - element = cell.getElement(), - max = formatterParams.max ? formatterParams.max : 100, - min = formatterParams.min ? formatterParams.min : 0, - legendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : "center", - percent, percentValue, color, legend, legendColor; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch(typeof formatterParams.color){ - case "string": - color = formatterParams.color; - break; - case "function": - color = formatterParams.color(value); - break; - case "object": - if(Array.isArray(formatterParams.color)){ - let unit = 100 / formatterParams.color.length; - let index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.color.length - 1); - index = Math.max(index, 0); - color = formatterParams.color[index]; - break; - } - default: - color = "#2DC214"; - } - - //generate legend - switch(typeof formatterParams.legend){ - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - switch(typeof formatterParams.legendColor){ - case "string": - legendColor = formatterParams.legendColor; - break; - case "function": - legendColor = formatterParams.legendColor(value); - break; - case "object": - if(Array.isArray(formatterParams.legendColor)){ - let unit = 100 / formatterParams.legendColor.length; - let index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.legendColor.length - 1); - index = Math.max(index, 0); - legendColor = formatterParams.legendColor[index]; - } - break; - default: - legendColor = "#000"; - } - - element.style.minWidth = "30px"; - element.style.position = "relative"; - - element.setAttribute("aria-label", percentValue); - - var barEl = document.createElement("div"); - barEl.style.display = "inline-block"; - barEl.style.width = percentValue + "%"; - barEl.style.backgroundColor = color; - barEl.style.height = "100%"; - - barEl.setAttribute('data-max', max); - barEl.setAttribute('data-min', min); - - var barContainer = document.createElement("div"); - barContainer.style.position = "relative"; - barContainer.style.width = "100%"; - barContainer.style.height = "100%"; - - if(legend){ - var legendEl = document.createElement("div"); - legendEl.style.position = "absolute"; - legendEl.style.top = 0; - legendEl.style.left = 0; - legendEl.style.textAlign = legendAlign; - legendEl.style.width = "100%"; - legendEl.style.color = legendColor; - legendEl.innerHTML = legend; - } - - onRendered(function(){ - - //handle custom element needed if formatter is to be included in printed/downloaded output - if(!(cell instanceof CellComponent)){ - var holderEl = document.createElement("div"); - holderEl.style.position = "absolute"; - holderEl.style.top = "4px"; - holderEl.style.bottom = "4px"; - holderEl.style.left = "4px"; - holderEl.style.right = "4px"; - - element.appendChild(holderEl); - - element = holderEl; - } - - element.appendChild(barContainer); - barContainer.appendChild(barEl); - - if(legend){ - barContainer.appendChild(legendEl); - } - }); - - return ""; - } - - function color(cell, formatterParams, onRendered){ - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; - } - - function buttonTick(cell, formatterParams, onRendered){ - return ''; - } - - function buttonCross(cell, formatterParams, onRendered){ - return ''; - } - - function rownum(cell, formatterParams, onRendered){ - var content = document.createElement("span"); - var row = cell.getRow(); - var table = cell.getTable(); - - row.watchPosition((position) => { - if (formatterParams.relativeToPage) { - position += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1); - } - content.innerText = position; - }); - - return content; - } - - function handle(cell, formatterParams, onRendered){ - cell.getElement().classList.add("tabulator-row-handle"); - return "
    "; - } - - function responsiveCollapse(cell, formatterParams, onRendered){ - var el = document.createElement("div"), - config = cell.getRow()._row.modules.responsiveLayout; - - el.classList.add("tabulator-responsive-collapse-toggle"); - - el.innerHTML = ` - - - - - - -`; - - cell.getElement().classList.add("tabulator-row-handle"); - - function toggleList(isOpen){ - var collapseEl = config.element; - - config.open = isOpen; - - if(collapseEl){ - - if(config.open){ - el.classList.add("open"); - collapseEl.style.display = ''; - }else { - el.classList.remove("open"); - collapseEl.style.display = 'none'; - } - } - } - - el.addEventListener("click", function(e){ - e.stopImmediatePropagation(); - toggleList(!config.open); - cell.getTable().rowManager.adjustTableSize(); - }); - - toggleList(config.open); - - return el; - } - - function rowSelection(cell, formatterParams, onRendered){ - var checkbox = document.createElement("input"); - var blocked = false; - - checkbox.type = 'checkbox'; - - checkbox.setAttribute("aria-label", "Select Row"); - - if(this.table.modExists("selectRow", true)){ - - checkbox.addEventListener("click", (e) => { - e.stopPropagation(); - }); - - if(typeof cell.getRow == 'function'){ - var row = cell.getRow(); - - if(row instanceof RowComponent){ - - checkbox.addEventListener("change", (e) => { - if(this.table.options.selectableRowsRangeMode === "click"){ - if(!blocked){ - row.toggleSelect(); - }else { - blocked = false; - } - }else { - row.toggleSelect(); - } - }); - - if(this.table.options.selectableRowsRangeMode === "click"){ - checkbox.addEventListener("click", (e) => { - blocked = true; - this.table.modules.selectRow.handleComplexRowClick(row._row, e); - }); - } - - checkbox.checked = row.isSelected && row.isSelected(); - this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox); - }else { - checkbox = ""; - } - }else { - checkbox.addEventListener("change", (e) => { - if(this.table.modules.selectRow.selectedRows.length){ - this.table.deselectRow(); - }else { - this.table.selectRow(formatterParams.rowRange); - } - }); - - this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox); - } - } - - return checkbox; - } - - var defaultFormatters = { - plaintext:plaintext, - html:html$1, - textarea:textarea$1, - money:money, - link:link, - image:image, - tickCross:tickCross$1, - datetime:datetime$1, - datetimediff:datetimediff, - lookup:lookup, - star:star$1, - traffic:traffic, - progress:progress$1, - color:color, - buttonTick:buttonTick, - buttonCross:buttonCross, - rownum:rownum, - handle:handle, - responsiveCollapse:responsiveCollapse, - rowSelection:rowSelection, - }; - - class Format extends Module{ - - constructor(table){ - super(table); - - this.registerColumnOption("formatter"); - this.registerColumnOption("formatterParams"); - - this.registerColumnOption("formatterPrint"); - this.registerColumnOption("formatterPrintParams"); - this.registerColumnOption("formatterClipboard"); - this.registerColumnOption("formatterClipboardParams"); - this.registerColumnOption("formatterHtmlOutput"); - this.registerColumnOption("formatterHtmlOutputParams"); - this.registerColumnOption("titleFormatter"); - this.registerColumnOption("titleFormatterParams"); - } - - initialize(){ - this.subscribe("cell-format", this.formatValue.bind(this)); - this.subscribe("cell-rendered", this.cellRendered.bind(this)); - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("column-format", this.formatHeader.bind(this)); - } - - //initialize column formatter - initializeColumn(column){ - column.modules.format = this.lookupFormatter(column, ""); - - if(typeof column.definition.formatterPrint !== "undefined"){ - column.modules.format.print = this.lookupFormatter(column, "Print"); - } - - if(typeof column.definition.formatterClipboard !== "undefined"){ - column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard"); - } - - if(typeof column.definition.formatterHtmlOutput !== "undefined"){ - column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput"); - } - } - - lookupFormatter(column, type){ - var config = {params:column.definition["formatter" + type + "Params"] || {}}, - formatter = column.definition["formatter" + type]; - - //set column formatter - switch(typeof formatter){ - case "string": - if(Format.formatters[formatter]){ - config.formatter = Format.formatters[formatter]; - }else { - console.warn("Formatter Error - No such formatter found: ", formatter); - config.formatter = Format.formatters.plaintext; - } - break; - - case "function": - config.formatter = formatter; - break; - - default: - config.formatter = Format.formatters.plaintext; - break; - } - - return config; - } - - cellRendered(cell){ - if(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){ - cell.modules.format.renderedCallback(); - cell.modules.format.rendered = true; - } - } - - //return a formatted value for a column header - formatHeader(column, title, el){ - var formatter, params, onRendered, mockCell; - - if(column.definition.titleFormatter){ - formatter = this.getFormatter(column.definition.titleFormatter); - - onRendered = (callback) => { - column.titleFormatterRendered = callback; - }; - - mockCell = { - getValue:function(){ - return title; - }, - getElement:function(){ - return el; - }, - getType:function(){ - return "header"; - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - } - }; - - params = column.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - return formatter.call(this, mockCell, params, onRendered); - }else { - return title; - } - } - - - //return a formatted value for a cell - formatValue(cell){ - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback){ - if(!cell.modules.format){ - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; - } - - return cell.column.modules.format.formatter.call(this, component, params, onRendered); - } - - formatExportValue(cell, type){ - var formatter = cell.column.modules.format[type], - params; - - if(formatter){ - params = typeof formatter.params === "function" ? formatter.params(cell.getComponent()) : formatter.params; - - function onRendered(callback){ - if(!cell.modules.format){ - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; - } - - return formatter.formatter.call(this, cell.getComponent(), params, onRendered); - - }else { - return this.formatValue(cell); - } - } - - sanitizeHTML(value){ - if(value){ - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=/]/g, function (s) { - return entityMap[s]; - }); - }else { - return value; - } - } - - emptyToSpace(value){ - return value === null || typeof value === "undefined" || value === "" ? " " : value; - } - - //get formatter for cell - getFormatter(formatter){ - switch(typeof formatter){ - case "string": - if(Format.formatters[formatter]){ - formatter = Format.formatters[formatter]; - }else { - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = Format.formatters.plaintext; - } - break; - - case "function": - //Custom formatter Function, do nothing - break; - - default: - formatter = Format.formatters.plaintext; - break; - } - - return formatter; - } - } - - Format.moduleName = "format"; - - //load defaults - Format.formatters = defaultFormatters; - - class FrozenColumns extends Module{ - - constructor(table){ - super(table); - - this.leftColumns = []; - this.rightColumns = []; - this.initializationMode = "left"; - this.active = false; - this.blocked = true; - - this.registerColumnOption("frozen"); - } - - //reset initial state - reset(){ - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.active = false; - } - - initialize(){ - this.subscribe("cell-layout", this.layoutCell.bind(this)); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-width", this.layout.bind(this)); - this.subscribe("row-layout-after", this.layoutRow.bind(this)); - this.subscribe("table-layout", this.layout.bind(this)); - this.subscribe("columns-loading", this.reset.bind(this)); - - this.subscribe("column-add", this.reinitializeColumns.bind(this)); - this.subscribe("column-deleted", this.reinitializeColumns.bind(this)); - this.subscribe("column-hide", this.reinitializeColumns.bind(this)); - this.subscribe("column-show", this.reinitializeColumns.bind(this)); - this.subscribe("columns-loaded", this.reinitializeColumns.bind(this)); - - this.subscribe("table-redraw", this.layout.bind(this)); - this.subscribe("layout-refreshing", this.blockLayout.bind(this)); - this.subscribe("layout-refreshed", this.unblockLayout.bind(this)); - this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this)); - } - - blockLayout(){ - this.blocked = true; - } - - unblockLayout(){ - this.blocked = false; - } - - layoutCell(cell){ - this.layoutElement(cell.element, cell.column); - } - - reinitializeColumns(){ - this.reset(); - - this.table.columnManager.columnsByIndex.forEach((column) => { - this.initializeColumn(column); - }); - - this.layout(); - } - - //initialize specific column - initializeColumn(column){ - var config = {margin:0, edge:false}; - - if(!column.isGroup){ - if(this.frozenCheck(column)){ - config.position = this.initializationMode; - - if(this.initializationMode == "left"){ - this.leftColumns.push(column); - }else { - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - }else { - this.initializationMode = "right"; - } - } - } - - frozenCheck(column){ - if(column.parent.isGroup && column.definition.frozen){ - console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"); - } - - if(column.parent.isGroup){ - return this.frozenCheck(column.parent); - }else { - return column.definition.frozen; - } - } - - //layout calculation rows - layoutCalcRows(){ - if(this.table.modExists("columnCalcs")){ - if(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){ - this.layoutRow(this.table.modules.columnCalcs.topRow); - } - - if(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){ - this.layoutRow(this.table.modules.columnCalcs.botRow); - } - - if(this.table.modExists("groupRows")){ - this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()); - } - } - } - - layoutGroupCalcs(groups){ - groups.forEach((group) => { - if(group.calcs.top){ - this.layoutRow(group.calcs.top); - } - - if(group.calcs.bottom){ - this.layoutRow(group.calcs.bottom); - } - - if(group.groupList && group.groupList.length){ - this.layoutGroupCalcs(group.groupList); - } - }); - } - - //calculate column positions and layout headers - layoutColumnPosition(allCells){ - var leftParents = []; - - var leftMargin = 0; - var rightMargin = 0; - - this.leftColumns.forEach((column, i) => { - column.modules.frozen.marginValue = leftMargin; - column.modules.frozen.margin = column.modules.frozen.marginValue + "px"; - - if(column.visible){ - leftMargin += column.getWidth(); - } - - if(i == this.leftColumns.length - 1){ - column.modules.frozen.edge = true; - }else { - column.modules.frozen.edge = false; - } - - if(column.parent.isGroup){ - var parentEl = this.getColGroupParentElement(column); - if(!leftParents.includes(parentEl)){ - this.layoutElement(parentEl, column); - leftParents.push(parentEl); - } - - parentEl.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left"); - parentEl.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right"); - }else { - this.layoutElement(column.getElement(), column); - } - - if(allCells){ - column.cells.forEach((cell) => { - this.layoutElement(cell.getElement(true), column); - }); - } - }); - - this.rightColumns.forEach((column, i) => { - - column.modules.frozen.marginValue = rightMargin; - column.modules.frozen.margin = column.modules.frozen.marginValue + "px"; - - if(column.visible){ - rightMargin += column.getWidth(); - } - - if(i == this.rightColumns.length - 1){ - column.modules.frozen.edge = true; - }else { - column.modules.frozen.edge = false; - } - - if(column.parent.isGroup){ - this.layoutElement(this.getColGroupParentElement(column), column); - }else { - this.layoutElement(column.getElement(), column); - } - - if(allCells){ - column.cells.forEach((cell) => { - this.layoutElement(cell.getElement(true), column); - }); - } - }); - } - - getColGroupParentElement(column){ - return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement(); - } - - //layout columns appropriately - layout(){ - if(this.active && !this.blocked){ - //calculate left columns - this.layoutColumnPosition(); - - this.reinitializeRows(); - - this.layoutCalcRows(); - } - } - - reinitializeRows(){ - var visibleRows = this.table.rowManager.getVisibleRows(true); - var otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row)); - - otherRows.forEach((row) =>{ - row.deinitialize(); - }); - - visibleRows.forEach((row) =>{ - if(row.type === "row"){ - this.layoutRow(row); - } - }); - } - - layoutRow(row){ - if(this.table.options.layout === "fitDataFill" && this.rightColumns.length){ - this.table.rowManager.getTableElement().style.minWidth = "calc(100% - " + this.rightMargin + ")"; - } - - this.leftColumns.forEach((column) => { - var cell = row.getCell(column); - - if(cell){ - this.layoutElement(cell.getElement(true), column); - } - }); - - this.rightColumns.forEach((column) => { - var cell = row.getCell(column); - - if(cell){ - this.layoutElement(cell.getElement(true), column); - } - }); - } - - layoutElement(element, column){ - var position; - - if(column.modules.frozen && element){ - element.style.position = "sticky"; - - if(this.table.rtl){ - position = column.modules.frozen.position === "left" ? "right" : "left"; - }else { - position = column.modules.frozen.position; - } - - element.style[position] = column.modules.frozen.margin; - - element.classList.add("tabulator-frozen"); - - element.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left"); - element.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right"); - } - } - - adjustForScrollbar(width){ - if(this.rightColumns.length){ - this.table.columnManager.getContentsElement().style.width = "calc(100% - " + width + "px)"; - } - } - - _calcSpace(columns, index){ - var width = 0; - - for (let i = 0; i < index; i++){ - if(columns[i].visible){ - width += columns[i].getWidth(); - } - } - - return width; - } - } - - FrozenColumns.moduleName = "frozenColumns"; - - class FrozenRows extends Module{ - - constructor(table){ - super(table); - - this.topElement = document.createElement("div"); - this.rows = []; - - //register component functions - this.registerComponentFunction("row", "freeze", this.freezeRow.bind(this)); - this.registerComponentFunction("row", "unfreeze", this.unfreezeRow.bind(this)); - this.registerComponentFunction("row", "isFrozen", this.isRowFrozen.bind(this)); - - //register table options - this.registerTableOption("frozenRowsField", "id"); //field to choose frozen rows by - this.registerTableOption("frozenRows", false); //holder for frozen row identifiers - } - - initialize(){ - var fragment = document.createDocumentFragment(); - - this.rows = []; - - this.topElement.classList.add("tabulator-frozen-rows-holder"); - - fragment.appendChild(document.createElement("br")); - fragment.appendChild(this.topElement); - - // this.table.columnManager.element.append(this.topElement); - this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling); - - this.subscribe("row-deleting", this.detachRow.bind(this)); - this.subscribe("rows-visible", this.visibleRows.bind(this)); - - this.registerDisplayHandler(this.getRows.bind(this), 10); - - if(this.table.options.frozenRows){ - this.subscribe("data-processed", this.initializeRows.bind(this)); - this.subscribe("row-added", this.initializeRow.bind(this)); - this.subscribe("table-redrawing", this.resizeHolderWidth.bind(this)); - this.subscribe("column-resized", this.resizeHolderWidth.bind(this)); - this.subscribe("column-show", this.resizeHolderWidth.bind(this)); - this.subscribe("column-hide", this.resizeHolderWidth.bind(this)); - } - - this.resizeHolderWidth(); - } - - resizeHolderWidth(){ - this.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + "px"; - } - - initializeRows(){ - this.table.rowManager.getRows().forEach((row) => { - this.initializeRow(row); - }); - } - - initializeRow(row){ - var frozenRows = this.table.options.frozenRows, - rowType = typeof frozenRows; - - if(rowType === "number"){ - if(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){ - this.freezeRow(row); - } - }else if(rowType === "function"){ - if(frozenRows.call(this.table, row.getComponent())){ - this.freezeRow(row); - } - }else if(Array.isArray(frozenRows)){ - if(frozenRows.includes(row.data[this.options("frozenRowsField")])){ - this.freezeRow(row); - } - } - } - - isRowFrozen(row){ - var index = this.rows.indexOf(row); - return index > -1; - } - - isFrozen(){ - return !!this.rows.length; - } - - visibleRows(viewable, rows){ - this.rows.forEach((row) => { - rows.push(row); - }); - - return rows; - } - - //filter frozen rows out of display data - getRows(rows){ - var output = rows.slice(0); - - this.rows.forEach(function(row){ - var index = output.indexOf(row); - - if(index > -1){ - output.splice(index, 1); - } - }); - - return output; - } - - freezeRow(row){ - if(!row.modules.frozen){ - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - - this.rows.push(row); - - this.refreshData(false, "display"); - - this.table.rowManager.adjustTableSize(); - - this.styleRows(); - - }else { - console.warn("Freeze Error - Row is already frozen"); - } - } - - unfreezeRow(row){ - if(row.modules.frozen){ - - row.modules.frozen = false; - - this.detachRow(row); - - this.table.rowManager.adjustTableSize(); - - this.refreshData(false, "display"); - - if(this.rows.length){ - this.styleRows(); - } - - }else { - console.warn("Freeze Error - Row is already unfrozen"); - } - } - - detachRow(row){ - var index = this.rows.indexOf(row); - - if(index > -1){ - var rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - - this.rows.splice(index, 1); - } - } - - styleRows(row){ - this.rows.forEach((row, i) => { - this.table.rowManager.styleRow(row, i); - }); - } - } - - FrozenRows.moduleName = "frozenRows"; - - //public group object - class GroupComponent { - constructor (group){ - this._group = group; - this.type = "GroupComponent"; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._group.groupManager.table.componentFunctionBinder.handle("group", target._group, name); - } - } - }); - } - - getKey(){ - return this._group.key; - } - - getField(){ - return this._group.field; - } - - getElement(){ - return this._group.element; - } - - getRows(){ - return this._group.getRows(true); - } - - getSubGroups(){ - return this._group.getSubGroups(true); - } - - getParentGroup(){ - return this._group.parent ? this._group.parent.getComponent() : false; - } - - isVisible(){ - return this._group.visible; - } - - show(){ - this._group.show(); - } - - hide(){ - this._group.hide(); - } - - toggle(){ - this._group.toggleVisibility(); - } - - scrollTo(position, ifVisible){ - return this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible); - } - - _getSelf(){ - return this._group; - } - - getTable(){ - return this._group.groupManager.table; - } - } - - //Group functions - class Group{ - - constructor(groupManager, parent, level, key, field, generator, oldGroup){ - this.groupManager = groupManager; - this.parent = parent; - this.key = key; - this.level = level; - this.field = field; - this.hasSubGroups = level < (groupManager.groupIDLookups.length - 1); - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.element = false; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - this.arrowElement = false; - - this.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]); - - this.component = null; - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); - } - - wipe(elementsOnly){ - if(!elementsOnly){ - if(this.groupList.length){ - this.groupList.forEach(function(group){ - group.wipe(); - }); - }else { - this.rows.forEach((row) => { - if(row.modules){ - delete row.modules.group; - } - }); - } - } - - this.element = false; - this.arrowElement = false; - this.elementContents = false; - } - - createElements(){ - var arrow = document.createElement("div"); - arrow.classList.add("tabulator-arrow"); - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-group-toggle"); - this.arrowElement.appendChild(arrow); - - //setup movable rows - if(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")){ - this.groupManager.table.modules.moveRow.initializeGroupHeader(this); - } - } - - createValueGroups(){ - var level = this.level + 1; - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - this.groupManager.allowedValues[level].forEach((value) => { - this._createGroup(value, level); - }); - } - } - - addBindings(){ - var toggleElement; - - if(this.groupManager.table.options.groupToggleElement){ - toggleElement = this.groupManager.table.options.groupToggleElement == "arrow" ? this.arrowElement : this.element; - - toggleElement.addEventListener("click", (e) => { - if(this.groupManager.table.options.groupToggleElement === "arrow"){ - e.stopPropagation(); - e.stopImmediatePropagation(); - } - - //allow click event to propagate before toggling visibility - setTimeout(() => { - this.toggleVisibility(); - }); - }); - } - } - - _createGroup(groupID, level){ - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); - } - - _addRowToGroup(row){ - - var level = this.level + 1; - - if(this.hasSubGroups){ - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } - }else { - if(!this.groups[groupKey]){ - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } - } - - _addRow(row){ - this.rows.push(row); - row.modules.group = this; - } - - insertRow(row, to, after){ - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if(toIndex > -1){ - if(after){ - this.rows.splice(toIndex+1, 0, row); - }else { - this.rows.splice(toIndex, 0, row); - } - }else { - if(after){ - this.rows.push(row); - }else { - this.rows.unshift(row); - } - } - - row.modules.group = this; - - // this.generateGroupHeaderContents(); - - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - - this.groupManager.updateGroupRows(true); - } - - scrollHeader(left){ - if(this.arrowElement){ - this.arrowElement.style.marginLeft = left; - - this.groupList.forEach(function(child){ - child.scrollHeader(left); - }); - } - } - - getRowIndex(row){} - - //update row data to match grouping constraints - conformRowData(data){ - if(this.field){ - data[this.field] = this.key; - }else { - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if(this.parent){ - data = this.parent.conformRowData(data); - } - - return data; - } - - removeRow(row){ - var index = this.rows.indexOf(row); - var el = row.getElement(); - - if(index > -1){ - this.rows.splice(index, 1); - } - - if(!this.groupManager.table.options.groupValues && !this.rows.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else { - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - - }else { - - if(el.parentNode){ - el.parentNode.removeChild(el); - } - - if(!this.groupManager.blockRedraw){ - this.generateGroupHeaderContents(); - - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } - - } - } - - removeGroup(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - - if(!this.groupList.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else { - this.groupManager.removeGroup(this); - } - } - } - } - - getHeadersAndRows(){ - var output = []; - - output.push(this); - - this._visSet(); - - - if(this.calcs.top){ - this.calcs.top.detachElement(); - this.calcs.top.deleteCells(); - } - - if(this.calcs.bottom){ - this.calcs.bottom.detachElement(); - this.calcs.bottom.deleteCells(); - } - - - - if(this.visible){ - if(this.groupList.length){ - this.groupList.forEach(function(group){ - output = output.concat(group.getHeadersAndRows()); - }); - - }else { - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - output = output.concat(this.rows); - - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - }else { - if(!this.groupList.length && this.groupManager.table.options.columnCalcs != "table"){ - - if(this.groupManager.table.modExists("columnCalcs")){ - if(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - if(this.groupManager.table.options.groupClosedShowCalcs){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - } - - if(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - if(this.groupManager.table.options.groupClosedShowCalcs){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - - } - - return output; - } - - getData(visible, transform){ - var output = []; - - this._visSet(); - - if(!visible || (visible && this.visible)){ - this.rows.forEach((row) => { - output.push(row.getData(transform || "data")); - }); - } - - return output; - } - - getRowCount(){ - var count = 0; - - if(this.groupList.length){ - this.groupList.forEach((group) => { - count += group.getRowCount(); - }); - }else { - count = this.rows.length; - } - return count; - } - - - toggleVisibility(){ - if(this.visible){ - this.hide(); - }else { - this.show(); - } - } - - hide(){ - this.visible = false; - - if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){ - - this.element.classList.remove("tabulator-group-visible"); - - if(this.groupList.length){ - this.groupList.forEach((group) => { - - var rows = group.getHeadersAndRows(); - - rows.forEach((row) => { - row.detachElement(); - }); - }); - - }else { - this.rows.forEach((row) => { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - } - - this.groupManager.updateGroupRows(true); - - }else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), false); - } - - show(){ - this.visible = true; - - if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){ - - this.element.classList.add("tabulator-group-visible"); - - var prev = this.generateElement(); - - if(this.groupList.length){ - this.groupList.forEach((group) => { - var rows = group.getHeadersAndRows(); - - rows.forEach((row) => { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - - }else { - this.rows.forEach((row) => { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - } - - this.groupManager.updateGroupRows(true); - }else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), true); - } - - _visSet(){ - var data = []; - - if(typeof this.visible == "function"){ - - this.rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent()); - } - } - - getRowGroup(row){ - var match = false; - if(this.groupList.length){ - this.groupList.forEach(function(group){ - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - }else { - if(this.rows.find(function(item){ - return item === row; - })){ - match = this; - } - } - - return match; - } - - getSubGroups(component){ - var output = []; - - this.groupList.forEach(function(child){ - output.push(component ? child.getComponent() : child); - }); - - return output; - } - - getRows(component, includeChildren){ - var output = []; - - if(includeChildren && this.groupList.length){ - this.groupList.forEach((group) => { - output = output.concat(group.getRows(component, includeChildren)); - }); - }else { - this.rows.forEach(function(row){ - output.push(component ? row.getComponent() : row); - }); - } - - return output; - } - - generateGroupHeaderContents(){ - var data = []; - - var rows = this.getRows(false, true); - - rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(typeof this.elementContents === "string"){ - this.element.innerHTML = this.elementContents; - }else { - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); - } - - getPath(path = []) { - path.unshift(this.key); - if(this.parent) { - this.parent.getPath(path); - } - return path; - } - - ////////////// Standard Row Functions ////////////// - - getElement(){ - return this.elementContents ? this.element : this.generateElement(); - } - - generateElement(){ - this.addBindings = false; - - this._visSet(); - - if(this.visible){ - this.element.classList.add("tabulator-group-visible"); - }else { - this.element.classList.remove("tabulator-group-visible"); - } - - for(var i = 0; i < this.element.childNodes.length; ++i){ - this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]); - } - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; - } - - detachElement(){ - if (this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - //normalize the height of elements in the row - normalizeHeight(){ - this.setHeight(this.element.clientHeight); - } - - initialize(force){ - if(!this.initialized || force){ - this.normalizeHeight(); - this.initialized = true; - } - } - - reinitialize(){ - this.initialized = false; - this.height = 0; - - if(Helpers.elVisible(this.element)){ - this.initialize(true); - } - } - - setHeight(height){ - if(this.height != height){ - this.height = height; - this.outerHeight = this.element.offsetHeight; - } - } - - //return rows outer height - getHeight(){ - return this.outerHeight; - } - - getGroup(){ - return this; - } - - reinitializeHeight(){} - - calcHeight(){} - - setCellHeight(){} - - clearCellHeight(){} - - deinitializeHeight(){} - - rendered(){} - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new GroupComponent(this); - } - - return this.component; - } - } - - class GroupRows extends Module{ - - constructor(table){ - super(table); - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function(){return false;}]; //starting state of group - this.headerGenerator = [function(){return "";}]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - - this.displayHandler = this.getRows.bind(this); - - this.blockRedraw = false; - - //register table options - this.registerTableOption("groupBy", false); //enable table grouping and set field to group by - this.registerTableOption("groupStartOpen", true); //starting state of group - this.registerTableOption("groupValues", false); - this.registerTableOption("groupUpdateOnCellEdit", false); - this.registerTableOption("groupHeader", false); //header generation function - this.registerTableOption("groupHeaderPrint", null); - this.registerTableOption("groupHeaderClipboard", null); - this.registerTableOption("groupHeaderHtmlOutput", null); - this.registerTableOption("groupHeaderDownload", null); - this.registerTableOption("groupToggleElement", "arrow"); - this.registerTableOption("groupClosedShowCalcs", false); - - //register table functions - this.registerTableFunction("setGroupBy", this.setGroupBy.bind(this)); - this.registerTableFunction("setGroupValues", this.setGroupValues.bind(this)); - this.registerTableFunction("setGroupStartOpen", this.setGroupStartOpen.bind(this)); - this.registerTableFunction("setGroupHeader", this.setGroupHeader.bind(this)); - this.registerTableFunction("getGroups", this.userGetGroups.bind(this)); - this.registerTableFunction("getGroupedData", this.userGetGroupedData.bind(this)); - - //register component functions - this.registerComponentFunction("row", "getGroup", this.rowGetGroup.bind(this)); - } - - //initialize group configuration - initialize(){ - this.subscribe("table-destroy", this._blockRedrawing.bind(this)); - this.subscribe("rows-wipe", this._blockRedrawing.bind(this)); - this.subscribe("rows-wiped", this._restore_redrawing.bind(this)); - - if(this.table.options.groupBy){ - if(this.table.options.groupUpdateOnCellEdit){ - this.subscribe("cell-value-updated", this.cellUpdated.bind(this)); - this.subscribe("row-data-changed", this.reassignRowToGroup.bind(this), 0); - } - - this.subscribe("table-built", this.configureGroupSetup.bind(this)); - - this.subscribe("row-deleting", this.rowDeleting.bind(this)); - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("scroll-horizontal", this.scrollHeaders.bind(this)); - this.subscribe("rows-wipe", this.wipe.bind(this)); - this.subscribe("rows-added", this.rowsUpdated.bind(this)); - this.subscribe("row-moving", this.rowMoving.bind(this)); - this.subscribe("row-adding-index", this.rowAddingIndex.bind(this)); - - this.subscribe("rows-sample", this.rowSample.bind(this)); - - this.subscribe("render-virtual-fill", this.virtualRenderFill.bind(this)); - - this.registerDisplayHandler(this.displayHandler, 20); - - this.initialized = true; - } - } - - _blockRedrawing(){ - this.blockRedraw = true; - } - - _restore_redrawing(){ - this.blockRedraw = false; - } - - configureGroupSetup(){ - if(this.table.options.groupBy){ - var groupBy = this.table.options.groupBy, - startOpen = this.table.options.groupStartOpen, - groupHeader = this.table.options.groupHeader; - - this.allowedValues = this.table.options.groupValues; - - if(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){ - console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"); - } - - this.headerGenerator = [function(){return "";}]; - this.startOpen = [function(){return false;}]; //starting state of group - - this.langBind("groups|item", (langValue, lang) => { - this.headerGenerator[0] = (value, count, data) => { //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + ((count === 1) ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if(groupBy){ - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both"){ - this.table.modules.columnCalcs.removeCalcs(); - } - }else { - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group"){ - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach((col) => { - if(col.definition.topCalc){ - this.table.modules.columnCalcs.initializeTopRow(); - } - - if(col.definition.bottomCalc){ - this.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - if(!Array.isArray(groupBy)){ - groupBy = [groupBy]; - } - - groupBy.forEach((group, i) => { - var lookupFunc, column; - - if(typeof group == "function"){ - lookupFunc = group; - }else { - column = this.table.columnManager.getColumnByField(group); - - if(column){ - lookupFunc = function(data){ - return column.getFieldValue(data); - }; - }else { - lookupFunc = function(data){ - return data[group]; - }; - } - } - - this.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func:lookupFunc, - values:this.allowedValues ? this.allowedValues[i] : false, - }); - }); - - if(startOpen){ - if(!Array.isArray(startOpen)){ - startOpen = [startOpen]; - } - - startOpen.forEach((level) => { - }); - - this.startOpen = startOpen; - } - - if(groupHeader){ - this.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - }else { - this.groupList = []; - this.groups = {}; - } - } - - rowSample(rows, prevValue){ - if(this.table.options.groupBy){ - var group = this.getGroups(false)[0]; - - prevValue.push(group.getRows(false)[0]); - } - - return prevValue; - } - - virtualRenderFill(){ - var el = this.table.rowManager.tableElement; - var rows = this.table.rowManager.getVisibleRows(); - - if(this.table.options.groupBy){ - rows = rows.filter((row) => { - return row.type !== "group"; - }); - - el.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + "px" : ""; - }else { - return rows; - } - } - - rowAddingIndex(row, index, top){ - if(this.table.options.groupBy){ - this.assignRowToGroup(row); - - var groupRows = row.modules.group.rows; - - if(groupRows.length > 1){ - if(!index || (index && groupRows.indexOf(index) == -1)){ - if(top){ - if(groupRows[0] !== row){ - index = groupRows[0]; - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - }else { - if(groupRows[groupRows.length -1] !== row){ - index = groupRows[groupRows.length -1]; - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - } - }else { - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - } - - return index; - } - } - - trackChanges(){ - this.dispatch("group-changed"); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - setGroupBy(groups){ - this.table.options.groupBy = groups; - - if(!this.initialized){ - this.initialize(); - } - - this.configureGroupSetup(); - - if(!groups && this.table.modExists("columnCalcs") && this.table.options.columnCalcs === true){ - this.table.modules.columnCalcs.reinitializeCalcs(); - } - - this.refreshData(); - - this.trackChanges(); - } - - setGroupValues(groupValues){ - this.table.options.groupValues = groupValues; - this.configureGroupSetup(); - this.refreshData(); - - this.trackChanges(); - } - - setGroupStartOpen(values){ - this.table.options.groupStartOpen = values; - this.configureGroupSetup(); - - if(this.table.options.groupBy){ - this.refreshData(); - - this.trackChanges(); - }else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } - - setGroupHeader(values){ - this.table.options.groupHeader = values; - this.configureGroupSetup(); - - if(this.table.options.groupBy){ - this.refreshData(); - - this.trackChanges(); - }else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } - - userGetGroups(values){ - return this.getGroups(true); - } - - // get grouped table data in the same format as getData() - userGetGroupedData(){ - return this.table.options.groupBy ? this.getGroupedData() : this.getData(); - } - - - /////////////////////////////////////// - ///////// Component Functions ///////// - /////////////////////////////////////// - - rowGetGroup(row){ - return row.modules.group ? row.modules.group.getComponent() : false; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - rowMoving(from, to, after){ - if(this.table.options.groupBy){ - if(!after && to instanceof Group){ - to = this.table.rowManager.prevDisplayRow(from) || to; - } - - var toGroup = to instanceof Group ? to : to.modules.group; - var fromGroup = from instanceof Group ? from : from.modules.group; - - if(toGroup === fromGroup){ - this.table.rowManager.moveRowInArray(toGroup.rows, from, to, after); - }else { - if(fromGroup){ - fromGroup.removeRow(from); - } - - toGroup.insertRow(from, to, after); - } - } - } - - - rowDeleting(row){ - //remove from group - if(this.table.options.groupBy && row.modules.group){ - row.modules.group.removeRow(row); - } - } - - rowsUpdated(row){ - if(this.table.options.groupBy){ - this.updateGroupRows(true); - } - } - - cellUpdated(cell){ - if(this.table.options.groupBy){ - this.reassignRowToGroup(cell.row); - } - } - - //return appropriate rows with group headers - getRows(rows){ - if(this.table.options.groupBy && this.groupIDLookups.length){ - - this.dispatchExternal("dataGrouping"); - - this.generateGroups(rows); - - if(this.subscribedExternal("dataGrouped")){ - this.dispatchExternal("dataGrouped", this.getGroups(true)); - } - - return this.updateGroupRows(); - - }else { - return rows.slice(0); - } - } - - getGroups(component){ - var groupComponents = []; - - this.groupList.forEach(function(group){ - groupComponents.push(component ? group.getComponent() : group); - }); - - return groupComponents; - } - - getChildGroups(group){ - var groupComponents = []; - - if(!group){ - group = this; - } - - group.groupList.forEach((child) => { - if(child.groupList.length){ - groupComponents = groupComponents.concat(this.getChildGroups(child)); - }else { - groupComponents.push(child); - } - }); - - return groupComponents; - } - - wipe(){ - if(this.table.options.groupBy){ - this.groupList.forEach(function(group){ - group.wipe(); - }); - - this.groupList = []; - this.groups = {}; - } - } - - pullGroupListData(groupList) { - var groupListData = []; - - groupList.forEach((group) => { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = this.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } - - else { - groupHeader.level = group.level; - groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group); - groupHeader.rowCount = group.getRows().length; - - groupListData.push(groupHeader); - - group.getRows().forEach((row) => { - groupListData.push(row.getData("data")); - }); - } - }); - - return groupListData; - } - - getGroupedData(){ - - return this.pullGroupListData(this.groupList); - } - - getRowGroup(row){ - var match = false; - - if(this.options("dataTree")){ - row = this.table.modules.dataTree.getTreeParentRoot(row); - } - - this.groupList.forEach((group) => { - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - - return match; - } - - countGroups(){ - return this.groupList.length; - } - - generateGroups(rows){ - var oldGroups = this.groups; - - this.groups = {}; - this.groupList = []; - - if(this.allowedValues && this.allowedValues[0]){ - this.allowedValues[0].forEach((value) => { - this.createGroup(value, 0, oldGroups); - }); - - rows.forEach((row) => { - this.assignRowToExistingGroup(row, oldGroups); - }); - }else { - rows.forEach((row) => { - this.assignRowToGroup(row, oldGroups); - }); - } - - Object.values(oldGroups).forEach((group) => { - group.wipe(true); - }); - } - - - createGroup(groupID, level, oldGroups){ - var groupKey = level + "_" + groupID, - group; - - oldGroups = oldGroups || []; - - group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); - } - - assignRowToExistingGroup(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } - } - - assignRowToGroup(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - newGroupNeeded = !this.groups["0_" + groupID]; - - if(newGroupNeeded){ - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; - } - - reassignRowToGroup(row){ - if(row.type === "row"){ - var oldRowGroup = row.modules.group, - oldGroupPath = oldRowGroup.getPath(), - newGroupPath = this.getExpectedPath(row), - samePath; - - // figure out if new group path is the same as old group path - samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => { - return element === newGroupPath[index]; - }); - - // refresh if they new path and old path aren't the same (aka the row's groupings have changed) - if(!samePath) { - oldRowGroup.removeRow(row); - this.assignRowToGroup(row, this.groups); - this.refreshData(true); - } - } - } - - getExpectedPath(row) { - var groupPath = [], rowData = row.getData(); - - this.groupIDLookups.forEach((groupId) => { - groupPath.push(groupId.func(rowData)); - }); - - return groupPath; - } - - updateGroupRows(force){ - var output = []; - - if(!this.blockRedraw){ - this.groupList.forEach((group) => { - output = output.concat(group.getHeadersAndRows()); - }); - - if(force){ - this.refreshData(true); - } - } - - return output; - } - - scrollHeaders(left){ - if(this.table.options.groupBy){ - if(this.table.options.renderHorizontal === "virtual"){ - left -= this.table.columnManager.renderer.vDomPadLeft; - } - - left = left + "px"; - - this.groupList.forEach((group) => { - group.scrollHeader(left); - }); - } - } - - removeGroup(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - } - } - - checkBasicModeGroupHeaderWidth(){ - var element = this.table.rowManager.tableElement, - onlyGroupHeaders = true; - - this.table.rowManager.getDisplayRows().forEach((row, index) =>{ - this.table.rowManager.styleRow(row, index); - element.appendChild(row.getElement()); - row.initialize(true); - - if(row.type !== "group"){ - onlyGroupHeaders = false; - } - }); - - if(onlyGroupHeaders){ - element.style.minWidth = this.table.columnManager.getWidth() + "px"; - }else { - element.style.minWidth = ""; - } - } - - } - - GroupRows.moduleName = "groupRows"; - - var defaultUndoers = { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.oldValue); - action.component.cellRendered(); - }, - - rowAdd: function(action){ - action.component.deleteActual(); - - this.table.rowManager.checkPlaceholder(); - }, - - rowDelete: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - } - - this._rebindRow(action.component, newRow); - - this.table.rowManager.checkPlaceholder(); - }, - - rowMove: function(action){ - var after = (action.data.posFrom - action.data.posTo) > 0; - - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after); - - this.table.rowManager.regenerateRowPositions(); - this.table.rowManager.reRenderInPosition(); - }, - }; - - var defaultRedoers = { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.newValue); - action.component.cellRendered(); - }, - - rowAdd: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - } - - this._rebindRow(action.component, newRow); - - this.table.rowManager.checkPlaceholder(); - }, - - rowDelete:function(action){ - action.component.deleteActual(); - - this.table.rowManager.checkPlaceholder(); - }, - - rowMove: function(action){ - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after); - - this.table.rowManager.regenerateRowPositions(); - this.table.rowManager.reRenderInPosition(); - }, - }; - - class History extends Module{ - - constructor(table){ - super(table); - - this.history = []; - this.index = -1; - - this.registerTableOption("history", false); //enable edit history - } - - initialize(){ - if(this.table.options.history){ - this.subscribe("cell-value-updated", this.cellUpdated.bind(this)); - this.subscribe("cell-delete", this.clearComponentHistory.bind(this)); - this.subscribe("row-delete", this.rowDeleted.bind(this)); - this.subscribe("rows-wipe", this.clear.bind(this)); - this.subscribe("row-added", this.rowAdded.bind(this)); - this.subscribe("row-move", this.rowMoved.bind(this)); - } - - this.registerTableFunction("undo", this.undo.bind(this)); - this.registerTableFunction("redo", this.redo.bind(this)); - this.registerTableFunction("getHistoryUndoSize", this.getHistoryUndoSize.bind(this)); - this.registerTableFunction("getHistoryRedoSize", this.getHistoryRedoSize.bind(this)); - this.registerTableFunction("clearHistory", this.clear.bind(this)); - } - - rowMoved(from, to, after){ - this.action("rowMove", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after}); - } - - rowAdded(row, data, pos, index){ - this.action("rowAdd", row, {data:data, pos:pos, index:index}); - } - - rowDeleted(row){ - var index, rows; - - if(this.table.options.groupBy){ - - rows = row.getComponent().getGroup()._getSelf().rows; - index = rows.indexOf(row); - - if(index){ - index = rows[index-1]; - } - }else { - index = row.table.rowManager.getRowIndex(row); - - if(index){ - index = row.table.rowManager.rows[index-1]; - } - } - - this.action("rowDelete", row, {data:row.getData(), pos:!index, index:index}); - } - - cellUpdated(cell){ - this.action("cellEdit", cell, {oldValue:cell.oldValue, newValue:cell.value}); - } - - clear(){ - this.history = []; - this.index = -1; - } - - action(type, component, data){ - this.history = this.history.slice(0, this.index + 1); - - this.history.push({ - type:type, - component:component, - data:data, - }); - - this.index ++; - } - - getHistoryUndoSize(){ - return this.index + 1; - } - - getHistoryRedoSize(){ - return this.history.length - (this.index + 1); - } - - clearComponentHistory(component){ - var index = this.history.findIndex(function(item){ - return item.component === component; - }); - - if(index > -1){ - this.history.splice(index, 1); - if(index <= this.index){ - this.index--; - } - - this.clearComponentHistory(component); - } - } - - undo(){ - if(this.index > -1){ - let action = this.history[this.index]; - - History.undoers[action.type].call(this, action); - - this.index--; - - this.dispatchExternal("historyUndo", action.type, action.component.getComponent(), action.data); - - return true; - }else { - console.warn(this.options("history") ? "History Undo Error - No more history to undo" : "History module not enabled"); - return false; - } - } - - redo(){ - if(this.history.length-1 > this.index){ - - this.index++; - - let action = this.history[this.index]; - - History.redoers[action.type].call(this, action); - - this.dispatchExternal("historyRedo", action.type, action.component.getComponent(), action.data); - - return true; - }else { - console.warn(this.options("history") ? "History Redo Error - No more history to redo" : "History module not enabled"); - return false; - } - } - - //rebind rows to new element after deletion - _rebindRow(oldRow, newRow){ - this.history.forEach(function(action){ - if(action.component instanceof Row){ - if(action.component === oldRow){ - action.component = newRow; - } - }else if(action.component instanceof Cell){ - if(action.component.row === oldRow){ - var field = action.component.column.getField(); - - if(field){ - action.component = newRow.getCell(field); - } - - } - } - }); - } - } - - History.moduleName = "history"; - - //load defaults - History.undoers = defaultUndoers; - History.redoers = defaultRedoers; - - class HtmlTableImport extends Module{ - - constructor(table){ - super(table); - - this.fieldIndex = []; - this.hasIndex = false; - } - - initialize(){ - this.tableElementCheck(); - } - - tableElementCheck(){ - if(this.table.originalElement && this.table.originalElement.tagName === "TABLE"){ - if(this.table.originalElement.childNodes.length){ - this.parseTable(); - }else { - console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."); - } - } - } - - parseTable(){ - var element = this.table.originalElement, - options = this.table.options, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = []; - - this.hasIndex = false; - - this.dispatchExternal("htmlImporting"); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for Tabulator inline options - this._extractOptions(element, options); - - if(headers.length){ - this._extractHeaders(headers, rows); - }else { - this._generateBlankHeaders(headers, rows); - } - - //iterate through table rows and build data set - for(var index = 0; index < rows.length; index++){ - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the don't exist in table - if(!this.hasIndex){ - item[options.index] = index; - } - - for(var i = 0; i < cells.length; i++){ - var cell = cells[i]; - if(typeof this.fieldIndex[i] !== "undefined"){ - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - options.data = data; - - this.dispatchExternal("htmlImported"); - } - - //extract tabulator attribute options - _extractOptions(element, options, defaultOptions){ - var attributes = element.attributes; - var optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options); - var optionsList = {}; - - optionsArr.forEach((item) => { - optionsList[item.toLowerCase()] = item; - }); - - for(var index in attributes){ - var attrib = attributes[index]; - var name; - - if(attrib && typeof attrib == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0){ - name = attrib.name.replace("tabulator-", ""); - - if(typeof optionsList[name] !== "undefined"){ - options[optionsList[name]] = this._attribValue(attrib.value); - } - } - } - } - - //get value of attribute - _attribValue(value){ - if(value === "true"){ - return true; - } - - if(value === "false"){ - return false; - } - - return value; - } - - //find column if it has already been defined - _findCol(title){ - var match = this.table.options.columns.find((column) => { - return column.title === title; - }); - - return match || false; - } - - //extract column from headers - _extractHeaders(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width; - - if(col){ - exists = true; - }else { - col = {title:header.textContent.trim()}; - } - - if(!col.field) { - col.field = header.textContent.trim().toLowerCase().replaceAll(" ", "_"); - } - - width = header.getAttribute("width"); - - if(width && !col.width) { - col.width = width; - } - - //check for Tabulator inline options - this._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults); - - this.fieldIndex[index] = col.field; - - if(col.field == this.table.options.index){ - this.hasIndex = true; - } - - if(!exists){ - this.table.options.columns.push(col); - } - - } - } - - //generate blank headers - _generateBlankHeaders(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - col = {title:"", field:"col" + index}; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if(width){ - col.width = width; - } - - this.table.options.columns.push(col); - } - } - } - - HtmlTableImport.moduleName = "htmlTableImport"; - - function csvImporter(input){ - var data = [], - row = 0, - col = 0, - inQuote = false; - - //Iterate over each character - for (let index = 0; index < input.length; index++) { - let char = input[index], - nextChar = input[index+1]; - - //Initialize empty row - if(!data[row]){ - data[row] = []; - } - - //Initialize empty column - if(!data[row][col]){ - data[row][col] = ""; - } - - //Handle quotation mark inside string - if (char == '"' && inQuote && nextChar == '"') { - data[row][col] += char; - index++; - continue; - } - - //Begin / End Quote - if (char == '"') { - inQuote = !inQuote; - continue; - } - - //Next column (if not in quote) - if (char == ',' && !inQuote) { - col++; - continue; - } - - //New row if new line and not in quote (CRLF) - if (char == '\r' && nextChar == '\n' && !inQuote) { - col = 0; - row++; - index++; - continue; - } - - //New row if new line and not in quote (CR or LF) - if ((char == '\r' || char == '\n') && !inQuote) { - col = 0; - row++; - continue; - } - - //Normal Character, append to column - data[row][col] += char; - } - - return data; - } - - function json$1(input){ - try { - return JSON.parse(input); - } catch(e) { - console.warn("JSON Import Error - File contents is invalid JSON", e); - return Promise.reject(); - } - } - - function arrayImporter(input){ - return input; - } - - var defaultImporters = { - csv:csvImporter, - json:json$1, - array:arrayImporter, - }; - - class Import extends Module{ - - constructor(table){ - super(table); - - this.registerTableOption("importFormat"); - this.registerTableOption("importReader", "text"); - } - - initialize(){ - this.registerTableFunction("import", this.importFromFile.bind(this)); - - if(this.table.options.importFormat){ - this.subscribe("data-loading", this.loadDataCheck.bind(this), 10); - this.subscribe("data-load", this.loadData.bind(this), 10); - } - } - - loadDataCheck(data){ - return this.table.options.importFormat && (typeof data === "string" || (Array.isArray(data) && data.length && Array.isArray(data))); - } - - loadData(data, params, config, silent, previousData){ - return this.importData(this.lookupImporter(), data) - .then(this.structureData.bind(this)) - .catch((err) => { - console.error("Import Error:", err || "Unable to import data"); - return Promise.reject(err); - }); - } - - lookupImporter(importFormat){ - var importer; - - if(!importFormat){ - importFormat = this.table.options.importFormat; - } - - if(typeof importFormat === "string"){ - importer = Import.importers[importFormat]; - }else { - importer = importFormat; - } - - if(!importer){ - console.error("Import Error - Importer not found:", importFormat); - } - - return importer; - } - - importFromFile(importFormat, extension){ - var importer = this.lookupImporter(importFormat); - - if(importer){ - return this.pickFile(extension) - .then(this.importData.bind(this, importer)) - .then(this.structureData.bind(this)) - .then(this.setData.bind(this)) - .catch((err) => { - console.error("Import Error:", err || "Unable to import file"); - return Promise.reject(err); - }); - } - } - - pickFile(extensions){ - return new Promise((resolve, reject) => { - var input = document.createElement("input"); - input.type = "file"; - input.accept = extensions; - - input.addEventListener("change", (e) => { - var file = input.files[0], - reader = new FileReader(); - - switch(this.table.options.importReader){ - case "buffer": - reader.readAsArrayBuffer(file); - break; - - case "binary": - reader.readAsBinaryString(file); - break; - - case "url": - reader.readAsDataURL(file); - break; - - case "text": - default: - reader.readAsText(file); - } - - reader.onload = (e) => { - resolve(reader.result); - }; - - reader.onerror = (e) => { - console.warn("File Load Error - Unable to read file"); - reject(); - }; - }); - - input.click(); - }); - } - - importData(importer, fileContents){ - var data = importer.call(this.table, fileContents); - - if(data instanceof Promise){ - return data; - }else { - return data ? Promise.resolve(data) : Promise.reject(); - } - } - - structureData(parsedData){ - var data = []; - - if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){ - if(this.table.options.autoColumns){ - data = this.structureArrayToObject(parsedData); - }else { - data = this.structureArrayToColumns(parsedData); - } - - return data; - }else { - return parsedData; - } - } - - structureArrayToObject(parsedData){ - var columns = parsedData.shift(); - - var data = parsedData.map((values) => { - var row = {}; - - columns.forEach((key, i) => { - row[key] = values[i]; - }); - - return row; - }); - - return data; - } - - structureArrayToColumns(parsedData){ - var data = [], - columns = this.table.getColumns(); - - //remove first row if it is the column names - if(columns[0] && parsedData[0][0]){ - if(columns[0].getDefinition().title === parsedData[0][0]){ - parsedData.shift(); - } - } - - //convert row arrays to objects - parsedData.forEach((rowData) => { - var row = {}; - - rowData.forEach((value, index) => { - var column = columns[index]; - - if(column){ - row[column.getField()] = value; - } - }); - - data.push(row); - }); - - return data; - } - - setData(data){ - return this.table.setData(data); - } - } - - Import.moduleName = "import"; - - //load defaults - Import.importers = defaultImporters; - - class Interaction extends Module{ - - constructor(table){ - super(table); - - this.eventMap = { - //row events - rowClick:"row-click", - rowDblClick:"row-dblclick", - rowContext:"row-contextmenu", - rowMouseEnter:"row-mouseenter", - rowMouseLeave:"row-mouseleave", - rowMouseOver:"row-mouseover", - rowMouseOut:"row-mouseout", - rowMouseMove:"row-mousemove", - rowMouseDown:"row-mousedown", - rowMouseUp:"row-mouseup", - rowTap:"row", - rowDblTap:"row", - rowTapHold:"row", - - //cell events - cellClick:"cell-click", - cellDblClick:"cell-dblclick", - cellContext:"cell-contextmenu", - cellMouseEnter:"cell-mouseenter", - cellMouseLeave:"cell-mouseleave", - cellMouseOver:"cell-mouseover", - cellMouseOut:"cell-mouseout", - cellMouseMove:"cell-mousemove", - cellMouseDown:"cell-mousedown", - cellMouseUp:"cell-mouseup", - cellTap:"cell", - cellDblTap:"cell", - cellTapHold:"cell", - - //column header events - headerClick:"column-click", - headerDblClick:"column-dblclick", - headerContext:"column-contextmenu", - headerMouseEnter:"column-mouseenter", - headerMouseLeave:"column-mouseleave", - headerMouseOver:"column-mouseover", - headerMouseOut:"column-mouseout", - headerMouseMove:"column-mousemove", - headerMouseDown:"column-mousedown", - headerMouseUp:"column-mouseup", - headerTap:"column", - headerDblTap:"column", - headerTapHold:"column", - - //group header - groupClick:"group-click", - groupDblClick:"group-dblclick", - groupContext:"group-contextmenu", - groupMouseEnter:"group-mouseenter", - groupMouseLeave:"group-mouseleave", - groupMouseOver:"group-mouseover", - groupMouseOut:"group-mouseout", - groupMouseMove:"group-mousemove", - groupMouseDown:"group-mousedown", - groupMouseUp:"group-mouseup", - groupTap:"group", - groupDblTap:"group", - groupTapHold:"group", - }; - - this.subscribers = {}; - - this.touchSubscribers = {}; - - this.columnSubscribers = {}; - - this.touchWatchers = { - row:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - cell:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - column:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - group:{ - tap:null, - tapDbl:null, - tapHold:null, - } - }; - - this.registerColumnOption("headerClick"); - this.registerColumnOption("headerDblClick"); - this.registerColumnOption("headerContext"); - this.registerColumnOption("headerMouseEnter"); - this.registerColumnOption("headerMouseLeave"); - this.registerColumnOption("headerMouseOver"); - this.registerColumnOption("headerMouseOut"); - this.registerColumnOption("headerMouseMove"); - this.registerColumnOption("headerMouseDown"); - this.registerColumnOption("headerMouseUp"); - this.registerColumnOption("headerTap"); - this.registerColumnOption("headerDblTap"); - this.registerColumnOption("headerTapHold"); - - this.registerColumnOption("cellClick"); - this.registerColumnOption("cellDblClick"); - this.registerColumnOption("cellContext"); - this.registerColumnOption("cellMouseEnter"); - this.registerColumnOption("cellMouseLeave"); - this.registerColumnOption("cellMouseOver"); - this.registerColumnOption("cellMouseOut"); - this.registerColumnOption("cellMouseMove"); - this.registerColumnOption("cellMouseDown"); - this.registerColumnOption("cellMouseUp"); - this.registerColumnOption("cellTap"); - this.registerColumnOption("cellDblTap"); - this.registerColumnOption("cellTapHold"); - - } - - initialize(){ - this.initializeExternalEvents(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("cell-dblclick", this.cellContentsSelectionFixer.bind(this)); - this.subscribe("scroll-horizontal", this.clearTouchWatchers.bind(this)); - this.subscribe("scroll-vertical", this.clearTouchWatchers.bind(this)); - } - - clearTouchWatchers(){ - var types = Object.values(this.touchWatchers); - - types.forEach((type) => { - for(let key in type){ - type[key] = null; - } - }); - } - - cellContentsSelectionFixer(e, cell){ - var range; - - if(this.table.modExists("edit")){ - if (this.table.modules.edit.currentCell === cell){ - return; //prevent instant selection of editor content - } - } - - e.preventDefault(); - - try{ - if (document.selection) { // IE - range = document.body.createTextRange(); - range.moveToElementText(cell.getElement()); - range.select(); - } else if (window.getSelection) { - range = document.createRange(); - range.selectNode(cell.getElement()); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - } - }catch(e){} - } - - initializeExternalEvents(){ - for(let key in this.eventMap){ - this.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key)); - } - } - - subscriptionChanged(key, added){ - if(added){ - if(!this.subscribers[key]){ - if(this.eventMap[key].includes("-")){ - this.subscribers[key] = this.handle.bind(this, key); - this.subscribe(this.eventMap[key], this.subscribers[key]); - }else { - this.subscribeTouchEvents(key); - } - } - }else { - if(this.eventMap[key].includes("-")){ - if(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){ - this.unsubscribe(this.eventMap[key], this.subscribers[key]); - delete this.subscribers[key]; - } - }else { - this.unsubscribeTouchEvents(key); - } - } - } - - - subscribeTouchEvents(key){ - var type = this.eventMap[key]; - - if(!this.touchSubscribers[type + "-touchstart"]){ - this.touchSubscribers[type + "-touchstart"] = this.handleTouch.bind(this, type, "start"); - this.touchSubscribers[type + "-touchend"] = this.handleTouch.bind(this, type, "end"); - - this.subscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); - this.subscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); - } - - this.subscribers[key] = true; - } - - unsubscribeTouchEvents(key){ - var noTouch = true, - type = this.eventMap[key]; - - if(this.subscribers[key] && !this.subscribedExternal(key)){ - delete this.subscribers[key]; - - for(let i in this.eventMap){ - if(this.eventMap[i] === type){ - if(this.subscribers[i]){ - noTouch = false; - } - } - } - - if(noTouch){ - this.unsubscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); - this.unsubscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); - - delete this.touchSubscribers[type + "-touchstart"]; - delete this.touchSubscribers[type + "-touchend"]; - } - } - } - - initializeColumn(column){ - var def = column.definition; - - for(let key in this.eventMap){ - if(def[key]){ - this.subscriptionChanged(key, true); - - if(!this.columnSubscribers[key]){ - this.columnSubscribers[key] = []; - } - - this.columnSubscribers[key].push(column); - } - } - } - - handle(action, e, component){ - this.dispatchEvent(action, e, component); - } - - handleTouch(type, action, e, component){ - var watchers = this.touchWatchers[type]; - - if(type === "column"){ - type = "header"; - } - - switch(action){ - case "start": - watchers.tap = true; - - clearTimeout(watchers.tapHold); - - watchers.tapHold = setTimeout(() => { - clearTimeout(watchers.tapHold); - watchers.tapHold = null; - - watchers.tap = null; - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - - this.dispatchEvent(type + "TapHold", e, component); - }, 1000); - break; - - case "end": - if(watchers.tap){ - - watchers.tap = null; - this.dispatchEvent(type + "Tap", e, component); - } - - if(watchers.tapDbl){ - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - - this.dispatchEvent(type + "DblTap", e, component); - }else { - watchers.tapDbl = setTimeout(() => { - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - }, 300); - } - - clearTimeout(watchers.tapHold); - watchers.tapHold = null; - break; - } - } - - dispatchEvent(action, e, component){ - var componentObj = component.getComponent(), - callback; - - if(this.columnSubscribers[action]){ - - if(component instanceof Cell){ - callback = component.column.definition[action]; - }else if(component instanceof Column){ - callback = component.definition[action]; - } - - if(callback){ - callback(e, componentObj); - } - } - - this.dispatchExternal(action, e, componentObj); - } - } - - Interaction.moduleName = "interaction"; - - var defaultBindings = { - navPrev:"shift + 9", - navNext:9, - navUp:38, - navDown:40, - navLeft:37, - navRight:39, - scrollPageUp:33, - scrollPageDown:34, - scrollToStart:36, - scrollToEnd:35, - undo:["ctrl + 90", "meta + 90"], - redo:["ctrl + 89", "meta + 89"], - copyToClipboard:["ctrl + 67", "meta + 67"], - - rangeJumpUp:["ctrl + 38", "meta + 38"], - rangeJumpDown:["ctrl + 40", "meta + 40"], - rangeJumpLeft:["ctrl + 37", "meta + 37"], - rangeJumpRight:["ctrl + 39", "meta + 39"], - rangeExpandUp:"shift + 38", - rangeExpandDown:"shift + 40", - rangeExpandLeft:"shift + 37", - rangeExpandRight:"shift + 39", - rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"], - rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"], - rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"], - rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"], - }; - - var defaultActions = { - keyBlock:function(e){ - e.stopPropagation(); - e.preventDefault(); - }, - scrollPageUp:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop - rowManager.element.clientHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos >= 0){ - rowManager.element.scrollTop = newPos; - }else { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - } - - this.table.element.focus(); - }, - scrollPageDown:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop + rowManager.element.clientHeight, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos <= scrollMax){ - rowManager.element.scrollTop = newPos; - }else { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - - }, - scrollToStart:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev:function(e){ - this.dispatch("keybinding-nav-prev", e); - }, - - navNext:function(e){ - this.dispatch("keybinding-nav-next", e); - }, - - navLeft:function(e){ - this.dispatch("keybinding-nav-left", e); - }, - - navRight:function(e){ - this.dispatch("keybinding-nav-right", e); - }, - - navUp:function(e){ - this.dispatch("keybinding-nav-up", e); - }, - - navDown:function(e){ - this.dispatch("keybinding-nav-down", e); - }, - - rangeJumpLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", true, false); - }, - rangeJumpRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", true, false); - }, - rangeJumpUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", true, false); - }, - rangeJumpDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", true, false); - }, - rangeExpandLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", false, true); - }, - rangeExpandRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", false, true); - }, - rangeExpandUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", false, true); - }, - rangeExpandDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", false, true); - }, - rangeExpandJumpLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", true, true); - }, - rangeExpandJumpRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", true, true); - }, - rangeExpandJumpUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", true, true); - }, - rangeExpandJumpDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", true, true); - }, - - undo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard:function(e){ - if(!this.table.modules.edit.currentCell){ - if(this.table.modExists("clipboard", true)){ - this.table.modules.clipboard.copy(false, true); - } - } - }, - }; - - class Keybindings extends Module{ - - constructor(table){ - super(table); - - this.watchKeys = null; - this.pressedKeys = null; - this.keyupBinding = false; - this.keydownBinding = false; - - this.registerTableOption("keybindings", {}); //array for keybindings - this.registerTableOption("tabEndNewRow", false); //create new row when tab to end of table - } - - initialize(){ - var bindings = this.table.options.keybindings, - mergedBindings = {}; - - this.watchKeys = {}; - this.pressedKeys = []; - - if(bindings !== false){ - Object.assign(mergedBindings, Keybindings.bindings); - Object.assign(mergedBindings, bindings); - - this.mapBindings(mergedBindings); - this.bindEvents(); - } - - this.subscribe("table-destroy", this.clearBindings.bind(this)); - } - - mapBindings(bindings){ - for(let key in bindings){ - if(Keybindings.actions[key]){ - if(bindings[key]){ - if(typeof bindings[key] !== "object"){ - bindings[key] = [bindings[key]]; - } - - bindings[key].forEach((binding) => { - var bindingList = Array.isArray(binding) ? binding : [binding]; - - bindingList.forEach((item) => { - this.mapBinding(key, item); - }); - }); - } - }else { - console.warn("Key Binding Error - no such action:", key); - } - } - } - - mapBinding(action, symbolsList){ - var binding = { - action: Keybindings.actions[action], - keys: [], - ctrl: false, - shift: false, - meta: false, - }; - - var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+"); - - symbols.forEach((symbol) => { - switch(symbol){ - case "ctrl": - binding.ctrl = true; - break; - - case "shift": - binding.shift = true; - break; - - case "meta": - binding.meta = true; - break; - - default: - symbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol); - binding.keys.push(symbol); - - if(!this.watchKeys[symbol]){ - this.watchKeys[symbol] = []; - } - - this.watchKeys[symbol].push(binding); - } - }); - } - - bindEvents(){ - var self = this; - - this.keyupBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - self.pressedKeys.push(code); - - bindings.forEach(function(binding){ - self.checkBinding(e, binding); - }); - } - }; - - this.keydownBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - var index = self.pressedKeys.indexOf(code); - - if(index > -1){ - self.pressedKeys.splice(index, 1); - } - } - }; - - this.table.element.addEventListener("keydown", this.keyupBinding); - - this.table.element.addEventListener("keyup", this.keydownBinding); - } - - clearBindings(){ - if(this.keyupBinding){ - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if(this.keydownBinding){ - this.table.element.removeEventListener("keyup", this.keydownBinding); - } - } - - checkBinding(e, binding){ - var match = true; - - if(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){ - binding.keys.forEach((key) => { - var index = this.pressedKeys.indexOf(key); - - if(index == -1){ - match = false; - } - }); - - if(match){ - binding.action.call(this, e); - } - - return true; - } - - return false; - } - } - - Keybindings.moduleName = "keybindings"; - - //load defaults - Keybindings.bindings = defaultBindings; - Keybindings.actions = defaultActions; - - class Menu extends Module{ - - constructor(table){ - super(table); - - this.menuContainer = null; - this.nestedMenuBlock = false; - - this.currentComponent = null; - this.rootPopup = null; - - this.columnSubscribers = {}; - - this.registerTableOption("menuContainer", undefined); //deprecated - - this.registerTableOption("rowContextMenu", false); - this.registerTableOption("rowClickMenu", false); - this.registerTableOption("rowDblClickMenu", false); - this.registerTableOption("groupContextMenu", false); - this.registerTableOption("groupClickMenu", false); - this.registerTableOption("groupDblClickMenu", false); - - this.registerColumnOption("headerContextMenu"); - this.registerColumnOption("headerClickMenu"); - this.registerColumnOption("headerDblClickMenu"); - this.registerColumnOption("headerMenu"); - this.registerColumnOption("headerMenuIcon"); - this.registerColumnOption("contextMenu"); - this.registerColumnOption("clickMenu"); - this.registerColumnOption("dblClickMenu"); - - } - - initialize(){ - this.deprecatedOptionsCheck(); - this.initializeRowWatchers(); - this.initializeGroupWatchers(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - deprecatedOptionsCheck(){ - if(!this.deprecationCheck("menuContainer", "popupContainer")){ - this.table.options.popupContainer = this.table.options.menuContainer; - } - } - - initializeRowWatchers(){ - if(this.table.options.rowContextMenu){ - this.subscribe("row-contextmenu", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu)); - this.table.on("rowTapHold", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu)); - } - - if(this.table.options.rowClickMenu){ - this.subscribe("row-click", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu)); - } - - if(this.table.options.rowDblClickMenu){ - this.subscribe("row-dblclick", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu)); - } - } - - initializeGroupWatchers(){ - if(this.table.options.groupContextMenu){ - this.subscribe("group-contextmenu", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu)); - this.table.on("groupTapHold", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu)); - } - - if(this.table.options.groupClickMenu){ - this.subscribe("group-click", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu)); - } - - if(this.table.options.groupDblClickMenu){ - this.subscribe("group-dblclick", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu)); - } - } - - initializeColumn(column){ - var def = column.definition; - - //handle column events - if(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){ - this.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, "headerContextMenu"); - this.subscribe("column-contextmenu", this.columnSubscribers.headerContextMenu); - this.table.on("headerTapHold", this.loadMenuTableColumnEvent.bind(this, "headerContextMenu")); - } - - if(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){ - this.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, "headerClickMenu"); - this.subscribe("column-click", this.columnSubscribers.headerClickMenu); - } - - if(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){ - this.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, "headerDblClickMenu"); - this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickMenu); - } - - if(def.headerMenu){ - this.initializeColumnHeaderMenu(column); - } - - //handle cell events - if(def.contextMenu && !this.columnSubscribers.contextMenu){ - this.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, "contextMenu"); - this.subscribe("cell-contextmenu", this.columnSubscribers.contextMenu); - this.table.on("cellTapHold", this.loadMenuTableCellEvent.bind(this, "contextMenu")); - } - - if(def.clickMenu && !this.columnSubscribers.clickMenu){ - this.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, "clickMenu"); - this.subscribe("cell-click", this.columnSubscribers.clickMenu); - } - - if(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){ - this.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, "dblClickMenu"); - this.subscribe("cell-dblclick", this.columnSubscribers.dblClickMenu); - } - } - - initializeColumnHeaderMenu(column){ - var icon = column.definition.headerMenuIcon, - headerMenuEl; - - headerMenuEl = document.createElement("span"); - headerMenuEl.classList.add("tabulator-header-popup-button"); - - if(icon){ - if(typeof icon === "function"){ - icon = icon(column.getComponent()); - } - - if(icon instanceof HTMLElement){ - headerMenuEl.appendChild(icon); - }else { - headerMenuEl.innerHTML = icon; - } - }else { - headerMenuEl.innerHTML = "⋮"; - } - - headerMenuEl.addEventListener("click", (e) => { - e.stopPropagation(); - e.preventDefault(); - - this.loadMenuEvent(column.definition.headerMenu, e, column); - }); - - column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild); - } - - loadMenuTableCellEvent(option, e, cell){ - if(cell._cell){ - cell = cell._cell; - } - - if(cell.column.definition[option]){ - this.loadMenuEvent(cell.column.definition[option], e, cell); - } - } - - loadMenuTableColumnEvent(option, e, column){ - if(column._column){ - column = column._column; - } - - if(column.definition[option]){ - this.loadMenuEvent(column.definition[option], e, column); - } - } - - loadMenuEvent(menu, e, component){ - if(component._group){ - component = component._group; - }else if(component._row){ - component = component._row; - } - - menu = typeof menu == "function" ? menu.call(this.table, e, component.getComponent()) : menu; - - this.loadMenu(e, component, menu); - } - - loadMenu(e, component, menu, parentEl, parentPopup){ - var touch = !(e instanceof MouseEvent), - menuEl = document.createElement("div"), - popup; - - menuEl.classList.add("tabulator-menu"); - - if(!touch){ - e.preventDefault(); - } - - //abort if no menu set - if(!menu || !menu.length){ - return; - } - - if(!parentEl){ - if(this.nestedMenuBlock){ - //abort if child menu already open - if(this.rootPopup){ - return; - } - }else { - this.nestedMenuBlock = setTimeout(() => { - this.nestedMenuBlock = false; - }, 100); - } - - if(this.rootPopup){ - this.rootPopup.hide(); - } - - this.rootPopup = popup = this.popup(menuEl); - - }else { - popup = parentPopup.child(menuEl); - } - - menu.forEach((item) => { - var itemEl = document.createElement("div"), - label = item.label, - disabled = item.disabled; - - if(item.separator){ - itemEl.classList.add("tabulator-menu-separator"); - }else { - itemEl.classList.add("tabulator-menu-item"); - - if(typeof label == "function"){ - label = label.call(this.table, component.getComponent()); - } - - if(label instanceof Node){ - itemEl.appendChild(label); - }else { - itemEl.innerHTML = label; - } - - if(typeof disabled == "function"){ - disabled = disabled.call(this.table, component.getComponent()); - } - - if(disabled){ - itemEl.classList.add("tabulator-menu-item-disabled"); - itemEl.addEventListener("click", (e) => { - e.stopPropagation(); - }); - }else { - if(item.menu && item.menu.length){ - itemEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.loadMenu(e, component, item.menu, itemEl, popup); - }); - }else { - if(item.action){ - itemEl.addEventListener("click", (e) => { - item.action(e, component.getComponent()); - }); - } - } - } - - if(item.menu && item.menu.length){ - itemEl.classList.add("tabulator-menu-item-submenu"); - } - } - - menuEl.appendChild(itemEl); - }); - - menuEl.addEventListener("click", (e) => { - if(this.rootPopup){ - this.rootPopup.hide(); - } - }); - - popup.show(parentEl || e); - - if(popup === this.rootPopup){ - this.rootPopup.hideOnBlur(() => { - this.rootPopup = null; - - if(this.currentComponent){ - this.dispatch("menu-closed", menu, popup); - this.dispatchExternal("menuClosed", this.currentComponent.getComponent()); - this.currentComponent = null; - } - }); - - this.currentComponent = component; - - this.dispatch("menu-opened", menu, popup); - this.dispatchExternal("menuOpened", component.getComponent()); - } - } - } - - Menu.moduleName = "menu"; - - class MoveColumns extends Module{ - - constructor(table){ - super(table); - - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the destination column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - this.touchMove = false; - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - - this.registerTableOption("movableColumns", false); //enable movable columns - } - - createPlaceholderElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; - } - - initialize(){ - if(this.table.options.movableColumns){ - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("alert-show", this.abortMove.bind(this)); - } - } - - abortMove(){ - clearTimeout(this.checkTimeout); - } - - initializeColumn(column){ - var self = this, - config = {}, - colEl; - - if(!column.modules.frozen && !column.isGroup){ - colEl = column.getElement(); - - config.mousemove = function(e){ - if(column.parent === self.moving.parent){ - if((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){ - if(self.toCol !== column || !self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - }else { - if(self.toCol !== column || self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function(e){ - self.touchMove = false; - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - self.bindTouchEvents(column); - } - - column.modules.moveColumn = config; - } - - bindTouchEvents(column){ - var colEl = column.getElement(), - startXMove = false, //shifting center position of the cell - nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast; - - colEl.addEventListener("touchstart", (e) => { - this.checkTimeout = setTimeout(() => { - this.touchMove = true; - nextCol = column.nextColumn(); - nextColWidth = nextCol ? nextCol.getWidth()/2 : 0; - prevCol = column.prevColumn(); - prevColWidth = prevCol ? prevCol.getWidth()/2 : 0; - nextColWidthLast = 0; - prevColWidthLast = 0; - startXMove = false; - - this.startMove(e, column); - }, this.checkPeriod); - }, {passive: true}); - - colEl.addEventListener("touchmove", (e) => { - var diff, moveToCol; - - if(this.moving){ - this.moveHover(e); - - if(!startXMove){ - startXMove = e.touches[0].pageX; - } - - diff = e.touches[0].pageX - startXMove; - - if(diff > 0){ - if(nextCol && diff - nextColWidthLast > nextColWidth){ - moveToCol = nextCol; - - if(moveToCol !== column){ - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling); - this.moveColumn(moveToCol, true); - } - } - }else { - if(prevCol && -diff - prevColWidthLast > prevColWidth){ - moveToCol = prevCol; - - if(moveToCol !== column){ - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement()); - this.moveColumn(moveToCol, false); - } - } - } - - if(moveToCol){ - nextCol = moveToCol.nextColumn(); - nextColWidthLast = nextColWidth; - nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0; - prevCol = moveToCol.prevColumn(); - prevColWidthLast = prevColWidth; - prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0; - } - } - }, {passive: true}); - - colEl.addEventListener("touchend", (e) => { - if(this.checkTimeout){ - clearTimeout(this.checkTimeout); - } - if(this.moving){ - this.endMove(e); - } - }); - } - - startMove(e, column){ - var element = column.getElement(), - headerElement = this.table.columnManager.getContentsElement(), - headersElement = this.table.columnManager.getHeadersElement(); - - this.moving = column; - this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - headerElement.appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + "px"; - - if(!this.touchMove){ - this._bindMouseMove(); - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - } - - this.moveHover(e); - } - - _bindMouseMove(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - } - - _unbindMouseMove(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - } - - moveColumn(column, after){ - var movingCells = this.moving.getCells(); - - this.toCol = column; - this.toColAfter = after; - - if(after){ - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(true); - - if(cellEl.parentNode && movingCells[i]){ - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - } - }); - }else { - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(true); - - if(cellEl.parentNode && movingCells[i]){ - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - } - }); - } - } - - endMove(e){ - if(e.which === 1 || this.touchMove){ - this._unbindMouseMove(); - - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toCol){ - this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - if(!this.touchMove){ - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - } - } - } - - moveHover(e){ - var columnHolder = this.table.columnManager.getContentsElement(), - scrollLeft = columnHolder.scrollLeft, - xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft, - scrollPos; - - this.hoverElement.style.left = (xPos - this.startX) + "px"; - - if(xPos - scrollLeft < this.autoScrollMargin){ - if(!this.autoScrollTimeout){ - this.autoScrollTimeout = setTimeout(() => { - scrollPos = Math.max(0,scrollLeft-5); - this.table.rowManager.getElement().scrollLeft = scrollPos; - this.autoScrollTimeout = false; - }, 1); - } - } - - if(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){ - if(!this.autoScrollTimeout){ - this.autoScrollTimeout = setTimeout(() => { - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5); - this.table.rowManager.getElement().scrollLeft = scrollPos; - this.autoScrollTimeout = false; - }, 1); - } - } - } - } - - MoveColumns.moduleName = "moveColumn"; - - class MoveRows extends Module{ - - constructor(table){ - super(table); - - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating row header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving row - this.toRow = false; //destination row - this.toRowAfter = false; //position of moving row relative to the destination row - this.hasHandle = false; //row has handle instead of fully movable row - this.startY = 0; //starting Y position within header element - this.startX = 0; //starting X position within header element - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - this.tableRowDropEvent = false; - - this.touchMove = false; - - this.connection = false; - this.connectionSelectorsTables = false; - this.connectionSelectorsElements = false; - this.connectionElements = []; - this.connections = []; - - this.connectedTable = false; - this.connectedRow = false; - - this.registerTableOption("movableRows", false); //enable movable rows - this.registerTableOption("movableRowsConnectedTables", false); //tables for movable rows to be connected to - this.registerTableOption("movableRowsConnectedElements", false); //other elements for movable rows to be connected to - this.registerTableOption("movableRowsSender", false); - this.registerTableOption("movableRowsReceiver", "insert"); - - this.registerColumnOption("rowHandle"); - } - - createPlaceholderElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.classList.add("tabulator-row-placeholder"); - - return el; - } - - initialize(){ - if(this.table.options.movableRows){ - this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables; - this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements; - - this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements; - - this.subscribe("cell-init", this.initializeCell.bind(this)); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("row-init", this.initializeRow.bind(this)); - } - } - - initializeGroupHeader(group){ - var self = this, - config = {}; - - //inter table drag drop - config.mouseup = function(e){ - self.tableRowDrop(e, group); - }.bind(self); - - //same table drag drop - config.mousemove = function(e){ - var rowEl; - - if(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){ - if(self.toRow !== group || !self.toRowAfter){ - rowEl = group.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(group, true); - } - }else { - if(self.toRow !== group || self.toRowAfter){ - rowEl = group.getElement(); - if(rowEl.previousSibling){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(group, false); - } - } - } - }.bind(self); - - group.modules.moveRow = config; - } - - initializeRow(row){ - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function(e){ - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function(e){ - var rowEl = row.getElement(); - - if(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){ - if(self.toRow !== row || !self.toRowAfter){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - }else { - if(self.toRow !== row || self.toRowAfter){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - - if(!this.hasHandle){ - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(row, row.getElement()); - } - - row.modules.moveRow = config; - } - - initializeColumn(column){ - if(column.definition.rowHandle && this.table.options.movableRows !== false){ - this.hasHandle = true; - } - } - - initializeCell(cell){ - if(cell.column.definition.rowHandle && this.table.options.movableRows !== false){ - var self = this, - cellEl = cell.getElement(true); - - cellEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(cell.row, cellEl); - } - } - - bindTouchEvents(row, element){ - var startYMove = false, //shifting center position of the cell - nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast; - - element.addEventListener("touchstart", (e) => { - this.checkTimeout = setTimeout(() => { - this.touchMove = true; - nextRow = row.nextRow(); - nextRowHeight = nextRow ? nextRow.getHeight()/2 : 0; - prevRow = row.prevRow(); - prevRowHeight = prevRow ? prevRow.getHeight()/2 : 0; - nextRowHeightLast = 0; - prevRowHeightLast = 0; - startYMove = false; - - this.startMove(e, row); - }, this.checkPeriod); - }, {passive: true}); - this.moving, this.toRow, this.toRowAfter; - element.addEventListener("touchmove", (e) => { - - var diff, moveToRow; - - if(this.moving){ - e.preventDefault(); - - this.moveHover(e); - - if(!startYMove){ - startYMove = e.touches[0].pageY; - } - - diff = e.touches[0].pageY - startYMove; - - if(diff > 0){ - if(nextRow && diff - nextRowHeightLast > nextRowHeight){ - moveToRow = nextRow; - - if(moveToRow !== row){ - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling); - this.moveRow(moveToRow, true); - } - } - }else { - if(prevRow && -diff - prevRowHeightLast > prevRowHeight){ - moveToRow = prevRow; - - if(moveToRow !== row){ - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement()); - this.moveRow(moveToRow, false); - } - } - } - - if(moveToRow){ - nextRow = moveToRow.nextRow(); - nextRowHeightLast = nextRowHeight; - nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0; - prevRow = moveToRow.prevRow(); - prevRowHeightLast = prevRowHeight; - prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0; - } - } - }); - - element.addEventListener("touchend", (e) => { - if(this.checkTimeout){ - clearTimeout(this.checkTimeout); - } - if(this.moving){ - this.endMove(e); - this.touchMove = false; - } - }); - } - - _bindMouseMove(){ - this.table.rowManager.getDisplayRows().forEach((row) => { - if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){ - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - } - - _unbindMouseMove(){ - this.table.rowManager.getDisplayRows().forEach((row) => { - if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){ - row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - } - - startMove(e, row){ - var element = row.getElement(); - - this.setStartPosition(e, row); - - this.moving = row; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if(!this.connection){ - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - }else { - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if(this.connection){ - document.body.appendChild(this.hoverElement); - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - this.hoverElement.style.width = this.table.element.clientWidth + "px"; - this.hoverElement.style.whiteSpace = "nowrap"; - this.hoverElement.style.overflow = "hidden"; - this.hoverElement.style.pointerEvents = "none"; - }else { - this.table.rowManager.getTableElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - - this._bindMouseMove(); - } - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.dispatchExternal("rowMoving", row.getComponent()); - - this.moveHover(e); - } - - setStartPosition(e, row){ - var pageX = this.touchMove ? e.touches[0].pageX : e.pageX, - pageY = this.touchMove ? e.touches[0].pageY : e.pageY, - element, position; - - element = row.getElement(); - if(this.connection){ - position = element.getBoundingClientRect(); - - this.startX = position.left - pageX + window.pageXOffset; - this.startY = position.top - pageY + window.pageYOffset; - }else { - this.startY = (pageY - element.getBoundingClientRect().top); - } - } - - endMove(e){ - if(!e || e.which === 1 || this.touchMove){ - this._unbindMouseMove(); - - if(!this.connection){ - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - } - - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toRow){ - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - }else { - this.dispatchExternal("rowMoveCancelled", this.moving.getComponent()); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if(this.connection){ - this.table.element.classList.remove("tabulator-movingrow-sending"); - this.disconnectFromTables(); - } - } - } - - moveRow(row, after){ - this.toRow = row; - this.toRowAfter = after; - } - - moveHover(e){ - if(this.connection){ - this.moveHoverConnections.call(this, e); - }else { - this.moveHoverTable.call(this, e); - } - } - - moveHoverTable(e){ - var rowHolder = this.table.rowManager.getElement(), - scrollTop = rowHolder.scrollTop, - yPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop; - - this.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + "px"; - } - - moveHoverConnections(e){ - this.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + "px"; - this.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + "px"; - } - - elementRowDrop(e, element, row){ - this.dispatchExternal("movableRowsElementDrop", e, element, row ? row.getComponent() : false); - } - - //establish connection with other tables - connectToTables(row){ - var connectionTables; - - if(this.connectionSelectorsTables){ - connectionTables = this.commsConnections(this.connectionSelectorsTables); - - this.dispatchExternal("movableRowsSendingStart", connectionTables); - - this.commsSend(this.connectionSelectorsTables, "moveRow", "connect", { - row:row, - }); - } - - if(this.connectionSelectorsElements){ - - this.connectionElements = []; - - if(!Array.isArray(this.connectionSelectorsElements)){ - this.connectionSelectorsElements = [this.connectionSelectorsElements]; - } - - this.connectionSelectorsElements.forEach((query) => { - if(typeof query === "string"){ - this.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))); - }else { - this.connectionElements.push(query); - } - }); - - this.connectionElements.forEach((element) => { - var dropEvent = (e) => { - this.elementRowDrop(e, element, this.moving); - }; - - element.addEventListener("mouseup", dropEvent); - element.tabulatorElementDropEvent = dropEvent; - - element.classList.add("tabulator-movingrow-receiving"); - }); - } - } - - //disconnect from other tables - disconnectFromTables(){ - var connectionTables; - - if(this.connectionSelectorsTables){ - connectionTables = this.commsConnections(this.connectionSelectorsTables); - - this.dispatchExternal("movableRowsSendingStop", connectionTables); - - this.commsSend(this.connectionSelectorsTables, "moveRow", "disconnect"); - } - - this.connectionElements.forEach((element) => { - element.classList.remove("tabulator-movingrow-receiving"); - element.removeEventListener("mouseup", element.tabulatorElementDropEvent); - delete element.tabulatorElementDropEvent; - }); - } - - //accept incomming connection - connect(table, row){ - if(!this.connectedTable){ - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - this.table.rowManager.getDisplayRows().forEach((row) => { - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - this.tableRowDropEvent = this.tableRowDrop.bind(this); - - this.table.element.addEventListener("mouseup", this.tableRowDropEvent); - - this.dispatchExternal("movableRowsReceivingStart", row, table); - - return true; - }else { - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } - } - - //close incoming connection - disconnect(table){ - if(table === this.connectedTable){ - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - this.table.rowManager.getDisplayRows().forEach((row) =>{ - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - this.table.element.removeEventListener("mouseup", this.tableRowDropEvent); - - this.dispatchExternal("movableRowsReceivingStop", table); - }else { - console.warn("Move Row Error - trying to disconnect from non connected table"); - } - } - - dropComplete(table, row, success){ - var sender = false; - - if(success){ - - switch(typeof this.table.options.movableRowsSender){ - case "string": - sender = this.senders[this.table.options.movableRowsSender]; - break; - - case "function": - sender = this.table.options.movableRowsSender; - break; - } - - if(sender){ - sender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table); - }else { - if(this.table.options.movableRowsSender){ - console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender); - } - } - - this.dispatchExternal("movableRowsSent", this.moving.getComponent(), row ? row.getComponent() : undefined, table); - }else { - this.dispatchExternal("movableRowsSentFailed", this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); - } - - tableRowDrop(e, row){ - var receiver = false, - success = false; - - e.stopImmediatePropagation(); - - switch(typeof this.table.options.movableRowsReceiver){ - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if(receiver){ - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - }else { - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver); - } - - if(success){ - this.dispatchExternal("movableRowsReceived", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - }else { - this.dispatchExternal("movableRowsReceivedFailed", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.commsSend(this.connectedTable, "moveRow", "dropcomplete", { - row:row, - success:success, - }); - } - - commsReceived(table, action, data){ - switch(action){ - case "connect": - return this.connect(table, data.row); - - case "disconnect": - return this.disconnect(table); - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - } - } - } - - MoveRows.prototype.receivers = { - insert:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData()); - return true; - }, - - update:function(fromRow, toRow, fromTable){ - if(toRow){ - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace:function(fromRow, toRow, fromTable){ - if(toRow){ - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - }, - }; - - MoveRows.prototype.senders = { - delete:function(fromRow, toRow, toTable){ - fromRow.delete(); - } - }; - - MoveRows.moduleName = "moveRow"; - - var defaultMutators = {}; - - class Mutator extends Module{ - - constructor(table){ - super(table); - - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of mutation types - this.enabled = true; - - this.registerColumnOption("mutator"); - this.registerColumnOption("mutatorParams"); - this.registerColumnOption("mutatorData"); - this.registerColumnOption("mutatorDataParams"); - this.registerColumnOption("mutatorEdit"); - this.registerColumnOption("mutatorEditParams"); - this.registerColumnOption("mutatorClipboard"); - this.registerColumnOption("mutatorClipboardParams"); - this.registerColumnOption("mutateLink"); - } - - initialize(){ - this.subscribe("cell-value-changing", this.transformCell.bind(this)); - this.subscribe("cell-value-changed", this.mutateLink.bind(this)); - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("row-data-init-before", this.rowDataChanged.bind(this)); - this.subscribe("row-data-changing", this.rowDataChanged.bind(this)); - } - - rowDataChanged(row, tempData, updatedData){ - return this.transformRow(tempData, "data", updatedData); - } - - //initialize column mutator - initializeColumn(column){ - var match = false, - config = {}; - - this.allowedTypes.forEach((type) => { - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if(column.definition[key]){ - mutator = this.lookupMutator(column.definition[key]); - - if(mutator){ - match = true; - - config[key] = { - mutator:mutator, - params: column.definition[key + "Params"] || {}, - }; - } - } - }); - - if(match){ - column.modules.mutate = config; - } - } - - lookupMutator(value){ - var mutator = false; - - //set column mutator - switch(typeof value){ - case "string": - if(Mutator.mutators[value]){ - mutator = Mutator.mutators[value]; - }else { - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; - } - - //apply mutator to row - transformRow(data, type, updatedData){ - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if(this.enabled){ - - this.table.columnManager.traverse((column) => { - var mutator, params, component; - - if(column.modules.mutate){ - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if(mutator){ - value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data); - - if((type == "data" && !updatedData)|| typeof value !== "undefined"){ - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; - } - - //apply mutator to new cell value - transformCell(cell, value){ - if(cell.column.modules.mutate){ - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, - tempData = {}; - - if(mutator){ - tempData = Object.assign(tempData, cell.row.getData()); - cell.column.setFieldValue(tempData, value); - return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); - } - } - - return value; - } - - mutateLink(cell){ - var links = cell.column.definition.mutateLink; - - if(links){ - if(!Array.isArray(links)){ - links = [links]; - } - - links.forEach((link) => { - var linkCell = cell.row.getCell(link); - - if(linkCell){ - linkCell.setValue(linkCell.getValue(), true, true); - } - }); - } - } - - enable(){ - this.enabled = true; - } - - disable(){ - this.enabled = false; - } - } - - Mutator.moduleName = "mutator"; - - //load defaults - Mutator.mutators = defaultMutators; - - function rows(pageSize, currentRow, currentPage, totalRows, totalPages){ - var el = document.createElement("span"), - showingEl = document.createElement("span"), - valueEl = document.createElement("span"), - ofEl = document.createElement("span"), - totalEl = document.createElement("span"), - rowsEl = document.createElement("span"); - - this.table.modules.localize.langBind("pagination|counter|showing", (value) => { - showingEl.innerHTML = value; - }); - - this.table.modules.localize.langBind("pagination|counter|of", (value) => { - ofEl.innerHTML = value; - }); - - this.table.modules.localize.langBind("pagination|counter|rows", (value) => { - rowsEl.innerHTML = value; - }); - - if(totalRows){ - valueEl.innerHTML = " " + currentRow + "-" + Math.min((currentRow + pageSize - 1), totalRows) + " "; - - totalEl.innerHTML = " " + totalRows + " "; - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(ofEl); - el.appendChild(totalEl); - el.appendChild(rowsEl); - }else { - valueEl.innerHTML = " 0 "; - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(rowsEl); - } - - return el; - } - - function pages(pageSize, currentRow, currentPage, totalRows, totalPages){ - - var el = document.createElement("span"), - showingEl = document.createElement("span"), - valueEl = document.createElement("span"), - ofEl = document.createElement("span"), - totalEl = document.createElement("span"), - rowsEl = document.createElement("span"); - - this.table.modules.localize.langBind("pagination|counter|showing", (value) => { - showingEl.innerHTML = value; - }); - - valueEl.innerHTML = " " + currentPage + " "; - - this.table.modules.localize.langBind("pagination|counter|of", (value) => { - ofEl.innerHTML = value; - }); - - totalEl.innerHTML = " " + totalPages + " "; - - this.table.modules.localize.langBind("pagination|counter|pages", (value) => { - rowsEl.innerHTML = value; - }); - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(ofEl); - el.appendChild(totalEl); - el.appendChild(rowsEl); - - return el; - } - - var defaultPageCounters = { - rows:rows, - pages:pages, - }; - - class Page extends Module{ - - constructor(table){ - super(table); - - this.mode = "local"; - this.progressiveLoad = false; - - this.element = null; - this.pageCounterElement = null; - this.pageCounter = null; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.remoteRowCountEstimate = null; - - this.initialLoad = true; - this.dataChanging = false; //flag to check if data is being changed by this module - - this.pageSizes = []; - - this.registerTableOption("pagination", false); //set pagination type - this.registerTableOption("paginationMode", "local"); //local or remote pagination - this.registerTableOption("paginationSize", false); //set number of rows to a page - this.registerTableOption("paginationInitialPage", 1); //initial page to show on load - this.registerTableOption("paginationCounter", false); // set pagination counter - this.registerTableOption("paginationCounterElement", false); // set pagination counter - this.registerTableOption("paginationButtonCount", 5); // set count of page button - this.registerTableOption("paginationSizeSelector", false); //add pagination size selector element - this.registerTableOption("paginationElement", false); //element to hold pagination numbers - // this.registerTableOption("paginationDataSent", {}); //pagination data sent to the server - // this.registerTableOption("paginationDataReceived", {}); //pagination data received from the server - this.registerTableOption("paginationAddRow", "page"); //add rows on table or page - - this.registerTableOption("progressiveLoad", false); //progressive loading - this.registerTableOption("progressiveLoadDelay", 0); //delay between requests - this.registerTableOption("progressiveLoadScrollMargin", 0); //margin before scroll begins - - this.registerTableFunction("setMaxPage", this.setMaxPage.bind(this)); - this.registerTableFunction("setPage", this.setPage.bind(this)); - this.registerTableFunction("setPageToRow", this.userSetPageToRow.bind(this)); - this.registerTableFunction("setPageSize", this.userSetPageSize.bind(this)); - this.registerTableFunction("getPageSize", this.getPageSize.bind(this)); - this.registerTableFunction("previousPage", this.previousPage.bind(this)); - this.registerTableFunction("nextPage", this.nextPage.bind(this)); - this.registerTableFunction("getPage", this.getPage.bind(this)); - this.registerTableFunction("getPageMax", this.getPageMax.bind(this)); - - //register component functions - this.registerComponentFunction("row", "pageTo", this.setPageToRow.bind(this)); - } - - initialize(){ - if(this.table.options.pagination){ - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("row-added", this.rowsUpdated.bind(this)); - this.subscribe("data-processed", this.initialLoadComplete.bind(this)); - this.subscribe("table-built", this.calculatePageSizes.bind(this)); - this.subscribe("footer-redraw", this.footerRedraw.bind(this)); - - if(this.table.options.paginationAddRow == "page"){ - this.subscribe("row-adding-position", this.rowAddingPosition.bind(this)); - } - - if(this.table.options.paginationMode === "remote"){ - this.subscribe("data-params", this.remotePageParams.bind(this)); - this.subscribe("data-loaded", this._parseRemoteData.bind(this)); - } - - if(this.table.options.progressiveLoad){ - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } - - this.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40); - this.registerDisplayHandler(this.getRows.bind(this), 50); - - this.createElements(); - this.initializePageCounter(); - this.initializePaginator(); - }else if(this.table.options.progressiveLoad){ - this.subscribe("data-params", this.remotePageParams.bind(this)); - this.subscribe("data-loaded", this._parseRemoteData.bind(this)); - this.subscribe("table-built", this.calculatePageSizes.bind(this)); - this.subscribe("data-processed", this.initialLoadComplete.bind(this)); - - this.initializeProgressive(this.table.options.progressiveLoad); - - if(this.table.options.progressiveLoad === "scroll"){ - this.subscribe("scroll-vertical", this.scrollVertical.bind(this)); - } - } - } - - rowAddingPosition(row, top){ - var rowManager = this.table.rowManager, - displayRows = rowManager.getDisplayRows(), - index; - - if(top){ - if(displayRows.length){ - index = displayRows[0]; - }else { - if(rowManager.activeRows.length){ - index = rowManager.activeRows[rowManager.activeRows.length-1]; - top = false; - } - } - }else { - if(displayRows.length){ - index = displayRows[displayRows.length - 1]; - top = displayRows.length < this.size ? false : true; - } - } - - return {index, top}; - } - - calculatePageSizes(){ - var testElRow, testElCell; - - if(this.table.options.paginationSize){ - this.size = this.table.options.paginationSize; - }else { - testElRow = document.createElement("div"); - testElRow.classList.add("tabulator-row"); - testElRow.style.visibility = "hidden"; - - testElCell = document.createElement("div"); - testElCell.classList.add("tabulator-cell"); - testElCell.innerHTML = "Page Row Test"; - - testElRow.appendChild(testElCell); - - this.table.rowManager.getTableElement().appendChild(testElRow); - - this.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight); - - this.table.rowManager.getTableElement().removeChild(testElRow); - } - - this.dispatchExternal("pageSizeChanged", this.size); - - this.generatePageSizeSelectList(); - } - - initialLoadComplete(){ - this.initialLoad = false; - } - - remotePageParams(data, config, silent, params){ - if(!this.initialLoad){ - if((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){ - this.reset(true); - } - } - - //configure request params - params.page = this.page; - - //set page size if defined - if(this.size){ - params.size = this.size; - } - - return params; - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - userSetPageToRow(row){ - if(this.table.options.pagination){ - row = this.table.rowManager.findRow(row); - - if(row){ - return this.setPageToRow(row); - } - } - - return Promise.reject(); - } - - userSetPageSize(size){ - if(this.table.options.pagination){ - this.setPageSize(size); - return this.setPage(1); - }else { - return false; - } - } - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - scrollVertical(top, dir){ - var element, diff, margin; - if(!dir && !this.table.dataLoader.loading){ - element = this.table.rowManager.getElement(); - diff = element.scrollHeight - element.clientHeight - top; - margin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2); - - if(diff < margin){ - this.nextPage() - .catch(() => {}); //consume the exception thrown when on the last page - } - } - } - - restOnRenderBefore(rows, renderInPosition){ - if(!renderInPosition){ - if(this.mode === "local"){ - this.reset(); - } - } - - return rows; - } - - rowsUpdated(){ - this.refreshData(true, "all"); - } - - createElements(){ - var button; - - this.element = document.createElement("span"); - this.element.classList.add("tabulator-paginator"); - - this.pagesElement = document.createElement("span"); - this.pagesElement.classList.add("tabulator-pages"); - - button = document.createElement("button"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); - - if(this.table.options.paginationSizeSelector){ - this.pageSizeSelect = document.createElement("select"); - this.pageSizeSelect.classList.add("tabulator-page-size"); - } - } - - generatePageSizeSelectList(){ - var pageSizes = []; - - if(this.pageSizeSelect){ - - if(Array.isArray(this.table.options.paginationSizeSelector)){ - pageSizes = this.table.options.paginationSizeSelector; - this.pageSizes = pageSizes; - - if(this.pageSizes.indexOf(this.size) == -1){ - pageSizes.unshift(this.size); - } - }else { - - if(this.pageSizes.indexOf(this.size) == -1){ - pageSizes = []; - - for (let i = 1; i < 5; i++){ - pageSizes.push(this.size * i); - } - - this.pageSizes = pageSizes; - }else { - pageSizes = this.pageSizes; - } - } - - while(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild); - - pageSizes.forEach((item) => { - var itemEl = document.createElement("option"); - itemEl.value = item; - - if(item === true){ - this.langBind("pagination|all", function(value){ - itemEl.innerHTML = value; - }); - }else { - itemEl.innerHTML = item; - } - - - - this.pageSizeSelect.appendChild(itemEl); - }); - - this.pageSizeSelect.value = this.size; - } - } - - initializePageCounter(){ - var counter = this.table.options.paginationCounter, - pageCounter = null; - - if(counter){ - if(typeof counter === "function"){ - pageCounter = counter; - }else { - pageCounter = Page.pageCounters[counter]; - } - - if(pageCounter){ - this.pageCounter = pageCounter; - - this.pageCounterElement = document.createElement("span"); - this.pageCounterElement.classList.add("tabulator-page-counter"); - }else { - console.warn("Pagination Error - No such page counter found: ", counter); - } - } - } - - //setup pagination - initializePaginator(hidden){ - var pageSelectLabel, paginationCounterHolder; - - if(!hidden){ - //build pagination element - - //bind localizations - this.langBind("pagination|first", (value) => { - this.firstBut.innerHTML = value; - }); - - this.langBind("pagination|first_title", (value) => { - this.firstBut.setAttribute("aria-label", value); - this.firstBut.setAttribute("title", value); - }); - - this.langBind("pagination|prev", (value) => { - this.prevBut.innerHTML = value; - }); - - this.langBind("pagination|prev_title", (value) => { - this.prevBut.setAttribute("aria-label", value); - this.prevBut.setAttribute("title", value); - }); - - this.langBind("pagination|next", (value) => { - this.nextBut.innerHTML = value; - }); - - this.langBind("pagination|next_title", (value) => { - this.nextBut.setAttribute("aria-label", value); - this.nextBut.setAttribute("title", value); - }); - - this.langBind("pagination|last", (value) => { - this.lastBut.innerHTML = value; - }); - - this.langBind("pagination|last_title", (value) => { - this.lastBut.setAttribute("aria-label", value); - this.lastBut.setAttribute("title", value); - }); - - //click bindings - this.firstBut.addEventListener("click", () => { - this.setPage(1); - }); - - this.prevBut.addEventListener("click", () => { - this.previousPage(); - }); - - this.nextBut.addEventListener("click", () => { - this.nextPage(); - }); - - this.lastBut.addEventListener("click", () => { - this.setPage(this.max); - }); - - if(this.table.options.paginationElement){ - this.element = this.table.options.paginationElement; - } - - if(this.pageSizeSelect){ - pageSelectLabel = document.createElement("label"); - - this.langBind("pagination|page_size", (value) => { - this.pageSizeSelect.setAttribute("aria-label", value); - this.pageSizeSelect.setAttribute("title", value); - pageSelectLabel.innerHTML = value; - }); - - this.element.appendChild(pageSelectLabel); - this.element.appendChild(this.pageSizeSelect); - - this.pageSizeSelect.addEventListener("change", (e) => { - this.setPageSize(this.pageSizeSelect.value == "true" ? true : this.pageSizeSelect.value); - this.setPage(1); - }); - } - - //append to DOM - this.element.appendChild(this.firstBut); - this.element.appendChild(this.prevBut); - this.element.appendChild(this.pagesElement); - this.element.appendChild(this.nextBut); - this.element.appendChild(this.lastBut); - - if(!this.table.options.paginationElement){ - if(this.table.options.paginationCounter){ - - if(this.table.options.paginationCounterElement){ - if(this.table.options.paginationCounterElement instanceof HTMLElement){ - this.table.options.paginationCounterElement.appendChild(this.pageCounterElement); - }else if(typeof this.table.options.paginationCounterElement === "string"){ - paginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement); - - if(paginationCounterHolder){ - paginationCounterHolder.appendChild(this.pageCounterElement); - }else { - console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:", this.table.options.paginationCounterElement); - } - } - }else { - this.footerAppend(this.pageCounterElement); - } - - } - - this.footerAppend(this.element); - } - - this.page = this.table.options.paginationInitialPage; - this.count = this.table.options.paginationButtonCount; - } - - //set default values - this.mode = this.table.options.paginationMode; - } - - initializeProgressive(mode){ - this.initializePaginator(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; - } - - trackChanges(){ - this.dispatch("page-changed"); - } - - //calculate maximum page from number of rows - setMaxRows(rowCount){ - if(!rowCount){ - this.max = 1; - }else { - this.max = this.size === true ? 1 : Math.ceil(rowCount/this.size); - } - - if(this.page > this.max){ - this.page = this.max; - } - } - - //reset to first page without triggering action - reset(force){ - if(!this.initialLoad){ - if(this.mode == "local" || force){ - this.page = 1; - this.trackChanges(); - } - } - } - - //set the maximum page - setMaxPage(max){ - - max = parseInt(max); - - this.max = max || 1; - - if(this.page > this.max){ - this.page = this.max; - this.trigger(); - } - } - - //set current page number - setPage(page){ - switch(page){ - case "first": - return this.setPage(1); - - case "prev": - return this.previousPage(); - - case "next": - return this.nextPage(); - - case "last": - return this.setPage(this.max); - } - - page = parseInt(page); - - if((page > 0 && page <= this.max) || this.mode !== "local"){ - this.page = page; - - this.trackChanges(); - - return this.trigger(); - }else { - console.warn("Pagination Error - Requested page is out of range of 1 - " + this.max + ":", page); - return Promise.reject(); - } - } - - setPageToRow(row){ - var rows = this.displayRows(-1); - var index = rows.indexOf(row); - - if(index > -1){ - var page = this.size === true ? 1 : Math.ceil((index + 1) / this.size); - - return this.setPage(page); - }else { - console.warn("Pagination Error - Requested row is not visible"); - return Promise.reject(); - } - } - - setPageSize(size){ - if(size !== true){ - size = parseInt(size); - } - - if(size > 0){ - this.size = size; - this.dispatchExternal("pageSizeChanged", size); - } - - if(this.pageSizeSelect){ - // this.pageSizeSelect.value = size; - this.generatePageSizeSelectList(); - } - - this.trackChanges(); - } - - _setPageCounter(totalRows, size, currentRow){ - var content; - - if(this.pageCounter){ - - if(this.mode === "remote"){ - size = this.size; - currentRow = ((this.page - 1) * this.size) + 1; - totalRows = this.remoteRowCountEstimate; - } - - content = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max); - - switch(typeof content){ - case "object": - if(content instanceof Node){ - - //clear previous cell contents - while(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild); - - this.pageCounterElement.appendChild(content); - }else { - this.pageCounterElement.innerHTML = ""; - - if(content != null){ - console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:", content); - } - } - break; - case "undefined": - this.pageCounterElement.innerHTML = ""; - break; - default: - this.pageCounterElement.innerHTML = content; - } - } - } - - //setup the pagination buttons - _setPageButtons(){ - let leftSize = Math.floor((this.count-1) / 2); - let rightSize = Math.ceil((this.count-1) / 2); - let min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1); - let max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max); - - while(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild); - - if(this.page == 1){ - this.firstBut.disabled = true; - this.prevBut.disabled = true; - }else { - this.firstBut.disabled = false; - this.prevBut.disabled = false; - } - - if(this.page == this.max){ - this.lastBut.disabled = true; - this.nextBut.disabled = true; - }else { - this.lastBut.disabled = false; - this.nextBut.disabled = false; - } - - for(let i = min; i <= max; i++){ - if(i>0 && i <= this.max){ - this.pagesElement.appendChild(this._generatePageButton(i)); - } - } - - this.footerRedraw(); - } - - _generatePageButton(page){ - var button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if(page == this.page){ - button.classList.add("active"); - } - - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - - this.langBind("pagination|page_title", (value) => { - button.setAttribute("aria-label", value + " " + page); - button.setAttribute("title", value + " " + page); - }); - - button.setAttribute("data-page", page); - button.textContent = page; - - button.addEventListener("click", (e) => { - this.setPage(page); - }); - - return button; - } - - //previous page - previousPage(){ - if(this.page > 1){ - this.page--; - - this.trackChanges(); - - return this.trigger(); - - }else { - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - return Promise.reject(); - } - } - - //next page - nextPage(){ - if(this.page < this.max){ - this.page++; - - this.trackChanges(); - - return this.trigger(); - - }else { - if(!this.progressiveLoad){ - console.warn("Pagination Error - Next page would be greater than maximum page of " + this.max + ":", this.max + 1); - } - return Promise.reject(); - } - } - - //return current page number - getPage(){ - return this.page; - } - - //return max page number - getPageMax(){ - return this.max; - } - - getPageSize(size){ - return this.size; - } - - getMode(){ - return this.mode; - } - - //return appropriate rows for current page - getRows(data){ - var actualRowPageSize = 0, - output, start, end, actualStartRow; - - var actualRows = data.filter((row) => { - return row.type === "row"; - }); - - if(this.mode == "local"){ - output = []; - - this.setMaxRows(data.length); - - if(this.size === true){ - start = 0; - end = data.length; - }else { - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - } - - this._setPageButtons(); - - for(let i = start; i < end; i++){ - let row = data[i]; - - if(row){ - output.push(row); - - if(row.type === "row"){ - if(!actualStartRow){ - actualStartRow = row; - } - - actualRowPageSize++; - } - } - } - - this._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0); - - return output; - }else { - this._setPageButtons(); - this._setPageCounter(actualRows.length); - - return data.slice(0); - } - } - - trigger(){ - var left; - - switch(this.mode){ - case "local": - left = this.table.rowManager.scrollLeft; - - this.refreshData(); - this.table.rowManager.scrollHorizontal(left); - - this.dispatchExternal("pageLoaded", this.getPage()); - - return Promise.resolve(); - - case "remote": - this.dataChanging = true; - return this.reloadData(null) - .finally(() => { - this.dataChanging = false; - }); - - case "progressive_load": - case "progressive_scroll": - return this.reloadData(null, true); - - default: - console.warn("Pagination Error - no such pagination mode:", this.mode); - return Promise.reject(); - } - } - - _parseRemoteData(data){ - var margin; - - if(typeof data.last_page === "undefined"){ - console.warn("Remote Pagination Error - Server response missing '" + (this.options("dataReceiveParams").last_page || "last_page") + "' property"); - } - - if(data.data){ - this.max = parseInt(data.last_page) || 1; - - this.remoteRowCountEstimate = typeof data.last_row !== "undefined" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0)); - - if(this.progressiveLoad){ - switch(this.mode){ - case "progressive_load": - - if(this.page == 1){ - this.table.rowManager.setData(data.data, false, this.page == 1); - }else { - this.table.rowManager.addRows(data.data); - } - - if(this.page < this.max){ - setTimeout(() => { - this.nextPage(); - }, this.table.options.progressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data); - - this.table.rowManager.setData(data, this.page !== 1, this.page == 1); - - margin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2); - - if(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){ - if(this.page < this.max){ - setTimeout(() => { - this.nextPage(); - }); - } - } - break; - } - - return false; - }else { - // left = this.table.rowManager.scrollLeft; - this.dispatchExternal("pageLoaded", this.getPage()); - // this.table.rowManager.scrollHorizontal(left); - // this.table.columnManager.scrollHorizontal(left); - } - - }else { - console.warn("Remote Pagination Error - Server response missing '" + (this.options("dataReceiveParams").data || "data") + "' property"); - } - - return data.data; - } - - //handle the footer element being redrawn - footerRedraw(){ - var footer = this.table.footerManager.containerElement; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - }else { - this.pagesElement.style.display = ''; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - } - } - } - } - - Page.moduleName = "page"; - - //load defaults - Page.pageCounters = defaultPageCounters; - - // read persistance information from storage - var defaultReaders = { - local:function(id, type){ - var data = localStorage.getItem(id + "-" + type); - - return data ? JSON.parse(data) : false; - }, - cookie:function(id, type){ - var cookie = document.cookie, - key = id + "-" + type, - cookiePos = cookie.indexOf(key + "="), - end, data; - - //if cookie exists, decode and load column data into tabulator - if(cookiePos > -1){ - cookie = cookie.slice(cookiePos); - - end = cookie.indexOf(";"); - - if(end > -1){ - cookie = cookie.slice(0, end); - } - - data = cookie.replace(key + "=", ""); - } - - return data ? JSON.parse(data) : false; - } - }; - - //write persistence information to storage - var defaultWriters = { - local:function(id, type, data){ - localStorage.setItem(id + "-" + type, JSON.stringify(data)); - }, - cookie:function(id, type, data){ - var expireDate = new Date(); - - expireDate.setDate(expireDate.getDate() + 10000); - - document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString(); - } - }; - - class Persistence extends Module{ - - constructor(table){ - super(table); - - this.mode = ""; - this.id = ""; - // this.persistProps = ["field", "width", "visible"]; - this.defWatcherBlock = false; - this.config = {}; - this.readFunc = false; - this.writeFunc = false; - - this.registerTableOption("persistence", false); - this.registerTableOption("persistenceID", ""); //key for persistent storage - this.registerTableOption("persistenceMode", true); //mode for storing persistence information - this.registerTableOption("persistenceReaderFunc", false); //function for handling persistence data reading - this.registerTableOption("persistenceWriterFunc", false); //function for handling persistence data writing - } - - // Test for whether localStorage is available for use. - localStorageTest() { - var testKey = "_tabulator_test"; - - try { - window.localStorage.setItem( testKey, testKey); - window.localStorage.removeItem( testKey ); - return true; - } catch(e) { - return false; - } - } - - //setup parameters - initialize(){ - if(this.table.options.persistence){ - //determine persistent layout storage type - var mode = this.table.options.persistenceMode, - id = this.table.options.persistenceID, - retrievedData; - - this.mode = mode !== true ? mode : (this.localStorageTest() ? "local" : "cookie"); - - if(this.table.options.persistenceReaderFunc){ - if(typeof this.table.options.persistenceReaderFunc === "function"){ - this.readFunc = this.table.options.persistenceReaderFunc; - }else { - if(Persistence.readers[this.table.options.persistenceReaderFunc]){ - this.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc]; - }else { - console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc); - } - } - }else { - if(Persistence.readers[this.mode]){ - this.readFunc = Persistence.readers[this.mode]; - }else { - console.warn("Persistence Read Error - invalid reader set", this.mode); - } - } - - if(this.table.options.persistenceWriterFunc){ - if(typeof this.table.options.persistenceWriterFunc === "function"){ - this.writeFunc = this.table.options.persistenceWriterFunc; - }else { - if(Persistence.writers[this.table.options.persistenceWriterFunc]){ - this.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc]; - }else { - console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc); - } - } - }else { - if(Persistence.writers[this.mode]){ - this.writeFunc = Persistence.writers[this.mode]; - }else { - console.warn("Persistence Write Error - invalid writer set", this.mode); - } - } - - //set storage tag - this.id = "tabulator-" + (id || (this.table.element.getAttribute("id") || "")); - - this.config = { - sort:this.table.options.persistence === true || this.table.options.persistence.sort, - filter:this.table.options.persistence === true || this.table.options.persistence.filter, - headerFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter, - group:this.table.options.persistence === true || this.table.options.persistence.group, - page:this.table.options.persistence === true || this.table.options.persistence.page, - columns:this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns, - }; - - //load pagination data if needed - if(this.config.page){ - retrievedData = this.retrieveData("page"); - - if(retrievedData){ - if(typeof retrievedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)){ - this.table.options.paginationSize = retrievedData.paginationSize; - } - - if(typeof retrievedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)){ - this.table.options.paginationInitialPage = retrievedData.paginationInitialPage; - } - } - } - - //load group data if needed - if(this.config.group){ - retrievedData = this.retrieveData("group"); - - if(retrievedData){ - if(typeof retrievedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)){ - this.table.options.groupBy = retrievedData.groupBy; - } - if(typeof retrievedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)){ - this.table.options.groupStartOpen = retrievedData.groupStartOpen; - } - if(typeof retrievedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)){ - this.table.options.groupHeader = retrievedData.groupHeader; - } - } - } - - if(this.config.columns){ - this.table.options.columns = this.load("columns", this.table.options.columns); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-show", this.save.bind(this, "columns")); - this.subscribe("column-hide", this.save.bind(this, "columns")); - this.subscribe("column-moved", this.save.bind(this, "columns")); - } - - this.subscribe("table-built", this.tableBuilt.bind(this), 0); - - this.subscribe("table-redraw", this.tableRedraw.bind(this)); - - this.subscribe("filter-changed", this.eventSave.bind(this, "filter")); - this.subscribe("filter-changed", this.eventSave.bind(this, "headerFilter")); - this.subscribe("sort-changed", this.eventSave.bind(this, "sort")); - this.subscribe("group-changed", this.eventSave.bind(this, "group")); - this.subscribe("page-changed", this.eventSave.bind(this, "page")); - this.subscribe("column-resized", this.eventSave.bind(this, "columns")); - this.subscribe("column-width", this.eventSave.bind(this, "columns")); - this.subscribe("layout-refreshed", this.eventSave.bind(this, "columns")); - } - - this.registerTableFunction("getColumnLayout", this.getColumnLayout.bind(this)); - this.registerTableFunction("setColumnLayout", this.setColumnLayout.bind(this)); - } - - eventSave(type){ - if(this.config[type]){ - this.save(type); - } - } - - tableBuilt(){ - var sorters, filters, headerFilters; - - if(this.config.sort){ - sorters = this.load("sort"); - - if(!sorters === false){ - this.table.options.initialSort = sorters; - } - } - - if(this.config.filter){ - filters = this.load("filter"); - - if(!filters === false){ - this.table.options.initialFilter = filters; - } - } - if(this.config.headerFilter){ - headerFilters = this.load("headerFilter"); - - if(!headerFilters === false){ - this.table.options.initialHeaderFilter = headerFilters; - } - } - - } - - tableRedraw(force){ - if(force && this.config.columns){ - this.save("columns"); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - getColumnLayout(){ - return this.parseColumns(this.table.columnManager.getColumns()); - } - - setColumnLayout(layout){ - this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true)); - return true; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumn(column){ - var def, keys; - - if(this.config.columns){ - this.defWatcherBlock = true; - - def = column.getDefinition(); - - keys = this.config.columns === true ? Object.keys(def) : this.config.columns; - - keys.forEach((key)=>{ - var props = Object.getOwnPropertyDescriptor(def, key); - var value = def[key]; - - if(props){ - Object.defineProperty(def, key, { - set: (newValue) => { - value = newValue; - - if(!this.defWatcherBlock){ - this.save("columns"); - } - - if(props.set){ - props.set(newValue); - } - }, - get:() => { - if(props.get){ - props.get(); - } - return value; - } - }); - } - }); - - this.defWatcherBlock = false; - } - } - - //load saved definitions - load(type, current){ - var data = this.retrieveData(type); - - if(current){ - data = data ? this.mergeDefinition(current, data) : current; - } - - return data; - } - - //retrieve data from memory - retrieveData(type){ - return this.readFunc ? this.readFunc(this.id, type) : false; - } - - //merge old and new column definitions - mergeDefinition(oldCols, newCols, mergeAllNew){ - var output = []; - - newCols = newCols || []; - - newCols.forEach((column, to) => { - var from = this._findColumn(oldCols, column), - keys; - - if(from){ - if(mergeAllNew){ - keys = Object.keys(column); - }else if(this.config.columns === true || this.config.columns == undefined){ - keys = Object.keys(from); - keys.push("width"); - }else { - keys = this.config.columns; - } - - keys.forEach((key)=>{ - if(key !== "columns" && typeof column[key] !== "undefined"){ - from[key] = column[key]; - } - }); - - if(from.columns){ - from.columns = this.mergeDefinition(from.columns, column.columns); - } - - output.push(from); - } - }); - - oldCols.forEach((column, i) => { - var from = this._findColumn(newCols, column); - - if (!from) { - if(output.length>i){ - output.splice(i, 0, column); - }else { - output.push(column); - } - } - }); - - return output; - } - - //find matching columns - _findColumn(columns, subject){ - var type = subject.columns ? "group" : (subject.field ? "field" : "object"); - - return columns.find(function(col){ - switch(type){ - case "group": - return col.title === subject.title && col.columns.length === subject.columns.length; - - case "field": - return col.field === subject.field; - - case "object": - return col === subject; - } - }); - } - - //save data - save(type){ - var data = {}; - - switch(type){ - case "columns": - data = this.parseColumns(this.table.columnManager.getColumns()); - break; - - case "filter": - data = this.table.modules.filter.getFilters(); - break; - - case "headerFilter": - data = this.table.modules.filter.getHeaderFilters(); - break; - - case "sort": - data = this.validateSorters(this.table.modules.sort.getSort()); - break; - - case "group": - data = this.getGroupConfig(); - break; - - case "page": - data = this.getPageConfig(); - break; - } - - if(this.writeFunc){ - this.writeFunc(this.id, type, data); - } - - } - - //ensure sorters contain no function data - validateSorters(data){ - data.forEach(function(item){ - item.column = item.field; - delete item.field; - }); - - return data; - } - - getGroupConfig(){ - var data = {}; - - if(this.config.group){ - if(this.config.group === true || this.config.group.groupBy){ - data.groupBy = this.table.options.groupBy; - } - - if(this.config.group === true || this.config.group.groupStartOpen){ - data.groupStartOpen = this.table.options.groupStartOpen; - } - - if(this.config.group === true || this.config.group.groupHeader){ - data.groupHeader = this.table.options.groupHeader; - } - } - - return data; - } - - getPageConfig(){ - var data = {}; - - if(this.config.page){ - if(this.config.page === true || this.config.page.size){ - data.paginationSize = this.table.modules.page.getPageSize(); - } - - if(this.config.page === true || this.config.page.page){ - data.paginationInitialPage = this.table.modules.page.getPage(); - } - } - - return data; - } - - - //parse columns for data to store - parseColumns(columns){ - var definitions = [], - excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"]; - - columns.forEach((column) => { - var defStore = {}, - colDef = column.getDefinition(), - keys; - - if(column.isGroup){ - defStore.title = colDef.title; - defStore.columns = this.parseColumns(column.getColumns()); - }else { - defStore.field = column.getField(); - - if(this.config.columns === true || this.config.columns == undefined){ - keys = Object.keys(colDef); - keys.push("width"); - keys.push("visible"); - }else { - keys = this.config.columns; - } - - keys.forEach((key)=>{ - switch(key){ - case "width": - defStore.width = column.getWidth(); - break; - case "visible": - defStore.visible = column.visible; - break; - - default: - if(typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1){ - defStore[key] = colDef[key]; - } - } - }); - } - - definitions.push(defStore); - }); - - return definitions; - } - } - - Persistence.moduleName = "persistence"; - - Persistence.moduleInitOrder = -10; - - //load defaults - Persistence.readers = defaultReaders; - Persistence.writers = defaultWriters; - - class Popup$1 extends Module{ - - constructor(table){ - super(table); - - this.columnSubscribers = {}; - - this.registerTableOption("rowContextPopup", false); - this.registerTableOption("rowClickPopup", false); - this.registerTableOption("rowDblClickPopup", false); - this.registerTableOption("groupContextPopup", false); - this.registerTableOption("groupClickPopup", false); - this.registerTableOption("groupDblClickPopup", false); - - this.registerColumnOption("headerContextPopup"); - this.registerColumnOption("headerClickPopup"); - this.registerColumnOption("headerDblClickPopup"); - this.registerColumnOption("headerPopup"); - this.registerColumnOption("headerPopupIcon"); - this.registerColumnOption("contextPopup"); - this.registerColumnOption("clickPopup"); - this.registerColumnOption("dblClickPopup"); - - this.registerComponentFunction("cell", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("column", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("row", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("group", "popup", this._componentPopupCall.bind(this)); - - } - - initialize(){ - this.initializeRowWatchers(); - this.initializeGroupWatchers(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - _componentPopupCall(component, contents, position){ - this.loadPopupEvent(contents, null, component, position); - } - - initializeRowWatchers(){ - if(this.table.options.rowContextPopup){ - this.subscribe("row-contextmenu", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup)); - this.table.on("rowTapHold", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup)); - } - - if(this.table.options.rowClickPopup){ - this.subscribe("row-click", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup)); - } - - if(this.table.options.rowDblClickPopup){ - this.subscribe("row-dblclick", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup)); - } - } - - initializeGroupWatchers(){ - if(this.table.options.groupContextPopup){ - this.subscribe("group-contextmenu", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup)); - this.table.on("groupTapHold", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup)); - } - - if(this.table.options.groupClickPopup){ - this.subscribe("group-click", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup)); - } - - if(this.table.options.groupDblClickPopup){ - this.subscribe("group-dblclick", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup)); - } - } - - initializeColumn(column){ - var def = column.definition; - - //handle column events - if(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){ - this.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, "headerContextPopup"); - this.subscribe("column-contextmenu", this.columnSubscribers.headerContextPopup); - this.table.on("headerTapHold", this.loadPopupTableColumnEvent.bind(this, "headerContextPopup")); - } - - if(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){ - this.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerClickPopup"); - this.subscribe("column-click", this.columnSubscribers.headerClickPopup); - - - }if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){ - this.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerDblClickPopup"); - this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickPopup); - } - - if(def.headerPopup){ - this.initializeColumnHeaderPopup(column); - } - - //handle cell events - if(def.contextPopup && !this.columnSubscribers.contextPopup){ - this.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, "contextPopup"); - this.subscribe("cell-contextmenu", this.columnSubscribers.contextPopup); - this.table.on("cellTapHold", this.loadPopupTableCellEvent.bind(this, "contextPopup")); - } - - if(def.clickPopup && !this.columnSubscribers.clickPopup){ - this.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, "clickPopup"); - this.subscribe("cell-click", this.columnSubscribers.clickPopup); - } - - if(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){ - this.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, "dblClickPopup"); - this.subscribe("cell-click", this.columnSubscribers.dblClickPopup); - } - } - - initializeColumnHeaderPopup(column){ - var icon = column.definition.headerPopupIcon, - headerPopupEl; - - headerPopupEl = document.createElement("span"); - headerPopupEl.classList.add("tabulator-header-popup-button"); - - if(icon){ - if(typeof icon === "function"){ - icon = icon(column.getComponent()); - } - - if(icon instanceof HTMLElement){ - headerPopupEl.appendChild(icon); - }else { - headerPopupEl.innerHTML = icon; - } - }else { - headerPopupEl.innerHTML = "⋮"; - } - - headerPopupEl.addEventListener("click", (e) => { - e.stopPropagation(); - e.preventDefault(); - - this.loadPopupEvent(column.definition.headerPopup, e, column); - }); - - column.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild); - } - - loadPopupTableCellEvent(option, e, cell){ - if(cell._cell){ - cell = cell._cell; - } - - if(cell.column.definition[option]){ - this.loadPopupEvent(cell.column.definition[option], e, cell); - } - } - - loadPopupTableColumnEvent(option, e, column){ - if(column._column){ - column = column._column; - } - - if(column.definition[option]){ - this.loadPopupEvent(column.definition[option], e, column); - } - } - - loadPopupEvent(contents, e, component, position){ - var renderedCallback; - - function onRendered(callback){ - renderedCallback = callback; - } - - if(component._group){ - component = component._group; - }else if(component._row){ - component = component._row; - } - - contents = typeof contents == "function" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents; - - this.loadPopup(e, component, contents, renderedCallback, position); - } - - loadPopup(e, component, contents, renderedCallback, position){ - var touch = !(e instanceof MouseEvent), - contentsEl, popup; - - if(contents instanceof HTMLElement){ - contentsEl = contents; - }else { - contentsEl = document.createElement("div"); - contentsEl.innerHTML = contents; - } - - contentsEl.classList.add("tabulator-popup"); - - contentsEl.addEventListener("click", (e) =>{ - e.stopPropagation(); - }); - - if(!touch){ - e.preventDefault(); - } - - popup = this.popup(contentsEl); - - if(typeof renderedCallback === "function"){ - popup.renderCallback(renderedCallback); - } - - if(e){ - popup.show(e); - }else { - popup.show(component.getElement(), position || "center"); - } - - - popup.hideOnBlur(() => { - this.dispatchExternal("popupClosed", component.getComponent()); - }); - - - - this.dispatchExternal("popupOpened", component.getComponent()); - } - } - - Popup$1.moduleName = "popup"; - - class Print extends Module{ - - constructor(table){ - super(table); - - this.element = false; - this.manualBlock = false; - this.beforeprintEventHandler = null; - this.afterprintEventHandler = null; - - this.registerTableOption("printAsHtml", false); //enable print as html - this.registerTableOption("printFormatter", false); //printing page formatter - this.registerTableOption("printHeader", false); //page header contents - this.registerTableOption("printFooter", false); //page footer contents - this.registerTableOption("printStyled", true); //enable print as html styling - this.registerTableOption("printRowRange", "visible"); //restrict print to visible rows only - this.registerTableOption("printConfig", {}); //print config options - - this.registerColumnOption("print"); - this.registerColumnOption("titlePrint"); - } - - initialize(){ - if(this.table.options.printAsHtml){ - this.beforeprintEventHandler = this.replaceTable.bind(this); - this.afterprintEventHandler = this.cleanup.bind(this); - - window.addEventListener("beforeprint", this.beforeprintEventHandler ); - window.addEventListener("afterprint", this.afterprintEventHandler); - this.subscribe("table-destroy", this.destroy.bind(this)); - } - - this.registerTableFunction("print", this.printFullscreen.bind(this)); - } - - destroy(){ - if(this.table.options.printAsHtml){ - window.removeEventListener( "beforeprint", this.beforeprintEventHandler ); - window.removeEventListener( "afterprint", this.afterprintEventHandler ); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - replaceTable(){ - if(!this.manualBlock){ - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-table"); - - this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print")); - - this.table.element.style.display = "none"; - - this.table.element.parentNode.insertBefore(this.element, this.table.element); - } - } - - cleanup(){ - document.body.classList.remove("tabulator-print-fullscreen-hide"); - - if(this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - this.table.element.style.display = ""; - } - } - - printFullscreen(visible, style, config){ - var scrollX = window.scrollX, - scrollY = window.scrollY, - headerEl = document.createElement("div"), - footerEl = document.createElement("div"), - tableEl = this.table.modules.export.generateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, "print"), - headerContent, footerContent; - - this.manualBlock = true; - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-fullscreen"); - - if(this.table.options.printHeader){ - headerEl.classList.add("tabulator-print-header"); - - headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader; - - if(typeof headerContent == "string"){ - headerEl.innerHTML = headerContent; - }else { - headerEl.appendChild(headerContent); - } - - this.element.appendChild(headerEl); - } - - this.element.appendChild(tableEl); - - if(this.table.options.printFooter){ - footerEl.classList.add("tabulator-print-footer"); - - footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter; - - - if(typeof footerContent == "string"){ - footerEl.innerHTML = footerContent; - }else { - footerEl.appendChild(footerContent); - } - - this.element.appendChild(footerEl); - } - - document.body.classList.add("tabulator-print-fullscreen-hide"); - document.body.appendChild(this.element); - - if(this.table.options.printFormatter){ - this.table.options.printFormatter(this.element, tableEl); - } - - window.print(); - - this.cleanup(); - - window.scrollTo(scrollX, scrollY); - - this.manualBlock = false; - } - } - - Print.moduleName = "print"; - - class ReactiveData extends Module{ - - constructor(table){ - super(table); - - this.data = false; - this.blocked = false; //block reactivity while performing update - this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with - this.currentVersion = 0; - - this.registerTableOption("reactiveData", false); //enable data reactivity - } - - initialize(){ - if(this.table.options.reactiveData){ - this.subscribe("cell-value-save-before", this.block.bind(this, "cellsave")); - this.subscribe("cell-value-save-after", this.unblock.bind(this, "cellsave")); - this.subscribe("row-data-save-before", this.block.bind(this, "rowsave")); - this.subscribe("row-data-save-after", this.unblock.bind(this, "rowsave")); - this.subscribe("row-data-init-after", this.watchRow.bind(this)); - this.subscribe("data-processing", this.watchData.bind(this)); - this.subscribe("table-destroy", this.unwatchData.bind(this)); - } - } - - watchData(data){ - var self = this, - version; - - this.currentVersion ++; - - version = this.currentVersion; - - this.unwatchData(); - - this.data = data; - - //override array push function - this.origFuncs.push = data.push; - - Object.defineProperty(this.data, "push", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-push"); - - args.forEach((arg) => { - self.table.rowManager.addRowActual(arg, false); - }); - - result = self.origFuncs.push.apply(data, arguments); - - self.unblock("data-push"); - } - - return result; - } - }); - - //override array unshift function - this.origFuncs.unshift = data.unshift; - - Object.defineProperty(this.data, "unshift", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-unshift"); - - args.forEach((arg) => { - self.table.rowManager.addRowActual(arg, true); - }); - - result = self.origFuncs.unshift.apply(data, arguments); - - self.unblock("data-unshift"); - } - - return result; - } - }); - - - //override array shift function - this.origFuncs.shift = data.shift; - - Object.defineProperty(this.data, "shift", { - enumerable: false, - configurable: true, - value: function(){ - var row, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-shift"); - - if(self.data.length){ - row = self.table.rowManager.getRowFromDataObject(self.data[0]); - - if(row){ - row.deleteActual(); - } - } - - result = self.origFuncs.shift.call(data); - - self.unblock("data-shift"); - } - - return result; - } - }); - - //override array pop function - this.origFuncs.pop = data.pop; - - Object.defineProperty(this.data, "pop", { - enumerable: false, - configurable: true, - value: function(){ - var row, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-pop"); - - if(self.data.length){ - row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]); - - if(row){ - row.deleteActual(); - } - } - - result = self.origFuncs.pop.call(data); - - self.unblock("data-pop"); - } - - return result; - } - }); - - - //override array splice function - this.origFuncs.splice = data.splice; - - Object.defineProperty(this.data, "splice", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - start = args[0] < 0 ? data.length + args[0] : args[0], - end = args[1], - newRows = args[2] ? args.slice(2) : false, - startRow, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-splice"); - //add new rows - if(newRows){ - startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false; - - if(startRow){ - newRows.forEach((rowData) => { - self.table.rowManager.addRowActual(rowData, true, startRow, true); - }); - }else { - newRows = newRows.slice().reverse(); - - newRows.forEach((rowData) => { - self.table.rowManager.addRowActual(rowData, true, false, true); - }); - } - } - - //delete removed rows - if(end !== 0){ - var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end); - - oldRows.forEach((rowData, i) => { - var row = self.table.rowManager.getRowFromDataObject(rowData); - - if(row){ - row.deleteActual(i !== oldRows.length - 1); - } - }); - } - - if(newRows || end !== 0){ - self.table.rowManager.reRenderInPosition(); - } - - result = self.origFuncs.splice.apply(data, arguments); - - self.unblock("data-splice"); - } - - return result ; - } - }); - } - - unwatchData(){ - if(this.data !== false){ - for(var key in this.origFuncs){ - Object.defineProperty(this.data, key, { - enumerable: true, - configurable:true, - writable:true, - value: this.origFuncs.key, - }); - } - } - } - - watchRow(row){ - var data = row.getData(); - - for(var key in data){ - this.watchKey(row, data, key); - } - - if(this.table.options.dataTree){ - this.watchTreeChildren(row); - } - } - - watchTreeChildren (row){ - var self = this, - childField = row.getData()[this.table.options.dataTreeChildField], - origFuncs = {}; - - if(childField){ - - origFuncs.push = childField.push; - - Object.defineProperty(childField, "push", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-push"); - - var result = origFuncs.push.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-push"); - } - - return result; - } - }); - - origFuncs.unshift = childField.unshift; - - Object.defineProperty(childField, "unshift", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-unshift"); - - var result = origFuncs.unshift.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-unshift"); - } - - return result; - } - }); - - origFuncs.shift = childField.shift; - - Object.defineProperty(childField, "shift", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-shift"); - - var result = origFuncs.shift.call(childField); - this.rebuildTree(row); - - self.unblock("tree-shift"); - } - - return result; - } - }); - - origFuncs.pop = childField.pop; - - Object.defineProperty(childField, "pop", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-pop"); - - var result = origFuncs.pop.call(childField); - this.rebuildTree(row); - - self.unblock("tree-pop"); - } - - return result; - } - }); - - origFuncs.splice = childField.splice; - - Object.defineProperty(childField, "splice", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-splice"); - - var result = origFuncs.splice.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-splice"); - } - - return result; - } - }); - } - } - - rebuildTree(row){ - this.table.modules.dataTree.initializeRow(row); - this.table.modules.dataTree.layoutRow(row); - this.table.rowManager.refreshActiveData("tree", false, true); - } - - watchKey(row, data, key){ - var self = this, - props = Object.getOwnPropertyDescriptor(data, key), - value = data[key], - version = this.currentVersion; - - Object.defineProperty(data, key, { - set: (newValue) => { - value = newValue; - if(!self.blocked && version === self.currentVersion){ - self.block("key"); - - var update = {}; - update[key] = newValue; - row.updateData(update); - - self.unblock("key"); - } - - if(props.set){ - props.set(newValue); - } - }, - get:() => { - - if(props.get){ - props.get(); - } - - return value; - } - }); - } - - unwatchRow(row){ - var data = row.getData(); - - for(var key in data){ - Object.defineProperty(data, key, { - value:data[key], - }); - } - } - - block(key){ - if(!this.blocked){ - this.blocked = key; - } - } - - unblock(key){ - if(this.blocked === key){ - this.blocked = false; - } - } - } - - ReactiveData.moduleName = "reactiveData"; - - class ResizeColumns extends Module{ - - constructor(table){ - super(table); - - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.latestX = false; - this.handle = null; - this.initialNextColumn = null; - this.nextColumn = null; - - this.initialized = false; - this.registerColumnOption("resizable", true); - this.registerTableOption("resizableColumnFit", false); - } - - initialize(){ - this.subscribe("column-rendered", this.layoutColumnHeader.bind(this)); - } - - initializeEventWatchers(){ - if(!this.initialized){ - - this.subscribe("cell-rendered", this.layoutCellHandles.bind(this)); - this.subscribe("cell-delete", this.deInitializeComponent.bind(this)); - - this.subscribe("cell-height", this.resizeHandle.bind(this)); - this.subscribe("column-moved", this.columnLayoutUpdated.bind(this)); - - this.subscribe("column-hide", this.deInitializeColumn.bind(this)); - this.subscribe("column-show", this.columnLayoutUpdated.bind(this)); - this.subscribe("column-width", this.columnWidthUpdated.bind(this)); - - this.subscribe("column-delete", this.deInitializeComponent.bind(this)); - this.subscribe("column-height", this.resizeHandle.bind(this)); - - this.initialized = true; - } - } - - - layoutCellHandles(cell){ - if(cell.row.type === "row"){ - this.deInitializeComponent(cell); - this.initializeColumn("cell", cell, cell.column, cell.element); - } - } - - layoutColumnHeader(column){ - if(column.definition.resizable){ - this.initializeEventWatchers(); - this.deInitializeComponent(column); - this.initializeColumn("header", column, column, column.element); - } - } - - columnLayoutUpdated(column){ - var prev = column.prevColumn(); - - this.reinitializeColumn(column); - - if(prev){ - this.reinitializeColumn(prev); - } - } - - columnWidthUpdated(column){ - if(column.modules.frozen){ - if(this.table.modules.frozenColumns.leftColumns.includes(column)){ - this.table.modules.frozenColumns.leftColumns.forEach((col) => { - this.reinitializeColumn(col); - }); - }else if(this.table.modules.frozenColumns.rightColumns.includes(column)){ - this.table.modules.frozenColumns.rightColumns.forEach((col) => { - this.reinitializeColumn(col); - }); - } - } - } - - frozenColumnOffset(column){ - var offset = false; - - if(column.modules.frozen){ - offset = column.modules.frozen.marginValue; - - if(column.modules.frozen.position === "left"){ - offset += column.getWidth() - 3; - }else { - if(offset){ - offset -= 3; - } - } - } - - return offset !== false ? offset + "px" : false; - } - - reinitializeColumn(column){ - var frozenOffset = this.frozenColumnOffset(column); - - column.cells.forEach((cell) => { - if(cell.modules.resize && cell.modules.resize.handleEl){ - if(frozenOffset){ - cell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset; - cell.modules.resize.handleEl.style["z-index"] = 11; - } - - cell.element.after(cell.modules.resize.handleEl); - } - }); - - if(column.modules.resize && column.modules.resize.handleEl){ - if(frozenOffset){ - column.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset; - } - - column.element.after(column.modules.resize.handleEl); - } - } - - initializeColumn(type, component, column, element){ - var self = this, - variableHeight = false, - mode = column.definition.resizable, - config = {}, - nearestColumn = column.getLastColumn(); - - //set column resize mode - if(type === "header"){ - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - config = {variableHeight:variableHeight}; - } - - if((mode === true || mode == type) && this._checkResizability(nearestColumn)){ - - var handle = document.createElement('span'); - handle.className = "tabulator-col-resize-handle"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var handleDown = function(e){ - self.startColumn = column; - self.initialNextColumn = self.nextColumn = nearestColumn.nextColumn(); - self._mouseDown(e, nearestColumn, handle); - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, {passive: true}); - - //resize column on double click - handle.addEventListener("dblclick", (e) => { - var oldWidth = nearestColumn.getWidth(); - - e.stopPropagation(); - nearestColumn.reinitializeWidth(true); - - if(oldWidth !== nearestColumn.getWidth()){ - self.dispatch("column-resized", nearestColumn); - self.table.externalEvents.dispatch("columnResized", nearestColumn.getComponent()); - } - }); - - if(column.modules.frozen){ - handle.style.position = "sticky"; - handle.style[column.modules.frozen.position] = this.frozenColumnOffset(column); - } - - config.handleEl = handle; - - if(element.parentNode && column.visible){ - element.after(handle); - } - } - - component.modules.resize = config; - } - - deInitializeColumn(column){ - this.deInitializeComponent(column); - - column.cells.forEach((cell) => { - this.deInitializeComponent(cell); - }); - } - - deInitializeComponent(component){ - var handleEl; - - if(component.modules.resize){ - handleEl = component.modules.resize.handleEl; - - if(handleEl && handleEl.parentElement){ - handleEl.parentElement.removeChild(handleEl); - } - } - } - - resizeHandle(component, height){ - if(component.modules.resize && component.modules.resize.handleEl){ - component.modules.resize.handleEl.style.height = height; - } - } - - _checkResizability(column){ - return column.definition.resizable; - } - - _mouseDown(e, column, handle){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - var x = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX, - startDiff = x - self.startX, - moveDiff = x - self.latestX, - blockedBefore, blockedAfter; - - self.latestX = x; - - if(self.table.rtl){ - startDiff = -startDiff; - moveDiff = -moveDiff; - } - - blockedBefore = column.width == column.minWidth || column.width == column.maxWidth; - - column.setWidth(self.startWidth + startDiff); - - blockedAfter = column.width == column.minWidth || column.width == column.maxWidth; - - if(moveDiff < 0){ - self.nextColumn = self.initialNextColumn; - } - - if(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){ - let colWidth = self.nextColumn.getWidth(); - - if(moveDiff > 0){ - if(colWidth <= self.nextColumn.minWidth){ - self.nextColumn = self.nextColumn.nextColumn(); - } - } - - if(self.nextColumn){ - self.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff); - } - } - - self.table.columnManager.rerenderColumns(true); - - if(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - } - - function mouseUp(e){ - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = false; - } - - if(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - - document.body.removeEventListener("mouseup", mouseUp); - document.body.removeEventListener("mousemove", mouseMove); - - handle.removeEventListener("touchmove", mouseMove); - handle.removeEventListener("touchend", mouseUp); - - self.table.element.classList.remove("tabulator-block-select"); - - if(self.startWidth !== column.getWidth()){ - self.table.columnManager.verticalAlignHeaders(); - - self.dispatch("column-resized", column); - self.table.externalEvents.dispatch("columnResized", column.getComponent()); - } - } - - e.stopPropagation(); //prevent resize from interfering with movable columns - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = true; - } - - self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX; - self.latestX = self.startX; - self.startWidth = column.getWidth(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); - handle.addEventListener("touchmove", mouseMove, {passive: true}); - handle.addEventListener("touchend", mouseUp); - } - } - - ResizeColumns.moduleName = "resizeColumns"; - - class ResizeRows extends Module{ - - constructor(table){ - super(table); - - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; - - this.registerTableOption("resizableRows", false); //resizable rows - } - - initialize(){ - if(this.table.options.resizableRows){ - this.subscribe("row-layout-after", this.initializeRow.bind(this)); - } - } - - initializeRow(row){ - var self = this, - rowEl = row.getElement(); - - var handle = document.createElement('div'); - handle.className = "tabulator-row-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-row-resize-handle prev"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var handleDown = function(e){ - self.startRow = row; - self._mouseDown(e, row, handle); - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, {passive: true}); - - prevHandle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var prevHandleDown = function(e){ - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if(prevRow){ - self.startRow = prevRow; - self._mouseDown(e, prevRow, prevHandle); - } - }; - - prevHandle.addEventListener("mousedown",prevHandleDown); - prevHandle.addEventListener("touchstart",prevHandleDown, {passive: true}); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); - } - - _mouseDown(e, row, handle){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY)); - } - - function mouseUp(e){ - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - document.body.removeEventListener("mouseup", mouseMove); - document.body.removeEventListener("mousemove", mouseMove); - - handle.removeEventListener("touchmove", mouseMove); - handle.removeEventListener("touchend", mouseUp); - - self.table.element.classList.remove("tabulator-block-select"); - - self.dispatchExternal("rowResized", row.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfering with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY; - self.startHeight = row.getHeight(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); - - handle.addEventListener("touchmove", mouseMove, {passive: true}); - handle.addEventListener("touchend", mouseUp); - } - } - - ResizeRows.moduleName = "resizeRows"; - - class ResizeTable extends Module{ - - constructor(table){ - super(table); - - this.binding = false; - this.visibilityObserver = false; - this.resizeObserver = false; - this.containerObserver = false; - - this.tableHeight = 0; - this.tableWidth = 0; - this.containerHeight = 0; - this.containerWidth = 0; - - this.autoResize = false; - - this.visible = false; - - this.initialized = false; - this.initialRedraw = false; - - this.registerTableOption("autoResize", true); //auto resize table - } - - initialize(){ - if(this.table.options.autoResize){ - var table = this.table, - tableStyle; - - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - - if(table.element.parentNode){ - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - if(typeof IntersectionObserver !== "undefined" && typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual"){ - - this.initializeVisibilityObserver(); - - this.autoResize = true; - - this.resizeObserver = new ResizeObserver((entry) => { - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){ - this.tableHeight = nodeHeight; - this.tableWidth = nodeWidth; - - if(table.element.parentNode){ - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - this.redrawTable(); - } - } - }); - - this.resizeObserver.observe(table.element); - - tableStyle = window.getComputedStyle(table.element); - - if(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))){ - - this.containerObserver = new ResizeObserver((entry) => { - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){ - this.containerHeight = nodeHeight; - this.containerWidth = nodeWidth; - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - } - - this.redrawTable(); - } - }); - - this.containerObserver.observe(this.table.element.parentNode); - } - - this.subscribe("table-resize", this.tableResized.bind(this)); - - }else { - this.binding = function(){ - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - table.columnManager.rerenderColumns(true); - table.redraw(); - } - }; - - window.addEventListener("resize", this.binding); - } - - this.subscribe("table-destroy", this.clearBindings.bind(this)); - } - } - - initializeVisibilityObserver(){ - this.visibilityObserver = new IntersectionObserver((entries) => { - this.visible = entries[0].isIntersecting; - - if(!this.initialized){ - this.initialized = true; - this.initialRedraw = !this.visible; - }else { - if(this.visible){ - this.redrawTable(this.initialRedraw); - this.initialRedraw = false; - } - } - }); - - this.visibilityObserver.observe(this.table.element); - } - - redrawTable(force){ - if(this.initialized && this.visible){ - this.table.columnManager.rerenderColumns(true); - this.table.redraw(force); - } - } - - tableResized(){ - this.table.rowManager.redraw(); - } - - clearBindings(){ - if(this.binding){ - window.removeEventListener("resize", this.binding); - } - - if(this.resizeObserver){ - this.resizeObserver.unobserve(this.table.element); - } - - if(this.visibilityObserver){ - this.visibilityObserver.unobserve(this.table.element); - } - - if(this.containerObserver){ - this.containerObserver.unobserve(this.table.element.parentNode); - } - } - } - - ResizeTable.moduleName = "resizeTable"; - - class ResponsiveLayout extends Module{ - - constructor(table){ - super(table); - - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; - this.collapseHandleColumn = false; - - this.registerTableOption("responsiveLayout", false); //responsive layout flags - this.registerTableOption("responsiveLayoutCollapseStartOpen", true); //start showing collapsed data - this.registerTableOption("responsiveLayoutCollapseUseFormatters", true); //responsive layout collapse formatter - this.registerTableOption("responsiveLayoutCollapseFormatter", false); //responsive layout collapse formatter - - this.registerColumnOption("responsive"); - } - - //generate responsive columns list - initialize(){ - if(this.table.options.responsiveLayout){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("column-show", this.updateColumnVisibility.bind(this)); - this.subscribe("column-hide", this.updateColumnVisibility.bind(this)); - this.subscribe("columns-loaded", this.initializeResponsivity.bind(this)); - this.subscribe("column-moved", this.initializeResponsivity.bind(this)); - this.subscribe("column-add", this.initializeResponsivity.bind(this)); - this.subscribe("column-delete", this.initializeResponsivity.bind(this)); - - this.subscribe("table-redrawing", this.tableRedraw.bind(this)); - - if(this.table.options.responsiveLayout === "collapse"){ - this.subscribe("row-data-changed", this.generateCollapsedRowContent.bind(this)); - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-layout", this.layoutRow.bind(this)); - } - } - } - - tableRedraw(force){ - if(["fitColumns", "fitDataStretch"].indexOf(this.layoutMode()) === -1){ - if(!force){ - this.update(); - } - } - } - - initializeResponsivity(){ - var columns = []; - - this.mode = this.table.options.responsiveLayout; - this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData; - this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen; - this.hiddenColumns = []; - - //determine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach((column, i) => { - if(column.modules.responsive){ - if(column.modules.responsive.order && column.modules.responsive.visible){ - column.modules.responsive.index = i; - columns.push(column); - - if(!column.visible && this.mode === "collapse"){ - this.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort((a, b) => { - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || (b.modules.responsive.index - a.modules.responsive.index); - }); - - this.columns = columns; - - if(this.mode === "collapse"){ - this.generateCollapsedContent(); - } - - //assign collapse column - for (let col of this.table.columnManager.columnsByIndex){ - if(col.definition.formatter == "responsiveCollapse"){ - this.collapseHandleColumn = col; - break; - } - } - - if(this.collapseHandleColumn){ - if(this.hiddenColumns.length){ - this.collapseHandleColumn.show(); - }else { - this.collapseHandleColumn.hide(); - } - } - } - - //define layout information - initializeColumn(column){ - var def = column.getDefinition(); - - column.modules.responsive = {order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible:def.visible === false ? false : true}; - } - - initializeRow(row){ - var el; - - if(row.type !== "calc"){ - el = document.createElement("div"); - el.classList.add("tabulator-responsive-collapse"); - - row.modules.responsiveLayout = { - element:el, - open:this.collapseStartOpen, - }; - - if(!this.collapseStartOpen){ - el.style.display = 'none'; - } - } - } - - layoutRow(row){ - var rowEl = row.getElement(); - - if(row.modules.responsiveLayout){ - rowEl.appendChild(row.modules.responsiveLayout.element); - this.generateCollapsedRowContent(row); - } - } - - //update column visibility - updateColumnVisibility(column, responsiveToggle){ - if(!responsiveToggle && column.modules.responsive){ - column.modules.responsive.visible = column.visible; - this.initializeResponsivity(); - } - } - - hideColumn(column){ - var colCount = this.hiddenColumns.length; - - column.hide(false, true); - - if(this.mode === "collapse"){ - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - - if(this.collapseHandleColumn && !colCount){ - this.collapseHandleColumn.show(); - } - } - } - - showColumn(column){ - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if(this.mode === "collapse"){ - index = this.hiddenColumns.indexOf(column); - - if(index > -1){ - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - - if(this.collapseHandleColumn && !this.hiddenColumns.length){ - this.collapseHandleColumn.hide(); - } - } - } - - //redraw columns to fit space - update(){ - var working = true; - - while(working){ - - let width = this.table.modules.layout.getMode() == "fitColumns" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth(); - - let diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width; - - if(diff < 0){ - //table is too wide - let column = this.columns[this.index]; - - if(column){ - this.hideColumn(column); - this.index ++; - }else { - working = false; - } - - }else { - - //table has spare space - let column = this.columns[this.index -1]; - - if(column){ - if(diff > 0){ - if(diff >= column.getWidth()){ - this.showColumn(column); - this.index --; - }else { - working = false; - } - }else { - working = false; - } - }else { - working = false; - } - } - - if(!this.table.rowManager.activeRowsCount){ - this.table.rowManager.renderEmptyScroll(); - } - } - } - - generateCollapsedContent(){ - var rows = this.table.rowManager.getDisplayRows(); - - rows.forEach((row) => { - this.generateCollapsedRowContent(row); - }); - } - - generateCollapsedRowContent(row){ - var el, contents; - - if(row.modules.responsiveLayout){ - el = row.modules.responsiveLayout.element; - - while(el.firstChild) el.removeChild(el.firstChild); - - contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - if(contents){ - el.appendChild(contents); - } - } - } - - generateCollapsedRowData(row){ - var data = row.getData(), - output = [], - mockCellComponent; - - this.hiddenColumns.forEach((column) => { - var value = column.getFieldValue(data); - - if(column.definition.title && column.field){ - if(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){ - - mockCellComponent = { - value:false, - data:{}, - getValue:function(){ - return value; - }, - getData:function(){ - return data; - }, - getType:function(){ - return "cell"; - }, - getElement:function(){ - return document.createElement("div"); - }, - getRow:function(){ - return row.getComponent(); - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - }, - }; - - function onRendered(callback){ - callback(); - } - - output.push({ - field: column.field, - title: column.definition.title, - value: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered) - }); - }else { - output.push({ - field: column.field, - title: column.definition.title, - value: value - }); - } - } - }); - - return output; - } - - formatCollapsedData(data){ - var list = document.createElement("table"); - - data.forEach(function(item){ - var row = document.createElement("tr"); - var titleData = document.createElement("td"); - var valueData = document.createElement("td"); - var node_content; - - var titleHighlight = document.createElement("strong"); - titleData.appendChild(titleHighlight); - this.langBind("columns|" + item.field, function(text){ - titleHighlight.innerHTML = text || item.title; - }); - - if(item.value instanceof Node){ - node_content = document.createElement("div"); - node_content.appendChild(item.value); - valueData.appendChild(node_content); - }else { - valueData.innerHTML = item.value; - } - - row.appendChild(titleData); - row.appendChild(valueData); - list.appendChild(row); - }, this); - - return Object.keys(data).length ? list : ""; - } - } - - ResponsiveLayout.moduleName = "responsiveLayout"; - - class SelectRow extends Module{ - - constructor(table){ - super(table); - - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows - this.headerCheckboxElement = null; // hold header select element - - this.registerTableOption("selectableRows", "highlight"); //highlight rows on hover - this.registerTableOption("selectableRowsRangeMode", "drag"); //highlight rows on hover - this.registerTableOption("selectableRowsRollingSelection", true); //roll selection once maximum number of selectable rows is reached - this.registerTableOption("selectableRowsPersistence", true); // maintain selection when table view is updated - this.registerTableOption("selectableRowsCheck", function(data, row){return true;}); //check whether row is selectable - - this.registerTableFunction("selectRow", this.selectRows.bind(this)); - this.registerTableFunction("deselectRow", this.deselectRows.bind(this)); - this.registerTableFunction("toggleSelectRow", this.toggleRow.bind(this)); - this.registerTableFunction("getSelectedRows", this.getSelectedRows.bind(this)); - this.registerTableFunction("getSelectedData", this.getSelectedData.bind(this)); - - //register component functions - this.registerComponentFunction("row", "select", this.selectRows.bind(this)); - this.registerComponentFunction("row", "deselect", this.deselectRows.bind(this)); - this.registerComponentFunction("row", "toggleSelect", this.toggleRow.bind(this)); - this.registerComponentFunction("row", "isSelected", this.isRowSelected.bind(this)); - } - - initialize(){ - - this.deprecatedOptionsCheck(); - - if(this.table.options.selectableRows === "highlight" && this.table.options.selectableRange){ - this.table.options.selectableRows = false; - } - - if(this.table.options.selectableRows !== false){ - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-deleting", this.rowDeleted.bind(this)); - this.subscribe("rows-wipe", this.clearSelectionData.bind(this)); - this.subscribe("rows-retrieve", this.rowRetrieve.bind(this)); - - if(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){ - this.subscribe("data-refreshing", this.deselectRows.bind(this)); - } - } - } - - deprecatedOptionsCheck(){ - this.deprecationCheck("selectable", "selectableRows", true); - this.deprecationCheck("selectableRollingSelection", "selectableRowsRollingSelection", true); - this.deprecationCheck("selectableRangeMode", "selectableRowsRangeMode", true); - this.deprecationCheck("selectablePersistence", "selectableRowsPersistence", true); - this.deprecationCheck("selectableCheck", "selectableRowsCheck", true); - } - - rowRetrieve(type, prevValue){ - return type === "selected" ? this.selectedRows : prevValue; - } - - rowDeleted(row){ - this._deselectRow(row, true); - } - - clearSelectionData(silent){ - var prevSelected = this.selectedRows.length; - - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if(prevSelected && silent !== true){ - this._rowSelectionChanged(); - } - } - - initializeRow(row){ - var self = this, - selectable = self.checkRowSelectability(row), - element = row.getElement(); - - // trigger end of row selection - var endSelect = function(){ - - setTimeout(function(){ - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - row.modules.select = {selected:false}; - - element.classList.toggle("tabulator-selectable", selectable); - element.classList.toggle("tabulator-unselectable", !selectable); - - //set row selection class - if(self.checkRowSelectability(row)){ - if(self.table.options.selectableRows && self.table.options.selectableRows != "highlight"){ - if(self.table.options.selectableRowsRangeMode === "click"){ - element.addEventListener("click", this.handleComplexRowClick.bind(this, row)); - }else { - element.addEventListener("click", function(e){ - if(!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()){ - self.table._clearSelection(); - } - - if(!self.selecting){ - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function(e){ - if(e.shiftKey){ - self.table._clearSelection(); - - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function(e){ - if(self.selecting){ - self.table._clearSelection(); - self.toggleRow(row); - - if(self.selectPrev[1] == row){ - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function(e){ - if(self.selecting){ - self.table._clearSelection(); - self.selectPrev.unshift(row); - } - }); - } - } - } - } - - handleComplexRowClick(row, e){ - if(e.shiftKey){ - this.table._clearSelection(); - this.lastClickedRow = this.lastClickedRow || row; - - var lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow); - var rowIdx = this.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = this.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if(e.ctrlKey || e.metaKey){ - toggledRows.forEach((toggledRow)=>{ - if(toggledRow !== this.lastClickedRow){ - - if(this.table.options.selectableRows !== true && !this.isRowSelected(row)){ - if(this.selectedRows.length < this.table.options.selectableRows){ - this.toggleRow(toggledRow); - } - }else { - this.toggleRow(toggledRow); - } - } - }); - this.lastClickedRow = row; - }else { - this.deselectRows(undefined, true); - - if(this.table.options.selectableRows !== true){ - if(toggledRows.length > this.table.options.selectableRows){ - toggledRows = toggledRows.slice(0, this.table.options.selectableRows); - } - } - - this.selectRows(toggledRows); - } - this.table._clearSelection(); - } - else if(e.ctrlKey || e.metaKey){ - this.toggleRow(row); - this.lastClickedRow = row; - }else { - this.deselectRows(undefined, true); - this.selectRows(row); - this.lastClickedRow = row; - } - } - - checkRowSelectability(row){ - if(row && row.type === "row"){ - return this.table.options.selectableRowsCheck.call(this.table, row.getComponent()); - } - - return false; - } - - //toggle row selection - toggleRow(row){ - if(this.checkRowSelectability(row)){ - if(row.modules.select && row.modules.select.selected){ - this._deselectRow(row); - }else { - this._selectRow(row); - } - } - } - - //select a number of rows - selectRows(rows){ - var changes = [], - rowMatch, change; - - switch(typeof rows){ - case "undefined": - rowMatch = this.table.rowManager.rows; - break; - - case "number": - rowMatch = this.table.rowManager.findRow(rows); - break; - - case "string": - rowMatch = this.table.rowManager.findRow(rows); - - if(!rowMatch){ - rowMatch = this.table.rowManager.getRows(rows); - } - break; - - default: - rowMatch = rows; - break; - } - - if(Array.isArray(rowMatch)){ - if(rowMatch.length){ - rowMatch.forEach((row) => { - change = this._selectRow(row, true, true); - - if(change){ - changes.push(change); - } - }); - - this._rowSelectionChanged(false, changes); - } - }else { - if(rowMatch){ - this._selectRow(rowMatch, false, true); - } - } - } - - //select an individual row - _selectRow(rowInfo, silent, force){ - //handle max row count - if(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){ - if(this.selectedRows.length >= this.table.options.selectableRows){ - if(this.table.options.selectableRowsRollingSelection){ - this._deselectRow(this.selectedRows[0]); - }else { - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if(row){ - if(this.selectedRows.indexOf(row) == -1){ - row.getElement().classList.add("tabulator-selected"); - if(!row.modules.select){ - row.modules.select = {}; - } - - row.modules.select.selected = true; - if(row.modules.select.checkboxEl){ - row.modules.select.checkboxEl.checked = true; - } - - this.selectedRows.push(row); - - if(this.table.options.dataTreeSelectPropagate){ - this.childRowSelection(row, true); - } - - this.dispatchExternal("rowSelected", row.getComponent()); - - this._rowSelectionChanged(silent, row); - - return row; - } - }else { - if(!silent){ - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } - } - - isRowSelected(row){ - return this.selectedRows.indexOf(row) !== -1; - } - - //deselect a number of rows - deselectRows(rows, silent){ - var changes = [], - rowMatch, change; - - switch(typeof rows){ - case "undefined": - rowMatch = Object.assign([], this.selectedRows); - break; - - case "number": - rowMatch = this.table.rowManager.findRow(rows); - break; - - case "string": - rowMatch = this.table.rowManager.findRow(rows); - - if(!rowMatch){ - rowMatch = this.table.rowManager.getRows(rows); - } - break; - - default: - rowMatch = rows; - break; - } - - if(Array.isArray(rowMatch)){ - if(rowMatch.length){ - rowMatch.forEach((row) => { - change = this._deselectRow(row, true, true); - - if(change){ - changes.push(change); - } - }); - - this._rowSelectionChanged(silent, [], changes); - } - }else { - if(rowMatch){ - this._deselectRow(rowMatch, silent, true); - } - } - } - - //deselect an individual row - _deselectRow(rowInfo, silent){ - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index, element; - - if(row){ - index = self.selectedRows.findIndex(function(selectedRow){ - return selectedRow == row; - }); - - if(index > -1){ - - element = row.getElement(); - - if(element){ - element.classList.remove("tabulator-selected"); - } - - if(!row.modules.select){ - row.modules.select = {}; - } - - row.modules.select.selected = false; - if(row.modules.select.checkboxEl){ - row.modules.select.checkboxEl.checked = false; - } - self.selectedRows.splice(index, 1); - - if(this.table.options.dataTreeSelectPropagate){ - this.childRowSelection(row, false); - } - - this.dispatchExternal("rowDeselected", row.getComponent()); - - self._rowSelectionChanged(silent, undefined, row); - - return row; - } - }else { - if(!silent){ - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } - } - - getSelectedData(){ - var data = []; - - this.selectedRows.forEach(function(row){ - data.push(row.getData()); - }); - - return data; - } - - getSelectedRows(){ - var rows = []; - - this.selectedRows.forEach(function(row){ - rows.push(row.getComponent()); - }); - - return rows; - } - - _rowSelectionChanged(silent, selected = [], deselected = []){ - if(this.headerCheckboxElement){ - if(this.selectedRows.length === 0){ - this.headerCheckboxElement.checked = false; - this.headerCheckboxElement.indeterminate = false; - } else if(this.table.rowManager.rows.length === this.selectedRows.length){ - this.headerCheckboxElement.checked = true; - this.headerCheckboxElement.indeterminate = false; - } else { - this.headerCheckboxElement.indeterminate = true; - this.headerCheckboxElement.checked = false; - } - } - - if(!silent){ - if(!Array.isArray(selected)){ - selected = [selected]; - } - - selected = selected.map(row => row.getComponent()); - - if(!Array.isArray(deselected)){ - deselected = [deselected]; - } - - deselected = deselected.map(row => row.getComponent()); - - this.dispatchExternal("rowSelectionChanged", this.getSelectedData(), this.getSelectedRows(), selected, deselected); - } - } - - registerRowSelectCheckbox (row, element) { - if(!row._row.modules.select){ - row._row.modules.select = {}; - } - - row._row.modules.select.checkboxEl = element; - } - - registerHeaderSelectCheckbox (element) { - this.headerCheckboxElement = element; - } - - childRowSelection(row, select){ - var children = this.table.modules.dataTree.getChildren(row, true); - - if(select){ - for(let child of children){ - this._selectRow(child, true); - } - }else { - for(let child of children){ - this._deselectRow(child, true); - } - } - } - } - - SelectRow.moduleName = "selectRow"; - - //sort numbers - function number$1(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var decimal = params.decimalSeparator; - var thousand = params.thousandSeparator; - var emptyAlign = 0; - - a = String(a); - b = String(b); - - if(thousand){ - a = a.split(thousand).join(""); - b = b.split(thousand).join(""); - } - - if(decimal){ - a = a.split(decimal).join("."); - b = b.split(decimal).join("."); - } - - a = parseFloat(a); - b = parseFloat(b); - - //handle non numeric values - if(isNaN(a)){ - emptyAlign = isNaN(b) ? 0 : -1; - }else if(isNaN(b)){ - emptyAlign = 1; - }else { - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - } - - //sort strings - function string(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if(!a){ - emptyAlign = !b ? 0 : -1; - }else if(!b){ - emptyAlign = 1; - }else { - //compare valid values - switch(typeof params.locale){ - case "boolean": - if(params.locale){ - locale = this.langLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - } - - //sort datetime - function datetime$2(a, b, aRow, bRow, column, dir, params){ - var DT = window.DateTime || luxon.DateTime; - var format = params.format || "dd/MM/yyyy HH:mm:ss", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - if(typeof DT != "undefined"){ - if(!DT.isDateTime(a)){ - if(format === "iso"){ - a = DT.fromISO(String(a)); - }else { - a = DT.fromFormat(String(a), format); - } - } - - if(!DT.isDateTime(b)){ - if(format === "iso"){ - b = DT.fromISO(String(b)); - }else { - b = DT.fromFormat(String(b), format); - } - } - - if(!a.isValid){ - emptyAlign = !b.isValid ? 0 : -1; - }else if(!b.isValid){ - emptyAlign = 1; - }else { - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - - }else { - console.error("Sort Error - 'datetime' sorter is dependant on luxon.js"); - } - } - - //sort date - function date$1(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "dd/MM/yyyy"; - } - - return datetime$2.call(this, a, b, aRow, bRow, column, dir, params); - } - - //sort times - function time$1(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "HH:mm"; - } - - return datetime$2.call(this, a, b, aRow, bRow, column, dir, params); - } - - //sort booleans - function boolean(a, b, aRow, bRow, column, dir, params){ - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; - } - - //sort if element contains any data - function array(a, b, aRow, bRow, column, dir, params){ - var type = params.type || "length", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - function calc(value){ - var result; - - switch(type){ - case "length": - result = value.length; - break; - - case "sum": - result = value.reduce(function(c, d){ - return c + d; - }); - break; - - case "max": - result = Math.max.apply(null, value) ; - break; - - case "min": - result = Math.min.apply(null, value) ; - break; - - case "avg": - result = value.reduce(function(c, d){ - return c + d; - }) / value.length; - break; - } - - return result; - } - - //handle non array values - if(!Array.isArray(a)){ - emptyAlign = !Array.isArray(b) ? 0 : -1; - }else if(!Array.isArray(b)){ - emptyAlign = 1; - }else { - return calc(b) - calc(a); - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - } - - //sort if element contains any data - function exists(a, b, aRow, bRow, column, dir, params){ - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; - } - - //sort alpha numeric strings - function alphanum(as, bs, aRow, bRow, column, dir, params){ - var a, b, a1, b1, i= 0, L, rx = /(\d+)|(\D+)/g, rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if(!as && as!== 0){ - emptyAlign = !bs && bs!== 0 ? 0 : -1; - }else if(!bs && bs!== 0){ - emptyAlign = 1; - }else { - - if(isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if(a === b) return 0; - if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while(i < L){ - a1= a[i]; - b1= b[i++]; - if(a1 !== b1){ - if(isFinite(a1) && isFinite(b1)){ - if(a1.charAt(0) === "0") a1 = "." + a1; - if(b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } - else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - } - - var defaultSorters = { - number:number$1, - string:string, - date:date$1, - time:time$1, - datetime:datetime$2, - boolean:boolean, - array:array, - exists:exists, - alphanum:alphanum - }; - - class Sort extends Module{ - - constructor(table){ - super(table); - - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render - - this.registerTableOption("sortMode", "local"); //local or remote sorting - - this.registerTableOption("initialSort", false); //initial sorting criteria - this.registerTableOption("columnHeaderSortMulti", true); //multiple or single column sorting - this.registerTableOption("sortOrderReverse", false); //reverse internal sort ordering - this.registerTableOption("headerSortElement", "
    "); //header sort element - this.registerTableOption("headerSortClickElement", "header"); //element which triggers sort when clicked - - this.registerColumnOption("sorter"); - this.registerColumnOption("sorterParams"); - - this.registerColumnOption("headerSort", true); - this.registerColumnOption("headerSortStartingDir"); - this.registerColumnOption("headerSortTristate"); - - } - - initialize(){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("table-built", this.tableBuilt.bind(this)); - this.registerDataHandler(this.sort.bind(this), 20); - - this.registerTableFunction("setSort", this.userSetSort.bind(this)); - this.registerTableFunction("getSorters", this.getSort.bind(this)); - this.registerTableFunction("clearSort", this.clearSort.bind(this)); - - if(this.table.options.sortMode === "remote"){ - this.subscribe("data-params", this.remoteSortParams.bind(this)); - } - } - - tableBuilt(){ - if(this.table.options.initialSort){ - this.setSort(this.table.options.initialSort); - } - } - - remoteSortParams(data, config, silent, params){ - var sorters = this.getSort(); - - sorters.forEach((item) => { - delete item.column; - }); - - params.sort = sorters; - - return params; - } - - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - userSetSort(sortList, dir){ - this.setSort(sortList, dir); - // this.table.rowManager.sorterRefresh(); - this.refreshSort(); - } - - clearSort(){ - this.clear(); - // this.table.rowManager.sorterRefresh(); - this.refreshSort(); - } - - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - //initialize column header for sorting - initializeColumn(column){ - var sorter = false, - colEl, - arrowEl; - - switch(typeof column.definition.sorter){ - case "string": - if(Sort.sorters[column.definition.sorter]){ - sorter = Sort.sorters[column.definition.sorter]; - }else { - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter:sorter, dir:"none", - params:column.definition.sorterParams || {}, - startingDir:column.definition.headerSortStartingDir || "asc", - tristate: column.definition.headerSortTristate, - }; - - if(column.definition.headerSort !== false){ - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-col-sorter"); - - switch(this.table.options.headerSortClickElement){ - case "icon": - arrowEl.classList.add("tabulator-col-sorter-element"); - break; - case "header": - colEl.classList.add("tabulator-col-sorter-element"); - break; - default: - colEl.classList.add("tabulator-col-sorter-element"); - break; - } - - switch(this.table.options.headerSortElement){ - case "function": - //do nothing - break; - - case "object": - arrowEl.appendChild(this.table.options.headerSortElement); - break; - - default: - arrowEl.innerHTML = this.table.options.headerSortElement; - } - - //create sorter arrow - column.titleHolderElement.appendChild(arrowEl); - - column.modules.sort.element = arrowEl; - - this.setColumnHeaderSortIcon(column, "none"); - - if(this.table.options.headerSortClickElement === "icon"){ - arrowEl.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - } - - //sort on click - (this.table.options.headerSortClickElement === "icon" ? arrowEl : colEl).addEventListener("click", (e) => { - var dir = "", - sorters=[], - match = false; - - if(column.modules.sort){ - if(column.modules.sort.tristate){ - if(column.modules.sort.dir == "none"){ - dir = column.modules.sort.startingDir; - }else { - if(column.modules.sort.dir == column.modules.sort.startingDir){ - dir = column.modules.sort.dir == "asc" ? "desc" : "asc"; - }else { - dir = "none"; - } - } - }else { - switch(column.modules.sort.dir){ - case "asc": - dir = "desc"; - break; - - case "desc": - dir = "asc"; - break; - - default: - dir = column.modules.sort.startingDir; - } - } - - if (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = this.getSort(); - - match = sorters.findIndex((sorter) => { - return sorter.field === column.getField(); - }); - - if(match > -1){ - sorters[match].dir = dir; - - match = sorters.splice(match, 1)[0]; - if(dir != "none"){ - sorters.push(match); - } - }else { - if(dir != "none"){ - sorters.push({column:column, dir:dir}); - } - } - - //add to existing sort - this.setSort(sorters); - }else { - if(dir == "none"){ - this.clear(); - }else { - //sort by column only - this.setSort(column, dir); - } - - } - - // this.table.rowManager.sorterRefresh(!this.sortList.length); - this.refreshSort(); - } - }); - } - } - - refreshSort(){ - if(this.table.options.sortMode === "remote"){ - this.reloadData(null, false, false); - }else { - this.refreshData(true); - } - - //TODO - Persist left position of row manager - // left = this.scrollLeft; - // this.scrollHorizontal(left); - } - - //check if the sorters have changed since last use - hasChanged(){ - var changed = this.changed; - this.changed = false; - return changed; - } - - //return current sorters - getSort(){ - var self = this, - sorters = []; - - self.sortList.forEach(function(item){ - if(item.column){ - sorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir}); - } - }); - - return sorters; - } - - //change sort list and trigger sort - setSort(sortList, dir){ - var self = this, - newSortList = []; - - if(!Array.isArray(sortList)){ - sortList = [{column: sortList, dir:dir}]; - } - - sortList.forEach(function(item){ - var column; - - column = self.table.columnManager.findColumn(item.column); - - if(column){ - item.column = column; - newSortList.push(item); - self.changed = true; - }else { - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - - }); - - self.sortList = newSortList; - - this.dispatch("sort-changed"); - } - - //clear sorters - clear(){ - this.setSort([]); - } - - //find appropriate sorter for column - findSorter(column){ - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, value; - - if(row){ - row = row.getData(); - field = column.getField(); - - if(field){ - - value = column.getFieldValue(row); - - switch(typeof value){ - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if(!isNaN(value) && value !== ""){ - sorter = "number"; - }else { - if(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){ - sorter = "alphanum"; - } - } - break; - } - } - } - - return Sort.sorters[sorter]; - } - - //work through sort list sorting data - sort(data){ - var self = this, - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList, - sortListActual = [], - rowComponents = []; - - if(this.subscribedExternal("dataSorting")){ - this.dispatchExternal("dataSorting", self.getSort()); - } - - self.clearColumnHeaders(); - - if(this.table.options.sortMode !== "remote"){ - - //build list of valid sorters and trigger column specific callbacks before sort begins - sortList.forEach(function(item, i){ - var sortObj; - - if(item.column){ - sortObj = item.column.modules.sort; - - if(sortObj){ - - //if no sorter has been defined, take a guess - if(!sortObj.sorter){ - sortObj.sorter = self.findSorter(item.column); - } - - item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params; - - sortListActual.push(item); - } - - self.setColumnHeader(item.column, item.dir); - } - }); - - //sort data - if (sortListActual.length) { - self._sortItems(data, sortListActual); - } - - }else { - sortList.forEach(function(item, i){ - self.setColumnHeader(item.column, item.dir); - }); - } - - if(this.subscribedExternal("dataSorted")){ - data.forEach((row) => { - rowComponents.push(row.getComponent()); - }); - - this.dispatchExternal("dataSorted", self.getSort(), rowComponents); - } - - return data; - } - - //clear sort arrows on columns - clearColumnHeaders(){ - this.table.columnManager.getRealColumns().forEach((column) => { - if(column.modules.sort){ - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - this.setColumnHeaderSortIcon(column, "none"); - } - }); - } - - //set the column header sort direction - setColumnHeader(column, dir){ - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir === "asc" ? "ascending" : "descending"); - this.setColumnHeaderSortIcon(column, dir); - } - - setColumnHeaderSortIcon(column, dir){ - var sortEl = column.modules.sort.element, - arrowEl; - - if(column.definition.headerSort && typeof this.table.options.headerSortElement === "function"){ - while(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild); - - arrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir); - - if(typeof arrowEl === "object"){ - sortEl.appendChild(arrowEl); - }else { - sortEl.innerHTML = arrowEl; - } - } - } - - //sort each item in sort list - _sortItems(data, sortList){ - var sorterCount = sortList.length - 1; - - data.sort((a, b) => { - var result; - - for(var i = sorterCount; i>= 0; i--){ - let sortItem = sortList[i]; - - result = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); - - if(result !== 0){ - break; - } - } - - return result; - }); - } - - //process individual rows for a sort function on active data - _sortRow(a, b, column, dir, params){ - var el1Comp, el2Comp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); - } - } - - Sort.moduleName = "sort"; - - //load defaults - Sort.sorters = defaultSorters; - - class RangeComponent { - constructor(range) { - this._range = range; - - return new Proxy(this, { - get: function (target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - } else { - return target._range.table.componentFunctionBinder.handle("range", target._range, name); - } - }, - }); - } - - getElement() { - return this._range.element; - } - - getData() { - return this._range.getData(); - } - - getCells() { - return this._range.getCells(true); - } - - getStructuredCells() { - return this._range.getStructuredCells(); - } - - getRows() { - return this._range.getRows().map((row) => row.getComponent()); - } - - getColumns() { - return this._range.getColumns().map((column) => column.getComponent()); - } - - getBounds() { - return this._range.getBounds(); - } - - getTopEdge() { - return this._range.top; - } - - getBottomEdge() { - return this._range.bottom; - } - - getLeftEdge() { - return this._range.left; - } - - getRightEdge() { - return this._range.right; - } - - setBounds(start, end){ - if(this._range.destroyedGuard("setBounds")){ - this._range.setBounds(start ? start._cell : start, end ? end._cell : end); - } - } - - setStartBound(start){ - if(this._range.destroyedGuard("setStartBound")){ - this._range.setEndBound(start ? start._cell : start); - this._range.rangeManager.layoutElement(); - } - } - - setEndBound(end){ - if(this._range.destroyedGuard("setEndBound")){ - this._range.setEndBound(end ? end._cell : end); - this._range.rangeManager.layoutElement(); - } - } - - clearValues(){ - if(this._range.destroyedGuard("clearValues")){ - this._range.clearValues(); - } - } - - remove(){ - if(this._range.destroyedGuard("remove")){ - this._range.destroy(true); - } - } - } - - class Range extends CoreFeature{ - constructor(table, rangeManager, start, end) { - super(table); - - this.rangeManager = rangeManager; - this.element = null; - this.initialized = false; - this.initializing = { - start:false, - end:false, - }; - this.destroyed = false; - - this.top = 0; - this.bottom = 0; - this.left = 0; - this.right = 0; - - this.table = table; - this.start = {row:0, col:0}; - this.end = {row:0, col:0}; - - if(this.rangeManager.rowHeader){ - this.left = 1; - this.right = 1; - this.start.col = 1; - this.end.col = 1; - } - - this.initElement(); - - setTimeout(() => { - this.initBounds(start, end); - }); - } - - initElement(){ - this.element = document.createElement("div"); - this.element.classList.add("tabulator-range"); - } - - initBounds(start, end){ - this._updateMinMax(); - - if(start){ - this.setBounds(start, end || start); - } - } - - /////////////////////////////////// - /////// Boundary Setup /////// - /////////////////////////////////// - - setStart(row, col) { - if(this.start.row !== row || this.start.col !== col){ - this.start.row = row; - this.start.col = col; - - this.initializing.start = true; - this._updateMinMax(); - } - } - - setEnd(row, col) { - if(this.end.row !== row || this.end.col !== col){ - this.end.row = row; - this.end.col = col; - - this.initializing.end = true; - this._updateMinMax(); - } - } - - setBounds(start, end, visibleRows){ - if(start){ - this.setStartBound(start); - } - - this.setEndBound(end || start); - this.rangeManager.layoutElement(visibleRows); - } - - setStartBound(element){ - var row, col; - - if (element.type === "column") { - if(this.rangeManager.columnSelection){ - this.setStart(0, element.getPosition() - 1); - } - }else { - row = element.row.position - 1; - col = element.column.getPosition() - 1; - - if (element.column === this.rangeManager.rowHeader) { - this.setStart(row, 1); - } else { - this.setStart(row, col); - } - } - } - - setEndBound(element){ - var rowsCount = this._getTableRows().length, - row, col, isRowHeader; - - if (element.type === "column") { - if(this.rangeManager.columnSelection){ - if (this.rangeManager.selecting === "column") { - this.setEnd(rowsCount - 1, element.getPosition() - 1); - } else if (this.rangeManager.selecting === "cell") { - this.setEnd(0, element.getPosition() - 1); - } - } - }else { - row = element.row.position - 1; - col = element.column.getPosition() - 1; - isRowHeader = element.column === this.rangeManager.rowHeader; - - if (this.rangeManager.selecting === "row") { - this.setEnd(row, this._getTableColumns().length - 1); - } else if (this.rangeManager.selecting !== "row" && isRowHeader) { - this.setEnd(row, 0); - } else if (this.rangeManager.selecting === "column") { - this.setEnd(rowsCount - 1, col); - } else { - this.setEnd(row, col); - } - } - } - - _updateMinMax() { - this.top = Math.min(this.start.row, this.end.row); - this.bottom = Math.max(this.start.row, this.end.row); - this.left = Math.min(this.start.col, this.end.col); - this.right = Math.max(this.start.col, this.end.col); - - if(this.initialized){ - this.dispatchExternal("rangeChanged", this.getComponent()); - }else { - if(this.initializing.start && this.initializing.end){ - this.initialized = true; - this.dispatchExternal("rangeAdded", this.getComponent()); - } - } - } - - _getTableColumns() { - return this.table.columnManager.getVisibleColumnsByIndex(); - } - - _getTableRows() { - return this.table.rowManager.getDisplayRows(); - } - - /////////////////////////////////// - /////// Rendering /////// - /////////////////////////////////// - - layout() { - var _vDomTop = this.table.rowManager.renderer.vDomTop, - _vDomBottom = this.table.rowManager.renderer.vDomBottom, - _vDomLeft = this.table.columnManager.renderer.leftCol, - _vDomRight = this.table.columnManager.renderer.rightCol, - top, bottom, left, right, topLeftCell, bottomRightCell; - - if (_vDomTop == null) { - _vDomTop = 0; - } - - if (_vDomBottom == null) { - _vDomBottom = Infinity; - } - - if (_vDomLeft == null) { - _vDomLeft = 0; - } - - if (_vDomRight == null) { - _vDomRight = Infinity; - } - - if (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) { - top = Math.max(this.top, _vDomTop); - bottom = Math.min(this.bottom, _vDomBottom); - left = Math.max(this.left, _vDomLeft); - right = Math.min(this.right, _vDomRight); - - topLeftCell = this.rangeManager.getCell(top, left); - bottomRightCell = this.rangeManager.getCell(bottom, right); - - this.element.classList.add("tabulator-range-active"); - // this.element.classList.toggle("tabulator-range-active", this === this.rangeManager.activeRange); - - this.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + "px"; - this.element.style.top = topLeftCell.row.getElement().offsetTop + "px"; - this.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + "px"; - this.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + "px"; - } - } - - atTopLeft(cell) { - return cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left; - } - - atBottomRight(cell) { - return cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right; - } - - occupies(cell) { - return this.occupiesRow(cell.row) && this.occupiesColumn(cell.column); - } - - occupiesRow(row) { - return this.top <= row.position - 1 && row.position - 1 <= this.bottom; - } - - occupiesColumn(col) { - return this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right; - } - - overlaps(left, top, right, bottom) { - if ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){ - return false; - } - - return true; - } - - getData() { - var data = [], - rows = this.getRows(), - columns = this.getColumns(); - - rows.forEach((row) => { - var rowData = row.getData(), - result = {}; - - columns.forEach((column) => { - result[column.field] = rowData[column.field]; - }); - - data.push(result); - }); - - return data; - } - - getCells(structured, component) { - var cells = [], - rows = this.getRows(), - columns = this.getColumns(); - - if (structured) { - cells = rows.map((row) => { - var arr = []; - - row.getCells().forEach((cell) => { - if (columns.includes(cell.column)) { - arr.push(component ? cell.getComponent() : cell); - } - }); - - return arr; - }); - } else { - rows.forEach((row) => { - row.getCells().forEach((cell) => { - if (columns.includes(cell.column)) { - cells.push(component ? cell.getComponent() : cell); - } - }); - }); - } - - return cells; - } - - getStructuredCells() { - return this.getCells(true, true); - } - - getRows() { - return this._getTableRows().slice(this.top, this.bottom + 1); - } - - getColumns() { - return this._getTableColumns().slice(this.left, this.right + 1); - } - - clearValues(){ - var cells = this.getCells(); - var clearValue = this.table.options.selectableRangeClearCellsValue; - - this.table.blockRedraw(); - - cells.forEach((cell) => { - cell.setValue(clearValue); - }); - - this.table.restoreRedraw(); - - } - - getBounds(component){ - var cells = this.getCells(false, component), - output = { - start:null, - end:null, - }; - - if(cells.length){ - output.start = cells[0]; - output.end = cells[cells.length - 1]; - }else { - console.warn("No bounds defined on range"); - } - - return output; - } - - getComponent() { - if (!this.component) { - this.component = new RangeComponent(this); - } - return this.component; - } - - destroy(notify) { - this.destroyed = true; - - this.element.remove(); - - if(notify){ - this.rangeManager.rangeRemoved(this); - } - - if(this.initialized){ - this.dispatchExternal("rangeRemoved", this.getComponent()); - } - } - - destroyedGuard(func){ - if(this.destroyed){ - console.warn("You cannot call the " + func + " function on a destroyed range"); - } - - return !this.destroyed; - } - } - - class SelectRange extends Module { - constructor(table) { - super(table); - - this.selecting = "cell"; - this.mousedown = false; - this.ranges = []; - this.overlay = null; - this.rowHeader = null; - this.layoutChangeTimeout = null; - this.columnSelection = false; - this.rowSelection = false; - this.maxRanges = 0; - this.activeRange = false; - this.blockKeydown = false; - - this.keyDownEvent = this._handleKeyDown.bind(this); - this.mouseUpEvent = this._handleMouseUp.bind(this); - - this.registerTableOption("selectableRange", false); //enable selectable range - this.registerTableOption("selectableRangeColumns", false); //enable selectable range - this.registerTableOption("selectableRangeRows", false); //enable selectable range - this.registerTableOption("selectableRangeClearCells", false); //allow clearing of active range - this.registerTableOption("selectableRangeClearCellsValue", undefined); //value for cleared active range - - this.registerTableFunction("getRangesData", this.getRangesData.bind(this)); - this.registerTableFunction("getRanges", this.getRanges.bind(this)); - this.registerTableFunction("addRange", this.addRangeFromComponent.bind(this)); - - this.registerComponentFunction("cell", "getRanges", this.cellGetRanges.bind(this)); - this.registerComponentFunction("row", "getRanges", this.rowGetRanges.bind(this)); - this.registerComponentFunction("column", "getRanges", this.colGetRanges.bind(this)); - } - - /////////////////////////////////// - /////// Initialization /////// - /////////////////////////////////// - - initialize() { - if (this.options("selectableRange")) { - if(!this.options("selectableRows")){ - - this.maxRanges = this.options("selectableRange"); - - this.initializeTable(); - this.initializeWatchers(); - }else { - console.warn("SelectRange functionality cannot be used in conjunction with row selection"); - } - } - } - - - initializeTable() { - this.overlay = document.createElement("div"); - this.overlay.classList.add("tabulator-range-overlay"); - - this.rangeContainer = document.createElement("div"); - this.rangeContainer.classList.add("tabulator-range-container"); - - this.activeRangeCellElement = document.createElement("div"); - this.activeRangeCellElement.classList.add("tabulator-range-cell-active"); - - this.overlay.appendChild(this.rangeContainer); - this.overlay.appendChild(this.activeRangeCellElement); - - this.table.rowManager.element.addEventListener("keydown", this.keyDownEvent); - - this.resetRanges(); - - this.table.rowManager.element.appendChild(this.overlay); - this.table.columnManager.element.setAttribute("tabindex", 0); - this.table.element.classList.add("tabulator-ranges"); - } - - initializeWatchers() { - this.columnSelection = this.options("selectableRangeColumns"); - this.rowSelection = this.options("selectableRangeRows"); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-mousedown", this.handleColumnMouseDown.bind(this)); - this.subscribe("column-mousemove", this.handleColumnMouseMove.bind(this)); - this.subscribe("column-resized", this.handleColumnResized.bind(this)); - this.subscribe("column-width", this.layoutChange.bind(this)); - this.subscribe("column-height", this.layoutChange.bind(this)); - this.subscribe("column-resized", this.layoutChange.bind(this)); - this.subscribe("columns-loaded", this.updateHeaderColumn.bind(this)); - - this.subscribe("cell-height", this.layoutChange.bind(this)); - this.subscribe("cell-rendered", this.renderCell.bind(this)); - this.subscribe("cell-mousedown", this.handleCellMouseDown.bind(this)); - this.subscribe("cell-mousemove", this.handleCellMouseMove.bind(this)); - this.subscribe("cell-click", this.handleCellClick.bind(this)); - this.subscribe("cell-editing", this.handleEditingCell.bind(this)); - - this.subscribe("page-changed", this.redraw.bind(this)); - - this.subscribe("scroll-vertical", this.layoutChange.bind(this)); - this.subscribe("scroll-horizontal", this.layoutChange.bind(this)); - - this.subscribe("data-destroy", this.tableDestroyed.bind(this)); - this.subscribe("data-processed", this.resetRanges.bind(this)); - - this.subscribe("table-layout", this.layoutElement.bind(this)); - this.subscribe("table-redraw", this.redraw.bind(this)); - this.subscribe("table-destroy", this.tableDestroyed.bind(this)); - - this.subscribe("edit-editor-clear", this.finishEditingCell.bind(this)); - this.subscribe("edit-blur", this.restoreFocus.bind(this)); - - this.subscribe("keybinding-nav-prev", this.keyNavigate.bind(this, "left")); - this.subscribe("keybinding-nav-next", this.keyNavigate.bind(this, "right")); - this.subscribe("keybinding-nav-left", this.keyNavigate.bind(this, "left")); - this.subscribe("keybinding-nav-right", this.keyNavigate.bind(this, "right")); - this.subscribe("keybinding-nav-up", this.keyNavigate.bind(this, "up")); - this.subscribe("keybinding-nav-down", this.keyNavigate.bind(this, "down")); - this.subscribe("keybinding-nav-range", this.keyNavigateRange.bind(this)); - } - - - initializeColumn(column) { - if(this.columnSelection && column.definition.headerSort && this.options("headerSortClickElement") !== "icon"){ - console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."); - } - - if (column.modules.edit) ; - } - - updateHeaderColumn(){ - if(this.rowSelection){ - this.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0]; - - if(this.rowHeader){ - this.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + " tabulator-range-row-header"; - - if(this.rowHeader.definition.headerSort){ - console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"); - } - - if(this.rowHeader.definition.editor){ - console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior"); - } - } - } - } - - /////////////////////////////////// - /////// Table Functions /////// - /////////////////////////////////// - - getRanges(){ - return this.ranges.map((range) => range.getComponent()); - } - - getRangesData() { - return this.ranges.map((range) => range.getData()); - } - - addRangeFromComponent(start, end){ - start = start ? start._cell : null; - end = end ? end._cell : null; - - return this.addRange(start, end); - } - - /////////////////////////////////// - /////// Component Functions /////// - /////////////////////////////////// - - cellGetRanges(cell){ - var ranges = []; - - if (cell.column === this.rowHeader) { - ranges = this.ranges.filter((range) => range.occupiesRow(cell.row)); - } else { - ranges = this.ranges.filter((range) => range.occupies(cell)); - } - - return ranges.map((range) => range.getComponent()); - } - - rowGetRanges(row){ - var ranges = this.ranges.filter((range) => range.occupiesRow(row)); - - return ranges.map((range) => range.getComponent()); - } - - colGetRanges(col){ - var ranges = this.ranges.filter((range) => range.occupiesColumn(col)); - - return ranges.map((range) => range.getComponent()); - } - - /////////////////////////////////// - ////////// Event Handlers ///////// - /////////////////////////////////// - - _handleMouseUp(e){ - this.mousedown = false; - document.removeEventListener("mouseup", this.mouseUpEvent); - } - - _handleKeyDown(e) { - if (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) { - if (e.key === "Enter") { - // is editing a cell? - if (this.table.modules.edit && this.table.modules.edit.currentCell) { - return; - } - - this.table.modules.edit.editCell(this.getActiveCell()); - - e.preventDefault(); - } - - if ((e.key === "Backspace" || e.key === "Delete") && this.options("selectableRangeClearCells")) { - if(this.activeRange){ - this.activeRange.clearValues(); - } - } - } - } - - initializeFocus(cell){ - var range; - - try{ - if (document.selection) { // IE - range = document.body.createTextRange(); - range.moveToElementText(cell.getElement()); - range.select(); - } else if (window.getSelection) { - range = document.createRange(); - range.selectNode(cell.getElement()); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - } - }catch(e){} - } - - restoreFocus(element){ - this.table.rowManager.element.focus(); - - return true; - } - - /////////////////////////////////// - ////// Column Functionality /////// - /////////////////////////////////// - - handleColumnResized(column) { - var selected; - - if (this.selecting !== "column" && this.selecting !== "all") { - return; - } - - selected = this.ranges.some((range) => range.occupiesColumn(column)); - - if (!selected) { - return; - } - - this.ranges.forEach((range) => { - var selectedColumns = range.getColumns(true); - - selectedColumns.forEach((selectedColumn) => { - if (selectedColumn !== column) { - selectedColumn.setWidth(column.width); - } - }); - }); - } - - handleColumnMouseDown(event, column) { - if (event.button === 2 && (this.selecting === "column" || this.selecting === "all") && this.activeRange.occupiesColumn(column)) { - return; - } - - this.mousedown = true; - - document.addEventListener("mouseup", this.mouseUpEvent); - - this.newSelection(event, column); - } - - handleColumnMouseMove(e, column) { - if (column === this.rowHeader || !this.mousedown || this.selecting === 'all') { - return; - } - - this.activeRange.setBounds(false, column, true); - } - - /////////////////////////////////// - //////// Cell Functionality /////// - /////////////////////////////////// - - renderCell(cell) { - var el = cell.getElement(), - rangeIdx = this.ranges.findIndex((range) => range.occupies(cell)); - - el.classList.toggle("tabulator-range-selected", rangeIdx !== -1); - el.classList.toggle("tabulator-range-only-cell-selected", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) && this.ranges[0].atBottomRight(cell)); - - el.dataset.range = rangeIdx; - } - - handleCellMouseDown(event, cell) { - if (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === "row" || this.selecting === "all") && this.activeRange.occupiesRow(cell.row)))) { - return; - } - - this.mousedown = true; - - document.addEventListener("mouseup", this.mouseUpEvent); - - this.newSelection(event, cell); - } - - handleCellMouseMove(e, cell) { - if (!this.mousedown || this.selecting === "all") { - return; - } - - this.activeRange.setBounds(false, cell, true); - } - - handleCellClick(e, cell){ - this.initializeFocus(cell); - } - - handleEditingCell(cell) { - if(this.activeRange){ - this.activeRange.setBounds(cell); - } - } - - finishEditingCell() { - this.blockKeydown = true; - this.table.rowManager.element.focus(); - - setTimeout(() => { - this.blockKeydown = false; - }, 10); - } - - /////////////////////////////////// - /////// Navigation /////// - /////////////////////////////////// - - keyNavigate(dir, e){ - if(this.navigate(false, false, dir)){ - e.preventDefault(); - } - } - - keyNavigateRange(e, dir, jump, expand){ - if(this.navigate(jump, expand, dir)){ - e.preventDefault(); - } - } - - navigate(jump, expand, dir) { - var moved = false, - range, rangeEdge, nextRow, nextCol, row, column; - - // Don't navigate while editing - if (this.table.modules.edit && this.table.modules.edit.currentCell) { - return false; - } - - // If there are more than 1 range, use the active range and destroy the others - if (this.ranges.length > 1) { - this.ranges = this.ranges.filter((range) => { - if (range === this.activeRange) { - range.setEnd(range.start.row, range.start.col); - return true; - } - range.destroy(); - return false; - }); - } - - range = this.activeRange; - - rangeEdge = expand ? range.end : range.start; - nextRow = rangeEdge.row; - nextCol = rangeEdge.col; - - if(jump){ - switch(dir){ - case "left": - nextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col); - break; - case "right": - nextCol = this.findJumpCellRight(range.start.row, rangeEdge.col); - break; - case "up": - nextRow = this.findJumpCellUp(rangeEdge.row, range.start.col); - break; - case "down": - nextRow = this.findJumpCellDown(rangeEdge.row, range.start.col); - break; - } - }else { - if(expand){ - if ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) { - return; - } - } - - switch(dir){ - case "left": - nextCol = Math.max(nextCol - 1, 0); - break; - case "right": - nextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1); - break; - case "up": - nextRow = Math.max(nextRow - 1, 0); - break; - case "down": - nextRow = Math.min(nextRow + 1, this.getTableRows().length - 1); - break; - } - } - - moved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row; - - if(!expand){ - range.setStart(nextRow, nextCol); - } - - range.setEnd(nextRow, nextCol); - - if(!expand){ - this.selecting = "cell"; - } - - if (moved) { - row = this.getRowByRangePos(range.end.row); - column = this.getColumnByRangePos(range.end.col); - - if ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) { - column.getComponent().scrollTo(undefined, false); - } else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) { - row.getComponent().scrollTo(undefined, false); - } else { - // Use faster autoScroll when the elements are on the DOM - this.autoScroll(range, row.getElement(), column.getElement()); - } - - this.layoutElement(); - - return true; - } - } - - rangeRemoved(removed){ - this.ranges = this.ranges.filter((range) => range !== removed); - - if(this.activeRange === removed){ - if(this.ranges.length){ - this.activeRange = this.ranges[this.ranges.length - 1]; - }else { - this.addRange(); - } - } - - this.layoutElement(); - } - - findJumpCell(cells, reverse, emptyStart, emptySide){ - var nextCell; - - if(reverse){ - cells = cells.reverse(); - } - - for(let currentCell of cells){ - let currentValue = currentCell.getValue(); - - if(emptyStart){ - nextCell = currentCell; - if(currentValue){ - break; - } - }else { - if(emptySide){ - nextCell = currentCell; - - if(currentValue){ - break; - } - }else { - if(currentValue){ - nextCell = currentCell; - }else { - break; - } - } - } - } - - return nextCell; - } - - findJumpCellLeft(rowPos, colPos){ - var row = this.getRowByRangePos(rowPos), - cells = row.cells.filter((cell) => cell.column.visible), - isStartingCellEmpty = !cells[colPos].getValue(), - isLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false, - jumpCol = colPos, - targetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos), - nextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty); - - if(nextCell){ - jumpCol = nextCell.column.getPosition() - 1; - } - - return jumpCol; - } - - findJumpCellRight(rowPos, colPos){ - var row = this.getRowByRangePos(rowPos), - cells = row.cells.filter((cell) => cell.column.visible), - isStartingCellEmpty = !cells[colPos].getValue(), - isRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false, - jumpCol = colPos, - nextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty); - - if(nextCell){ - jumpCol = nextCell.column.getPosition() - 1; - } - - return jumpCol; - } - - findJumpCellUp(rowPos, colPos) { - var column = this.getColumnByRangePos(colPos), - cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)), - isStartingCellEmpty = !cells[rowPos].getValue(), - isTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false, - jumpRow = rowPos, - nextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty); - - if(nextCell){ - jumpRow = nextCell.row.position - 1; - } - - return jumpRow; - } - - findJumpCellDown(rowPos, colPos) { - var column = this.getColumnByRangePos(colPos), - cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)), - isStartingCellEmpty = !cells[rowPos].getValue(), - isBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false, - jumpRow = rowPos, - nextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty); - - if(nextCell){ - jumpRow = nextCell.row.position - 1; - } - - return jumpRow; - } - - /////////////////////////////////// - /////// Selection /////// - /////////////////////////////////// - newSelection(event, element) { - var range; - - if (element.type === "column") { - if(!this.columnSelection){ - return; - } - - if (element === this.rowHeader) { - range = this.resetRanges(); - this.selecting = "all"; - - var topLeftCell, bottomRightCell = this.getCell(-1, -1); - - if(this.rowHeader){ - topLeftCell = this.getCell(0, 1); - }else { - topLeftCell = this.getCell(0, 0); - } - - range.setBounds(topLeftCell, bottomRightCell); - return; - } else { - this.selecting = "column"; - } - } else if (element.column === this.rowHeader) { - this.selecting = "row"; - } else { - this.selecting = "cell"; - } - - if (event.shiftKey) { - this.activeRange.setBounds(false, element); - } else if (event.ctrlKey) { - this.addRange().setBounds(element); - } else { - this.resetRanges().setBounds(element); - } - } - - autoScroll(range, row, column) { - var tableHolder = this.table.rowManager.element, - rowHeader, rect, view, withinHorizontalView, withinVerticalView; - - if (typeof row === 'undefined') { - row = this.getRowByRangePos(range.end.row).getElement(); - } - - if (typeof column === 'undefined') { - column = this.getColumnByRangePos(range.end.col).getElement(); - } - - if (this.rowHeader) { - rowHeader = this.rowHeader.getElement(); - } - - rect = { - left: column.offsetLeft, - right: column.offsetLeft + column.offsetWidth, - top: row.offsetTop, - bottom: row.offsetTop + row.offsetHeight, - }; - - view = { - left: tableHolder.scrollLeft, - right: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth), - top: tableHolder.scrollTop, - bottom: tableHolder.scrollTop + tableHolder.offsetHeight - this.table.rowManager.scrollbarWidth, - }; - - if (rowHeader) { - view.left += rowHeader.offsetWidth; - } - - withinHorizontalView = view.left < rect.left && rect.left < view.right && view.left < rect.right && rect.right < view.right; - - withinVerticalView = view.top < rect.top && rect.top < view.bottom && view.top < rect.bottom && rect.bottom < view.bottom; - - if (!withinHorizontalView) { - if (rect.left < view.left) { - tableHolder.scrollLeft = rect.left; - if (rowHeader) { - tableHolder.scrollLeft -= rowHeader.offsetWidth; - } - } else if (rect.right > view.right) { - tableHolder.scrollLeft = rect.right - tableHolder.clientWidth; - } - } - - if (!withinVerticalView) { - if (rect.top < view.top) { - tableHolder.scrollTop = rect.top; - } else if (rect.bottom > view.bottom) { - tableHolder.scrollTop = rect.bottom - tableHolder.clientHeight; - } - } - } - - - /////////////////////////////////// - /////// Layout /////// - /////////////////////////////////// - - layoutChange(){ - this.overlay.style.visibility = "hidden"; - clearTimeout(this.layoutChangeTimeout); - this.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200); - } - - redraw(force) { - if (force) { - this.selecting = 'cell'; - this.resetRanges(); - this.layoutElement(); - } - } - - layoutElement(visibleRows) { - var rows; - - if (visibleRows) { - rows = this.table.rowManager.getVisibleRows(true); - } else { - rows = this.table.rowManager.getRows(); - } - - rows.forEach((row) => { - if (row.type === "row") { - this.layoutRow(row); - row.cells.forEach((cell) => this.renderCell(cell)); - } - }); - - this.getTableColumns().forEach((column) => { - this.layoutColumn(column); - }); - - this.layoutRanges(); - } - - layoutRow(row) { - var el = row.getElement(), - selected = false, - occupied = this.ranges.some((range) => range.occupiesRow(row)); - - if (this.selecting === "row") { - selected = occupied; - } else if (this.selecting === "all") { - selected = true; - } - - el.classList.toggle("tabulator-range-selected", selected); - el.classList.toggle("tabulator-range-highlight", occupied); - } - - layoutColumn(column) { - var el = column.getElement(), - selected = false, - occupied = this.ranges.some((range) => range.occupiesColumn(column)); - - if (this.selecting === "column") { - selected = occupied; - } else if (this.selecting === "all") { - selected = true; - } - - el.classList.toggle("tabulator-range-selected", selected); - el.classList.toggle("tabulator-range-highlight", occupied); - } - - layoutRanges() { - var activeCell; - - if (!this.table.initialized) { - return; - } - - activeCell = this.getActiveCell(); - - if (!activeCell) { - return; - } - - this.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + "px"; - this.activeRangeCellElement.style.top = activeCell.row.getElement().offsetTop + "px"; - this.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + "px"; - this.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + "px"; - - this.ranges.forEach((range) => range.layout()); - - this.overlay.style.visibility = "visible"; - } - - - /////////////////////////////////// - /////// Helper Functions /////// - /////////////////////////////////// - - getCell(rowIdx, colIdx) { - var row; - - if (colIdx < 0) { - colIdx = this.getTableColumns().length + colIdx; - if (colIdx < 0) { - return null; - } - } - - if (rowIdx < 0) { - rowIdx = this.getTableRows().length + rowIdx; - } - - row = this.table.rowManager.getRowFromPosition(rowIdx + 1); - - return row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null; - } - - - getActiveCell() { - return this.getCell(this.activeRange.start.row, this.activeRange.start.col); - } - - getRowByRangePos(pos) { - return this.getTableRows()[pos]; - } - - getColumnByRangePos(pos) { - return this.getTableColumns()[pos]; - } - - getTableRows() { - return this.table.rowManager.getDisplayRows(); - } - - getTableColumns() { - return this.table.columnManager.getVisibleColumnsByIndex(); - } - - addRange(start, end) { - var range; - - if(this.maxRanges !== true && this.ranges.length >= this.maxRanges){ - this.ranges.shift().destroy(); - } - - range = new Range(this.table, this, start, end); - - this.activeRange = range; - this.ranges.push(range); - this.rangeContainer.appendChild(range.element); - - return range; - } - - resetRanges() { - var range, cell; - - this.ranges.forEach((range) => range.destroy()); - this.ranges = []; - - range = this.addRange(); - - if(this.table.rowManager.activeRows.length){ - cell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0]; - - if(cell){ - range.setBounds(cell); - this.initializeFocus(cell); - } - } - - return range; - } - - tableDestroyed(){ - document.removeEventListener("mouseup", this.mouseUpEvent); - this.table.rowManager.element.removeEventListener("keydown", this.keyDownEvent); - } - - selectedRows(component) { - return component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows(); - } - - selectedColumns(component) { - return component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns(); - } - } - - SelectRange.moduleName = "selectRange"; - - class Tooltip extends Module{ - - constructor(table){ - super(table); - - this.tooltipSubscriber = null, - this.headerSubscriber = null, - - this.timeout = null; - this.popupInstance = null; - - this.registerTableOption("tooltipGenerationMode", undefined); //deprecated - this.registerTableOption("tooltipDelay", 300); - - this.registerColumnOption("tooltip"); - this.registerColumnOption("headerTooltip"); - } - - initialize(){ - this.deprecatedOptionsCheck(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - deprecatedOptionsCheck(){ - this.deprecationCheckMsg("tooltipGenerationMode", "This option is no longer needed as tooltips are always generated on hover now"); - } - - initializeColumn(column){ - if(column.definition.headerTooltip && !this.headerSubscriber){ - this.headerSubscriber = true; - - this.subscribe("column-mousemove", this.mousemoveCheck.bind(this, "headerTooltip")); - this.subscribe("column-mouseout", this.mouseoutCheck.bind(this, "headerTooltip")); - } - - if(column.definition.tooltip && !this.tooltipSubscriber){ - this.tooltipSubscriber = true; - - this.subscribe("cell-mousemove", this.mousemoveCheck.bind(this, "tooltip")); - this.subscribe("cell-mouseout", this.mouseoutCheck.bind(this, "tooltip")); - } - } - - mousemoveCheck(action, e, component){ - var tooltip = action === "tooltip" ? component.column.definition.tooltip : component.definition.headerTooltip; - - if(tooltip){ - this.clearPopup(); - this.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay); - } - } - - mouseoutCheck(action, e, component){ - if(!this.popupInstance){ - this.clearPopup(); - } - } - - clearPopup(action, e, component){ - clearTimeout(this.timeout); - this.timeout = null; - - if(this.popupInstance){ - this.popupInstance.hide(); - } - } - - loadTooltip(e, component, tooltip){ - var contentsEl, renderedCallback, coords; - - function onRendered(callback){ - renderedCallback = callback; - } - - if(typeof tooltip === "function"){ - tooltip = tooltip(e, component.getComponent(), onRendered); - } - - if(tooltip instanceof HTMLElement){ - contentsEl = tooltip; - }else { - contentsEl = document.createElement("div"); - - if(tooltip === true){ - if(component instanceof Cell){ - tooltip = component.value; - }else { - if(component.definition.field){ - this.langBind("columns|" + component.definition.field, (value) => { - contentsEl.innerHTML = tooltip = value || component.definition.title; - }); - }else { - tooltip = component.definition.title; - } - } - } - - contentsEl.innerHTML = tooltip; - } - - if(tooltip || tooltip === 0 || tooltip === false){ - contentsEl.classList.add("tabulator-tooltip"); - - contentsEl.addEventListener("mousemove", e => e.preventDefault()); - - this.popupInstance = this.popup(contentsEl); - - if(typeof renderedCallback === "function"){ - this.popupInstance.renderCallback(renderedCallback); - } - - coords = this.popupInstance.containerEventCoords(e); - - this.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => { - this.dispatchExternal("TooltipClosed", component.getComponent()); - this.popupInstance = null; - }); - - this.dispatchExternal("TooltipOpened", component.getComponent()); - } - } - } - - Tooltip.moduleName = "tooltip"; - - var defaultValidators = { - //is integer - integer: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - value = Number(value); - - return !isNaN(value) && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - value = Number(value); - - return !isNaN(value) && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return isNaN(value); - }, - - //must be alphanumeric - alphanumeric: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - var reg = new RegExp(/^[a-z0-9]+$/i); - - return reg.test(value); - }, - - //maximum value - max: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) >= parameters; - }, - - //starts with value - starts: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).toLowerCase().startsWith(String(parameters).toLowerCase()); - }, - - //ends with value - ends: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).toLowerCase().endsWith(String(parameters).toLowerCase()); - }, - - - //minimum string length - minLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - if(typeof parameters == "string"){ - parameters = parameters.split("|"); - } - - return parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function(row){ - var data = row.getData(); - - if(data !== cellData){ - if(value == column.getFieldValue(data)){ - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required:function(cell, value, parameters){ - return value !== "" && value !== null && typeof value !== "undefined"; - }, - }; - - class Validate extends Module{ - - constructor(table){ - super(table); - - this.invalidCells = []; - - this.registerTableOption("validationMode", "blocking"); - - this.registerColumnOption("validator"); - - this.registerTableFunction("getInvalidCells", this.getInvalidCells.bind(this)); - this.registerTableFunction("clearCellValidation", this.userClearCellValidation.bind(this)); - this.registerTableFunction("validate", this.userValidate.bind(this)); - - this.registerComponentFunction("cell", "isValid", this.cellIsValid.bind(this)); - this.registerComponentFunction("cell", "clearValidation", this.clearValidation.bind(this)); - this.registerComponentFunction("cell", "validate", this.cellValidate.bind(this)); - - this.registerComponentFunction("column", "validate", this.columnValidate.bind(this)); - this.registerComponentFunction("row", "validate", this.rowValidate.bind(this)); - } - - - initialize(){ - this.subscribe("cell-delete", this.clearValidation.bind(this)); - this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); - - this.subscribe("edit-success", this.editValidate.bind(this)); - this.subscribe("edit-editor-clear", this.editorClear.bind(this)); - this.subscribe("edit-edited-clear", this.editedClear.bind(this)); - } - - /////////////////////////////////// - ///////// Event Handling ////////// - /////////////////////////////////// - - editValidate(cell, value, previousValue){ - var valid = this.table.options.validationMode !== "manual" ? this.validate(cell.column.modules.validate, cell, value) : true; - - // allow time for editor to make render changes then style cell - if(valid !== true){ - setTimeout(() => { - cell.getElement().classList.add("tabulator-validation-fail"); - this.dispatchExternal("validationFailed", cell.getComponent(), value, valid); - }); - } - - return valid; - } - - editorClear(cell, cancelled){ - if(cancelled){ - if(cell.column.modules.validate){ - this.cellValidate(cell); - } - } - - cell.getElement().classList.remove("tabulator-validation-fail"); - } - - editedClear(cell){ - if(cell.modules.validate){ - cell.modules.validate.invalid = false; - } - } - - /////////////////////////////////// - ////////// Cell Functions ///////// - /////////////////////////////////// - - cellIsValid(cell){ - return cell.modules.validate ? (cell.modules.validate.invalid || true) : true; - } - - cellValidate(cell){ - return this.validate(cell.column.modules.validate, cell, cell.getValue()); - } - - /////////////////////////////////// - ///////// Column Functions //////// - /////////////////////////////////// - - columnValidate(column){ - var invalid = []; - - column.cells.forEach((cell) => { - if(this.cellValidate(cell) !== true){ - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - } - - /////////////////////////////////// - ////////// Row Functions ////////// - /////////////////////////////////// - - rowValidate(row){ - var invalid = []; - - row.cells.forEach((cell) => { - if(this.cellValidate(cell) !== true){ - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - - userClearCellValidation(cells){ - if(!cells){ - cells = this.getInvalidCells(); - } - - if(!Array.isArray(cells)){ - cells = [cells]; - } - - cells.forEach((cell) => { - this.clearValidation(cell._getSelf()); - }); - } - - userValidate(cells){ - var output = []; - - //clear row data - this.table.rowManager.rows.forEach((row) => { - row = row.getComponent(); - - var valid = row.validate(); - - if(valid !== true){ - output = output.concat(valid); - } - }); - - return output.length ? output : true; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnCheck(column){ - if(typeof column.definition.validator !== "undefined"){ - this.initializeColumn(column); - } - } - - //validate - initializeColumn(column){ - var self = this, - config = [], - validator; - - if(column.definition.validator){ - - if(Array.isArray(column.definition.validator)){ - column.definition.validator.forEach((item) => { - validator = self._extractValidator(item); - - if(validator){ - config.push(validator); - } - }); - - }else { - validator = this._extractValidator(column.definition.validator); - - if(validator){ - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } - } - - _extractValidator(value){ - var type, params, pos; - - switch(typeof value){ - case "string": - pos = value.indexOf(':'); - - if(pos > -1){ - type = value.substring(0,pos); - params = value.substring(pos+1); - }else { - type = value; - } - - return this._buildValidator(type, params); - - case "function": - return this._buildValidator(value); - - case "object": - return this._buildValidator(value.type, value.parameters); - } - } - - _buildValidator(type, params){ - - var func = typeof type == "function" ? type : Validate.validators[type]; - - if(!func){ - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - }else { - return { - type:typeof type == "function" ? "function" : type, - func:func, - params:params, - }; - } - } - - validate(validators, cell, value){ - var self = this, - failedValidators = [], - invalidIndex = this.invalidCells.indexOf(cell); - - if(validators){ - validators.forEach((item) => { - if(!item.func.call(self, cell.getComponent(), value, item.params)){ - failedValidators.push({ - type:item.type, - parameters:item.params - }); - } - }); - } - - if(!cell.modules.validate){ - cell.modules.validate = {}; - } - - if(!failedValidators.length){ - cell.modules.validate.invalid = false; - cell.getElement().classList.remove("tabulator-validation-fail"); - - if(invalidIndex > -1){ - this.invalidCells.splice(invalidIndex, 1); - } - }else { - cell.modules.validate.invalid = failedValidators; - - if(this.table.options.validationMode !== "manual"){ - cell.getElement().classList.add("tabulator-validation-fail"); - } - - if(invalidIndex == -1){ - this.invalidCells.push(cell); - } - } - - return failedValidators.length ? failedValidators : true; - } - - getInvalidCells(){ - var output = []; - - this.invalidCells.forEach((cell) => { - output.push(cell.getComponent()); - }); - - return output; - } - - clearValidation(cell){ - var invalidIndex; - - if(cell.modules.validate && cell.modules.validate.invalid){ - - cell.getElement().classList.remove("tabulator-validation-fail"); - cell.modules.validate.invalid = false; - - invalidIndex = this.invalidCells.indexOf(cell); - - if(invalidIndex > -1){ - this.invalidCells.splice(invalidIndex, 1); - } - } - } - } - - Validate.moduleName = "validate"; - - //load defaults - Validate.validators = defaultValidators; - - var modules = /*#__PURE__*/Object.freeze({ - __proto__: null, - AccessorModule: Accessor, - AjaxModule: Ajax, - ClipboardModule: Clipboard, - ColumnCalcsModule: ColumnCalcs, - DataTreeModule: DataTree, - DownloadModule: Download, - EditModule: Edit$1, - ExportModule: Export, - FilterModule: Filter, - FormatModule: Format, - FrozenColumnsModule: FrozenColumns, - FrozenRowsModule: FrozenRows, - GroupRowsModule: GroupRows, - HistoryModule: History, - HtmlTableImportModule: HtmlTableImport, - ImportModule: Import, - InteractionModule: Interaction, - KeybindingsModule: Keybindings, - MenuModule: Menu, - MoveColumnsModule: MoveColumns, - MoveRowsModule: MoveRows, - MutatorModule: Mutator, - PageModule: Page, - PersistenceModule: Persistence, - PopupModule: Popup$1, - PrintModule: Print, - ReactiveDataModule: ReactiveData, - ResizeColumnsModule: ResizeColumns, - ResizeRowsModule: ResizeRows, - ResizeTableModule: ResizeTable, - ResponsiveLayoutModule: ResponsiveLayout, - SelectRowModule: SelectRow, - SortModule: Sort, - SelectRangeModule: SelectRange, - TooltipModule: Tooltip, - ValidateModule: Validate - }); - - //tabulator with all modules installed - - class TabulatorFull extends Tabulator {} - - //bind modules and static functionality - new ModuleBinder(TabulatorFull, modules); - - return TabulatorFull; - -}))); -//# sourceMappingURL=tabulator.js.map diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator.js.map b/tmp/tabulator-5.6.1/dist/js/tabulator.js.map deleted file mode 100644 index 0bd8bf4..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tabulator.js","sources":["../../src/js/core/defaults/options.js","../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/DeprecationAdvisor.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/tools/Popup.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/tools/Alert.js","../../src/js/core/Tabulator.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/date.js","../../src/js/modules/Edit/defaults/editors/time.js","../../src/js/modules/Edit/defaults/editors/datetime.js","../../src/js/modules/Edit/List.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/History/History.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/defaults/importers/array.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Popup/Popup.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/SelectRange/RangeComponent.js","../../src/js/modules/SelectRange/Range.js","../../src/js/modules/SelectRange/SelectRange.js","../../src/js/modules/Tooltip/Tooltip.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default {\n\n\tdebugEventsExternal:false, //flag to console log events\n\tdebugEventsInternal:false, //flag to console log events\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\n\tdebugInvalidComponentFuncs:true, //allow toggling of invalid component warnings\n\tdebugInitialization:true, //allow toggling of pre initialization function call warnings\n\tdebugDeprecation:true, //allow toggling of deprecation warnings\n\n\theight:false, //height of tabulator\n\tminHeight:false, //minimum height of tabulator\n\tmaxHeight:false, //maximum height of tabulator\n\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\n\n\tpopupContainer:false,\n\n\tcolumns:[],//store for colum header info\n\tcolumnDefaults:{}, //store column default props\n\n\tdata:false, //default starting data\n\n\tautoColumns:false, //build columns from data row structure\n\tautoColumnsDefinitions:false,\n\n\tnestedFieldSeparator:\".\", //separator for nested data\n\n\tfooterElement:false, //hold footer element\n\n\tindex:\"id\", //filed for row index\n\n\ttextDirection:\"auto\",\n\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\n\n\theaderVisible:true, //hide header\n\n\trenderVertical:\"virtual\",\n\trenderHorizontal:\"basic\",\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\n\n\tscrollToRowPosition:\"top\",\n\tscrollToRowIfVisible:true,\n\n\tscrollToColumnPosition:\"left\",\n\tscrollToColumnIfVisible:true,\n\n\trowFormatter:false,\n\trowFormatterPrint:null,\n\trowFormatterClipboard:null,\n\trowFormatterHtmlOutput:null,\n\n\trowHeight:null,\n\n\tplaceholder:false,\n\n\tdataLoader:true,\n\tdataLoaderLoading:false,\n\tdataLoaderError:false,\n\tdataLoaderErrorTimeout:3000,\n\n\tdataSendParams:{},\n\n\tdataReceiveParams:{},\n};\n","export default class CoreFeature{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\t}\n\n\t//////////////////////////////////////////\n\t/////////////// DataLoad /////////////////\n\t//////////////////////////////////////////\n\n\treloadData(data, silent, columnsChanged){\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\n\t}\n\n\t//////////////////////////////////////////\n\t///////////// Localization ///////////////\n\t//////////////////////////////////////////\n\n\tlangText(){\n\t\treturn this.table.modules.localize.getText(...arguments);\n\t}\n\n\tlangBind(){\n\t\treturn this.table.modules.localize.bind(...arguments);\n\t}\n\n\tlangLocale(){\n\t\treturn this.table.modules.localize.getLocale(...arguments);\n\t}\n\n\n\t//////////////////////////////////////////\n\t////////// Inter Table Comms /////////////\n\t//////////////////////////////////////////\n\n\tcommsConnections(){\n\t\treturn this.table.modules.comms.getConnections(...arguments);\n\t}\n\n\tcommsSend(){\n\t\treturn this.table.modules.comms.send(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Layout /////////////////\n\t//////////////////////////////////////////\n\n\tlayoutMode(){\n\t\treturn this.table.modules.layout.getMode();\n\t}\n\n\tlayoutRefresh(force){\n\t\treturn this.table.modules.layout.layout(force);\n\t}\n\n\n\t//////////////////////////////////////////\n\t/////////////// Event Bus ////////////////\n\t//////////////////////////////////////////\n\n\tsubscribe(){\n\t\treturn this.table.eventBus.subscribe(...arguments);\n\t}\n\n\tunsubscribe(){\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.table.eventBus.subscribed(key);\n\t}\n\n\tsubscriptionChange(){\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\n\t}\n\n\tdispatch(){\n\t\treturn this.table.eventBus.dispatch(...arguments);\n\t}\n\n\tchain(){\n\t\treturn this.table.eventBus.chain(...arguments);\n\t}\n\n\tconfirm(){\n\t\treturn this.table.eventBus.confirm(...arguments);\n\t}\n\n\tdispatchExternal(){\n\t\treturn this.table.externalEvents.dispatch(...arguments);\n\t}\n\n\tsubscribedExternal(key){\n\t\treturn this.table.externalEvents.subscribed(key);\n\t}\n\n\tsubscriptionChangeExternal(){\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Options /////////////////\n\t//////////////////////////////////////////\n\n\toptions(key){\n\t\treturn this.table.options[key];\n\t}\n\n\tsetOption(key, value){\n\t\tif(typeof value !== \"undefined\"){\n\t\t\tthis.table.options[key] = value;\n\t\t}\n\n\t\treturn this.table.options[key];\n\t}\n\n\t//////////////////////////////////////////\n\t/////////// Deprecation Checks ///////////\n\t//////////////////////////////////////////\n\n\tdeprecationCheck(oldOption, newOption, convert){\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption, convert);\n\t}\n\n\tdeprecationCheckMsg(oldOption, msg){\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\n\t}\n\n\tdeprecationMsg(msg){\n\t\treturn this.table.deprecationAdvisor.msg(msg);\n\t}\n\t//////////////////////////////////////////\n\t//////////////// Modules /////////////////\n\t//////////////////////////////////////////\n\n\tmodule(key){\n\t\treturn this.table.module(key);\n\t}\n}","import Column from './Column.js';\n\n//public column object\nexport default class ColumnComponent {\n\tconstructor (column){\n\t\tthis._column = column;\n\t\tthis.type = \"ColumnComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetElement(){\n\t\treturn this._column.getElement();\n\t}\n\n\tgetDefinition(){\n\t\treturn this._column.getDefinition();\n\t}\n\n\tgetField(){\n\t\treturn this._column.getField();\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this._column.getTitleDownload();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._column.cells.forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tisVisible(){\n\t\treturn this._column.visible;\n\t}\n\n\tshow(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.show();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.show();\n\t\t}\n\t}\n\n\thide(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.hide();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.hide();\n\t\t}\n\t}\n\n\ttoggle(){\n\t\tif(this._column.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tdelete(){\n\t\treturn this._column.delete();\n\t}\n\n\tgetSubColumns(){\n\t\tvar output = [];\n\n\t\tif(this._column.columns.length){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\toutput.push(column.getComponent());\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetParentColumn(){\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._column;\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible);\n\t}\n\n\tgetTable(){\n\t\treturn this._column.table;\n\t}\n\n\tmove(to, after){\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\t\tif(toColumn){\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t}\n\n\tgetNextColumn(){\n\t\tvar nextCol = this._column.nextColumn();\n\n\t\treturn nextCol ? nextCol.getComponent() : false;\n\t}\n\n\tgetPrevColumn(){\n\t\tvar prevCol = this._column.prevColumn();\n\n\t\treturn prevCol ? prevCol.getComponent() : false;\n\t}\n\n\tupdateDefinition(updates){\n\t\treturn this._column.updateDefinition(updates);\n\t}\n\n\tgetWidth(){\n\t\treturn this._column.getWidth();\n\t}\n\n\tsetWidth(width){\n\t\tvar result;\n\n\t\tif(width === true){\n\t\t\tresult = this._column.reinitializeWidth(true);\n\t\t}else{\n\t\t\tresult = this._column.setWidth(width);\n\t\t}\n\n\t\tthis._column.table.columnManager.rerenderColumns(true);\n\n\t\treturn result;\n\t}\n}","export default {\n\t\"title\": undefined,\n\t\"field\": undefined,\n\t\"columns\": undefined,\n\t\"visible\": undefined,\n\t\"hozAlign\": undefined,\n\t\"vertAlign\": undefined,\n\t\"width\": undefined,\n\t\"minWidth\": 40,\n\t\"maxWidth\": undefined,\n\t\"maxInitialWidth\": undefined,\n\t\"cssClass\": undefined,\n\t\"variableHeight\": undefined,\n\t\"headerVertical\": undefined,\n\t\"headerHozAlign\": undefined,\n\t\"headerWordWrap\": false,\n\t\"editableTitle\": undefined,\n};","//public cell object\nexport default class CellComponent {\n\n\tconstructor (cell){\n\t\tthis._cell = cell;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetValue(){\n\t\treturn this._cell.getValue();\n\t}\n\n\tgetOldValue(){\n\t\treturn this._cell.getOldValue();\n\t}\n\n\tgetInitialValue(){\n\t\treturn this._cell.initialValue;\n\t}\n\n\tgetElement(){\n\t\treturn this._cell.getElement();\n\t}\n\n\tgetRow(){\n\t\treturn this._cell.row.getComponent();\n\t}\n\n\tgetData(transform){\n\t\treturn this._cell.row.getData(transform);\n\t}\n\tgetType(){\n\t\treturn \"cell\";\n\t}\n\tgetField(){\n\t\treturn this._cell.column.getField();\n\t}\n\n\tgetColumn(){\n\t\treturn this._cell.column.getComponent();\n\t}\n\n\tsetValue(value, mutate){\n\t\tif(typeof mutate == \"undefined\"){\n\t\t\tmutate = true;\n\t\t}\n\n\t\tthis._cell.setValue(value, mutate);\n\t}\n\n\trestoreOldValue(){\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\n\t}\n\n\trestoreInitialValue(){\n\t\tthis._cell.setValueActual(this._cell.initialValue);\n\t}\n\n\tcheckHeight(){\n\t\tthis._cell.checkHeight();\n\t}\n\n\tgetTable(){\n\t\treturn this._cell.table;\n\t}\n\n\t_getSelf(){\n\t\treturn this._cell;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport CellComponent from './CellComponent.js';\n\nexport default class Cell extends CoreFeature{\n\tconstructor(column, row){\n\t\tsuper(column.table);\n\n\t\tthis.table = column.table;\n\t\tthis.column = column;\n\t\tthis.row = row;\n\t\tthis.element = null;\n\t\tthis.value = null;\n\t\tthis.initialValue;\n\t\tthis.oldValue = null;\n\t\tthis.modules = {};\n\n\t\tthis.height = null;\n\t\tthis.width = null;\n\t\tthis.minWidth = null;\n\n\t\tthis.component = null;\n\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\t\tthis.build();\n\t}\n\n\t//////////////// Setup Functions /////////////////\n\t//generate element\n\tbuild(){\n\t\tthis.generateElement();\n\n\t\tthis.setWidth();\n\n\t\tthis._configureCell();\n\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\t\tthis.initialValue = this.value;\n\t}\n\n\tgenerateElement(){\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = \"tabulator-cell\";\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\n\t}\n\n\t_configureCell(){\n\t\tvar element = this.element,\n\t\tfield = this.column.getField(),\n\t\tvertAligns = {\n\t\t\ttop:\"flex-start\",\n\t\t\tbottom:\"flex-end\",\n\t\t\tmiddle:\"center\",\n\t\t},\n\t\thozAligns = {\n\t\t\tleft:\"flex-start\",\n\t\t\tright:\"flex-end\",\n\t\t\tcenter:\"center\",\n\t\t};\n\n\t\t//set text alignment\n\t\telement.style.textAlign = this.column.hozAlign;\n\n\t\tif(this.column.vertAlign){\n\t\t\telement.style.display = \"inline-flex\";\n\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\n\n\t\t\tif(this.column.hozAlign){\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\n\t\t\t}\n\t\t}\n\n\t\tif(field){\n\t\t\telement.setAttribute(\"tabulator-field\", field);\n\t\t}\n\n\t\t//add class to cell if needed\n\t\tif(this.column.definition.cssClass){\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\telement.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.dispatch(\"cell-init\", this);\n\n\t\t//hide cell if not visible\n\t\tif(!this.column.visible){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//generate cell contents\n\t_generateContents(){\n\t\tvar val;\n\n\t\tval = this.chain(\"cell-format\", this, null, () => {\n\t\t\treturn this.element.innerHTML = this.value;\n\t\t});\n\n\t\tswitch(typeof val){\n\t\t\tcase \"object\":\n\t\t\t\tif(val instanceof Node){\n\n\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\t\t\t\tthis.element.appendChild(val);\n\t\t\t\t}else{\n\t\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\t\tif(val != null){\n\t\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tthis.element.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element.innerHTML = val;\n\t\t}\n\t}\n\n\tcellRendered(){\n\t\tthis.dispatch(\"cell-rendered\", this);\n\t}\n\n\t//////////////////// Getters ////////////////////\n\tgetElement(containerOnly){\n\t\tif(!this.loaded){\n\t\t\tthis.loaded = true;\n\t\t\tif(!containerOnly){\n\t\t\t\tthis.layoutElement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.element;\n\t}\n\n\tgetValue(){\n\t\treturn this.value;\n\t}\n\n\tgetOldValue(){\n\t\treturn this.oldValue;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tsetValue(value, mutate, force){\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\n\n\t\t\tthis.cellRendered();\n\n\t\t\tif(this.column.definition.cellEdited){\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\n\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t}\n\t}\n\n\tsetValueProcessData(value, mutate, force){\n\t\tvar changed = false;\n\n\t\tif(this.value !== value || force){\n\n\t\t\tchanged = true;\n\n\t\t\tif(mutate){\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\n\t\t\t}\n\t\t}\n\n\t\tthis.setValueActual(value);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\n\t\t}\n\n\t\treturn changed;\n\t}\n\n\tsetValueActual(value){\n\t\tthis.oldValue = this.value;\n\n\t\tthis.value = value;\n\n\t\tthis.dispatch(\"cell-value-save-before\", this);\n\n\t\tthis.column.setFieldValue(this.row.data, value);\n\n\t\tthis.dispatch(\"cell-value-save-after\", this);\n\n\t\tif(this.loaded){\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\tlayoutElement(){\n\t\tthis._generateContents();\n\n\t\tthis.dispatch(\"cell-layout\", this);\n\t}\n\n\tsetWidth(){\n\t\tthis.width = this.column.width;\n\t\tthis.element.style.width = this.column.widthStyled;\n\t}\n\n\tclearWidth(){\n\t\tthis.width = \"\";\n\t\tthis.element.style.width = \"\";\n\t}\n\n\tgetWidth(){\n\t\treturn this.width || this.element.offsetWidth;\n\t}\n\n\tsetMinWidth(){\n\t\tthis.minWidth = this.column.minWidth;\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\n\t}\n\n\tsetMaxWidth(){\n\t\tthis.maxWidth = this.column.maxWidth;\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n\t}\n\n\tcheckHeight(){\n\t\t// var height = this.element.css(\"height\");\n\t\tthis.row.reinitializeHeight();\n\t}\n\n\tclearHeight(){\n\t\tthis.element.style.height = \"\";\n\t\tthis.height = null;\n\n\t\tthis.dispatch(\"cell-height\", this, \"\");\n\t}\n\n\tsetHeight(){\n\t\tthis.height = this.row.height;\n\t\tthis.element.style.height = this.row.heightStyled;\n\n\t\tthis.dispatch(\"cell-height\", this, this.row.heightStyled);\n\t}\n\n\tgetHeight(){\n\t\treturn this.height || this.element.offsetHeight;\n\t}\n\n\tshow(){\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n\t}\n\n\thide(){\n\t\tthis.element.style.display = \"none\";\n\t}\n\n\tdelete(){\n\t\tthis.dispatch(\"cell-delete\", this);\n\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.element = false;\n\t\tthis.column.deleteCell(this);\n\t\tthis.row.deleteCell(this);\n\t\tthis.calcs = {};\n\t}\n\n\tgetIndex(){\n\t\treturn this.row.getCellIndex(this);\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new CellComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\nimport ColumnComponent from './ColumnComponent.js';\nimport defaultOptions from './defaults/options.js';\n\nimport Cell from '../cell/Cell.js';\n\nclass Column extends CoreFeature{\n\n\tconstructor(def, parent){\n\t\tsuper(parent.table);\n\n\t\tthis.definition = def; //column definition\n\t\tthis.parent = parent; //hold parent object\n\t\tthis.type = \"column\"; //type of element\n\t\tthis.columns = []; //child columns\n\t\tthis.cells = []; //cells bound to this column\n\t\tthis.element = this.createElement(); //column header element\n\t\tthis.contentElement = false;\n\t\tthis.titleHolderElement = false;\n\t\tthis.titleElement = false;\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\n\t\tthis.isGroup = false;\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\n\t\tthis.vertAlign = \"\"; //vert text alignment\n\n\t\t//multi dimensional filed handling\n\t\tthis.field =\"\";\n\t\tthis.fieldStructure = \"\";\n\t\tthis.getFieldValue = \"\";\n\t\tthis.setFieldValue = \"\";\n\n\t\tthis.titleDownload = null;\n\t\tthis.titleFormatterRendered = false;\n\n\t\tthis.mapDefinitions();\n\n\t\tthis.setField(this.definition.field);\n\n\t\tthis.modules = {}; //hold module variables;\n\n\t\tthis.width = null; //column width\n\t\tthis.widthStyled = \"\"; //column width pre-styled to improve render efficiency\n\t\tthis.maxWidth = null; //column maximum width\n\t\tthis.maxWidthStyled = \"\"; //column maximum pre-styled to improve render efficiency\n\t\tthis.maxInitialWidth = null;\n\t\tthis.minWidth = null; //column minimum width\n\t\tthis.minWidthStyled = \"\"; //column minimum pre-styled to improve render efficiency\n\t\tthis.widthFixed = false; //user has specified a width for this column\n\n\t\tthis.visible = true; //default visible state\n\n\t\tthis.component = null;\n\n\t\t//initialize column\n\t\tif(this.definition.columns){\n\n\t\t\tthis.isGroup = true;\n\n\t\t\tthis.definition.columns.forEach((def, i) => {\n\t\t\t\tvar newCol = new Column(def, this);\n\t\t\t\tthis.attachColumn(newCol);\n\t\t\t});\n\n\t\t\tthis.checkColumnVisibility();\n\t\t}else{\n\t\t\tparent.registerColumnField(this);\n\t\t}\n\n\t\tthis._initialize();\n\t}\n\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.setAttribute(\"role\", \"columnheader\");\n\t\tel.setAttribute(\"aria-sort\", \"none\");\n\n\t\tswitch(this.table.options.columnHeaderVertAlign){\n\t\t\tcase \"middle\":\n\t\t\t\tel.style.justifyContent = \"center\";\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tel.style.justifyContent = \"flex-end\";\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn el;\n\t}\n\n\tcreateGroupElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col-group-cols\");\n\n\t\treturn el;\n\t}\n\n\tmapDefinitions(){\n\t\tvar defaults = this.table.options.columnDefaults;\n\n\t\t//map columnDefaults onto column definitions\n\t\tif(defaults){\n\t\t\tfor(let key in defaults){\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\n\t\t\t\t\tthis.definition[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition);\n\t}\n\n\tcheckDefinition(){\n\t\tObject.keys(this.definition).forEach((key) => {\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetField(field){\n\t\tthis.field = field;\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n\t}\n\n\t//register column position with column manager\n\tregisterColumnPosition(column){\n\t\tthis.parent.registerColumnPosition(column);\n\t}\n\n\t//register column position with column manager\n\tregisterColumnField(column){\n\t\tthis.parent.registerColumnField(column);\n\t}\n\n\t//trigger position registration\n\treRegisterPosition(){\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolumn.reRegisterPosition();\n\t\t\t});\n\t\t}else{\n\t\t\tthis.registerColumnPosition(this);\n\t\t}\n\t}\n\n\t//build header element\n\t_initialize(){\n\t\tvar def = this.definition;\n\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\tif(def.headerVertical){\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\n\n\t\t\tif(def.headerVertical === \"flip\"){\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t\t}\n\t\t}\n\n\t\tthis.contentElement = this._buildColumnHeaderContent();\n\n\t\tthis.element.appendChild(this.contentElement);\n\n\t\tif(this.isGroup){\n\t\t\tthis._buildGroupHeader();\n\t\t}else{\n\t\t\tthis._buildColumnHeader();\n\t\t}\n\n\t\tthis.dispatch(\"column-init\", this);\n\t}\n\n\t//build header element for header\n\t_buildColumnHeader(){\n\t\tvar def = this.definition;\n\n\t\tthis.dispatch(\"column-layout\", this);\n\n\t\t//set column visibility\n\t\tif(typeof def.visible != \"undefined\"){\n\t\t\tif(def.visible){\n\t\t\t\tthis.show(true);\n\t\t\t}else{\n\t\t\t\tthis.hide(true);\n\t\t\t}\n\t\t}\n\n\t\t//assign additional css classes to column header\n\t\tif(def.cssClass){\n\t\t\tvar classNames = def.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tif(def.field){\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t\t}\n\n\t\t//set min width if present\n\t\tthis.setMinWidth(parseInt(def.minWidth));\n\n\t\tif (def.maxInitialWidth) {\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\n\t\t}\n\t\t\n\t\tif(def.maxWidth){\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\n\t\t}\n\n\t\tthis.reinitializeWidth();\n\n\t\t//set horizontal text alignment\n\t\tthis.hozAlign = this.definition.hozAlign;\n\t\tthis.vertAlign = this.definition.vertAlign;\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\t}\n\n\t_buildColumnHeaderContent(){\n\t\tvar contentElement = document.createElement(\"div\");\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\t\tthis.titleHolderElement = document.createElement(\"div\");\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\t\tcontentElement.appendChild(this.titleHolderElement);\n\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\t\treturn contentElement;\n\t}\n\n\t//build title element of column\n\t_buildColumnHeaderTitle(){\n\t\tvar def = this.definition;\n\n\t\tvar titleHolderElement = document.createElement(\"div\");\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\t\t\n\t\tif(def.headerWordWrap){\n\t\t\ttitleHolderElement.classList.add(\"tabulator-col-title-wrap\");\n\t\t}\n\n\t\tif(def.editableTitle){\n\t\t\tvar titleElement = document.createElement(\"input\");\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttitleElement.focus();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"change\", () => {\n\t\t\t\tdef.title = titleElement.value;\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\n\t\t\t});\n\n\t\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\ttitleElement.value = def.title || \" \";\n\t\t\t}\n\n\t\t}else{\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t\t}\n\t\t}\n\n\t\treturn titleHolderElement;\n\t}\n\n\t_formatColumnHeaderTitle(el, title){\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\n\t\t\treturn title;\n\t\t});\n\n\t\tswitch(typeof contents){\n\t\t\tcase \"object\":\n\t\t\t\tif(contents instanceof Node){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = \"\";\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t}\n\n\t//build header element for column group\n\t_buildGroupHeader(){\n\t\tthis.element.classList.add(\"tabulator-col-group\");\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t\t//asign additional css classes to column header\n\t\tif(this.definition.cssClass){\n\t\t\tvar classNames = this.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\n\t\tthis.element.appendChild(this.groupElement);\n\t}\n\n\t//flat field lookup\n\t_getFlatData(data){\n\t\treturn data[this.field];\n\t}\n\n\t//nested field lookup\n\t_getNestedData(data){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdataObj = dataObj[structure[i]];\n\n\t\t\toutput = dataObj;\n\n\t\t\tif(!dataObj){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//flat field set\n\t_setFlatData(data, value){\n\t\tif(this.field){\n\t\t\tdata[this.field] = value;\n\t\t}\n\t}\n\n\t//nested field set\n\t_setNestedData(data, value){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tif(i == length -1){\n\t\t\t\tdataObj[structure[i]] = value;\n\t\t\t}else{\n\t\t\t\tif(!dataObj[structure[i]]){\n\t\t\t\t\tif(typeof value !== \"undefined\"){\n\t\t\t\t\t\tdataObj[structure[i]] = {};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t}\n\t\t}\n\t}\n\n\t//attach column to this group\n\tattachColumn(column){\n\t\tif(this.groupElement){\n\t\t\tthis.columns.push(column);\n\t\t\tthis.groupElement.appendChild(column.getElement());\n\n\t\t\tcolumn.columnRendered();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t\t}\n\t}\n\n\t//vertically align header in column\n\tverticalAlign(alignment, height){\n\n\t\t//calculate height of column header and group holder element\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\t\tthis.element.style.height = parentHeight + \"px\";\n\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\n\n\t\tif(this.isGroup){\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t}\n\n\t\t//vertically align cell contents\n\t\t// if(!this.isGroup && alignment !== \"top\"){\n\t\t// \tif(alignment === \"bottom\"){\n\t\t// \t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t// \t}else{\n\t\t// \t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\n\t\t// \t}\n\t\t// }\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.verticalAlign(alignment);\n\t\t});\n\t}\n\n\t//clear vertical alignment\n\tclearVerticalAlign(){\n\t\tthis.element.style.paddingTop = \"\";\n\t\tthis.element.style.height = \"\";\n\t\tthis.element.style.minHeight = \"\";\n\t\tthis.groupElement.style.minHeight = \"\";\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.clearVerticalAlign();\n\t\t});\n\n\t\tthis.dispatch(\"column-height\", this, \"\");\n\t}\n\n\t//// Retrieve Column Information ////\n\t//return column header element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return column group element\n\tgetGroupElement(){\n\t\treturn this.groupElement;\n\t}\n\n\t//return field name\n\tgetField(){\n\t\treturn this.field;\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this.titleDownload;\n\t}\n\n\t//return the first column in a group\n\tgetFirstColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[0].getFirstColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return the last column in a group\n\tgetLastColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return all columns in a group\n\tgetColumns(traverse){\n\t\tvar columns = [];\n\n\t\tif(traverse){\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumns.push(column);\n\t\t\t\t\t\n\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t});\n\t\t}else{\n\t\t\tcolumns = this.columns;\n\t\t}\n\t\t\n\t\treturn columns;\n\t}\n\n\t//return all columns in a group\n\tgetCells(){\n\t\treturn this.cells;\n\t}\n\n\t//retrieve the top column in a group of columns\n\tgetTopColumn(){\n\t\tif(this.parent.isGroup){\n\t\t\treturn this.parent.getTopColumn();\n\t\t}else{\n\t\t\treturn this;\n\t\t}\n\t}\n\n\t//return column definition object\n\tgetDefinition(updateBranches){\n\t\tvar colDefs = [];\n\n\t\tif(this.isGroup && updateBranches){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t\t});\n\n\t\t\tthis.definition.columns = colDefs;\n\t\t}\n\n\t\treturn this.definition;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tcheckColumnVisibility(){\n\t\tvar visible = false;\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tif(column.visible){\n\t\t\t\tvisible = true;\n\t\t\t}\n\t\t});\n\n\t\tif(visible){\n\t\t\tthis.show();\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t}else{\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//show column\n\tshow(silent, responsiveToggle){\n\t\tif(!this.visible){\n\t\t\tthis.visible = true;\n\n\t\t\tthis.element.style.display = \"\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.show();\n\t\t\t});\n\n\t\t\tif(!this.isGroup && this.width === null){\n\t\t\t\tthis.reinitializeWidth();\n\t\t\t}\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\t//hide column\n\thide(silent, responsiveToggle){\n\t\tif(this.visible){\n\t\t\tthis.visible = false;\n\n\t\t\tthis.element.style.display = \"none\";\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.hide();\n\t\t\t});\n\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\tmatchChildWidths(){\n\t\tvar childWidth = 0;\n\n\t\tif(this.contentElement && this.columns.length){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\tchildWidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveChild(child){\n\t\tvar index = this.columns.indexOf(child);\n\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\n\t\tif(!this.columns.length){\n\t\t\tthis.delete();\n\t\t}\n\t}\n\n\tsetWidth(width){\n\t\tthis.widthFixed = true;\n\t\tthis.setWidthActual(width);\n\t}\n\n\tsetWidthActual(width){\n\t\tif(isNaN(width)){\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\n\t\t}\n\n\t\twidth = Math.max(this.minWidth, width);\n\n\t\tif(this.maxWidth){\n\t\t\twidth = Math.min(this.maxWidth, width);\n\t\t}\n\n\t\tthis.width = width;\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\t\tthis.element.style.width = this.widthStyled;\n\n\t\tif(!this.isGroup){\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.setWidth();\n\t\t\t});\n\t\t}\n\n\t\tif(this.parent.isGroup){\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tthis.dispatch(\"column-width\", this);\n\t}\n\n\tcheckCellHeights(){\n\t\tvar rows = [];\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tif(cell.row.heightInitialized){\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\n\t\t\t\t\trows.push(cell.row);\n\t\t\t\t\tcell.row.clearCellHeight();\n\t\t\t\t}else{\n\t\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.calcHeight();\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.setCellHeight();\n\t\t});\n\t}\n\n\tgetWidth(){\n\t\tvar width = 0;\n\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\twidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\twidth = this.width;\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tgetLeftOffset(){\n\t\tvar offset = this.element.offsetLeft;\n\n\t\tif(this.parent.isGroup){\n\t\t\toffset += this.parent.getLeftOffset();\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tgetHeight(){\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\n\t}\n\n\tsetMinWidth(minWidth){\n\t\tif(this.maxWidth && minWidth > this.maxWidth){\n\t\t\tminWidth = this.maxWidth;\n\n\t\t\tconsole.warn(\"the minWidth (\"+ minWidth + \"px) for column '\" + this.field + \"' cannot be bigger that its maxWidth (\"+ this.maxWidthStyled + \")\");\n\t\t}\n\n\t\tthis.minWidth = minWidth;\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\t\tthis.element.style.minWidth = this.minWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMinWidth();\n\t\t});\n\t}\n\n\tsetMaxWidth(maxWidth){\n\t\tif(this.minWidth && maxWidth < this.minWidth){\n\t\t\tmaxWidth = this.minWidth;\n\n\t\t\tconsole.warn(\"the maxWidth (\"+ maxWidth + \"px) for column '\" + this.field + \"' cannot be smaller that its minWidth (\"+ this.minWidthStyled + \")\");\n\t\t}\n\n\t\tthis.maxWidth = maxWidth;\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMaxWidth();\n\t\t});\n\t}\n\n\tdelete(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(this.isGroup){\n\t\t\t\tthis.columns.forEach(function(column){\n\t\t\t\t\tcolumn.delete();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dispatch(\"column-delete\", this);\n\n\t\t\tvar cellCount = this.cells.length;\n\n\t\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\t\tthis.cells[0].delete();\n\t\t\t}\n\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\n\t\t\tthis.element = false;\n\t\t\tthis.contentElement = false;\n\t\t\tthis.titleElement = false;\n\t\t\tthis.groupElement = false;\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.removeChild(this);\n\t\t\t}\n\n\t\t\tthis.table.columnManager.deregisterColumn(this);\n\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\n\t\t\tthis.dispatch(\"column-deleted\", this);\n\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tcolumnRendered(){\n\t\tif(this.titleFormatterRendered){\n\t\t\tthis.titleFormatterRendered();\n\t\t}\n\n\t\tthis.dispatch(\"column-rendered\", this);\n\t}\n\n\t//////////////// Cell Management /////////////////\n\t//generate cell for this column\n\tgenerateCell(row){\n\t\tvar cell = new Cell(this, row);\n\n\t\tthis.cells.push(cell);\n\n\t\treturn cell;\n\t}\n\n\tnextColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n\t}\n\n\t_nextVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n\t}\n\n\tprevColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n\t}\n\n\t_prevVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n\t}\n\n\treinitializeWidth(force){\n\t\tthis.widthFixed = false;\n\n\t\t//set width if present\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\n\t\t\t// maxInitialWidth ignored here as width specified\n\t\t\tthis.setWidth(this.definition.width);\n\t\t}\n\n\t\tthis.dispatch(\"column-width-fit-before\", this);\n\n\t\tthis.fitToData(force);\n\n\t\tthis.dispatch(\"column-width-fit-after\", this);\n\t}\n\n\t//set column width to maximum cell width for non group columns\n\tfitToData(force){\n\t\tif(this.isGroup){\n\t\t\treturn;\n\t\t}\n\n\t\tif(!this.widthFixed){\n\t\t\tthis.element.style.width = \"\";\n\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tcell.clearWidth();\n\t\t\t});\n\t\t}\n\n\t\tvar maxWidth = this.element.offsetWidth;\n\n\t\tif(!this.width || !this.widthFixed){\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tvar width = cell.getWidth();\n\n\t\t\t\tif(width > maxWidth){\n\t\t\t\t\tmaxWidth = width;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(maxWidth){\n\t\t\t\tvar setTo = maxWidth + 1;\n\t\t\t\tif (this.maxInitialWidth && !force) {\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\n\t\t\t\t}\n\t\t\t\tthis.setWidthActual(setTo);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateDefinition(updates){\n\t\tvar definition;\n\n\t\tif(!this.isGroup){\n\t\t\tif(!this.parent.isGroup){\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\n\t\t\t\t\t.then((column) => {\n\n\t\t\t\t\t\tif(definition.field == this.field){\n\t\t\t\t\t\t\tthis.field = false; //clear field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this.delete()\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t}\n\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new ColumnComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n\n\tgetPosition(){\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1;\n\t}\n}\n\nColumn.defaultOptionList = defaultOptions;\n\nexport default Column;\n","export default class Helpers{\n\n\tstatic elVisible(el){\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t}\n\n\tstatic elOffset(el){\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t}\n\n\tstatic retrieveNestedData(separator, field, data){\n\t\tvar structure = separator ? field.split(separator) : [field],\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdata = data[structure[i]];\n\n\t\t\toutput = data;\n\n\t\t\tif(!data){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tstatic deepClone(obj, clone, list = []){\n\t\tvar objectProto = {}.__proto__,\n\t\tarrayProto = [].__proto__;\n\n\t\tif (!clone){\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\t\t}\n\n\t\tfor(var i in obj) {\n\t\t\tlet subject = obj[i],\n\t\t\tmatch, copy;\n\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\n\t\t\t\tmatch = list.findIndex((item) => {\n\t\t\t\t\treturn item.subject === subject;\n\t\t\t\t});\n\n\t\t\t\tif(match > -1){\n\t\t\t\t\tclone[i] = list[match].copy;\n\t\t\t\t}else{\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\n\n\t\t\t\t\tlist.unshift({subject, copy});\n\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn clone;\n\t}\n}\n","export default class OptionsList {\n\tconstructor(table, msgType, defaults = {}){\n\t\tthis.table = table;\n\t\tthis.msgType = msgType;\n\t\tthis.registeredDefaults = Object.assign({}, defaults);\n\t}\n\t\n\tregister(option, value){\n\t\tthis.registeredDefaults[option] = value;\n\t}\n\t\n\tgenerate(defaultOptions, userOptions = {}){\n\t\tvar output = Object.assign({}, this.registeredDefaults),\n\t\twarn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true;\n\t\t\n\t\tObject.assign(output, defaultOptions);\n\t\t\n\t\tfor (let key in userOptions){\n\t\t\tif(!output.hasOwnProperty(key)){\n\t\t\t\tif(warn){\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key);\n\t\t\t\t}\n\n\t\t\t\toutput[key] = userOptions.key;\n\t\t\t}\n\t\t}\n\t\n\t\t\n\t\tfor (let key in output){\n\t\t\tif(key in userOptions){\n\t\t\t\toutput[key] = userOptions[key];\n\t\t\t}else{\n\t\t\t\tif(Array.isArray(output[key])){\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\n\t\t\t\t\tdelete output[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Renderer extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.elementVertical = table.rowManager.element;\n\t\tthis.elementHorizontal = table.columnManager.element;\n\t\tthis.tableElement = table.rowManager.tableElement;\n\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determine how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the container without resizing it)\n\t}\n\n\n\t///////////////////////////////////\n\t/////// Internal Bindings /////////\n\t///////////////////////////////////\n\n\tinitialize(){\n\t\t//initialize core functionality\n\t}\n\n\tclearRows(){\n\t\t//clear down existing rows layout\n\t}\n\n\tclearColumns(){\n\t\t//clear down existing columns layout\n\t}\n\n\n\treinitializeColumnWidths(columns){\n\t\t//resize columns to fit data\n\t}\n\n\n\trenderRows(){\n\t\t//render rows from a clean slate\n\t}\n\n\trenderColumns(){\n\t\t//render columns from a clean slate\n\t}\n\n\trerenderRows(callback){\n\t\t// rerender rows and keep position\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t}\n\n\trerenderColumns(update, blockRedraw){\n\t\t//rerender columns\n\t}\n\n\trenderRowCells(row){\n\t\t//render the cells in a row\n\t}\n\n\trerenderRowCells(row, force){\n\t\t//rerender the cells in a row\n\t}\n\n\tscrollColumns(left, dir){\n\t\t//handle horizontal scrolling\n\t}\n\n\tscrollRows(top, dir){\n\t\t//handle vertical scrolling\n\t}\n\n\tresize(){\n\t\t//container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\n\t}\n\n\tscrollToRow(row){\n\t\t//scroll to a specific row\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\t//determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\t//return the visible rows\n\t\treturn [];\n\t}\n\n\t///////////////////////////////////\n\t//////// Helper Functions /////////\n\t///////////////////////////////////\n\n\trows(){\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t/////// External Triggers /////////\n\t/////// (DO NOT OVERRIDE) /////////\n\t///////////////////////////////////\n\n\tclear(){\n\t\t//clear down existing layout\n\t\tthis.clearRows();\n\t\tthis.clearColumns();\n\t}\n\n\trender(){\n\t\t//render from a clean slate\n\t\tthis.renderRows();\n\t\tthis.renderColumns();\n\t}\n\n\trerender(callback){\n\t\t// rerender and keep position\n\t\tthis.rerenderRows();\n\t\tthis.rerenderColumns();\n\t}\n\n\tscrollToRowPosition(row, position, ifVisible){\n\t\tvar rowIndex = this.rows().indexOf(row),\n\t\trowEl = row.getElement(),\n\t\toffset = 0;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(rowIndex > -1){\n\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\n\t\t\t\t}\n\n\t\t\t\t//check row visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\n\t\t\t\t}\n\n\t\t\t\tif(position === \"nearest\"){\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\";\n\t\t\t\t}\n\n\t\t\t\t//scroll to row\n\t\t\t\tthis.scrollToRow(row);\n\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"top\":\n\t\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t\t}\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class BasicHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\trenderRowCells(row, inFragment) {\n\t\tconst rowFrag = document.createDocumentFragment();\n\t\trow.cells.forEach((cell) => {\n\t\t\trowFrag.appendChild(cell.getElement());\n\t\t});\n\t\trow.element.appendChild(rowFrag);\n\t\t\n\t\tif(!inFragment){\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tcolumns.forEach(function(column){\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class VirtualDomHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftCol = 0;\n\t\tthis.rightCol = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\t\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t\t\n\t\tthis.fitDataColAvg = 0;\n\t\t\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\n\t\t\n\t\tthis.visibleRows = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.isFitData = false;\n\t\t\n\t\tthis.columns = [];\n\t}\n\t\n\tinitialize(){\n\t\tthis.compatibilityCheck();\n\t\tthis.layoutCheck();\n\t\tthis.vertScrollListen();\n\t}\n\t\n\tcompatibilityCheck(){\t\t\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\n\t\t}\n\t\t\n\t\tif(this.options(\"responsiveLayout\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\n\t\t}\n\t\t\n\t\tif(this.options(\"rtl\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\n\t\t}\n\t}\n\t\n\tlayoutCheck(){\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\n\t}\n\t\n\tvertScrollListen(){\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\n\t}\n\t\n\tclearVisRowCache(){\n\t\tthis.visibleRows = null;\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\t\n\trenderColumns(row, force){\n\t\tthis.dataChange();\n\t}\n\t\n\t\n\tscrollColumns(left, dir){\n\t\tif(this.scrollLeft != left){\n\t\t\tthis.scrollLeft = left;\n\t\t\t\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\n\t\t}\n\t}\n\t\n\tcalcWindowBuffer(){\n\t\tvar buffer = this.elementVertical.clientWidth;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\tvar width = column.getWidth();\n\t\t\t\t\n\t\t\t\tif(width > buffer){\n\t\t\t\t\tbuffer = width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.windowBuffer = buffer * 2;\n\t}\n\t\n\trerenderColumns(update, blockRedraw){\t\t\n\t\tvar old = {\n\t\t\tcols:this.columns,\n\t\t\tleftCol:this.leftCol,\n\t\t\trightCol:this.rightCol,\n\t\t},\n\t\tcolPos = 0;\n\t\t\n\t\tif(update && !this.initialized){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.clear();\n\t\t\n\t\tthis.calcWindowBuffer();\n\t\t\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\n\t\t\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tvar config = {},\n\t\t\twidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tif(!column.modules.frozen){\t\t\t\n\t\t\t\t\twidth = column.getWidth();\n\n\t\t\t\t\tconfig.leftPos = colPos;\n\t\t\t\t\tconfig.rightPos = colPos + width;\n\t\t\t\t\t\n\t\t\t\t\tconfig.width = width;\n\t\t\t\t\t\n\t\t\t\t\tif (this.isFitData) {\n\t\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\n\t\t\t\t\t\t//column is visible\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.leftCol == -1){\n\t\t\t\t\t\t\tthis.leftCol = this.columns.length;\n\t\t\t\t\t\t\tthis.vDomPadLeft = colPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.rightCol = this.columns.length;\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// column is hidden\n\t\t\t\t\t\tif(this.leftCol !== -1){\n\t\t\t\t\t\t\tthis.vDomPadRight += width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.columns.push(column);\n\t\t\t\t\t\n\t\t\t\t\tcolumn.modules.vdomHoz = config;\n\t\t\t\t\t\n\t\t\t\t\tcolPos += width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tif(!update || this.reinitChanged(old)){\n\t\t\t\tthis.reinitializeRows();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\n\t}\n\t\n\trenderRowCells(row){\n\t\tif(this.initialized){\n\t\t\tthis.initializeRow(row);\n\t\t}else{\n\t\t\tconst rowFrag = document.createDocumentFragment();\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\trowFrag.appendChild(cell.getElement());\n\t\t\t});\n\t\t\trow.element.appendChild(rowFrag);\n\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\trerenderRowCells(row, force){\n\t\tthis.reinitializeRow(row, force);\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\tthis.columns[i].reinitializeWidth();\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\t\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tclear(){\n\t\tthis.columns = [];\n\t\t\n\t\tthis.leftCol = -1;\n\t\tthis.rightCol = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t}\n\t\n\tdataChange(){\n\t\tvar change = false,\n\t\trow, rowEl;\n\t\t\n\t\tif(this.isFitData){\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif(!column.definition.width && column.visible){\n\t\t\t\t\tchange = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\t\t\n\t\t\t\trow = this.chain(\"rows-sample\", [1], [], () => {\n\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\n\t\t\t\t})[0];\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trowEl = row.getElement();\n\t\t\t\t\t\n\t\t\t\t\trow.generateCells();\n\t\t\t\t\t\n\t\t\t\t\tthis.tableElement.appendChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tfor(let colEnd = 0; colEnd < row.cells.length; colEnd++){\n\t\t\t\t\t\tlet cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\t\t\t\t\t\t\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\n\t\t\t\tthis.layoutRefresh();\n\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treinitChanged(old){\n\t\tvar match = true;\n\t\t\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\told.cols.forEach((col, i) => {\n\t\t\tif(col !== this.columns[i]){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn !match;\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.getVisibleRows(),\n\t\totherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\n\t\tvisibleRows.forEach((row) => {\n\t\t\tthis.reinitializeRow(row, true);\n\t\t});\n\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t}\n\t\n\tgetVisibleRows(){\n\t\tif (!this.visibleRows){\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\n\t\t}\n\t\t\n\t\treturn this.visibleRows;\t\n\t}\n\t\n\tscroll(diff){\n\t\tthis.vDomScrollPosLeft += diff;\n\t\tthis.vDomScrollPosRight += diff;\n\t\t\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\n\t\t\tthis.rerenderColumns();\n\t\t}else{\n\t\t\tif(diff > 0){\n\t\t\t\t//scroll right\n\t\t\t\tthis.addColRight();\n\t\t\t\tthis.removeColLeft();\n\t\t\t}else{\n\t\t\t\t//scroll left\n\t\t\t\tthis.addColLeft();\n\t\t\t\tthis.removeColRight();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcolPositionAdjust (start, end, diff){\n\t\tfor(let i = start; i < end; i++){\n\t\t\tlet column = this.columns[i];\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\n\t\t}\n\t}\n\t\n\taddColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\n\t\t\tlet column = this.columns[this.rightCol + 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling);\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\n\t\t\t\t\t\tthis.vDomPadRight = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\t\t\t\t}\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\taddColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol - 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement());\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tif(diff){\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.rightCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\n\t\t\t\t\tthis.rightCol --;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\n\t\t\t\t\tthis.leftCol ++;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tfitDataColActualWidthCheck(column){\n\t\tvar newWidth, widthDiff;\n\t\t\n\t\tif(column.modules.vdomHoz.fitDataCheck){\n\t\t\tcolumn.reinitializeWidth();\n\t\t\t\n\t\t\tnewWidth = column.getWidth();\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\n\t\t\t\n\t\t\tif(widthDiff){\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\n\t\t}\n\t\t\n\t\treturn widthDiff;\n\t}\n\t\n\tinitializeRow(row){\n\t\tif(row.type !== \"group\"){\n\t\t\trow.modules.vdomHoz = {\n\t\t\t\tleftCol:this.leftCol,\n\t\t\t\trightCol:this.rightCol,\n\t\t\t};\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\t\tthis.appendCell(row, this.columns[i]);\n\t\t\t}\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tappendCell(row, column){\n\t\tif(column && column.visible){\n\t\t\tlet cell = row.getCell(column);\n\t\t\t\n\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\tcell.cellRendered();\n\t\t}\n\t}\n\t\n\treinitializeRow(row, force){\n\t\tif(row.type !== \"group\"){\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\n\t\t\t\t\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\n\n\t\t\t\tthis.initializeRow(row);\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Column from './column/Column.js';\nimport ColumnComponent from './column/ColumnComponent.js';\nimport Helpers from './tools/Helpers.js';\nimport OptionsList from './tools/OptionsList.js';\n\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\n\nimport defaultColumnOptions from './column/defaults/options.js';\n\nexport default class ColumnManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.blockHozScrollEvent = false;\n\t\tthis.headersElement = null;\n\t\tthis.contentsElement = null;\n\t\tthis.element = null ; //containing element\n\t\tthis.columns = []; // column definition object\n\t\tthis.columnsByIndex = []; //columns by index\n\t\tthis.columnsByField = {}; //columns by field\n\t\tthis.scrollLeft = 0;\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockUpdate = null; //store latest redraw update only status\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t////////////// Setup Functions /////////////////\n\t\n\tinitialize(){\n\t\tthis.initializeRenderer();\n\t\t\n\t\tthis.headersElement = this.createHeadersElement();\n\t\tthis.contentsElement = this.createHeaderContentsElement();\n\t\tthis.element = this.createHeaderElement();\n\t\t\n\t\tthis.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild);\n\t\tthis.element.insertBefore(this.contentsElement, this.element.firstChild);\n\n\t\tthis.initializeScrollWheelWatcher();\n\t\t\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.padVerticalScrollbar.bind(this));\n\t}\n\n\tpadVerticalScrollbar(width){\n\t\tif(this.table.rtl){\n\t\t\tthis.headersElement.style.marginLeft = width + \"px\";\n\t\t}else{\n\t\t\tthis.headersElement.style.marginRight = width + \"px\";\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\n\t\t\t\"basic\": RendererBasicHorizontal,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderHorizontal;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderHorizontal);\n\t\t}\n\t}\n\t\n\t\n\tcreateHeadersElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-headers\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\treturn el;\n\t}\n\n\tcreateHeaderContentsElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header-contents\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateHeaderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tif(!this.table.options.headerVisible){\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\n\t\t}\n\t\t\n\t\treturn el;\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return containing contents element\n\tgetContentsElement(){\n\t\treturn this.contentsElement;\n\t}\n\t\n\t\n\t//return header containing element\n\tgetHeadersElement(){\n\t\treturn this.headersElement;\n\t}\n\t\n\t//scroll horizontally to match table body\n\tscrollHorizontal(left){\n\t\tthis.contentsElement.scrollLeft = left;\n\n\t\tthis.scrollLeft = left;\n\t\t\n\t\tthis.renderer.scrollColumns(left);\n\t}\n\n\tinitializeScrollWheelWatcher(){\n\t\tthis.contentsElement.addEventListener(\"wheel\", (e) => {\n\t\t\tvar left;\n\n\t\t\tif(e.deltaX){\n\t\t\t\tleft = this.contentsElement.scrollLeft + e.deltaX;\n\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t///////////// Column Setup Functions /////////////\n\tgenerateColumnsFromRowData(data){\n\t\tvar cols = [],\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\n\t\trow, sorter;\n\t\t\n\t\tif(data && data.length){\n\t\t\t\n\t\t\trow = data[0];\n\t\t\t\n\t\t\tfor(var key in row){\n\t\t\t\tlet col = {\n\t\t\t\t\tfield:key,\n\t\t\t\t\ttitle:key,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet value = row[key];\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(value)){\n\t\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcol.sorter = sorter;\n\t\t\t\t\n\t\t\t\tcols.push(col);\n\t\t\t}\n\t\t\t\n\t\t\tif(definitions){\n\t\t\t\t\n\t\t\t\tswitch(typeof definitions){\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(definitions)){\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(match){\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.table.options.columns = cols;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.table.options.columns = cols;\n\t\t\t}\n\t\t\t\n\t\t\tthis.setColumns(this.table.options.columns);\n\t\t}\n\t}\n\t\n\tsetColumns(cols, row){\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\n\t\t\n\t\tthis.columns = [];\n\t\tthis.columnsByIndex = [];\n\t\tthis.columnsByField = {};\n\t\t\n\t\tthis.dispatch(\"columns-loading\");\n\t\t\n\t\tcols.forEach((def, i) => {\n\t\t\tthis._addColumn(def);\n\t\t});\n\t\t\n\t\tthis._reIndexColumns();\n\t\t\n\t\tthis.dispatch(\"columns-loaded\");\n\t\t\n\t\tthis.rerenderColumns(false, true);\n\t\t\n\t\tthis.redraw(true);\n\t}\n\t\n\t_addColumn(definition, before, nextToColumn){\n\t\tvar column = new Column(definition, this),\n\t\tcolEl = column.getElement(),\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\t\t\n\t\tif(nextToColumn && index > -1){\n\t\t\tvar topColumn = nextToColumn.getTopColumn();\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\n\t\t\tvar nextEl = topColumn.getElement();\n\t\t\t\n\t\t\tif(before){\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t\t}else{\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t\t}\n\t\t}else{\n\t\t\tif(before){\n\t\t\t\tthis.columns.unshift(column);\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t\t}else{\n\t\t\t\tthis.columns.push(column);\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t\t}\n\t\t}\n\t\t\n\t\tcolumn.columnRendered();\n\t\t\n\t\treturn column;\n\t}\n\t\n\tregisterColumnField(col){\n\t\tif(col.definition.field){\n\t\t\tthis.columnsByField[col.definition.field] = col;\n\t\t}\n\t}\n\t\n\tregisterColumnPosition(col){\n\t\tthis.columnsByIndex.push(col);\n\t}\n\t\n\t_reIndexColumns(){\n\t\tthis.columnsByIndex = [];\n\t\t\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t}\n\t\n\t//ensure column headers take up the correct amount of space in column groups\n\tverticalAlignHeaders(){\n\t\tvar minHeight = 0;\n\t\t\n\t\tif(!this.redrawBlock){\n\n\t\t\tthis.headersElement.style.height=\"\";\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.clearVerticalAlign();\n\t\t\t});\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tvar height = column.getHeight();\n\t\t\t\t\n\t\t\t\tif(height > minHeight){\n\t\t\t\t\tminHeight = height;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.headersElement.style.height = minHeight + \"px\";\n\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\n\t\t\t});\n\t\t\t\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\t//////////////// Column Details /////////////////\n\tfindColumn(subject){\n\t\tvar columns;\n\n\t\tif(typeof subject == \"object\"){\n\t\t\t\n\t\t\tif(subject instanceof Column){\n\t\t\t\t//subject is column element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof ColumnComponent){\n\t\t\t\t//subject is public column component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\n\t\t\t\tcolumns = [];\n\n\t\t\t\tthis.columns.forEach((column) => {\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t\t});\n\n\t\t\t\t//subject is a HTML element of the column header\n\t\t\t\tlet match = columns.find((column) => {\n\t\t\t\t\treturn column.element === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\t//subject should be treated as the field name of the column\n\t\t\treturn this.columnsByField[subject] || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetColumnByField(field){\n\t\treturn this.columnsByField[field];\n\t}\n\t\n\tgetColumnsByFieldRoot(root){\n\t\tvar matches = [];\n\t\t\n\t\tObject.keys(this.columnsByField).forEach((field) => {\n\t\t\tvar fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field;\n\t\t\tif(fieldRoot === root){\n\t\t\t\tmatches.push(this.columnsByField[field]);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn matches;\n\t}\n\t\n\tgetColumnByIndex(index){\n\t\treturn this.columnsByIndex[index];\n\t}\n\t\n\tgetFirstVisibleColumn(){\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\n\t\t\treturn col.visible;\n\t\t});\n\t\t\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\n\t}\n\n\tgetVisibleColumnsByIndex() {\n\t\treturn this.columnsByIndex.filter((col) => col.visible);\n\t}\n\t\n\tgetColumns(){\n\t\treturn this.columns;\n\t}\n\t\n\tfindColumnIndex(column){\n\t\treturn this.columnsByIndex.findIndex((col) => {\n\t\t\treturn column === col;\n\t\t});\n\t}\n\t\n\t//return all columns that are not groups\n\tgetRealColumns(){\n\t\treturn this.columnsByIndex;\n\t}\n\t\n\t//traverse across columns and call action\n\ttraverse(callback){\n\t\tthis.columnsByIndex.forEach((column,i) =>{\n\t\t\tcallback(column, i);\n\t\t});\n\t}\n\t\n\t//get definitions of actual columns\n\tgetDefinitions(active){\n\t\tvar output = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(!active || (active && column.visible)){\n\t\t\t\toutput.push(column.getDefinition());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\t//get full nested definition tree\n\tgetDefinitionTree(){\n\t\tvar output = [];\n\t\t\n\t\tthis.columns.forEach((column) => {\n\t\t\toutput.push(column.getDefinition(true));\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(structured){\n\t\tvar output = [],\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetWidth(){\n\t\tvar width = 0;\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn width;\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\n\t\t\n\t\tif(after){\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t\t}\n\t\t\n\t\tthis.moveColumnActual(from, to, after);\n\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\t\n\tmoveColumnActual(from, to, after){\n\t\tif(from.parent.isGroup){\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t\t}else{\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t\t}\n\t\t\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\t\t\n\t\tthis.rerenderColumns(true);\n\t\t\n\t\tthis.dispatch(\"column-moved\", from, to, after);\n\t\t\n\t\tif(this.subscribedExternal(\"columnMoved\")){\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\n\t\t}\n\t}\n\t\n\t_moveColumnInArray(columns, from, to, after, updateRows){\n\t\tvar\tfromIndex = columns.indexOf(from),\n\t\ttoIndex, rows = [];\n\t\t\n\t\tif (fromIndex > -1) {\n\t\t\t\n\t\t\tcolumns.splice(fromIndex, 1);\n\t\t\t\n\t\t\ttoIndex = columns.indexOf(to);\n\t\t\t\n\t\t\tif (toIndex > -1) {\n\t\t\t\t\n\t\t\t\tif(after){\n\t\t\t\t\ttoIndex = toIndex+1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\ttoIndex = fromIndex;\n\t\t\t}\n\t\t\t\n\t\t\tcolumns.splice(toIndex, 0, from);\n\t\t\t\n\t\t\tif(updateRows){\n\t\t\t\t\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\n\t\t\t\t\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\n\t\t\t\t\n\t\t\t\trows.forEach(function(row){\n\t\t\t\t\tif(row.cells.length){\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n\t\n\tscrollToColumn(column, position, ifVisible){\n\t\tvar left = 0,\n\t\toffset = column.getLeftOffset(),\n\t\tadjust = 0,\n\t\tcolEl = column.getElement();\n\t\t\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\tadjust = -this.element.clientWidth / 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//check column visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//calculate scroll position\n\t\t\t\tleft = offset + adjust;\n\t\t\t\t\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.scrollHorizontal(left);\n\t\t\t\t\n\t\t\t\tresolve();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\t\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tgenerateCells(row){\n\t\tvar cells = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tcells.push(column.generateCell(row));\n\t\t});\n\t\t\n\t\treturn cells;\n\t}\n\t\n\t//////////////// Column Management /////////////////\n\tgetFlexBaseWidth(){\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\n\t\tfixedWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar if present\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\t\t\n\t\tthis.columnsByIndex.forEach(function(column){\n\t\t\tvar width, minWidth, colWidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\twidth = column.definition.width || 0;\n\t\t\t\t\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\t\t\t\t\n\t\t\t\tif(typeof(width) == \"string\"){\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tcolWidth = width;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn fixedWidth;\n\t}\n\t\n\taddColumn(definition, before, nextToColumn){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\n\t\t\t\n\t\t\tthis._reIndexColumns();\n\t\t\t\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\n\t\t\t\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\t\t\t\n\t\t\tthis.redraw(true);\n\t\t\t\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t\t\n\t\t\tthis.rerenderColumns();\n\t\t\t\n\t\t\tresolve(column);\n\t\t});\n\t}\n\t\n\t//remove column from system\n\tderegisterColumn(column){\n\t\tvar field = column.getField(),\n\t\tindex;\n\t\t\n\t\t//remove from field list\n\t\tif(field){\n\t\t\tdelete this.columnsByField[field];\n\t\t}\n\t\t\n\t\t//remove from index list\n\t\tindex = this.columnsByIndex.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columnsByIndex.splice(index, 1);\n\t\t}\n\t\t\n\t\t//remove from column list\n\t\tindex = this.columns.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\t\t\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.redraw();\n\t}\n\t\n\trerenderColumns(update, silent){\n\t\tif(!this.redrawBlock){\n\t\t\tthis.renderer.rerenderColumns(update, silent);\n\t\t}else{\n\t\t\tif(update === false || (update === true && this.redrawBlockUpdate === null)){\n\t\t\t\tthis.redrawBlockUpdate = update;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockUpdate = null;\n\t}\n\t\n\trestoreRedraw(){\n\t\tthis.redrawBlock = false;\n\t\tthis.verticalAlignHeaders();\n\t\tthis.renderer.rerenderColumns(this.redrawBlockUpdate);\n\t\t\n\t}\n\t\n\t//redraw columns\n\tredraw(force){\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.verticalAlignHeaders();\n\t\t}\n\t\t\n\t\tif(force){\n\t\t\tthis.table.rowManager.resetScroll();\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t}\n\t\t\n\t\tif(!this.confirm(\"table-redrawing\", force)){\n\t\t\tthis.layoutRefresh(force);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-redraw\", force);\n\t\t\n\t\tthis.table.footerManager.redraw();\n\t}\n}","//public row object\nexport default class RowComponent {\n\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\tgetIndex(){\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\n\t}\n\n\tgetPosition(){\n\t\treturn this._row.getPosition();\n\t}\n\n\twatchPosition(callback){\n\t\treturn this._row.watchPosition(callback);\n\t}\n\n\tdelete(){\n\t\treturn this._row.delete();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._row.table.rowManager.scrollToRow(this._row, position, ifVisible);\n\t}\n\n\tmove(to, after){\n\t\tthis._row.moveToRow(to, after);\n\t}\n\n\tupdate(data){\n\t\treturn this._row.updateData(data);\n\t}\n\n\tnormalizeHeight(){\n\t\tthis._row.normalizeHeight(true);\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n\n\treformat(){\n\t\treturn this._row.reinitialize();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetNextRow(){\n\t\tvar row = this._row.nextRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n\n\tgetPrevRow(){\n\t\tvar row = this._row.prevRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport RowComponent from './RowComponent.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Row extends CoreFeature{\n\tconstructor (data, parent, type = \"row\"){\n\t\tsuper(parent.table);\n\t\t\n\t\tthis.parent = parent;\n\t\tthis.data = {};\n\t\tthis.type = type; //type of element\n\t\tthis.element = false;\n\t\tthis.modules = {}; //hold module variables;\n\t\tthis.cells = [];\n\t\tthis.height = 0; //hold element height\n\t\tthis.heightStyled = \"\"; //hold element height pre-styled to improve render efficiency\n\t\tthis.manualHeight = false; //user has manually set row height\n\t\tthis.outerHeight = 0; //hold elements outer height\n\t\tthis.initialized = false; //element has been rendered\n\t\tthis.heightInitialized = false; //element has resized cells to fit\n\t\tthis.position = 0; //store position of element in row list\n\t\tthis.positionWatchers = [];\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.created = false;\n\t\t\n\t\tthis.setData(data);\n\t}\n\t\n\tcreate(){\n\t\tif(!this.created){\n\t\t\tthis.created = true;\n\t\t\tthis.generateElement();\n\t\t}\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\tthis.element = el;\n\t}\n\t\n\tgetElement(){\n\t\tthis.create();\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.createElement();\n\t\tthis.dispatch(\"row-init\", this);\n\t}\n\t\n\tgenerateCells(){\n\t\tthis.cells = this.table.columnManager.generateCells(this);\n\t}\n\t\n\t//functions to setup on first render\n\tinitialize(force, inFragment){\n\t\tthis.create();\n\t\t\n\t\tif(!this.initialized || force){\n\t\t\t\n\t\t\tthis.deleteCells();\n\t\t\t\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-before\", this);\n\t\t\t\n\t\t\tthis.generateCells();\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t\t\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this, inFragment);\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.normalizeHeight();\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout\", this);\n\t\t\t\n\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-after\", this);\n\t\t}else{\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this, inFragment);\n\t\t}\n\t}\n\n\trendered(){\n\t\tthis.cells.forEach((cell) => {\n\t\t\tcell.cellRendered();\n\t\t});\n\t}\n\t\n\treinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.normalizeHeight(true);\n\t\t}\n\t}\n\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tdeinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t}\n\t\n\treinitialize(children){\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(!this.manualHeight){\n\t\t\tthis.height = 0;\n\t\t\tthis.heightStyled = \"\";\n\t\t}\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.initialize(true);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"row-relayout\", this);\n\t}\n\t\n\t//get heights when doing bulk row style calcs in virtual DOM\n\tcalcHeight(force){\n\t\tvar maxHeight = 0,\n\t\tminHeight;\n\t\t\n\t\tif(this.table.options.rowHeight){\n\t\t\tthis.height = this.table.options.rowHeight;\n\t\t}else{\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\t\t\t\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tvar height = cell.getHeight();\n\t\t\t\tif(height > maxHeight){\n\t\t\t\t\tmaxHeight = height;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\n\t\t\t}else{\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n\t\n\t//set of cells\n\tsetCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setHeight();\n\t\t});\n\t\t\n\t\tthis.heightInitialized = true;\n\t}\n\t\n\tclearCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.clearHeight();\n\t\t});\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(force){\n\t\tif(force && !this.table.options.rowHeight){\n\t\t\tthis.clearCellHeight();\n\t\t}\n\t\t\n\t\tthis.calcHeight(force);\n\t\t\n\t\tthis.setCellHeight();\n\t}\n\t\n\t//set height of rows\n\tsetHeight(height, force){\n\t\tif(this.height != height || force){\n\t\t\t\n\t\t\tthis.manualHeight = true;\n\t\t\t\n\t\t\tthis.height = height;\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\t\t\t\n\t\t\tthis.setCellHeight();\n\t\t\t\n\t\t\t// this.outerHeight = this.element.outerHeight();\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\t//return rows outer Width\n\tgetWidth(){\n\t\treturn this.element.offsetWidth;\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\t\n\t//////////////// Data Management /////////////////\n\tsetData(data){\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\n\t\t\n\t\tthis.dispatch(\"row-data-init-after\", this);\n\t}\n\t\n\t//update the rows data\n\tupdateData(updatedData){\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\n\t\ttempData = {},\n\t\tnewRowData;\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof updatedData === \"string\"){\n\t\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\n\t\t\t\n\t\t\tif(this.subscribed(\"row-data-changing\")){\n\t\t\t\ttempData = Object.assign(tempData, this.data);\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\n\t\t\t\n\t\t\t//set data\n\t\t\tfor (let attrname in newRowData) {\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\n\t\t\t\n\t\t\t//update affected cells only\n\t\t\tfor (let attrname in updatedData) {\n\t\t\t\t\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\n\t\t\t\t\n\t\t\t\tcolumns.forEach((column) => {\n\t\t\t\t\tlet cell = this.getCell(column.getField());\n\t\t\t\t\t\n\t\t\t\t\tif(cell){\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\n\t\t\t\t\t\tif(cell.getValue() !== value){\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(visible){\n\t\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//Partial reinitialization if visible\n\t\t\tif(visible){\n\t\t\t\tthis.normalizeHeight(true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.initialized = false;\n\t\t\t\tthis.height = 0;\n\t\t\t\tthis.heightStyled = \"\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\n\t\t\t\n\t\t\t//this.reinitialize();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\tgetData(transform){\n\t\tif(transform){\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\tgetCell(column){\n\t\tvar match = false;\n\t\t\n\t\tcolumn = this.table.columnManager.findColumn(column);\n\t\t\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\tmatch = this.cells.find(function(cell){\n\t\t\treturn cell.column === column;\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetCellIndex(findCell){\n\t\treturn this.cells.findIndex(function(cell){\n\t\t\treturn cell === findCell;\n\t\t});\n\t}\n\t\n\tfindCell(subject){\n\t\treturn this.cells.find((cell) => {\n\t\t\treturn cell.element === subject;\n\t\t});\n\t}\n\t\n\tgetCells(){\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\treturn this.cells;\n\t}\n\t\n\tnextRow(){\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tprevRow(){\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tmoveToRow(to, before){\n\t\tvar toRow = this.table.rowManager.findRow(to);\n\t\t\n\t\tif(toRow){\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t\t}\n\t}\n\t\n\t///////////////////// Actions /////////////////////\n\tdelete(){\n\t\tthis.dispatch(\"row-delete\", this);\n\t\t\n\t\tthis.deleteActual();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\tdeleteActual(blockRedraw){\n\t\tthis.detachModules();\n\t\t\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\t\t\n\t\tthis.deleteCells();\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\tthis.element = false;\n\t\t\n\t\tthis.dispatch(\"row-deleted\", this);\n\t}\n\t\n\tdetachModules(){\n\t\tthis.dispatch(\"row-deleting\", this);\n\t}\n\t\n\tdeleteCells(){\n\t\tvar cellCount = this.cells.length;\n\t\t\n\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\tthis.cells[0].delete();\n\t\t}\n\t}\n\t\n\twipe(){\n\t\tthis.detachModules();\n\t\tthis.deleteCells();\n\t\t\n\t\tif(this.element){\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.modules = {};\n\t}\n\n\tisDisplayed(){\n\t\treturn this.table.rowManager.getDisplayRows().includes(this);\n\t}\n\n\tgetPosition(){\n\t\treturn this.isDisplayed() ? this.position : false;\n\t}\n\n\tsetPosition(position){\n\t\tif(position != this.position){\n\t\t\tthis.position = position;\n\n\t\t\tthis.positionWatchers.forEach((callback) => {\n\t\t\t\tcallback(this.position);\n\t\t\t});\n\t\t}\n\t}\n\n\twatchPosition(callback){\n\t\tthis.positionWatchers.push(callback);\n\n\t\tcallback(this.position);\n\t}\n\t\n\tgetGroup(){\n\t\treturn this.modules.group || false;\n\t}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new RowComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class BasicVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.verticalFillMode = \"fill\";\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t}\n\t\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\t\t\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\telement.scrollTop = 0;\n\t\telement.scrollLeft = 0;\n\t\t\n\t\telement.style.minWidth = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\t}\n\t\n\trenderRows() {\n\t\tvar element = this.tableElement,\n\t\tonlyGroupHeaders = true,\n\t\ttableFrag = document.createDocumentFragment(),\n\t\trows = this.rows();\n\t\t\n\t\trows.forEach((row, index) => {\n\t\t\tthis.styleRow(row, index);\n\t\t\trow.initialize(false, true);\n\t\t\t\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t\t\n\t\t\ttableFrag.appendChild(row.getElement());\n\t\t});\n\t\t\n\t\telement.appendChild(tableFrag);\n\t\t\n\t\trows.forEach((row) => {\n\t\t\trow.rendered();\n\t\t\t\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.calcHeight(true);\n\t\t\t}\n\t\t});\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.setCellHeight();\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n\t\n\trerenderRows(callback){\t\n\t\tthis.clearRows();\n\t\t\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t\t\n\t\tthis.renderRows();\n\n\t\tif(!this.rows().length){\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\t}\n\t\n\tscrollToRowNearestTop(row){\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\n\t\t\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\n\t}\n\t\n\tscrollToRow(row){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\n\t}\n\t\n\tvisibleRows(includingBuffer){\n\t\treturn this.rows();\n\t}\n\t\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class VirtualDomVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.verticalFillMode = \"fill\";\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\t\tthis.vDomBottom = 0; //hold position for last rendered row in the virtual DOM\n\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\t}\n\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\telement.style.paddingTop = \"\";\n\t\telement.style.paddingBottom = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\n\t\tthis.elementVertical.scrollTop = 0;\n\t\tthis.elementVertical.scrollLeft = 0;\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomTop = 0;\n\t\tthis.vDomBottom = 0;\n\t\tthis.vDomTopPad = 0;\n\t\tthis.vDomBottomPad = 0;\n\t\tthis.vDomScrollPosTop = 0;\n\t\tthis.vDomScrollPosBottom = 0;\n\t}\n\n\trenderRows(){\n\t\tthis._virtualRenderFill();\n\t}\n\n\trerenderRows(callback){\n\t\tvar scrollTop = this.elementVertical.scrollTop;\n\t\tvar topRow = false;\n\t\tvar topOffset = false;\n\n\t\tvar left = this.table.rowManager.scrollLeft;\n\n\t\tvar rows = this.rows();\n\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\n\t\t\tif(rows[i]){\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\n\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\ttopRow = i;\n\t\t\t\t}else{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trows.forEach((row) => {\n\t\t\trow.deinitializeHeight();\n\t\t});\n\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\n\t\tif(this.rows().length){\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\n\t\t}else{\n\t\t\tthis.clear();\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\n\t\tthis.scrollColumns(left);\n\t}\n\n\tscrollColumns(left){\n\t\tthis.table.rowManager.scrollHorizontal(left);\n\t}\n\n\tscrollRows(top, dir){\n\t\tvar topDiff = top - this.vDomScrollPosTop;\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\n\t\tvar margin = this.vDomWindowBuffer * 2;\n\t\tvar rows = this.rows();\n\n\t\tthis.scrollTop = top;\n\n\t\tif(-topDiff > margin || bottomDiff > margin){\n\t\t\t//if big scroll redraw table;\n\t\t\tvar left = this.table.rowManager.scrollLeft;\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\n\t\t\tthis.scrollColumns(left);\n\t\t}else{\n\n\t\t\tif(dir){\n\t\t\t\t//scrolling up\n\t\t\t\tif(topDiff < 0){\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\n\t\t\t\t}\n\n\t\t\t\tif(bottomDiff < 0){\n\t\t\t\t\t//hide bottom row if needed\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(bottomDiff >= 0){\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\n\t\t\t\t}\n\n\t\t\t\t//scrolling down\n\t\t\t\tif(topDiff >= 0){\n\t\t\t\t\t//hide top row if needed\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresize(){\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\tvar rowIndex = this.rows().indexOf(row);\n\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\n\t}\n\n\tscrollToRow(row){\n\t\tvar index = this.rows().indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tthis._virtualRenderFill(index, true);\n\t\t}\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\tvar topEdge = this.elementVertical.scrollTop,\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\n\t\ttopFound = false,\n\t\ttopRow = 0,\n\t\tbottomRow = 0,\n\t\trows = this.rows();\n\n\t\tif(includingBuffer){\n\t\t\ttopRow = this.vDomTop;\n\t\t\tbottomRow = this.vDomBottom;\n\t\t}else{\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\t\t\t\tif(rows[i]){\n\t\t\t\t\tif(!topFound){\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows.slice(topRow, bottomRow + 1);\n\t}\n\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\n\t//full virtual render\n\t_virtualRenderFill(position, forceMove, offset) {\n\t\tvar\telement = this.tableElement,\n\t\tholder = this.elementVertical,\n\t\ttopPad = 0,\n\t\trowsHeight = 0,\n\t\trowHeight = 0,\n\t\theightOccupied = 0,\n\t\ttopPadHeight = 0,\n\t\ti = 0,\n\t\trows = this.rows(),\n\t\trowsCount = rows.length,\n\t\tindex = 0,\n\t\trow,\n\t\trowFragment,\n\t\trenderedRows = [],\n\t\ttotalRowsRendered = 0,\n\t\trowsToRender = 0,\n\t\tfixedHeight = this.table.rowManager.fixedHeight,\n\t\tcontainerHeight = this.elementVertical.clientHeight, \n\t\tavgRowHeight = this.table.options.rowHeight, \n\t\tresized = true;\n\n\t\tposition = position || 0;\n\n\t\toffset = offset || 0;\n\n\t\tif(!position){\n\t\t\tthis.clear();\n\t\t}else {\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\t\t//check if position is too close to bottom of table\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\n\n\t\t\tif(heightOccupied < containerHeight){\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\n\t\t\t\tif(position < 0){\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate initial pad\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\n\t\t\tposition -= topPad;\n\t\t}\n\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\n\t\t\tthis.vDomTop = position;\n\t\t\tthis.vDomBottom = position -1;\n\n\t\t\tif(fixedHeight || this.table.options.maxHeight) {\n\t\t\t\tif(avgRowHeight) {\n\t\t\t\t\trowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight);\n\t\t\t\t}\n\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender));\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowsToRender = rowsCount;\n\t\t\t}\n\n\t\t\twhile(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) {\n\t\t\t\trenderedRows = [];\n\t\t\t\trowFragment = document.createDocumentFragment();\n\n\t\t\t\ti = 0;\n\n\t\t\t\twhile ((i < rowsToRender) && this.vDomBottom < rowsCount -1) {\t\n\t\t\t\t\tindex = this.vDomBottom + 1,\n\t\t\t\t\trow = rows[index];\n\n\t\t\t\t\tthis.styleRow(row, index);\n\n\t\t\t\t\trow.initialize(false, true);\n\t\t\t\t\tif(!row.heightInitialized && !this.table.options.rowHeight){\n\t\t\t\t\t\trow.clearCellHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\trowFragment.appendChild(row.getElement());\n\t\t\t\t\trenderedRows.push(row);\n\t\t\t\t\tthis.vDomBottom ++;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tif(!renderedRows.length){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telement.appendChild(rowFragment);\n\t\t\t\t\n\t\t\t\t// NOTE: The next 3 loops are separate on purpose\n\t\t\t\t// This is to batch up the dom writes and reads which drastically improves performance \n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trow.rendered();\n\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.calcHeight(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.setCellHeight();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trowHeight = row.getHeight();\n\t\t\t\t\t\n\t\t\t\t\tif(totalRowsRendered < topPad){\n\t\t\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t\t\t}else {\n\t\t\t\t\t\trowsHeight += rowHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t}\n\t\t\t\t\ttotalRowsRendered++;\n\t\t\t\t});\n\n\t\t\t\tresized = this.table.rowManager.adjustTableSize();\n\t\t\t\tcontainerHeight = this.elementVertical.clientHeight;\n\t\t\t\tif(resized && (fixedHeight || this.table.options.maxHeight))\n\t\t\t\t{\n\t\t\t\t\tavgRowHeight = rowsHeight / totalRowsRendered;\n\t\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!position){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t\t//adjust row height to match average of rendered elements\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered);\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\n\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\n\t\t\t}else {\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t\t}\n\t\t\t\n\t\t\telement.style.paddingTop = this.vDomTopPad+\"px\";\n\t\t\telement.style.paddingBottom = this.vDomBottomPad+\"px\";\n\n\t\t\tif(forceMove){\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\n\t\t\t}\n\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\n\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\n\t\t\t}\n\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\t\tholder.scrollTop = this.scrollTop;\n\n\t\t\tthis.dispatch(\"render-virtual-fill\");\n\t\t}\n\t}\n\n\t_addTopRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomTop -1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tif(this.vDomTop){\n\t\t\t\tlet row = rows[index],\n\t\t\t\trowHeight, initialized;\n\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\n\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trow.initialize();\n\n\t\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\t\tthis.vDomTop--;\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\ti++;\n\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad -= paddingAdjust;\n\n\t\t\tif(this.vDomTopPad < 0){\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif(index < 1){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\n\t\t}\n\t}\n\n\t_removeTopRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomTop],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomTop++;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad += paddingAdjust;\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\n\t\t}\n\t}\n\n\t_addBottomRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomBottom + 1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[index],\n\t\t\trowHeight, initialized;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\ttable.appendChild(row.getElement());\n\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t}\n\n\t\t\t\t\trow.initialize();\n\n\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tthis.vDomBottom++;\n\t\t\t\t\tindex++;\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\n\t\t}\n\t}\n\n\t_removeBottomRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomBottom],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomBottom --;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad += paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\n\t\t}\n\t}\n\n\t_quickNormalizeRowHeight(rows){\n\t\tfor(let row of rows){\n\t\t\trow.calcHeight();\n\t\t}\n\n\t\tfor(let row of rows){\n\t\t\trow.setCellHeight();\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Row from './row/Row.js';\nimport RowComponent from './row/RowComponent.js';\nimport Helpers from './tools/Helpers.js';\n\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\n\nexport default class RowManager extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = this.createHolderElement(); //containing element\n\t\tthis.tableElement = this.createTableElement(); //table element\n\t\tthis.heightFixer = this.createTableElement(); //table element\n\t\tthis.placeholder = null; //placeholder element\n\t\tthis.placeholderContents = null; //placeholder element\n\t\t\n\t\tthis.firstRender = false; //handle first render\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\n\t\tthis.fixedHeight = false; //current rendering mode\n\t\t\n\t\tthis.rows = []; //hold row data objects\n\t\tthis.activeRowsPipeline = []; //hold calculation of active rows\n\t\tthis.activeRows = []; //rows currently available to on display in the table\n\t\tthis.activeRowsCount = 0; //count of active rows\n\t\t\n\t\tthis.displayRows = []; //rows currently on display in the table\n\t\tthis.displayRowsCount = 0; //count of display rows\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\n\t\t\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\n\t\t\n\t\tthis.scrollbarWidth = 0;\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t//////////////// Setup Functions /////////////////\n\t\n\tcreateHolderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-tableholder\");\n\t\tel.setAttribute(\"tabindex\", 0);\n\t\t// el.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateTableElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-table\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitializePlaceholder(){\n\t\tvar placeholder = this.table.options.placeholder;\n\t\t\n\t\tif(typeof placeholder === \"function\"){\n\t\t\tplaceholder = placeholder.call(this.table);\n\t\t}\n\t\t\n\t\tplaceholder = this.chain(\"placeholder\", [placeholder], placeholder, placeholder) || placeholder;\n\t\t\n\t\t//configure placeholder element\n\t\tif(placeholder){\t\n\t\t\tlet el = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-placeholder\");\n\t\t\t\n\t\t\tif(typeof placeholder == \"string\"){\n\t\t\t\tlet contents = document.createElement(\"div\");\n\t\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\n\t\t\t\tcontents.innerHTML = placeholder;\n\t\t\t\t\n\t\t\t\tel.appendChild(contents);\n\t\t\t\t\n\t\t\t\tthis.placeholderContents = contents;\n\t\t\t\t\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && placeholder instanceof HTMLElement){\n\t\t\t\t\n\t\t\t\tel.appendChild(placeholder);\n\t\t\t\tthis.placeholderContents = placeholder;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Invalid placeholder provided, must be string or HTML Element\", placeholder);\n\t\t\t\t\n\t\t\t\tthis.el = null;\n\t\t\t}\n\t\t\t\n\t\t\tthis.placeholder = el;\n\t\t}\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\t\n\t//return table element\n\tgetTableElement(){\n\t\treturn this.tableElement;\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializePlaceholder();\n\t\tthis.initializeRenderer();\n\t\t\n\t\t//initialize manager\n\t\tthis.element.appendChild(this.tableElement);\n\t\t\n\t\tthis.firstRender = true;\n\t\t\n\t\t//scroll header along with table body\n\t\tthis.element.addEventListener(\"scroll\", () => {\n\t\t\tvar left = this.element.scrollLeft,\n\t\t\tleftDir = this.scrollLeft > left,\n\t\t\ttop = this.element.scrollTop,\n\t\t\ttopDir = this.scrollTop > top;\n\t\t\t\n\t\t\t//handle horizontal scrolling\n\t\t\tif(this.scrollLeft != left){\n\t\t\t\tthis.scrollLeft = left;\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\n\t\t\t\t\n\t\t\t\tthis._positionPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\t//handle vertical scrolling\n\t\t\tif(this.scrollTop != top){\n\t\t\t\tthis.scrollTop = top;\n\t\t\t\t\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t////////////////// Row Manipulation //////////////////\n\tfindRow(subject){\n\t\tif(typeof subject == \"object\"){\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\t//subject is a HTML element of the row\n\t\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\t\treturn row.getElement() === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}else if(subject === null){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\treturn false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t\t\n\t\t\treturn match || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetRowFromDataObject(data){\n\t\tvar match = this.rows.find((row) => {\n\t\t\treturn row.data === data;\n\t\t});\n\t\t\n\t\treturn match || false;\n\t}\n\t\n\tgetRowFromPosition(position){\n\t\treturn this.getDisplayRows().find((row) => {\n\t\t\treturn row.getPosition() === position && row.isDisplayed();\n\t\t});\n\t}\n\t\n\tscrollToRow(row, position, ifVisible){\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\tsetData(data, renderInPosition, columnsChanged){\n\t\treturn new Promise((resolve, reject)=>{\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\n\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\tthis._setDataActual(data, true);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reRenderInPosition(() => {\n\t\t\t\t\t\tthis._setDataActual(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t\t}\n\t\t\t\tthis.resetScroll();\n\t\t\t\t\n\t\t\t\tthis._setDataActual(data);\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\t_setDataActual(data, renderInPosition){\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\n\t\t\n\t\tthis._wipeElements();\n\t\t\n\t\tif(Array.isArray(data)){\n\t\t\tthis.dispatch(\"data-processing\", data);\n\t\t\t\n\t\t\tdata.forEach((def, i) => {\n\t\t\t\tif(def && typeof def === \"object\"){\n\t\t\t\t\tvar row = new Row(def, this);\n\t\t\t\t\tthis.rows.push(row);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\n\t\t\t\n\t\t\tthis.dispatch(\"data-processed\", data);\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\n\t\t}else{\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\n\t\t}\n\t}\n\t\n\t_wipeElements(){\n\t\tthis.dispatch(\"rows-wipe\");\n\t\t\n\t\tthis.destroy();\n\t\t\n\t\tthis.adjustTableSize();\n\t\t\n\t\tthis.dispatch(\"rows-wiped\");\n\t}\n\t\n\tdestroy(){\n\t\tthis.rows.forEach((row) => {\n\t\t\trow.wipe();\n\t\t});\n\t\t\n\t\tthis.rows = [];\n\t\tthis.activeRows = [];\n\t\tthis.activeRowsPipeline = [];\n\t\tthis.activeRowsCount = 0;\n\t\tthis.displayRows = [];\n\t\tthis.displayRowsCount = 0;\n\t}\n\t\n\tdeleteRow(row, blockRedraw){\n\t\tvar allIndex = this.rows.indexOf(row),\n\t\tactiveIndex = this.activeRows.indexOf(row);\n\t\t\n\t\tif(activeIndex > -1){\n\t\t\tthis.activeRows.splice(activeIndex, 1);\n\t\t}\n\t\t\n\t\tif(allIndex > -1){\n\t\t\tthis.rows.splice(allIndex, 1);\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tvar displayIndex = rows.indexOf(row);\n\t\t\t\n\t\t\tif(displayIndex > -1){\n\t\t\t\trows.splice(displayIndex, 1);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis.tableEmpty();\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\n\t\t}\n\t}\n\t\n\taddRow(data, pos, index, blockRedraw){\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\t\treturn row;\n\t}\n\t\n\t//add multiple rows\n\taddRows(data, pos, index, refreshDisplayOnly){\n\t\tvar rows = [];\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tpos = this.findAddRowPos(pos);\n\t\t\t\n\t\t\tif(!Array.isArray(data)){\n\t\t\t\tdata = [data];\n\t\t\t}\n\t\t\t\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\n\t\t\t\tdata.reverse();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach((item, i) => {\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\n\t\t\t\trows.push(row);\n\t\t\t\tthis.dispatch(\"row-added\", row, item, pos, index);\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(refreshDisplayOnly ? \"displayPipeline\" : false, false, true);\n\t\t\t\n\t\t\tthis.regenerateRowPositions();\n\t\t\t\n\t\t\tif(this.displayRowsCount){\n\t\t\t\tthis._clearPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\tresolve(rows);\n\t\t});\n\t}\n\t\n\tfindAddRowPos(pos){\n\t\tif(typeof pos === \"undefined\"){\n\t\t\tpos = this.table.options.addRowPos;\n\t\t}\n\t\t\n\t\tif(pos === \"pos\"){\n\t\t\tpos = true;\n\t\t}\n\t\t\n\t\tif(pos === \"bottom\"){\n\t\t\tpos = false;\n\t\t}\n\t\t\n\t\treturn pos;\n\t}\n\t\n\taddRowActual(data, pos, index, blockRedraw){\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t\ttop = this.findAddRowPos(pos),\n\t\tallIndex = -1,\n\t\tactiveIndex, chainResult;\n\t\t\n\t\tif(!index){\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\n\t\t\t\n\t\t\tindex = chainResult.index;\n\t\t\ttop = chainResult.top;\n\t\t}\n\t\t\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tindex = this.findRow(index);\n\t\t}\n\t\t\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\n\t\t\n\t\tif(index){\n\t\t\tallIndex = this.rows.indexOf(index);\n\t\t}\n\t\t\n\t\tif(index && allIndex > -1){\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\n\t\t\t\n\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\tvar displayIndex = rows.indexOf(index);\n\t\t\t\t\n\t\t\t\tif(displayIndex > -1){\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(activeIndex > -1){\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\n\t\t\t}\n\t\t\t\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(top){\n\t\t\t\t\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.unshift(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.unshift(row);\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}else{\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.push(row);\n\t\t\t\tthis.rows.push(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t}\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\treturn row;\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tthis.dispatch(\"row-move\", from, to, after);\n\t\t\n\t\tthis.moveRowActual(from, to, after);\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatch(\"row-moved\", from, to, after);\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\n\t}\n\t\n\tmoveRowActual(from, to, after){\n\t\tthis.moveRowInArray(this.rows, from, to, after);\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tthis.moveRowInArray(rows, from, to, after);\n\t\t});\n\t\t\n\t\tthis.dispatch(\"row-moving\", from, to, after);\n\t}\n\t\n\tmoveRowInArray(rows, from, to, after){\n\t\tvar\tfromIndex, toIndex, start, end;\n\t\t\n\t\tif(from !== to){\n\t\t\t\n\t\t\tfromIndex = rows.indexOf(from);\n\t\t\t\n\t\t\tif (fromIndex > -1) {\n\t\t\t\t\n\t\t\t\trows.splice(fromIndex, 1);\n\t\t\t\t\n\t\t\t\ttoIndex = rows.indexOf(to);\n\t\t\t\t\n\t\t\t\tif (toIndex > -1) {\n\t\t\t\t\t\n\t\t\t\t\tif(after){\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//restyle rows\n\t\t\tif(rows === this.getDisplayRows()){\n\t\t\t\t\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\n\t\t\t\t\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tif(rows[i]){\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearData(){\n\t\tthis.setData([]);\n\t}\n\t\n\tgetRowIndex(row){\n\t\treturn this.findRowIndex(row, this.rows);\n\t}\n\t\n\tgetDisplayRowIndex(row){\n\t\tvar index = this.getDisplayRows().indexOf(row);\n\t\treturn index > -1 ? index : false;\n\t}\n\t\n\tnextDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tnextRow = false;\n\t\t\n\t\t\n\t\tif(index !== false && index < this.displayRowsCount -1){\n\t\t\tnextRow = this.getDisplayRows()[index+1];\n\t\t}\n\t\t\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn nextRow;\n\t}\n\t\n\tprevDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tprevRow = false;\n\t\t\n\t\tif(index){\n\t\t\tprevRow = this.getDisplayRows()[index-1];\n\t\t}\n\t\t\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn prevRow;\n\t}\n\t\n\tfindRowIndex(row, list){\n\t\tvar rowIndex;\n\t\t\n\t\trow = this.findRow(row);\n\t\t\n\t\tif(row){\n\t\t\trowIndex = list.indexOf(row);\n\t\t\t\n\t\t\tif(rowIndex > -1){\n\t\t\t\treturn rowIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tgetData(active, transform){\n\t\tvar output = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tif(row.type == \"row\"){\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(active){\n\t\tvar\toutput = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\toutput.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetDataCount(active){\n\t\tvar rows = this.getRows(active);\n\t\t\n\t\treturn rows.length;\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tthis.scrollLeft = left;\n\t\tthis.element.scrollLeft = left;\n\t\t\n\t\tthis.dispatch(\"scroll-horizontal\", left);\n\t}\n\t\n\tregisterDataPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.dataPipeline.push({handler, priority});\n\t\t\tthis.dataPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\tregisterDisplayPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.displayPipeline.push({handler, priority});\n\t\t\tthis.displayPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\t//set active data set\n\trefreshActiveData(handler, skipStage, renderInPosition){\n\t\tvar table = this.table,\n\t\tstage = \"\",\n\t\tindex = 0,\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"];\n\t\t\n\t\tif(!this.table.destroyed){\n\t\t\tif(typeof handler === \"function\"){\n\t\t\t\tindex = this.dataPipeline.findIndex((item) => {\n\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(index > -1){\n\t\t\t\t\tstage = \"dataPipeline\";\n\t\t\t\t\t\n\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\tif(index == this.dataPipeline.length - 1){\n\t\t\t\t\t\t\tstage = \"display\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\n\t\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(index > -1){\n\t\t\t\t\t\tstage = \"displayPipeline\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\n\t\t\t\t\t\t\t\tstage = \"end\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tstage = handler || \"all\";\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.redrawBlock){\n\t\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\n\t\t\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\tskipStage: skipStage,\n\t\t\t\t\t\trenderInPosition: renderInPosition,\n\t\t\t\t\t\tstage:stage,\n\t\t\t\t\t\tindex:index,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\tif(Helpers.elVisible(this.element)){\n\t\t\t\t\tif(renderInPosition){\n\t\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!handler){\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.renderTable();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\n\t\t\t\t\t\t\tthis.table.columnManager.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"data-refreshed\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\trefreshPipelines(handler, stage, index, renderInPosition){\n\t\tthis.dispatch(\"data-refreshing\");\n\t\t\n\t\tif(!handler || !this.activeRowsPipeline[0]){\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\n\t\t}\n\t\t\n\t\t//cascade through data refresh stages\n\t\tswitch(stage){\n\t\t\tcase \"all\":\n\t\t\t//handle case where all data needs refreshing\n\t\t\t\n\t\t\tcase \"dataPipeline\":\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\n\t\t\t\t\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\tindex = 0;\n\t\t\t\tthis.resetDisplayRows();\n\t\t\t\n\t\t\tcase \"displayPipeline\":\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\n\t\t\t\t\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"end\":\n\t\t\t//case to handle scenario when trying to skip past end stage\n\t\t\t\tthis.regenerateRowPositions();\n\t\t}\n\t\t\n\t\tif(this.getDisplayRows().length){\n\t\t\tthis._clearPlaceholder();\n\t\t}\n\t}\n\t\n\t//regenerate row positions\n\tregenerateRowPositions(){\n\t\tvar rows = this.getDisplayRows();\n\t\tvar index = 1;\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\"){\n\t\t\t\trow.setPosition(index);\n\t\t\t\tindex++;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tsetActiveRows(activeRows){\n\t\tthis.activeRows = this.activeRows = Object.assign([], activeRows);\n\t\tthis.activeRowsCount = this.activeRows.length;\n\t}\n\t\n\t//reset display rows array\n\tresetDisplayRows(){\n\t\tthis.displayRows = [];\n\t\t\n\t\tthis.displayRows.push(this.activeRows.slice(0));\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[0].length;\n\t}\n\t\n\t//set display row pipeline data\n\tsetDisplayRows(displayRows, index){\n\t\tthis.displayRows[index] = displayRows;\n\t\t\n\t\tif(index == this.displayRows.length -1){\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t\t}\n\t}\n\t\n\tgetDisplayRows(index){\n\t\tif(typeof index == \"undefined\"){\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\n\t\t}else{\n\t\t\treturn this.displayRows[index] || [];\n\t\t}\n\t}\n\t\n\tgetVisibleRows(chain, viewable){\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\n\t\t\n\t\tif(chain){\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t//repeat action across display rows\n\tdisplayRowIterator(callback){\n\t\tthis.activeRowsPipeline.forEach(callback);\n\t\tthis.displayRows.forEach(callback);\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t}\n\t\n\t//return only actual rows (not group headers etc)\n\tgetRows(type){\n\t\tvar rows = [];\n\t\t\n\t\tswitch(type){\n\t\t\tcase \"active\":\n\t\t\t\trows = this.activeRows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.getVisibleRows(false, true);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t///////////////// Table Rendering /////////////////\n\t//trigger rerender of table in current position\n\treRenderInPosition(callback){\n\t\tif(this.redrawBlock){\n\t\t\tif(callback){\n\t\t\t\tcallback();\n\t\t\t}else{\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\t\n\t\t\tthis.renderer.rerenderRows(callback);\n\t\t\t\n\t\t\tif(!this.fixedHeight){\n\t\t\t\tthis.adjustTableSize();\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"renderComplete\");\n\t\t}\n\t}\n\t\n\tscrollBarCheck(){\n\t\tvar scrollbarWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar moving table when present\n\t\tif(this.element.scrollHeight > this.element.clientHeight){\n\t\t\tscrollbarWidth = this.element.offsetWidth - this.element.clientWidth;\n\t\t}\n\t\t\n\t\tif(scrollbarWidth !== this.scrollbarWidth){\n\t\t\tthis.scrollbarWidth = scrollbarWidth;\n\t\t\tthis.dispatch(\"scrollbar-vertical\", scrollbarWidth);\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomVertical,\n\t\t\t\"basic\": RendererBasicVertical,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderVertical;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderMode = this.table.options.renderVertical;\n\t\t\t\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t\t\n\t\t\tif((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){\n\t\t\t\tthis.fixedHeight = true;\n\t\t\t}else{\n\t\t\t\tthis.fixedHeight = false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderVertical);\n\t\t}\n\t}\n\t\n\tgetRenderMode(){\n\t\treturn this.renderMode;\n\t}\n\t\n\trenderTable(){\n\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tthis._clearTable();\n\t\t\n\t\tif(this.displayRowsCount){\n\t\t\tthis.renderer.renderRows();\n\t\t\t\n\t\t\tif(this.firstRender){\n\t\t\t\tthis.firstRender = false;\n\t\t\t\t\n\t\t\t\tif(!this.fixedHeight){\n\t\t\t\t\tthis.adjustTableSize();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.layoutRefresh(true);\n\t\t\t}\n\t\t}else{\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t\t\n\t\tif(!this.fixedHeight){\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-layout\");\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis._showPlaceholder();\n\t\t}\n\t\t\n\t\tthis.scrollBarCheck();\n\t\t\n\t\tthis.dispatchExternal(\"renderComplete\");\n\t}\n\t\n\t//show scrollbars on empty table div\n\trenderEmptyScroll(){\n\t\tif(this.placeholder){\n\t\t\tthis.tableElement.style.display = \"none\";\n\t\t}else{\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\n\t\t}\n\t}\n\t\n\t_clearTable(){\t\n\t\tthis._clearPlaceholder();\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.renderer.clearRows();\n\t}\n\t\n\ttableEmpty(){\n\t\tthis.renderEmptyScroll();\n\t\tthis._showPlaceholder();\n\t}\n\n\tcheckPlaceholder(){\n\t\tif(this.displayRowsCount){\n\t\t\tthis._clearPlaceholder();\n\t\t}else{\n\t\t\tthis.tableEmpty();\n\t\t}\n\t}\n\t\n\t_showPlaceholder(){\n\t\tif(this.placeholder){\n\t\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t\t}\n\t\t\t\n\t\t\tthis.initializePlaceholder();\n\t\t\t\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\t\t\t\n\t\t\tthis.getElement().appendChild(this.placeholder);\n\t\t\tthis._positionPlaceholder();\n\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t}\n\t\n\t_clearPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t}\n\t\t\n\t\t// clear empty table placeholder min\n\t\tthis.tableElement.style.minWidth = \"\";\n\t\tthis.tableElement.style.display = \"\";\n\t}\n\t\n\t_positionPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\n\t\t}\n\t}\n\t\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\t\n\t//normalize height of active rows\n\tnormalizeHeight(){\n\t\tthis.activeRows.forEach(function(row){\n\t\t\trow.normalizeHeight();\n\t\t});\n\t}\n\t\n\t//adjust the height of the table holder to fit in the Tabulator element\n\tadjustTableSize(){\n\t\tlet initialHeight = this.element.clientHeight, minHeight;\n\t\tlet resized = false;\n\t\t\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\t\t\t\n\t\t\tif(this.fixedHeight){\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\n\t\t\t\t\n\t\t\t\tconst height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.minHeight = minHeight || \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.height = height;\n\t\t\t\tthis.element.style.maxHeight = height;\n\t\t\t} else {\n\t\t\t\tthis.element.style.height = \"\";\n\t\t\t\tthis.element.style.height =\n\t\t\t\tthis.table.element.clientHeight - otherHeight + \"px\";\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderer.resize();\n\t\t\t\n\t\t\t//check if the table has changed size when dealing with variable height tables\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\n\t\t\t\tresized = true;\n\t\t\t\tif(this.subscribed(\"table-resize\")){\n\t\t\t\t\tthis.dispatch(\"table-resize\");\n\t\t\t\t}else{\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t}\n\t\t\n\t\tthis._positionPlaceholder();\n\t\treturn resized;\n\t}\n\t\n\t//reinitialize all rows\n\treinitialize(){\n\t\tthis.rows.forEach(function(row){\n\t\t\trow.reinitialize(true);\n\t\t});\n\t}\n\t\n\t//prevent table from being redrawn\n\tblockRedraw (){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockRestoreConfig = false;\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw (){\n\t\tthis.redrawBlock = false;\n\t\t\n\t\tif(this.redrawBlockRestoreConfig){\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\t\t\t\n\t\t\tthis.redrawBlockRestoreConfig = false;\n\t\t}else{\n\t\t\tif(this.redrawBlockRenderInPosition){\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.redrawBlockRenderInPosition = false;\n\t}\n\t\n\t//redraw table\n\tredraw (force){\n\t\tthis.adjustTableSize();\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\t\t\n\t\tif(!force){\t\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(this.scrollLeft);\n\t\t}else{\n\t\t\tthis.renderTable();\n\t\t}\n\t}\n\t\n\tresetScroll(){\n\t\tthis.element.scrollLeft = 0;\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tif(this.table.browser === \"ie\"){\n\t\t\tvar event = document.createEvent(\"Event\");\n\t\t\tevent.initEvent(\"scroll\", false, true);\n\t\t\tthis.element.dispatchEvent(event);\n\t\t}else{\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\n\nexport default class FooterManager extends CoreFeature{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.active = false;\n\t\tthis.element = this.createElement(); //containing element\n\t\tthis.containerElement = this.createContainerElement(); //containing element\n\t\tthis.external = false;\n\t}\n\n\tinitialize(){\n\t\tthis.initializeElement();\n\t}\n\n\tcreateElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer\");\n\n\t\treturn el;\n\t}\n\n\t\n\tcreateContainerElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer-contents\");\n\n\t\tthis.element.appendChild(el);\n\n\t\treturn el;\n\t}\n\n\tinitializeElement(){\n\t\tif(this.table.options.footerElement){\n\n\t\t\tswitch(typeof this.table.options.footerElement){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\n\t\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.external = true;\n\t\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tappend(element){\n\t\tthis.activate();\n\n\t\tthis.containerElement.appendChild(element);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tprepend(element){\n\t\tthis.activate();\n\n\t\tthis.element.insertBefore(element, this.element.firstChild);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tremove(element){\n\t\telement.parentNode.removeChild(element);\n\t\tthis.deactivate();\n\t}\n\n\tdeactivate(force){\n\t\tif(!this.element.firstChild || force){\n\t\t\tif(!this.external){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\tthis.active = false;\n\t\t}\n\t}\n\n\tactivate(){\n\t\tif(!this.active){\n\t\t\tthis.active = true;\n\t\t\tif(!this.external){\n\t\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\t\tthis.table.element.style.display = '';\n\t\t\t}\n\t\t}\n\t}\n\n\tredraw(){\n\t\tthis.dispatch(\"footer-redraw\");\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Row from '../row/Row.js';\n\nexport default class InteractionManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.el = null;\n\t\t\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\n\t\t\n\t\tthis.previousTargets = {};\n\t\t\n\t\tthis.listeners = [\n\t\t\t\"click\",\n\t\t\t\"dblclick\",\n\t\t\t\"contextmenu\",\n\t\t\t\"mouseenter\",\n\t\t\t\"mouseleave\",\n\t\t\t\"mouseover\",\n\t\t\t\"mouseout\",\n\t\t\t\"mousemove\",\n\t\t\t\"mouseup\",\n\t\t\t\"mousedown\",\n\t\t\t\"touchstart\",\n\t\t\t\"touchend\",\n\t\t];\n\t\t\n\t\tthis.componentMap = {\n\t\t\t\"tabulator-cell\":\"cell\",\n\t\t\t\"tabulator-row\":\"row\",\n\t\t\t\"tabulator-group\":\"group\",\n\t\t\t\"tabulator-col\":\"column\",\n\t\t};\n\t\t\n\t\tthis.pseudoTrackers = {\n\t\t\t\"row\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"cell\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"group\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"column\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t};\n\t\t\n\t\tthis.pseudoTracking = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.el = this.table.element;\n\t\t\n\t\tthis.buildListenerMap();\n\t\tthis.bindSubscriptionWatchers();\n\t}\n\t\n\tbuildListenerMap(){\n\t\tvar listenerMap = {};\n\t\t\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistenerMap[listener] = {\n\t\t\t\thandler:null,\n\t\t\t\tcomponents:[],\n\t\t\t};\n\t\t});\n\t\t\n\t\tthis.listeners = listenerMap;\n\t}\n\t\n\tbindPseudoEvents(){\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\n\t\t});\n\t\t\n\t\tthis.pseudoTracking = true;\n\t}\n\t\n\tpseudoMouseEnter(key, e, target){\n\t\tif(this.pseudoTrackers[key].target !== target){\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\n\t\t\t}\n\t\t\t\n\t\t\tthis.pseudoMouseLeave(key, e);\n\t\t\t\n\t\t\tthis.pseudoTrackers[key].target = target;\n\t\t\t\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\n\t\t}\n\t}\n\t\n\tpseudoMouseLeave(key, e){\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\n\t\tlinkedKeys = {\n\t\t\t\"row\":[\"cell\"],\n\t\t\t\"cell\":[\"row\"],\n\t\t};\n\t\t\n\t\tleaveList = leaveList.filter((item) => {\n\t\t\tvar links = linkedKeys[key];\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\n\t\t});\n\t\t\n\t\t\n\t\tleaveList.forEach((key) => {\n\t\t\tvar target = this.pseudoTrackers[key].target;\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\n\t\t\t\t\n\t\t\t\tthis.pseudoTrackers[key].target = null;\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\tbindSubscriptionWatchers(){\n\t\tvar listeners = Object.keys(this.listeners),\n\t\tcomponents = Object.values(this.componentMap);\n\t\t\n\t\tfor(let comp of components){\n\t\t\tfor(let listener of listeners){\n\t\t\t\tlet key = comp + \"-\" + listener;\n\t\t\t\t\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\n\t}\n\t\n\tsubscriptionChanged(component, key, added){\n\t\tvar listener = this.listeners[key].components,\n\t\tindex = listener.indexOf(component),\n\t\tchanged = false;\n\t\t\n\t\tif(added){\n\t\t\tif(index === -1){\n\t\t\t\tlistener.push(component);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\n\t\t\t\tif(index > -1){\n\t\t\t\t\tlistener.splice(index, 1);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\n\t\t\tthis.bindPseudoEvents();\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.updateEventListeners();\n\t\t}\n\t}\n\t\n\tupdateEventListeners(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.components.length){\n\t\t\t\tif(!listener.handler){\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler);\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(listener.handler){\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\t\tlistener.handler = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\ttrack(type, e){\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\n\t\t\n\t\tvar targets = this.findTargets(path);\n\t\ttargets = this.bindComponents(type, targets);\n\t\t\n\t\tthis.triggerEvents(type, e, targets);\n\t\t\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\n\t\t}\n\t}\n\t\n\tfindTargets(path){\n\t\tvar targets = {};\n\t\t\n\t\tlet componentMap = Object.keys(this.componentMap);\n\t\t\n\t\tfor (let el of path) {\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\n\t\t\t\n\t\t\tlet abort = classList.filter((item) => {\n\t\t\t\treturn this.abortClasses.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tif(abort.length){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tlet elTargets = classList.filter((item) => {\n\t\t\t\treturn componentMap.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tfor (let target of elTargets) {\n\t\t\t\tif(!targets[this.componentMap[target]]){\n\t\t\t\t\ttargets[this.componentMap[target]] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(targets.group && targets.group === targets.row){\n\t\t\tdelete targets.row;\n\t\t}\n\n\t\treturn targets;\n\t}\n\t\n\tbindComponents(type, targets){\n\t\t//ensure row component is looked up before cell\n\t\tvar keys = Object.keys(targets).reverse(),\n\t\tlistener = this.listeners[type],\n\t\tmatches = {},\n\t\ttargetMatches = {};\n\t\t\n\t\tfor(let key of keys){\n\t\t\tlet component,\n\t\t\ttarget = targets[key],\n\t\t\tpreviousTarget = this.previousTargets[key];\n\t\t\t\n\t\t\tif(previousTarget && previousTarget.target === target){\n\t\t\t\tcomponent = previousTarget.component;\n\t\t\t}else{\n\t\t\t\tswitch(key){\n\t\t\t\t\tcase \"row\":\n\t\t\t\t\tcase \"group\":\n\t\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\n\t\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tcomponent = rows.find((row) => {\n\t\t\t\t\t\t\t\treturn row.getElement() === target;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\n\t\t\t\t\t\t\t\ttargets[key] = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"column\":\n\t\t\t\t\t\tif(listener.components.includes(\"column\")){\n\t\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"cell\":\n\t\t\t\t\t\tif(listener.components.includes(\"cell\")){\n\t\t\t\t\t\t\tif(matches[\"row\"] instanceof Row){\n\t\t\t\t\t\t\t\tcomponent = matches[\"row\"].findCell(target);\n\t\t\t\t\t\t\t}else{\t\n\t\t\t\t\t\t\t\tif(targets[\"row\"]){\n\t\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(component){\n\t\t\t\tmatches[key] = component;\n\t\t\t\ttargetMatches[key] = {\n\t\t\t\t\ttarget:target,\n\t\t\t\t\tcomponent:component,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.previousTargets = targetMatches;\n\t\t\n\t\treturn matches;\n\t}\n\t\n\ttriggerEvents(type, e, targets){\n\t\tvar listener = this.listeners[type];\n\n\t\tfor(let key in targets){\n\t\t\tif(targets[key] && listener.components.includes(key)){\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearWatchers(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.handler){\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\tlistener.handler = null;\n\t\t\t}\n\t\t}\n\t}\n}\n","export default class ComponentFunctionBinder{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\n\t\tthis.bindings = {};\n\t}\n\n\tbind(type, funcName, handler){\n\t\tif(!this.bindings[type]){\n\t\t\tthis.bindings[type] = {};\n\t\t}\n\n\t\tif(this.bindings[type][funcName]){\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, handler);\n\t\t}else{\n\t\t\tthis.bindings[type][funcName] = handler;\n\t\t}\n\t}\n\n\thandle(type, component, name){\n\t\tif(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){\n\t\t\treturn this.bindings[type][name].bind(null, component);\n\t\t}else{\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\n\t\t\t\tif(this.table.options.debugInvalidComponentFuncs){\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\n\nexport default class DataLoader extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\n\t\tthis.loading = false;\n\t}\n\t\n\tinitialize(){}\n\t\n\tload(data, params, config, replace, silent, columnsChanged){\n\t\tvar requestNo = ++this.requestOrder;\n\n\t\tif(this.table.destroyed){\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\t\n\t\tthis.dispatchExternal(\"dataLoading\", data);\n\t\t\n\t\t//parse json data to array\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\n\t\t\tthis.loading = true;\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.alertLoader();\n\t\t\t}\n\t\t\t\n\t\t\t//get params for request\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\n\t\t\t\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\n\t\t\t\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\n\t\t\t\n\t\t\treturn result.then((response) => {\n\t\t\t\tif(!this.table.destroyed){\n\t\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\n\t\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\n\t\t\t\t\t\n\t\t\t\t\tif(requestNo == this.requestOrder){\n\t\t\t\t\t\tthis.clearAlert();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(rowData !== false){\n\t\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\n\t\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - Table has been destroyed\");\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\n\t\t\t\t\n\t\t\t\tif(!silent){\n\t\t\t\t\tthis.alertError();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.clearAlert();\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\n\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t});\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\n\t\t\t\n\t\t\tif(!data){\n\t\t\t\tdata = [];\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\t\n\tmapParams(params, map){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in params){\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tobjectInvert(obj){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in obj){\n\t\t\toutput[obj[key]] = key;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tblockActiveLoad(){\n\t\tthis.requestOrder++;\n\t}\n\t\n\talertLoader(){\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\n\t\t\n\t\tif(shouldLoad){\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\n\t\t}\n\t}\n\t\n\talertError(){\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\n\t}\n\t\n\tclearAlert(){\n\t\tthis.table.alertManager.clear();\n\t}\n}","export default class ExternalEventBus {\n\n\tconstructor(table, optionsList, debug){\n\t\tthis.table = table;\n\t\tthis.events = {};\n\t\tthis.optionsList = optionsList || {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push(callback);\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tdelete this.events[key];\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift(),\n\t\tresult;\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((callback, i) => {\n\t\t\t\tlet callResult = callback.apply(this.table, args);\n\n\t\t\t\tif(!i){\n\t\t\t\t\tresult = callResult;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"ExternalEvent:\" + args[0];\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n}","export default class InternalEventBus {\n\n\tconstructor(debug){\n\t\tthis.events = {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback, priority = 10000){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push({callback, priority});\n\n\t\tthis.events[key].sort((a, b) => {\n\t\t\treturn a.priority - b.priority;\n\t\t});\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item.callback === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_chain(key, args, initialValue, fallback){\n\t\tvar value = initialValue;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\n\t\t\t});\n\n\t\t\treturn value;\n\t\t}else{\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\n\t\t}\n\t}\n\n\t_confirm(key, args){\n\t\tvar confirmed = false;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tif(subscriber.callback.apply(this, args)){\n\t\t\t\t\tconfirmed = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn confirmed;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift();\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((subscriber) => {\n\t\t\t\tsubscriber.callback.apply(this, args);\n\t\t\t});\n\t\t}\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n\n\t_debugChain(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._chain(...arguments);\n\t}\n\n\t_debugConfirm(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._confirm(...arguments);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class DeprecationAdvisor extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\t_warnUser(){\n\t\tif(this.options(\"debugDeprecation\")){\n\t\t\tconsole.warn(...arguments);\n\t\t}\n\t}\n\t\n\tcheck(oldOption, newOption, convert){\n\t\tvar msg = \"\";\n\t\t\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\n\t\t\t\n\t\t\tif(newOption){\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\n\t\t\t\tif(convert){\n\t\t\t\t\tthis.table.options[newOption] = this.table.options[oldOption];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tcheckMsg(oldOption, msg){\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tmsg(msg){\n\t\tthis._warnUser(msg);\n\t}\n}","import Tabulator from '../Tabulator.js';\n\nclass TableRegistry {\n\n\tstatic register(table){\n\t\tTableRegistry.tables.push(table);\n\t}\n\n\tstatic deregister(table){\n\t\tvar index = TableRegistry.tables.indexOf(table);\n\n\t\tif(index > -1){\n\t\t\tTableRegistry.tables.splice(index, 1);\n\t\t}\n\t}\n\n\tstatic lookupTable(query, silent){\n\t\tvar results = [],\n\t\tmatches, match;\n\n\t\tif(typeof query === \"string\"){\n\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\tif(matches.length){\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\n\t\t\tmatch = TableRegistry.matchElement(query);\n\n\t\t\tif(match){\n\t\t\t\tresults.push(match);\n\t\t\t}\n\t\t}else if(Array.isArray(query)){\n\t\t\tquery.forEach(function(item){\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\n\t\t\t});\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tstatic matchElement(element){\n\t\treturn TableRegistry.tables.find(function(table){\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n}\n\nTableRegistry.tables = [];\n\nexport default TableRegistry;","import CoreFeature from '../CoreFeature.js';\nimport Helpers from './Helpers.js';\n\nexport default class Popup extends CoreFeature{\n\tconstructor(table, element, parent){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = element;\n\t\tthis.container = this._lookupContainer();\n\t\t\n\t\tthis.parent = parent;\n\t\t\n\t\tthis.reversedX = false;\n\t\tthis.childPopup = null;\n\t\tthis.blurable = false;\n\t\tthis.blurCallback = null;\n\t\tthis.blurEventsBound = false;\n\t\tthis.renderedCallback = null;\n\t\t\n\t\tthis.visible = false;\n\t\tthis.hideable = true;\n\t\t\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\n\t\t\n\t\tthis.blurEvent = this.hide.bind(this, false);\n\t\tthis.escEvent = this._escapeCheck.bind(this);\n\t\t\n\t\tthis.destroyBinding = this.tableDestroyed.bind(this);\n\t\tthis.destroyed = false;\n\t}\n\t\n\ttableDestroyed(){\n\t\tthis.destroyed = true;\n\t\tthis.hide(true);\n\t}\n\t\n\t_lookupContainer(){\n\t\tvar container = this.table.options.popupContainer;\n\t\t\n\t\tif(typeof container === \"string\"){\n\t\t\tcontainer = document.querySelector(container);\n\t\t\t\n\t\t\tif(!container){\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t\t}\n\t\t}else if (container === true){\n\t\t\tcontainer = this.table.element;\n\t\t}\n\t\t\n\t\tif(container && !this._checkContainerIsParent(container)){\n\t\t\tcontainer = false;\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t}\n\t\t\n\t\tif(!container){\n\t\t\tcontainer = document.body;\n\t\t}\n\t\t\n\t\treturn container;\n\t}\n\t\n\t_checkContainerIsParent(container, element = this.table.element){\n\t\tif(container === element){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\n\t\t}\n\t}\n\t\n\trenderCallback(callback){\n\t\tthis.renderedCallback = callback;\n\t}\n\t\n\tcontainerEventCoords(e){\n\t\tvar touch = !(e instanceof MouseEvent);\n\t\t\n\t\tvar x = touch ? e.touches[0].pageX : e.pageX;\n\t\tvar y = touch ? e.touches[0].pageY : e.pageY;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\tx -= parentOffset.left;\n\t\t\ty -= parentOffset.top;\n\t\t}\n\t\t\n\t\treturn {x, y};\n\t}\n\t\n\telementPositionCoords(element, position = \"right\"){\n\t\tvar offset = Helpers.elOffset(element),\n\t\tcontainerOffset, x, y;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\toffset.left -= containerOffset.left;\n\t\t\toffset.top -= containerOffset.top;\n\t\t}\n\t\t\n\t\tswitch(position){\n\t\t\tcase \"right\":\n\t\t\t\tx = offset.left + element.offsetWidth;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"bottom\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top + element.offsetHeight;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"left\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"top\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"center\":\n\t\t\t\tx = offset.left + (element.offsetWidth / 2);\n\t\t\t\ty = offset.top + (element.offsetHeight / 2);\n\t\t\t\tbreak;\n\t\t\t\n\t\t}\n\t\t\n\t\treturn {x, y, offset};\n\t}\n\t\n\tshow(origin, position){\n\t\tvar x, y, parentEl, parentOffset, coords;\n\t\t\n\t\tif(this.destroyed || this.table.destroyed){\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tif(origin instanceof HTMLElement){\n\t\t\tparentEl = origin;\n\t\t\tcoords = this.elementPositionCoords(origin, position);\n\t\t\t\n\t\t\tparentOffset = coords.offset;\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t}else if(typeof origin === \"number\"){\n\t\t\tparentOffset = {top:0, left:0};\n\t\t\tx = origin;\n\t\t\ty = position;\n\t\t}else{\n\t\t\tcoords = this.containerEventCoords(origin);\n\t\t\t\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t\tthis.reversedX = false;\n\t\t}\n\t\t\n\t\tthis.element.style.top = y + \"px\";\n\t\tthis.element.style.left = x + \"px\";\n\t\t\n\t\tthis.container.appendChild(this.element);\n\t\t\n\t\tif(typeof this.renderedCallback === \"function\"){\n\t\t\tthis.renderedCallback();\n\t\t}\n\t\t\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\n\t\t\n\t\tthis.visible = true;\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\n\t\t\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_fitToScreen(x, y, parentEl, parentOffset, position){\n\t\tvar scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\n\t\t\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\n\t\tif((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\n\t\t\tthis.element.style.left = \"\";\n\t\t\t\n\t\t\tif(parentEl){\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - x) + \"px\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.reversedX = true;\n\t\t}\n\t\t\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\t\tif((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\n\t\t\tif(parentEl){\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"bottom\":\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisVisible(){\n\t\treturn this.visible;\n\t}\n\t\n\thideOnBlur(callback){\n\t\tthis.blurable = true;\n\t\t\n\t\tif(this.visible){\n\t\t\tsetTimeout(() => {\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\n\t\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\n\n\t\t\t\t\tthis.blurEventsBound = true;\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t\t\n\t\t\tthis.blurCallback = callback;\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_escapeCheck(e){\n\t\tif(e.keyCode == 27){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\t\n\tblockHide(){\n\t\tthis.hideable = false;\n\t}\n\t\n\trestoreHide(){\n\t\tthis.hideable = true;\n\t}\n\t\n\thide(silent = false){\n\t\tif(this.visible && this.hideable){\n\t\t\tif(this.blurable && this.blurEventsBound){\n\t\t\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\t\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\twindow.removeEventListener(\"resize\", this.blurEvent);\n\t\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n\t\t\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\n\n\t\t\t\tthis.blurEventsBound = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.childPopup){\n\t\t\t\tthis.childPopup.hide();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.childPopup = null;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.visible = false;\n\t\t\t\n\t\t\tif(this.blurCallback && !silent){\n\t\t\t\tthis.blurCallback();\n\t\t\t}\n\t\t\t\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\tchild(element){\n\t\tif(this.childPopup){\n\t\t\tthis.childPopup.hide();\n\t\t}\n\t\t\n\t\tthis.childPopup = new Popup(this.table, element, this);\n\t\t\n\t\treturn this.childPopup;\n\t}\n}","import CoreFeature from './CoreFeature.js';\nimport Popup from './tools/Popup.js';\n\nclass Module extends CoreFeature{\n\t\n\tconstructor(table, name){\n\t\tsuper(table);\n\t\t\n\t\tthis._handler = null;\n\t}\n\t\n\tinitialize(){\n\t\t// setup module when table is initialized, to be overridden in module\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Options Registration ///////\n\t///////////////////////////////////\n\t\n\tregisterTableOption(key, value){\n\t\tthis.table.optionsList.register(key, value);\n\t}\n\t\n\tregisterColumnOption(key, value){\n\t\tthis.table.columnManager.optionsList.register(key, value);\n\t}\n\t\n\t///////////////////////////////////\n\t/// Public Function Registration ///\n\t///////////////////////////////////\n\t\n\tregisterTableFunction(name, func){\n\t\tif(typeof this.table[name] === \"undefined\"){\n\t\t\tthis.table[name] = (...args) => {\n\t\t\t\tthis.table.initGuard(name);\n\t\t\t\t\n\t\t\t\treturn func(...args);\n\t\t\t};\n\t\t}else{\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name);\n\t\t}\n\t}\n\t\n\tregisterComponentFunction(component, func, handler){\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Data Pipeline //////////\n\t///////////////////////////////////\n\t\n\tregisterDataHandler(handler, priority){\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tregisterDisplayHandler(handler, priority){\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tdisplayRows(adjust){\n\t\tvar index = this.table.rowManager.displayRows.length - 1, \n\t\tlookupIndex;\n\t\t\n\t\tif(this._handler){\n\t\t\tlookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => {\n\t\t\t\treturn item.handler === this._handler;\n\t\t\t});\n\n\t\t\tif(lookupIndex > -1){\n\t\t\t\tindex = lookupIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(adjust){\n\t\t\tindex = index + adjust;\n\t\t}\n\n\t\tif(this._handler){\n\t\t\tif(index > -1){\n\t\t\t\treturn this.table.rowManager.getDisplayRows(index);\n\t\t\t}else{\n\t\t\t\treturn this.activeRows();\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\tactiveRows(){\n\t\treturn this.table.rowManager.activeRows;\n\t}\n\t\n\trefreshData(renderInPosition, handler){\n\t\tif(!handler){\n\t\t\thandler = this._handler;\n\t\t}\n\t\t\n\t\tif(handler){\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Footer Management ////////\n\t///////////////////////////////////\n\t\n\tfooterAppend(element){\n\t\treturn this.table.footerManager.append(element);\n\t}\n\t\n\tfooterPrepend(element){\n\t\treturn this.table.footerManager.prepend(element);\n\t}\n\t\n\tfooterRemove(element){\n\t\treturn this.table.footerManager.remove(element);\n\t} \n\t\n\t///////////////////////////////////\n\t//////// Popups Management ////////\n\t///////////////////////////////////\n\t\n\tpopup(menuEl, menuContainer){\n\t\treturn new Popup(this.table, menuEl, menuContainer);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Alert Management ////////\n\t///////////////////////////////////\n\t\n\talert(content, type){\n\t\treturn this.table.alertManager.alert(content, type);\n\t}\n\t\n\tclearAlert(){\n\t\treturn this.table.alertManager.clear();\n\t}\n\t\n}\n\nexport default Module;","//resize columns to fit data they contain\nexport default function(columns, forced){\n\tif(forced){\n\t\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\n\t}\n\t\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\nexport default function(columns, forced){\n\tcolumns.forEach(function(column){\n\t\tcolumn.reinitializeWidth();\n\t});\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","//resize columns to fit data the contain and stretch last column to fill table\nexport default function(columns, forced){\n\tvar colsWidth = 0,\n\ttableWidth = this.table.rowManager.element.clientWidth,\n\tgap = 0,\n\tlastCol = false;\n\n\tcolumns.forEach((column, i) => {\n\t\tif(!column.widthFixed){\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\n\t\t\tlastCol = column;\n\t\t}\n\n\t\tif(column.visible){\n\t\t\tcolsWidth += column.getWidth();\n\t\t}\n\t});\n\n\tif(lastCol){\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tlastCol.setWidth(0);\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\tif(gap > 0){\n\t\t\tlastCol.setWidth(gap);\n\t\t}else{\n\t\t\tlastCol.reinitializeWidth();\n\t\t}\n\t}else{\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t}\n}","//resize columns to fit\nexport default function(columns, forced){\n\tvar totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width\n\tvar fixedWidth = 0; //total width of columns with a defined width\n\tvar flexWidth = 0; //total width available to flexible columns\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks across all columns\n\tvar flexColWidth = 0; //desired width of flexible columns\n\tvar flexColumns = []; //array of flexible width columns\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks across all columns\n\tvar overflowWidth = 0; //horizontal overflow width\n\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\tfunction calcWidth(width){\n\t\tvar colWidth;\n\n\t\tif(typeof(width) == \"string\"){\n\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\n\t\t\t}else{\n\t\t\t\tcolWidth = parseInt(width);\n\t\t\t}\n\t\t}else{\n\t\t\tcolWidth = width;\n\t\t}\n\n\t\treturn colWidth;\n\t}\n\n\t//ensure columns resize to take up the correct amount of space\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\n\t\tvar oversizeCols = [],\n\t\toversizeSpace = 0,\n\t\tremainingSpace = 0,\n\t\tnextColWidth = 0,\n\t\tremainingFlexGrowUnits = flexGrowUnits,\n\t\tgap = 0,\n\t\tchangeUnits = 0,\n\t\tundersizeCols = [];\n\n\t\tfunction calcGrow(col){\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\n\t\t}\n\n\t\tfunction calcShrink(col){\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)));\n\t\t}\n\n\t\tcolumns.forEach(function(col, i){\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\t\t\tif(col.column.minWidth >= width){\n\t\t\t\toversizeCols.push(col);\n\t\t\t}else{\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\n\t\t\t\t\tcol.width = col.column.maxWidth;\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\n\t\t\t\t\tif(remainingFlexGrowUnits){\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tundersizeCols.push(col);\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(oversizeCols.length){\n\t\t\toversizeCols.forEach(function(col){\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t});\n\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\n\n\t\t\tgap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t}else{\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\n\n\t\t\tundersizeCols.forEach(function(column){\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t});\n\t\t}\n\n\t\treturn gap;\n\t}\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n\n\t//adjust for vertical scrollbar if present\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t}\n\n\tcolumns.forEach(function(column){\n\t\tvar width, minWidth, colWidth;\n\n\t\tif(column.visible){\n\n\t\t\twidth = column.definition.width;\n\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\tif(width){\n\n\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\tif(column.definition.widthShrink){\n\t\t\t\t\tfixedShrinkColumns.push({\n\t\t\t\t\t\tcolumn:column,\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\n\t\t\t\t\t});\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tflexColumns.push({\n\t\t\t\t\tcolumn:column,\n\t\t\t\t\twidth:0,\n\t\t\t\t});\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t}\n\t\t}\n\t});\n\n\t//calculate available space\n\tflexWidth = totalWidth - fixedWidth;\n\n\t//calculate correct column size\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t//generate column widths\n\tgapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t//increase width of last column to account for rounding errors\n\tif(flexColumns.length && gapFill > 0){\n\t\tflexColumns[flexColumns.length-1].width += gapFill;\n\t}\n\n\t//calculate space for columns to be shrunk into\n\tflexColumns.forEach(function(col){\n\t\tflexWidth -= col.width;\n\t});\n\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t//shrink oversize columns if there is no available space\n\tif(overflowWidth > 0 && flexShrinkUnits){\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t}\n\n\t//decrease width of last column to account for rounding errors\n\tif(gapFill && fixedShrinkColumns.length){\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\n\t}\n\n\tflexColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n\n\tfixedShrinkColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n}\n","import fitData from './modes/fitData.js';\nimport fitDataGeneral from './modes/fitDataGeneral.js';\nimport fitDataStretch from './modes/fitDataStretch.js';\nimport fitColumns from './modes/fitColumns.js';\n\nexport default {\n\tfitData:fitData,\n\tfitDataFill:fitDataGeneral,\n\tfitDataTable:fitDataGeneral,\n\tfitDataStretch:fitDataStretch,\n\tfitColumns:fitColumns ,\n};","import Module from '../../core/Module.js';\n\nimport defaultModes from './defaults/modes.js';\n\nclass Layout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table, \"layout\");\n\n\t\tthis.mode = null;\n\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\n\n\t\tthis.registerColumnOption(\"widthGrow\");\n\t\tthis.registerColumnOption(\"widthShrink\");\n\t}\n\n\t//initialize layout system\n\tinitialize(){\n\t\tvar layout = this.table.options.layout;\n\n\t\tif(Layout.modes[layout]){\n\t\t\tthis.mode = layout;\n\t\t}else{\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\t\t\tthis.mode = 'fitData';\n\t\t}\n\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.widthGrow){\n\t\t\tcolumn.definition.widthGrow = Number(column.definition.widthGrow);\n\t\t}\n\t\tif(column.definition.widthShrink){\n\t\t\tcolumn.definition.widthShrink = Number(column.definition.widthShrink);\n\t\t}\n\t}\n\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\n\t//trigger table layout\n\tlayout(dataChanged){\n\t\tthis.dispatch(\"layout-refreshing\");\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\n\t\tthis.dispatch(\"layout-refreshed\");\n\t}\n}\n\nLayout.moduleName = \"layout\";\n\n//load defaults\nLayout.modes = defaultModes;\n\nexport default Layout;","export default {\n\t\"default\":{ //hold default locale text\n\t\t\"groups\":{\n\t\t\t\"item\":\"item\",\n\t\t\t\"items\":\"items\",\n\t\t},\n\t\t\"columns\":{\n\t\t},\n\t\t\"data\":{\n\t\t\t\"loading\":\"Loading\",\n\t\t\t\"error\":\"Error\",\n\t\t},\n\t\t\"pagination\":{\n\t\t\t\"page_size\":\"Page Size\",\n\t\t\t\"page_title\":\"Show Page\",\n\t\t\t\"first\":\"First\",\n\t\t\t\"first_title\":\"First Page\",\n\t\t\t\"last\":\"Last\",\n\t\t\t\"last_title\":\"Last Page\",\n\t\t\t\"prev\":\"Prev\",\n\t\t\t\"prev_title\":\"Prev Page\",\n\t\t\t\"next\":\"Next\",\n\t\t\t\"next_title\":\"Next Page\",\n\t\t\t\"all\":\"All\",\n\t\t\t\"counter\":{\n\t\t\t\t\"showing\": \"Showing\",\n\t\t\t\t\"of\": \"of\",\n\t\t\t\t\"rows\": \"rows\",\n\t\t\t\t\"pages\": \"pages\",\n\t\t\t}\n\t\t},\n\t\t\"headerFilters\":{\n\t\t\t\"default\":\"filter column...\",\n\t\t\t\"columns\":{}\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\n\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultLangs from './defaults/langs.js';\n\nclass Localize extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.locale = \"default\"; //current locale\n\t\tthis.lang = false; //current language\n\t\tthis.bindings = {}; //update events to call when locale is changed\n\t\tthis.langList = {};\n\n\t\tthis.registerTableOption(\"locale\", false); //current system language\n\t\tthis.registerTableOption(\"langs\", {});\n\t}\n\n\tinitialize(){\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\n\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\n\t\t}\n\n\t\tfor(let locale in this.table.options.langs){\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\n\t\t}\n\n\t\tthis.setLocale(this.table.options.locale);\n\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\n\t}\n\n\t//set header placeholder\n\tsetHeaderFilterPlaceholder(placeholder){\n\t\tthis.langList.default.headerFilters.default = placeholder;\n\t}\n\n\t//setup a lang description object\n\tinstallLang(locale, lang){\n\t\tif(this.langList[locale]){\n\t\t\tthis._setLangProp(this.langList[locale], lang);\n\t\t}else{\n\t\t\tthis.langList[locale] = lang;\n\t\t}\n\t}\n\n\t_setLangProp(lang, values){\n\t\tfor(let key in values){\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\n\t\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t\t}else{\n\t\t\t\tlang[key] = values[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t//set current locale\n\tsetLocale(desiredLocale){\n\t\tdesiredLocale = desiredLocale || \"default\";\n\n\t\t//fill in any matching language values\n\t\tfunction traverseLang(trans, path){\n\t\t\tfor(var prop in trans){\n\t\t\t\tif(typeof trans[prop] == \"object\"){\n\t\t\t\t\tif(!path[prop]){\n\t\t\t\t\t\tpath[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t\t}else{\n\t\t\t\t\tpath[prop] = trans[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//determining correct locale to load\n\t\tif(desiredLocale === true && navigator.language){\n\t\t\t//get local from system\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\n\t\t}\n\n\t\tif(desiredLocale){\n\t\t\t//if locale is not set, check for matching top level locale else use default\n\t\t\tif(!this.langList[desiredLocale]){\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\t\tif(this.langList[prefix]){\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\t\tdesiredLocale = prefix;\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\t\tdesiredLocale = \"default\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.locale = desiredLocale;\n\n\t\t//load default lang template\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\n\n\t\tif(desiredLocale != \"default\"){\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\n\t\t}\n\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\n\n\t\tthis._executeBindings();\n\t}\n\n\t//get current locale\n\tgetLocale(locale){\n\t\treturn this.locale;\n\t}\n\n\t//get lang object for given local or current if none provided\n\tgetLang(locale){\n\t\treturn locale ? this.langList[locale] : this.lang;\n\t}\n\n\t//get text for current locale\n\tgetText(path, value){\n\t\tvar fillPath = value ? path + \"|\" + value : path,\n\t\tpathArray = fillPath.split(\"|\"),\n\t\ttext = this._getLangElement(pathArray, this.locale);\n\n\t\t// if(text === false){\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t\t// }\n\n\t\treturn text || \"\";\n\t}\n\n\t//traverse langs object and find localized copy\n\t_getLangElement(path, locale){\n\t\tvar root = this.lang;\n\n\t\tpath.forEach(function(level){\n\t\t\tvar rootPath;\n\n\t\t\tif(root){\n\t\t\t\trootPath = root[level];\n\n\t\t\t\tif(typeof rootPath != \"undefined\"){\n\t\t\t\t\troot = rootPath;\n\t\t\t\t}else{\n\t\t\t\t\troot = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn root;\n\t}\n\n\t//set update binding\n\tbind(path, callback){\n\t\tif(!this.bindings[path]){\n\t\t\tthis.bindings[path] = [];\n\t\t}\n\n\t\tthis.bindings[path].push(callback);\n\n\t\tcallback(this.getText(path), this.lang);\n\t}\n\n\t//iterate through bindings and trigger updates\n\t_executeBindings(){\n\t\tfor(let path in this.bindings){\n\t\t\tthis.bindings[path].forEach((binding) => {\n\t\t\t\tbinding(this.getText(path), this.lang);\n\t\t\t});\n\t\t}\n\t}\n}\n\nLocalize.moduleName = \"localize\";\n\n//load defaults\nLocalize.langs = defaultLangs;\n\nexport default Localize;","import Module from '../../core/Module.js';\nimport TableRegistry from '../../core/tools/TableRegistry.js';\n\nclass Comms extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\n\tinitialize(){\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\n\t}\n\n\tgetConnections(selectors){\n\t\tvar connections = [],\n\t\tconnection;\n\n\t\tconnection = TableRegistry.lookupTable(selectors);\n\n\t\tconnection.forEach((con) =>{\n\t\t\tif(this.table !== con){\n\t\t\t\tconnections.push(con);\n\t\t\t}\n\t\t});\n\n\t\treturn connections;\n\t}\n\n\tsend(selectors, module, action, data){\n\t\tvar connections = this.getConnections(selectors);\n\n\t\tconnections.forEach((connection) => {\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\n\t\t});\n\n\t\tif(!connections.length && selectors){\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t\t}\n\t}\n\n\treceive(table, module, action, data){\n\t\tif(this.table.modExists(module)){\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t\t}else{\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t\t}\n\t}\n}\n\nComms.moduleName = \"comms\";\n\nexport default Comms;","import * as coreModules from '../modules/core.js';\nimport TableRegistry from './TableRegistry.js';\n\nexport default class ModuleBinder {\n\t\n\tconstructor(tabulator, modules){\n\t\tthis.bindStaticFunctionality(tabulator);\n\t\tthis.bindModules(tabulator, coreModules, true);\n\t\t\n\t\tif(modules){\n\t\t\tthis.bindModules(tabulator, modules);\n\t\t}\n\t}\n\t\n\tbindStaticFunctionality(tabulator){\n\t\ttabulator.moduleBindings = {};\n\t\t\n\t\ttabulator.extendModule = function(name, property, values){\n\t\t\tif(tabulator.moduleBindings[name]){\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\n\t\t\t\t\n\t\t\t\tif(source){\n\t\t\t\t\tif(typeof values == \"object\"){\n\t\t\t\t\t\tfor(let key in values){\n\t\t\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t\t\t}\n\t\t};\n\t\t\n\t\ttabulator.registerModule = function(modules){\n\t\t\tif(!Array.isArray(modules)){\n\t\t\t\tmodules = [modules];\n\t\t\t}\n\t\t\t\n\t\t\tmodules.forEach((mod) => {\n\t\t\t\ttabulator.registerModuleBinding(mod);\n\t\t\t});\n\t\t};\n\t\t\n\t\ttabulator.registerModuleBinding = function(mod){\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\n\t\t};\n\t\t\n\t\ttabulator.findTable = function(query){\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\n\t\t};\n\t\t\n\t\t//ensure that module are bound to instantiated function\n\t\ttabulator.prototype.bindModules = function(){\n\t\t\tvar orderedStartMods = [],\n\t\t\torderedEndMods = [],\n\t\t\tunOrderedMods = [];\n\t\t\t\n\t\t\tthis.modules = {};\n\t\t\t\n\t\t\tfor(var name in tabulator.moduleBindings){\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\n\t\t\t\tlet module = new mod(this);\n\t\t\t\t\n\t\t\t\tthis.modules[name] = module;\n\t\t\t\t\n\t\t\t\tif(mod.prototype.moduleCore){\n\t\t\t\t\tthis.modulesCore.push(module);\n\t\t\t\t}else{\n\t\t\t\t\tif(mod.moduleInitOrder){\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\n\t\t\t\t\t\t\torderedStartMods.push(module);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\torderedEndMods.push(module);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}else{\n\t\t\t\t\t\tunOrderedMods.push(module);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\t\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\n\t\t};\n\t}\n\t\n\tbindModules(tabulator, modules, core){\n\t\tvar mods = Object.values(modules);\n\t\t\n\t\tif(core){\n\t\t\tmods.forEach((mod) => {\n\t\t\t\tmod.prototype.moduleCore = true;\n\t\t\t});\n\t\t}\n\t\t\n\t\ttabulator.registerModule(mods);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class Alert extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.element = this._createAlertElement();\n\t\tthis.msgElement = this._createMsgElement();\n\t\tthis.type = null;\n \n\t\tthis.element.appendChild(this.msgElement);\n\t}\n \n\t_createAlertElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert\");\n\t\treturn el;\n\t}\n \n\t_createMsgElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert-msg\");\n\t\tel.setAttribute(\"role\", \"alert\");\n\t\treturn el;\n\t}\n \n\t_typeClass(){\n\t\treturn \"tabulator-alert-state-\" + this.type;\n\t}\n \n\talert(content, type = \"msg\"){\n\t\tif(content){\n\t\t\tthis.clear();\n\n\t\t\tthis.dispatch(\"alert-show\", type);\n \n\t\t\tthis.type = type;\n \n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\n \n\t\t\tthis.msgElement.classList.add(this._typeClass());\n \n\t\t\tif(typeof content === \"function\"){\n\t\t\t\tcontent = content();\n\t\t\t}\n \n\t\t\tif(content instanceof HTMLElement){\n\t\t\t\tthis.msgElement.appendChild(content);\n\t\t\t}else{\n\t\t\t\tthis.msgElement.innerHTML = content;\n\t\t\t}\n \n\t\t\tthis.table.element.appendChild(this.element);\n\t\t}\n\t}\n \n\tclear(){\n\t\tthis.dispatch(\"alert-hide\", this.type);\n\n\t\tif(this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n \n\t\tthis.msgElement.classList.remove(this._typeClass());\n\t}\n}","'use strict';\n\nimport defaultOptions from './defaults/options.js';\n\nimport ColumnManager from './ColumnManager.js';\nimport RowManager from './RowManager.js';\nimport FooterManager from './FooterManager.js';\n\nimport InteractionMonitor from './tools/InteractionMonitor.js';\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\nimport DataLoader from './tools/DataLoader.js';\n\nimport ExternalEventBus from './tools/ExternalEventBus.js';\nimport InternalEventBus from './tools/InternalEventBus.js';\n\nimport DeprecationAdvisor from './tools/DeprecationAdvisor.js';\n\nimport TableRegistry from './tools/TableRegistry.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nimport OptionsList from './tools/OptionsList.js';\n\nimport Alert from './tools/Alert.js';\n\nclass Tabulator {\n\t\n\tconstructor(element, options){\n\t\t\n\t\tthis.options = {};\n\t\t\n\t\tthis.columnManager = null; // hold Column Manager\n\t\tthis.rowManager = null; //hold Row Manager\n\t\tthis.footerManager = null; //holder Footer Manager\n\t\tthis.alertManager = null; //hold Alert Manager\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\n\t\tthis.externalEvents = null; //handle external event messaging\n\t\tthis.eventBus = null; //handle internal event messaging\n\t\tthis.interactionMonitor = false; //track user interaction\n\t\tthis.browser = \"\"; //hold current browser type\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\n\t\tthis.rtl = false; //check if the table is in RTL mode\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\n\t\t\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\n\t\tthis.dataLoader = false; //bind component functions\n\t\t\n\t\tthis.modules = {}; //hold all modules bound to this table\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\n\t\t\n\t\tthis.deprecationAdvisor = new DeprecationAdvisor(this);\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.destroyed = false;\n\t\t\n\t\tif(this.initializeElement(element)){\n\t\t\t\n\t\t\tthis.initializeCoreSystems(options);\n\t\t\t\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._create();\n\t\t\t});\n\t\t}\n\t\t\n\t\tTableRegistry.register(this); //register table for inter-device communication\n\t}\n\t\n\tinitializeElement(element){\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\n\t\t\tthis.element = element;\n\t\t\treturn true;\n\t\t}else if(typeof element === \"string\"){\n\t\t\tthis.element = document.querySelector(element);\n\t\t\t\n\t\t\tif(this.element){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tinitializeCoreSystems(options){\n\t\tthis.columnManager = new ColumnManager(this);\n\t\tthis.rowManager = new RowManager(this);\n\t\tthis.footerManager = new FooterManager(this);\n\t\tthis.dataLoader = new DataLoader(this);\n\t\tthis.alertManager = new Alert(this);\n\t\t\n\t\tthis.bindModules();\n\t\t\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options);\n\t\t\n\t\tthis._clearObjectPointers();\n\t\t\n\t\tthis._mapDeprecatedFunctionality();\n\t\t\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\n\t\t\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\n\t\t\n\t\tthis.dataLoader.initialize();\n\t\t// this.columnManager.initialize();\n\t\t// this.rowManager.initialize();\n\t\tthis.footerManager.initialize();\n\t}\n\t\n\t//convert deprecated functionality to new functions\n\t_mapDeprecatedFunctionality(){\n\t\t//all previously deprecated functionality removed in the 5.0 release\n\t}\n\t\n\t_clearSelection(){\n\t\t\n\t\tthis.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tif (window.getSelection) {\n\t\t\tif (window.getSelection().empty) { // Chrome\n\t\t\t\twindow.getSelection().empty();\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t} else if (document.selection) { // IE?\n\t\t\tdocument.selection.empty();\n\t\t}\n\t\t\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\n\t}\n\t\n\t//create table\n\t_create(){\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\n\t\tthis.eventBus.dispatch(\"table-building\");\n\t\t\n\t\tthis._rtlCheck();\n\t\t\n\t\tthis._buildElement();\n\t\t\n\t\tthis._initializeTable();\n\t\t\n\t\tthis._loadInitialData();\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\n\t}\n\t\n\t_rtlCheck(){\n\t\tvar style = window.getComputedStyle(this.element);\n\t\t\n\t\tswitch(this.options.textDirection){\n\t\t\tcase\"auto\":\n\t\t\t\tif(style.direction !== \"rtl\"){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"rtl\":\n\t\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\t\tthis.rtl = true;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"ltr\":\n\t\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis.rtl = false;\n\t\t}\n\t}\n\t\n\t//clear pointers to objects in default config object\n\t_clearObjectPointers(){\n\t\tthis.options.columns = this.options.columns.slice(0);\n\t\t\n\t\tif(Array.isArray(this.options.data) && !this.options.reactiveData){\n\t\t\tthis.options.data = this.options.data.slice(0);\n\t\t}\n\t}\n\t\n\t//build tabulator element\n\t_buildElement(){\n\t\tvar element = this.element,\n\t\toptions = this.options,\n\t\tnewElement;\n\t\t\n\t\tif(element.tagName === \"TABLE\"){\n\t\t\tthis.originalElement = this.element;\n\t\t\tnewElement = document.createElement(\"div\");\n\t\t\t\n\t\t\t//transfer attributes to new element\n\t\t\tvar attributes = element.attributes;\n\t\t\t\n\t\t\t// loop through attributes and apply them on div\n\t\t\tfor(var i in attributes){\n\t\t\t\tif(typeof attributes[i] == \"object\"){\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// replace table with div element\n\t\t\telement.parentNode.replaceChild(newElement, element);\n\t\t\t\n\t\t\tthis.element = element = newElement;\n\t\t}\n\t\t\n\t\telement.classList.add(\"tabulator\");\n\t\telement.setAttribute(\"role\", \"grid\");\n\t\t\n\t\t//empty element\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\t//set table height\n\t\tif(options.height){\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\t\telement.style.height = options.height;\n\t\t}\n\t\t\n\t\t//set table min height\n\t\tif(options.minHeight !== false){\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\t\telement.style.minHeight = options.minHeight;\n\t\t}\n\t\t\n\t\t//set table maxHeight\n\t\tif(options.maxHeight !== false){\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\t\telement.style.maxHeight = options.maxHeight;\n\t\t}\n\t}\n\t\n\t//initialize core systems and modules\n\t_initializeTable(){\n\t\tvar element = this.element,\n\t\toptions = this.options;\n\t\t\n\t\tthis.interactionMonitor.initialize();\n\t\t\n\t\tthis.columnManager.initialize();\n\t\tthis.rowManager.initialize();\n\t\t\n\t\tthis._detectBrowser();\n\t\t\n\t\t//initialize core modules\n\t\tthis.modulesCore.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\t//build table elements\n\t\telement.appendChild(this.columnManager.getElement());\n\t\telement.appendChild(this.rowManager.getElement());\n\t\t\n\t\tif(options.footerElement){\n\t\t\tthis.footerManager.activate();\n\t\t}\n\t\t\n\t\tif(options.autoColumns && options.data){\n\t\t\t\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t\t}\n\t\t\n\t\t//initialize regular modules\n\t\tthis.modulesRegular.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\tthis.columnManager.setColumns(options.columns);\n\t\t\n\t\tthis.eventBus.dispatch(\"table-built\");\n\t}\n\t\n\t_loadInitialData(){\n\t\tthis.dataLoader.load(this.options.data);\n\t\tthis.columnManager.verticalAlignHeaders();\n\t}\n\t\n\t//deconstructor\n\tdestroy(){\n\t\tvar element = this.element;\n\t\t\n\t\tthis.destroyed = true;\n\t\t\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\n\t\t\n\t\tthis.eventBus.dispatch(\"table-destroy\");\n\t\t\n\t\t//clear row data\n\t\tthis.rowManager.destroy();\n\t\t\n\t\t//clear DOM\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\telement.classList.remove(\"tabulator\");\n\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\n\t}\n\t\n\t_detectBrowser(){\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\n\t\t\n\t\tif(ua.indexOf(\"Trident\") > -1){\n\t\t\tthis.browser = \"ie\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\n\t\t\tthis.browser = \"edge\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\n\t\t\tthis.browser = \"firefox\";\n\t\t\tthis.browserSlow = false;\n\t\t}else if(ua.indexOf(\"Mac OS\") > -1){\n\t\t\tthis.browser = \"safari\";\n\t\t\tthis.browserSlow = false;\n\t\t}else{\n\t\t\tthis.browser = \"other\";\n\t\t\tthis.browserSlow = false;\n\t\t}\n\t\t\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4));\n\t}\n\t\n\tinitGuard(func, msg){\n\t\tvar stack, line;\n\t\t\n\t\tif(this.options.debugInitialization && !this.initialized){\n\t\t\tif(!func){\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\n\t\t\t\t\n\t\t\t\tif(line[0] == \" \"){\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\n\t\t\t\t}else{\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\n\t\t}\n\t\t\n\t\treturn this.initialized;\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\t//block table redrawing\n\tblockRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\n\t\t\n\t\tthis.rowManager.blockRedraw();\n\t\tthis.columnManager.blockRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\n\n\t\tthis.rowManager.restoreRedraw();\n\t\tthis.columnManager.restoreRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\n\t}\n\t\n\t//load data\n\tsetData(data, params, config){\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, false);\n\t}\n\t\n\t//clear data\n\tclearData(){\n\t\tthis.initGuard();\n\t\t\n\t\tthis.dataLoader.blockActiveLoad();\n\t\tthis.rowManager.clearData();\n\t}\n\t\n\t//get table data array\n\tgetData(active){\n\t\treturn this.rowManager.getData(active);\n\t}\n\t\n\t//get table data array count\n\tgetDataCount(active){\n\t\treturn this.rowManager.getDataCount(active);\n\t}\n\t\n\t//replace data, keeping table in position with same sort\n\treplaceData(data, params, config){\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, true, true);\n\t}\n\t\n\t//update table data\n\tupdateData(data){\n\t\tvar responses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\tresponses++;\n\t\t\t\t\t\t\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\t\treject(\"Update Error - Unable to update row\", item, e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\treject(\"Update Error - Unable to find row\", item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\taddData(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data){\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\n\t\t\t\t\t.then((rows) => {\n\t\t\t\t\t\tvar output = [];\n\t\t\t\t\t\n\t\t\t\t\t\trows.forEach(function(row){\n\t\t\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\tresolve(output);\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//update table data\n\tupdateOrAddData(data){\n\t\tvar rows = [],\n\t\tresponses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tresponses++;\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.rowManager.addRows(item)\n\t\t\t\t\t\t\t.then((newRows)=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//get row object\n\tgetRow(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//get row object\n\tgetRowFromPosition(position){\n\t\tvar row = this.rowManager.getRowFromPosition(position);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//delete row from table\n\tdeleteRow(index){\n\t\tvar foundRows = [];\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(!Array.isArray(index)){\n\t\t\tindex = [index];\n\t\t}\n\t\t\n\t\t//find matching rows\n\t\tfor(let item of index){\n\t\t\tlet row = this.rowManager.findRow(item, true);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\tfoundRows.push(row);\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort((a, b) => {\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\t\t\n\t\t//delete rows\n\t\tfoundRows.forEach((row) =>{\n\t\t\trow.delete();\n\t\t});\n\t\t\n\t\tthis.rowManager.reRenderInPosition();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\t//add row to table\n\taddRow(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\treturn this.rowManager.addRows(data, pos, index, true)\n\t\t\t.then((rows)=>{\n\t\t\t\treturn rows[0].getComponent();\n\t\t\t});\n\t}\n\t\n\t//update a row if it exists otherwise create it\n\tupdateOrAddRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn row.getComponent();\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn this.rowManager.addRows(data)\n\t\t\t\t.then((rows)=>{\n\t\t\t\t\treturn rows[0].getComponent();\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\t//update row data\n\tupdateRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\n\t\t}\n\t}\n\t\n\t//scroll to row in DOM\n\tscrollToRow(index, position, ifVisible){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible);\n\t\t}else{\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\n\t\t}\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tvar fromRow = this.rowManager.findRow(from);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromRow){\n\t\t\tfromRow.moveToRow(to, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t\t}\n\t}\n\t\n\tgetRows(active){\n\t\treturn this.rowManager.getComponents(active);\t\n\t}\n\t\n\t//get position of row in table\n\tgetRowPosition(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getPosition();\n\t\t}else{\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t/////////////// Column Functions ///////////////\n\tsetColumns(definition){\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\n\t\t\n\t\tthis.columnManager.setColumns(definition);\n\t}\n\t\n\tgetColumns(structured){\n\t\treturn this.columnManager.getComponents(structured);\n\t}\n\t\n\tgetColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tif(column){\n\t\t\treturn column.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tgetColumnDefinitions(){\n\t\treturn this.columnManager.getDefinitionTree();\n\t}\n\t\n\tshowColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.show();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\thideColumn(field){\n\t\tvar column = this.columnManager.findColumn(field); \n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.hide();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\ttoggleColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tif(column.visible){\n\t\t\t\tcolumn.hide();\n\t\t\t}else{\n\t\t\t\tcolumn.show();\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\taddColumn(definition, before, field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.columnManager.addColumn(definition, before, column)\n\t\t\t.then((column) => {\n\t\t\t\treturn column.getComponent();\n\t\t\t});\n\t}\n\t\n\tdeleteColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.delete();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tupdateColumnDefinition(field, definition){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.updateDefinition(definition);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tvar fromColumn = this.columnManager.findColumn(from),\n\t\ttoColumn = this.columnManager.findColumn(to);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromColumn){\n\t\t\tif(toColumn){\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t\t}\n\t}\n\t\n\t//scroll to column in DOM\n\tscrollToColumn(field, position, ifVisible){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this.columnManager.findColumn(field);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//////////// General Public Functions ////////////\n\t//redraw list without updating data\n\tredraw(force){\n\t\tthis.initGuard();\n\n\t\tthis.columnManager.redraw(force);\n\t\tthis.rowManager.redraw(force);\n\t}\n\t\n\tsetHeight(height){\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.initializeRenderer();\n\t\tthis.rowManager.redraw(true);\n\t}\n\t\n\t//////////////////// Event Bus ///////////////////\n\t\n\ton(key, callback){\n\t\tthis.externalEvents.subscribe(key, callback);\n\t}\n\t\n\toff(key, callback){\n\t\tthis.externalEvents.unsubscribe(key, callback);\n\t}\n\t\n\tdispatchEvent(){\n\t\tvar args = Array.from(arguments);\n\t\targs.shift();\n\t\t\n\t\tthis.externalEvents.dispatch(...arguments);\n\t}\n\n\t//////////////////// Alerts ///////////////////\n\n\talert(contents, type){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.alert(contents, type);\n\t}\n\n\tclearAlert(){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.clear();\n\t}\n\t\n\t////////////// Extension Management //////////////\n\tmodExists(plugin, required){\n\t\tif(this.modules[plugin]){\n\t\t\treturn true;\n\t\t}else{\n\t\t\tif(required){\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule(key){\n\t\tvar mod = this.modules[key];\n\t\t\n\t\tif(!mod){\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\n\t\t}\n\t\t\n\t\treturn mod;\n\t}\n}\n\n//default setup options\nTabulator.defaultOptions = defaultOptions;\n\n//bind modules and static functionality\nnew ModuleBinder(Tabulator);\n\nexport default Tabulator;\n","export default {};","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultAccessors from './defaults/accessors.js';\n\nclass Accessor extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n\n\t\tthis.registerColumnOption(\"accessor\");\n\t\tthis.registerColumnOption(\"accessorParams\");\n\t\tthis.registerColumnOption(\"accessorData\");\n\t\tthis.registerColumnOption(\"accessorDataParams\");\n\t\tthis.registerColumnOption(\"accessorDownload\");\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\n\t\tthis.registerColumnOption(\"accessorClipboard\");\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\n\t\tthis.registerColumnOption(\"accessorPrint\");\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\n\t}\n\n\t//initialize column accessor\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\taccessor;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\taccessor:accessor,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.accessor = config;\n\t\t}\n\t}\n\n\tlookupAccessor(value){\n\t\tvar accessor = false;\n\n\t\t//set column accessor\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Accessor.accessors[value]){\n\t\t\t\t\taccessor = Accessor.accessors[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\taccessor = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn accessor;\n\t}\n\n\t//apply accessor to row\n\ttransformRow(row, type){\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\trowComponent = row.getComponent();\n\n\t\t//clone data object with deep copy to isolate internal data from returned result\n\t\tvar data = Helpers.deepClone(row.data || {});\n\n\t\tthis.table.columnManager.traverse(function(column){\n\t\t\tvar value, accessor, params, colComponent;\n\n\t\t\tif(column.modules.accessor){\n\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\t\tif(value != \"undefined\"){\n\t\t\t\t\t\tcolComponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n}\n\n//load defaults\nAccessor.moduleName = \"accessor\";\nAccessor.accessors = defaultAccessors;\n\nexport default Accessor;","export default {\n\tmethod: \"GET\",\n};","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nfunction serializeParams(params){\n\tvar output = generateParamsList(params),\n\tencoded = [];\n\n\toutput.forEach(function(item){\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t});\n\n\treturn encoded.join(\"&\");\n}\n\nexport default function(url, config, params){\n\tif(url){\n\t\tif(params && Object.keys(params).length){\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\n\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n}","export default function(url, config, params){\n\tvar contentType;\n\n\treturn new Promise((resolve, reject) => {\n\t\t//set url\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\n\n\t\t//set body content if not GET request\n\t\tif(config.method.toUpperCase() != \"GET\"){\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\n\t\t\tif(contentType){\n\n\t\t\t\tfor(var key in contentType.headers){\n\t\t\t\t\tif(!config.headers){\n\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif(url){\n\t\t\t//configure headers\n\t\t\tif(typeof config.headers === \"undefined\"){\n\t\t\t\tconfig.headers = {};\n\t\t\t}\n\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\n\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t}\n\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\tif(typeof config.mode === \"undefined\"){\n\t\t\t\tconfig.mode = \"cors\";\n\t\t\t}\n\n\t\t\tif(config.mode == \"cors\"){\n\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\n\t\t\t\t\tconfig.headers[\"Origin\"] = window.location.origin;\n\t\t\t\t}\n \n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//send request\n\t\t\tfetch(url, config)\n\t\t\t\t.then((response)=>{\n\t\t\t\t\tif(response.ok) {\n\t\t\t\t\t\tresponse.json()\n\t\t\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\t}).catch((error)=>{\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error)=>{\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\tresolve([]);\n\t\t}\n\t});\n}","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nexport default {\n\t\"json\":{\n\t\theaders:{\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tbody:function(url, config, params){\n\t\t\treturn JSON.stringify(params);\n\t\t},\n\t},\n\t\"form\":{\n\t\theaders:{\n\t\t},\n\t\tbody:function(url, config, params){\n\n\t\t\tvar output = generateParamsList(params),\n\t\t\tform = new FormData();\n\n\t\t\toutput.forEach(function(item){\n\t\t\t\tform.append(item.key, item.value);\n\t\t\t});\n\n\t\t\treturn form;\n\t\t},\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultConfig from './defaults/config.js';\nimport defaultURLGenerator from './defaults/urlGenerator.js';\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\n\nclass Ajax extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {}; //hold config object for ajax request\n\t\tthis.url = \"\"; //request URL\n\t\tthis.urlGenerator = false;\n\t\tthis.params = false; //request parameters\n\t\t\n\t\tthis.loaderPromise = false;\n\t\t\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\n\t\t\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\n\t\t\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\n\t}\n\t\n\t//initialize setup options\n\tinitialize(){\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\n\t\t\n\t\tif(this.table.options.ajaxURL){\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\n\t\t}\n\n\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\n\t\t\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\n\t}\n\t\n\trequestParams(data, config, silent, params){\n\t\tvar ajaxParams = this.table.options.ajaxParams;\n\t\t\n\t\tif(ajaxParams){\n\t\t\tif(typeof ajaxParams === \"function\"){\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\n\t\t\t}\n\t\t\t\n\t\t\tparams = Object.assign(Object.assign({}, ajaxParams), params);\n\t\t}\t\t\n\t\t\n\t\treturn params;\n\t}\n\t\n\trequestDataCheck(data, params, config, silent){\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\n\t}\n\t\n\trequestData(url, params, config, silent, previousData){\n\t\tvar ajaxConfig;\n\t\t\n\t\tif(!previousData && this.requestDataCheck(url)){\n\t\t\tif(url){\n\t\t\t\tthis.setUrl(url);\n\t\t\t}\n\t\t\t\n\t\t\tajaxConfig = this.generateConfig(config);\n\t\t\t\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\n\t\t}else{\n\t\t\treturn previousData;\n\t\t}\n\t}\n\t\n\tsetDefaultConfig(config = {}){\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\n\n\t\tif(typeof config == \"string\"){\n\t\t\tthis.config.method = config;\n\t\t}else{\n\t\t\tObject.assign(this.config, config);\n\t\t}\n\t}\n\t\n\t//load config object\n\tgenerateConfig(config = {}){\n\t\tvar ajaxConfig = Object.assign({}, this.config);\n\t\t\n\t\tif(typeof config == \"string\"){\n\t\t\tajaxConfig.method = config;\n\t\t}else{\n\t\t\tObject.assign(ajaxConfig, config);\n\t\t}\n\t\t\n\t\treturn ajaxConfig;\n\t}\n\t\n\t//set request url\n\tsetUrl(url){\n\t\tthis.url = url;\n\t}\n\t\n\t//get request url\n\tgetUrl(){\n\t\treturn this.url;\n\t}\n\t\n\t//send ajax request\n\tsendRequest(url, params, config){\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\n\t\t\treturn this.loaderPromise(url, config, params)\n\t\t\t\t.then((data)=>{\n\t\t\t\t\tif(this.table.options.ajaxResponse){\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n}\n\nAjax.moduleName = \"ajax\";\n\n//load defaults\nAjax.defaultConfig = defaultConfig;\nAjax.defaultURLGenerator = defaultURLGenerator;\nAjax.defaultLoaderPromise = defaultLoaderPromise;\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\n\nexport default Ajax;","export default {\n\treplace:function(data){\n\t\treturn this.table.setData(data);\n\t},\n\tupdate:function(data){\n\t\treturn this.table.updateOrAddData(data);\n\t},\n\tinsert:function(data){\n\t\treturn this.table.addData(data);\n\t},\n\trange:function(data){\n\t\tvar rows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, startRow, rowWidth, dataLength;\n\n\t\tdataLength = data.length;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\t\t\t\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\trows = this.table.rowManager.activeRows.slice();\n\t\t\t\tstartRow = rows.indexOf(startCell.row);\n\n\t\t\t\tif(singleCell){\n\t\t\t\t\trowWidth = data.length;\n\t\t\t\t}else{\n\t\t\t\t\trowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(startRow >-1){\n\t\t\t\t\tthis.table.blockRedraw();\n\t\t\t\t\t\n\t\t\t\t\trows = rows.slice(startRow, startRow + rowWidth);\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row, i) => {\n\t\t\t\t\t\trow.updateData(data[i % dataLength]);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.table.restoreRedraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n};","export default {\n\ttable:function(clipboard){\n\t\tvar data = [],\n\t\theaderFindSuccess = true,\n\t\tcolumns = this.table.columnManager.columns,\n\t\tcolumnMap = [],\n\t\trows = [];\n\t\t\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\n\t\tclipboard.forEach(function(row){\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\t\t\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\n\t\t\t\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function(value){\n\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(column){\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t}else{\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//check if column headers are present by field\n\t\t\tif(!headerFindSuccess){\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\t\t\t\t\n\t\t\t\tdata[0].forEach(function(value){\n\t\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t}else{\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(!headerFindSuccess){\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//remove header row if found\n\t\t\tif(headerFindSuccess){\n\t\t\t\tdata.shift();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach(function(item){\n\t\t\t\tvar row = {};\n\t\t\t\t\n\t\t\t\titem.forEach(function(value, i){\n\t\t\t\t\tif(columnMap[i]){\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\trows.push(row);\n\t\t\t});\n\t\t\t\n\t\t\treturn rows;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t},\n\trange:function(clipboard){\n\t\tvar data = [],\n\t\trows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, colWidth, columnMap, startCol;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\t//get data from clipboard into array of columns and rows.\n\t\t\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tclipboard.forEach(function(row){\n\t\t\t\t\tdata.push(row.split(\"\\t\"));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(data.length){\n\t\t\t\t\tcolumnMap = this.table.columnManager.getVisibleColumnsByIndex();\n\t\t\t\t\tstartCol = columnMap.indexOf(startCell.column);\n\n\t\t\t\t\tif(startCol > -1){\n\t\t\t\t\t\tif(singleCell){\n\t\t\t\t\t\t\tcolWidth = data[0].length;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcolWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcolumnMap = columnMap.slice(startCol, startCol + colWidth);\n\n\t\t\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\t\t\tvar row = {};\n\t\t\t\t\t\t\tvar itemLength = item.length;\n\n\t\t\t\t\t\t\tcolumnMap.forEach(function(col, i){\n\t\t\t\t\t\t\t\trow[col.field] = item[i % itemLength];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trows.push(row);\t\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn rows;\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n};","import Module from '../../core/Module.js';\n\nimport defaultPasteActions from './defaults/pasteActions.js';\nimport defaultPasteParsers from './defaults/pasteParsers.js';\n\nclass Clipboard extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = true;\n\t\tthis.pasteParser = function(){};\n\t\tthis.pasteAction = function(){};\n\t\tthis.customSelection = false;\n\t\tthis.rowRange = false;\n\t\tthis.blocked = true; //block copy actions not originating from this command\n\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRECATED - REMOVE in 5.0\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\n\n\t\tthis.registerColumnOption(\"clipboard\");\n\t\tthis.registerColumnOption(\"titleClipboard\");\n\t}\n\n\tinitialize(){\n\t\tthis.mode = this.table.options.clipboard;\n\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\t\tif(this.mode === true || this.mode === \"copy\"){\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\n\t\t\t\tvar plain, html, list;\n\n\t\t\t\tif(!this.blocked){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif(this.customSelection){\n\t\t\t\t\t\tplain = this.customSelection;\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\n\t\t\t\t\t\tlist = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\n\n\t\t\t\t\t\thtml = this.table.modules.export.generateHTMLTable(list);\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\n\n\t\t\t\t\tthis.reset();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(this.mode === true || this.mode === \"paste\"){\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\n\t\t\t\tthis.paste(e);\n\t\t\t});\n\t\t}\n\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\n\t}\n\n\treset(){\n\t\tthis.blocked = true;\n\t\tthis.customSelection = false;\n\t}\n\n\tgeneratePlainContent (list) {\n\t\tvar output = [];\n\n\t\tlist.forEach((row) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach((col) => {\n\t\t\t\tvar value = \"\";\n\n\t\t\t\tif(col){\n\n\t\t\t\t\tif(row.type === \"group\"){\n\t\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t\t}\n\n\t\t\t\t\tif(col.value === null){\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowData.push(value);\n\t\t\t});\n\n\t\t\toutput.push(rowData.join(\"\\t\"));\n\t\t});\n\n\t\treturn output.join(\"\\n\");\n\t}\n\n\tcopy (range, internal) {\n\t\tvar sel, textRange;\n\t\tthis.blocked = false;\n\t\tthis.customSelection = false;\n\t\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents(this.table.element);\n\t\t\t\tsel = window.getSelection();\n\n\t\t\t\tif (sel.toString() && internal) {\n\t\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t\t}\n\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(range);\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\t\ttextRange = document.body.createTextRange();\n\t\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\t\ttextRange.select();\n\t\t\t}\n\n\t\t\tdocument.execCommand('copy');\n\n\t\t\tif (sel) {\n\t\t\t\tsel.removeAllRanges();\n\t\t\t}\n\t\t}\n\t}\n\n\t//PASTE EVENT HANDLING\n\tsetPasteAction(action){\n\n\t\tswitch(typeof action){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\n\n\t\t\t\tif(!this.pasteAction){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteAction = action;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetPasteParser(parser){\n\t\tswitch(typeof parser){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\n\n\t\t\t\tif(!this.pasteParser){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteParser = parser;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpaste(e){\n\t\tvar data, rowData, rows;\n\n\t\tif(this.checkPasteOrigin(e)){\n\n\t\t\tdata = this.getPasteData(e);\n\n\t\t\trowData = this.pasteParser.call(this, data);\n\n\t\t\tif(rowData){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif(this.table.modExists(\"mutator\")){\n\t\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t\t}\n\n\t\t\t\trows = this.pasteAction.call(this, rowData);\n\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\n\t\t\t}\n\t\t}\n\t}\n\n\tmutateData(data){\n\t\tvar output = [];\n\n\t\tif(Array.isArray(data)){\n\t\t\tdata.forEach((row) => {\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t\t});\n\t\t}else{\n\t\t\toutput = data;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\n\tcheckPasteOrigin(e){\n\t\tvar valid = true;\n\t\tvar blocked = this.confirm(\"clipboard-paste\", [e]);\n\n\t\tif(blocked || ![\"DIV\", \"SPAN\"].includes(e.target.tagName)){\n\t\t\tvalid = false;\n\t\t}\n\n\t\treturn valid;\n\t}\n\n\tgetPasteData(e){\n\t\tvar data;\n\n\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\tdata = window.clipboardData.getData('Text');\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\t\tdata = e.clipboardData.getData('text/plain');\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t\t}\n\n\t\treturn data;\n\t}\n}\n\nClipboard.moduleName = \"clipboard\";\n\n//load defaults\nClipboard.pasteActions = defaultPasteActions;\nClipboard.pasteParsers = defaultPasteParsers;\n\nexport default Clipboard;","class CalcComponent{\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n}\n\nexport default CalcComponent;","export default {\n\t\"avg\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn Number(sum) + Number(value);\n\t\t\t});\n\n\t\t\toutput = output / values.length;\n\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t}\n\n\t\treturn parseFloat(output).toString();\n\t},\n\t\"max\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value > output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"min\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value < output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"sum\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t});\n\t\t}\n\n\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t},\n\t\"concat\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn String(sum) + String(value);\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"count\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tif(value){\n\t\t\t\t\toutput ++;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"unique\":function(values, data, calcParams){\n\t\tvar unique = values.filter((value, index) => {\n\t\t\treturn (values || value === 0) && values.indexOf(value) === index;\n\t\t});\n\n\t\treturn unique.length;\n\t},\n};","import Module from '../../core/Module.js';\n\nimport CalcComponent from './CalcComponent.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\nimport Row from '../../core/row/Row.js';\n\nimport defaultCalculations from './defaults/calculations.js';\n\nclass ColumnCalcs extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.topCalcs = [];\n\t\tthis.botCalcs = [];\n\t\tthis.genColumn = false;\n\t\tthis.topElement = this.createElement();\n\t\tthis.botElement = this.createElement();\n\t\tthis.topRow = false;\n\t\tthis.botRow = false;\n\t\tthis.topInitialized = false;\n\t\tthis.botInitialized = false;\n\t\t\n\t\tthis.blocked = false;\n\t\tthis.recalcAfterBlock = false;\n\t\t\n\t\tthis.registerTableOption(\"columnCalcs\", true);\n\t\t\n\t\tthis.registerColumnOption(\"topCalc\");\n\t\tthis.registerColumnOption(\"topCalcParams\");\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\n\t\tthis.registerColumnOption(\"bottomCalc\");\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-calcs-holder\");\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\n\t\t\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t\t\n\t\tthis.subscribe(\"redraw-blocked\", this.blockRedraw.bind(this));\n\t\tthis.subscribe(\"redraw-restored\", this.restoreRedraw.bind(this));\n\n\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\n\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\t\n\ttableRedraw(force){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t\n\t\tif(force){\n\t\t\tthis.redraw();\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.blocked = true;\n\t\tthis.recalcAfterBlock = false;\n\t}\n\t\n\t\n\trestoreRedraw(){\n\t\tthis.blocked = false;\n\t\t\n\t\tif(this.recalcAfterBlock){\n\t\t\tthis.recalcAfterBlock = false;\n\t\t\tthis.recalcActiveRowsRefresh();\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tuserRecalc(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tblockCheck(){\n\t\tif(this.blocked){\n\t\t\tthis.recalcAfterBlock = true;\n\t\t}\n\t\t\n\t\treturn this.blocked;\n\t}\n\t\n\tvisibleRows(viewable, rows){\n\t\tif(this.topRow){\n\t\t\trows.unshift(this.topRow);\n\t\t}\n\t\t\n\t\tif(this.botRow){\n\t\t\trows.push(this.botRow);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.recalcRowGroup(row);\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRowsRefresh(){\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\n\t\t\tthis.recalcAll();\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRows(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\tcellValueChanged(cell){\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\n\t\t\tif(this.table.options.groupBy){\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\n\t\t\t\t\tthis.recalcActiveRows();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeColumnCheck(column){\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//initialize column calcs\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\tvar config = {\n\t\t\ttopCalcParams:def.topCalcParams || {},\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\n\t\t};\n\t\t\n\t\tif(def.topCalc){\n\t\t\t\n\t\t\tswitch(typeof def.topCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.topCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.topCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeTopRow();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tif(def.bottomCalc){\n\t\t\tswitch(typeof def.bottomCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.botCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.botCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeBottomRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t//dummy functions to handle being mock column manager\n\tregisterColumnField(){}\n\t\n\tremoveCalcs(){\n\t\tvar changed = false;\n\t\t\n\t\tif(this.topInitialized){\n\t\t\tthis.topInitialized = false;\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(this.botInitialized){\n\t\t\tthis.botInitialized = false;\n\t\t\tthis.footerRemove(this.botElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\treinitializeCalcs(){\n\t\tif(this.topCalcs.length){\n\t\t\tthis.initializeTopRow();\n\t\t}\n\n\t\tif(this.botCalcs.length){\n\t\t\tthis.initializeBottomRow();\n\t\t}\n\t}\n\t\n\tinitializeTopRow(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tif(!this.topInitialized){\n\n\t\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\t\tfragment.appendChild(this.topElement);\n\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\t\t\tthis.topInitialized = true;\n\t\t}\n\t}\n\t\n\tinitializeBottomRow(){\n\t\tif(!this.botInitialized){\n\t\t\tthis.footerPrepend(this.botElement);\n\t\t\tthis.botInitialized = true;\n\t\t}\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tif(this.botInitialized && this.botRow){\n\t\t\tthis.botElement.scrollLeft = left;\n\t\t}\n\t}\n\t\n\trecalc(rows){\n\t\tvar data, row;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(this.topInitialized || this.botInitialized){\n\t\t\t\tdata = this.rowsToData(rows);\n\t\t\t\t\n\t\t\t\tif(this.topInitialized){\n\t\t\t\t\tif(this.topRow){\n\t\t\t\t\t\tthis.topRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"top\", data);\n\t\t\t\t\tthis.topRow = row;\n\t\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\n\t\t\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.botInitialized){\n\t\t\t\t\tif(this.botRow){\n\t\t\t\t\t\tthis.botRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"bottom\", data);\n\t\t\t\t\tthis.botRow = row;\n\t\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\n\t\t\t\t\tthis.botElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t\t\t\n\t\t\t\t//set resizable handles\n\t\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcRowGroup(row){\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n\t}\n\t\n\trecalcAll(){\n\t\tif(this.topCalcs.length || this.botCalcs.length){\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\n\t\t\t\t\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\n\t\t\t\t\n\t\t\t\tgroups.forEach((group) => {\n\t\t\t\t\tthis.recalcGroup(group);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcGroup(group){\n\t\tvar data, rowData;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(group){\n\t\t\t\tif(group.calcs){\n\t\t\t\t\tif(group.calcs.bottom){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(group.calcs.top){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"top\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//generate top stats row\n\tgenerateTopRow(rows){\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\n\t}\n\t//generate bottom stats row\n\tgenerateBottomRow(rows){\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n\t}\n\t\n\trowsToData(rows){\n\t\tvar data = [];\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tdata.push(row.getData());\n\t\t\t\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\t\tdata = data.concat(children);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//generate stats row\n\tgenerateRow(pos, data){\n\t\tvar rowData = this.generateRowData(pos, data),\n\t\trow;\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.disable();\n\t\t}\n\t\t\n\t\trow = new Row(rowData, this, \"calc\");\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.enable();\n\t\t}\n\t\t\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\t\t\n\t\trow.component = false;\n\t\t\n\t\trow.getComponent = () => {\n\t\t\tif(!row.component){\n\t\t\t\trow.component = new CalcComponent(row);\n\t\t\t}\n\t\t\t\n\t\t\treturn row.component;\n\t\t};\n\t\t\n\t\trow.generateCells = () => {\n\t\t\t\n\t\t\tvar cells = [];\n\t\t\t\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\t\n\t\t\t\t//set field name of mock column\n\t\t\t\tthis.genColumn.setField(column.getField());\n\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\n\t\t\t\t\n\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\t\tparams:{}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//ensure css class definition is replicated to calculation cell\n\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\n\t\t\t\t\n\t\t\t\t//generate cell and assign to correct column\n\t\t\t\tvar cell = new Cell(this.genColumn, row);\n\t\t\t\tcell.getElement();\n\t\t\t\tcell.column = column;\n\t\t\t\tcell.setWidth();\n\t\t\t\t\n\t\t\t\tcolumn.cells.push(cell);\n\t\t\t\tcells.push(cell);\n\t\t\t\t\n\t\t\t\tif(!column.visible){\n\t\t\t\t\tcell.hide();\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\trow.cells = cells;\n\t\t};\n\t\t\n\t\treturn row;\n\t}\n\t\n\t//generate stats row\n\tgenerateRowData(pos, data){\n\t\tvar rowData = {},\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t\tparams, paramKey;\n\t\t\n\t\tcalcs.forEach(function(column){\n\t\t\tvar values = [];\n\t\t\t\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\n\t\t\t\tdata.forEach(function(item){\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tparamKey = type + \"Params\";\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\t\t\t\t\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowData;\n\t}\n\t\n\thasTopCalcs(){\n\t\treturn\t!!(this.topCalcs.length);\n\t}\n\t\n\thasBottomCalcs(){\n\t\treturn\t!!(this.botCalcs.length);\n\t}\n\t\n\t//handle table redraw\n\tredraw(){\n\t\tif(this.topRow){\n\t\t\tthis.topRow.normalizeHeight(true);\n\t\t}\n\t\tif(this.botRow){\n\t\t\tthis.botRow.normalizeHeight(true);\n\t\t}\n\t}\n\t\n\t//return the calculated\n\tgetResults(){\n\t\tvar results = {},\n\t\tgroups;\n\t\t\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\t\t\t\n\t\t\tgroups.forEach((group) => {\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\n\t\t\t});\n\t\t}else{\n\t\t\tresults = {\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\n\t\t\t};\n\t\t}\n\t\t\n\t\treturn results;\n\t}\n\t\n\t//get results from a group\n\tgetGroupResults(group){\n\t\tvar groupObj = group._getSelf(),\n\t\tsubGroups = group.getSubGroups(),\n\t\tsubGroupResults = {},\n\t\tresults = {};\n\t\t\n\t\tsubGroups.forEach((subgroup) => {\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\n\t\t});\n\t\t\n\t\tresults = {\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\t\tgroups: subGroupResults,\n\t\t};\n\t\t\n\t\treturn results;\n\t}\n\t\n\tadjustForScrollbar(width){\n\t\tif(this.botRow){\n\t\t\tif(this.table.rtl){\n\t\t\t\tthis.botElement.style.paddingLeft = width + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.botElement.style.paddingRight = width + \"px\";\n\t\t\t}\n\t\t}\n\t}\n}\n\nColumnCalcs.moduleName = \"columnCalcs\";\n\n//load defaults\nColumnCalcs.calculations = defaultCalculations;\n\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\n\nimport Row from '../../core/row/Row.js';\n\nimport RowComponent from '../../core/row/RowComponent.js';\n\nclass DataTree extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.indent = 10;\n\t\tthis.field = \"\";\n\t\tthis.collapseEl = null;\n\t\tthis.expandEl = null;\n\t\tthis.branchEl = null;\n\t\tthis.elementField = false;\n\n\t\tthis.startOpen = function(){};\n\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//selecting a parent row selects its children\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.dataTree){\n\t\t\tvar dummyEl = null,\n\t\t\toptions = this.table.options;\n\n\t\t\tthis.field = options.dataTreeChildField;\n\t\t\tthis.indent = options.dataTreeChildIndent;\n\n\t\t\tif(this.options(\"movableRows\")){\n\t\t\t\tconsole.warn(\"The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeBranchElement){\n\n\t\t\t\tif(options.dataTreeBranchElement === true){\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t\t\t}else{\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch-empty\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeCollapseElement){\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.collapseEl.tabIndex = 0;\n\t\t\t\tthis.collapseEl.innerHTML = \"
    \";\n\t\t\t}\n\n\t\t\tif(options.dataTreeExpandElement){\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.expandEl.tabIndex = 0;\n\t\t\t\tthis.expandEl.innerHTML = \"
    \";\n\t\t\t}\n\n\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.bind(this));\n\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\n\t\t}\n\t}\n\n\ttableRedrawing(force){\n\t\tvar rows;\n\n\t\tif(force){\n\t\t\trows = this.table.rowManager.getRows();\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.reinitializeRowChildren(row);\n\t\t\t});\n\t\t}\n\t}\n\n\tinitializeElementField(){\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\n\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\t}\n\t\n\tgetRowChildren(row){\n\t\treturn this.getTreeChildren(row, true);\n\t}\n\n\tcolumnMoving(){\n\t\tvar rows = [];\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\trowDataChanged(row, visible, updatedData){\n\t\tif(this.redrawNeeded(updatedData)){\n\t\t\tthis.initializeRow(row);\n\n\t\t\tif(visible){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tcellValueChanged(cell){\n\t\tvar field = cell.column.getField();\n\n\t\tif(field === this.elementField){\n\t\t\tthis.layoutRow(cell.row);\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar childArray = row.getData()[this.field];\n\t\tvar isArray = Array.isArray(childArray);\n\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t\t}\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t\t}\n\n\t\trow.modules.dataTree = {\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\t\tchildren:children,\n\t\t};\n\t}\n\n\treinitializeRowChildren(row){\n\t\tvar children = this.getTreeChildren(row, false, true);\n\n\t\tchildren.forEach(function(child){\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n\n\tlayoutRow(row){\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t\tel = cell.getElement(),\n\t\tconfig = row.modules.dataTree;\n\n\t\tif(config.branchEl){\n\t\t\tif(config.branchEl.parentNode){\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t\t}\n\t\t\tconfig.branchEl = false;\n\t\t}\n\n\t\tif(config.controlEl){\n\t\t\tif(config.controlEl.parentNode){\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t\t}\n\t\t\tconfig.controlEl = false;\n\t\t}\n\n\t\tthis.generateControlElement(row, el);\n\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\t\tif(config.index){\n\t\t\tif(this.branchEl){\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateControlElement(row, el){\n\t\tvar config = row.modules.dataTree,\n\t\toldControl = config.controlEl;\n\n\t\tel = el || row.getCells()[0].getElement();\n\n\t\tif(config.children !== false){\n\n\t\t\tif(config.open){\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.collapseRow(row);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.expandRow(row);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif(oldControl && oldControl.parentNode === el){\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\n\t\t\t}else{\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetRows(rows){\n\t\tvar output = [];\n\n\t\trows.forEach((row, i) => {\n\t\t\tvar config, children;\n\n\t\t\toutput.push(row);\n\n\t\t\tif(row instanceof Row){\n\n\t\t\t\trow.create();\n\n\t\t\t\tconfig = row.modules.dataTree;\n\n\t\t\t\tif(!config.index && config.children !== false){\n\t\t\t\t\tchildren = this.getChildren(row);\n\n\t\t\t\t\tchildren.forEach((child) => {\n\t\t\t\t\t\tchild.create();\n\t\t\t\t\t\toutput.push(child);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tgetChildren(row, allChildren){\n\t\tvar config = row.modules.dataTree,\n\t\tchildren = [],\n\t\toutput = [];\n\n\t\tif(config.children !== false && (config.open || allChildren)){\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\n\t\t\t\tthis.table.modules.sort.sort(children);\n\t\t\t}\n\n\t\t\tchildren.forEach((child) => {\n\t\t\t\toutput.push(child);\n\n\t\t\t\tvar subChildren = this.getChildren(child);\n\n\t\t\t\tsubChildren.forEach((sub) => {\n\t\t\t\t\toutput.push(sub);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgenerateChildren(row){\n\t\tvar children = [];\n\n\t\tvar childArray = row.getData()[this.field];\n\n\t\tif(!Array.isArray(childArray)){\n\t\t\tchildArray = [childArray];\n\t\t}\n\n\t\tchildArray.forEach((childData) => {\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\n\n\t\t\tchildRow.create();\n\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\t\tchildRow.modules.dataTree.parent = row;\n\n\t\t\tif(childRow.modules.dataTree.children){\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t\t}\n\t\t\tchildren.push(childRow);\n\t\t});\n\n\t\treturn children;\n\t}\n\n\texpandRow(row, silent){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = true;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\tcollapseRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = false;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\ttoggleRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tif(config.open){\n\t\t\t\tthis.collapseRow(row);\n\t\t\t}else{\n\t\t\t\tthis.expandRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowExpanded(row){\n\t\treturn row.modules.dataTree.open;\n\t}\n\n\tgetTreeParent(row){\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n\t}\n\n\tgetTreeParentRoot(row){\n\t\treturn row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\n\t}\n\n\tgetFilteredTreeChildren(row){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [], children;\n\n\t\tif(config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tchildren.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(childRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\trowDelete(row){\n\t\tvar parent = row.modules.dataTree.parent,\n\t\tchildIndex;\n\n\t\tif(parent){\n\t\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t\t}\n\n\t\t\tif(!parent.data[this.field].length){\n\t\t\t\tdelete parent.data[this.field];\n\t\t\t}\n\n\t\t\tthis.initializeRow(parent);\n\t\t\tthis.layoutRow(parent);\n\t\t}\n\n\t\tthis.refreshData(true);\n\t}\n\n\taddTreeChildRow(row, data, top, index){\n\t\tvar childIndex = false;\n\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif(!Array.isArray(row.data[this.field])){\n\t\t\trow.data[this.field] = [];\n\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\n\t\t\t}\n\t\t}\n\n\t\tif(childIndex === false){\n\t\t\tif(top){\n\t\t\t\trow.data[this.field].unshift(data);\n\t\t\t}else{\n\t\t\t\trow.data[this.field].push(data);\n\t\t\t}\n\t\t}\n\n\t\tthis.initializeRow(row);\n\t\tthis.layoutRow(row);\n\n\t\tthis.refreshData(true);\n\t}\n\n\tfindChildIndex(subject, parent){\n\t\tvar match = false;\n\n\t\tif(typeof subject == \"object\"){\n\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\tmatch = subject.data;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\tmatch = subject._getSelf().data;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\tif(parent.modules.dataTree){\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t\t});\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tmatch = match.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else if(subject === null){\n\t\t\t\tmatch = false;\n\t\t\t}\n\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\tmatch = false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tmatch = parent.data[this.field].find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t}\n\n\t\tif(match){\n\n\t\t\tif(Array.isArray(parent.data[this.field])){\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t\t}\n\n\t\t\tif(match == -1){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\t\treturn match;\n\t}\n\n\tgetTreeChildren(row, component, recurse){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [];\n\n\t\tif(config && config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tconfig.children.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\t\tif(recurse){\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetChildField(){\n\t\treturn this.field;\n\t}\n\n\tredrawNeeded(data){\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n\t}\n}\n\nDataTree.moduleName = \"dataTree\";\n\nexport default DataTree;","export default function(list, options = {}, setFileContents){\n\tvar delimiter = options.delimiter ? options.delimiter : \",\",\n\tfileContents = [],\n\theaders = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = [];\n\n\t\tswitch(row.type){\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"header\":\n\t\t\t\trow.columns.forEach((col, i) => {\n\t\t\t\t\tif(col && col.depth === 1){\n\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\n\t\t\t\t\tif(col){\n\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(headers.length){\n\t\tfileContents.unshift(headers.join(delimiter));\n\t}\n\n\tfileContents = fileContents.join(\"\\n\");\n\n\tif(options.bom){\n\t\tfileContents = \"\\ufeff\" + fileContents;\n\t}\n\n\tsetFileContents(fileContents, \"text/csv\");\n}\n","export default function(list, options, setFileContents){\n\tvar fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = {};\n\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif(col){\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\tsetFileContents(fileContents, \"application/json\");\n}","export default function(list, options = {}, setFileContents){\n\tvar header = [],\n\tbody = [],\n\tautoTableParams = {},\n\trowGroupStyles = options.rowGroupStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 12,\n\t\tcellPadding: 6,\n\t\tfillColor: 220,\n\t},\n\trowCalcStyles = options.rowCalcStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 10,\n\t\tcellPadding: 4,\n\t\tfillColor: 232,\n\t},\n\tjsPDFParams = options.jsPDF || {},\n\ttitle = options.title ? options.title : \"\";\n\n\tif(!jsPDFParams.orientation){\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t}\n\n\tif(!jsPDFParams.unit){\n\t\tjsPDFParams.unit = \"pt\";\n\t}\n\n\t//parse row list\n\tlist.forEach((row) => {\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\theader.push(parseRow(row));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tbody.push(parseRow(row));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfunction parseRow(row, styles){\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach((col) =>{\n\t\t\tvar cell;\n\n\t\t\tif(col){\n\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcell = {\n\t\t\t\t\tcontent:col.value,\n\t\t\t\t\tcolSpan:col.width,\n\t\t\t\t\trowSpan:col.height,\n\t\t\t\t};\n\n\t\t\t\tif(styles){\n\t\t\t\t\tcell.styles = styles;\n\t\t\t\t}\n\n\t\t\t\trowData.push(cell);\n\t\t\t}\n\t\t});\n\n\t\treturn rowData;\n\t}\n\n\n\t//configure PDF\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\tif(options.autoTable){\n\t\tif(typeof options.autoTable === \"function\"){\n\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t}else{\n\t\t\tautoTableParams = options.autoTable;\n\t\t}\n\t}\n\n\tif(title){\n\t\tautoTableParams.didDrawPage = function(data) {\n\t\t\tdoc.text(title, 40, 30);\n\t\t};\n\t}\n\n\tautoTableParams.head = header;\n\tautoTableParams.body = body;\n\n\tdoc.autoTable(autoTableParams);\n\n\tif(options.documentProcessing){\n\t\toptions.documentProcessing(doc);\n\t}\n\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n}\n","import CoreFeature from '../../../../core/CoreFeature.js';\n\nexport default function(list, options, setFileContents){\n\tvar self = this,\n\tsheetName = options.sheetName || \"Sheet1\",\n\tworkbook = XLSX.utils.book_new(),\n\ttableFeatures = new CoreFeature(this),\n\tcompression = 'compress' in options ? options.compress : true,\n\twriteOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression},\n\toutput;\n\n\twriteOptions.type = 'binary';\n\n\tworkbook.SheetNames = [];\n\tworkbook.Sheets = {};\n\n\tfunction generateSheet(){\n\t\tvar rows = [],\n\t\tmerges = [],\n\t\tworksheet = {},\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\n\n\t\t//parse row list\n\t\tlist.forEach((row, i) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function(col, j){\n\n\t\t\t\tif(col){\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\n\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\n\t\t\t\t\t\tif(col.height > 1 || col.width > 1){\n\t\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\trowData.push(\"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trows.push(rowData);\n\t\t});\n\n\t\t//convert rows to worksheet\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\tif(merges.length){\n\t\t\tworksheet[\"!merges\"] = merges;\n\t\t}\n\n\t\treturn worksheet;\n\t}\n\n\tif(options.sheetOnly){\n\t\tsetFileContents(generateSheet());\n\t\treturn;\n\t}\n\n\tif(options.sheets){\n\t\tfor(var sheet in options.sheets){\n\n\t\t\tif(options.sheets[sheet] === true){\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t}else{\n\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\n\t\t\t\t\ttype:\"xlsx\",\n\t\t\t\t\toptions:{sheetOnly:true},\n\t\t\t\t\tactive:self.active,\n\t\t\t\t\tintercept:function(data){\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}else{\n\t\tworkbook.SheetNames.push(sheetName);\n\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t}\n\n\tif(options.documentProcessing){\n\t\tworkbook = options.documentProcessing(workbook);\n\t}\n\n\t//convert workbook to binary array\n\tfunction s2ab(s) {\n\t\tvar buf = new ArrayBuffer(s.length);\n\t\tvar view = new Uint8Array(buf);\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\t\treturn buf;\n\t}\n\n\toutput = XLSX.write(workbook, writeOptions);\n\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\n}\n","export default function(list, options, setFileContents){\n\tif(this.modExists(\"export\", true)){\n\t\tsetFileContents(this.modules.export.generateHTMLTable(list), \"text/html\");\n\t}\n}","export default function (list, options, setFileContents) {\n\tconst fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tconst item = {};\n\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(JSON.stringify(item));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\n}","import csv from './downloaders/csv.js';\nimport json from './downloaders/json.js';\nimport pdf from './downloaders/pdf.js';\nimport xlsx from './downloaders/xlsx.js';\nimport html from './downloaders/html.js';\nimport jsonLines from './downloaders/jsonLines.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tjsonLines:jsonLines,\n\tpdf:pdf,\n\txlsx:xlsx,\n\thtml:html,\n};","import Module from '../../core/Module.js';\n\nimport defaultDownloaders from './defaults/downloaders.js';\n\nclass Download extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.registerTableOption(\"downloadEncoder\", function(data, mimeType){\n\t\t\treturn new Blob([data],{type:mimeType});\n\t\t}); //function to manipulate download data\n\t\tthis.registerTableOption(\"downloadReady\", undefined); //warn of function deprecation\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\n\n\t\tthis.registerColumnOption(\"download\");\n\t\tthis.registerColumnOption(\"titleDownload\");\n\t}\n\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"downloadReady\", \"downloadEncoder\");\n\t}\t\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tdownloadToTab(type, filename, options, active){\n\t\tthis.download(type, filename, options, active, true);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\t//trigger file download\n\tdownload(type, filename, options, range, interceptCallback){\n\t\tvar downloadFunc = false;\n\n\t\tfunction buildLink(data, mime){\n\t\t\tif(interceptCallback){\n\t\t\t\tif(interceptCallback === true){\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\n\t\t\t\t}else{\n\t\t\t\t\tinterceptCallback(data);\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\n\t\t\t}\n\t\t}\n\n\t\tif(typeof type == \"function\"){\n\t\t\tdownloadFunc = type;\n\t\t}else{\n\t\t\tif(Download.downloaders[type]){\n\t\t\t\tdownloadFunc = Download.downloaders[type];\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t\t}\n\t\t}\n\n\t\tif(downloadFunc){\n\t\t\tvar list = this.generateExportList(range);\n\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\n\t\t}\n\t}\n\n\tgenerateExportList(range){\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t\t//assign group header formatter\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\n\t\t\tgroupHeader = [groupHeader];\n\t\t}\n\n\t\tlist.forEach((row) => {\n\t\t\tvar group;\n\n\t\t\tif(row.type === \"group\"){\n\t\t\t\tgroup = row.columns[0];\n\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn list;\n\t}\n\n\ttriggerDownload(data, mime, type, filename, newTab){\n\t\tvar element = document.createElement('a'),\n\t\tblob = this.table.options.downloadEncoder(data, mime);\n\n\t\tif(blob){\n\t\t\tif(newTab){\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t\t}else{\n\t\t\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\t\t\t\t\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t\t}else{\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t\t//set file title\n\t\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t\t//trigger download\n\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\telement.click();\n\n\t\t\t\t\t//remove temporary link element\n\t\t\t\t\tdocument.body.removeChild(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\n\t\t}\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"intercept\":\n\t\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDownload.moduleName = \"download\";\n\n//load defaults\nDownload.downloaders = defaultDownloaders;\n\nexport default Download;","export default function maskInput(el, options){\n\tvar mask = options.mask,\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\";\n\n\tfunction fillSymbols(index){\n\t\tvar symbol = mask[index];\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\n\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\tfillSymbols(index+1);\n\t\t}\n\t}\n\n\tel.addEventListener(\"keydown\", (e) => {\n\t\tvar index = el.value.length,\n\t\tchar = e.key;\n\n\t\tif(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){\n\t\t\tif(index >= mask.length){\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\tswitch(mask[index]){\n\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\tif(isNaN(char)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(char !== mask[index]){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", (e) => {\n\t\tif(e.keyCode > 46){\n\t\t\tif(options.maskAutoFill){\n\t\t\t\tfillSymbols(el.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tif(!el.placeholder){\n\t\tel.placeholder = mask;\n\t}\n\n\tif(options.maskAutoFill){\n\t\tfillSymbols(el.value.length);\n\t}\n}","import maskInput from '../../inputMask.js';\n\n//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange(e);\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//resizable text area element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"hybrid\",\n\tvalue = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\tinput = document.createElement(\"textarea\"),\n\tscrollHeight = 0;\n\n\t//create and style input\n\tinput.style.display = \"block\";\n\tinput.style.padding = \"2px\";\n\tinput.style.height = \"100%\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\tinput.style.whiteSpace = \"pre-wrap\";\n\tinput.style.resize = \"none\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = value;\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tinput.scrollHeight;\n\t\t\tinput.style.height = input.scrollHeight + \"px\";\n\t\t\tcell.getRow().normalizeHeight();\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\n\t\t\tsetTimeout(function(){\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t},300);\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\tinput.addEventListener(\"keyup\", function(){\n\n\t\tinput.style.height = \"\";\n\n\t\tvar heightNow = input.scrollHeight;\n\n\t\tinput.style.height = heightNow + \"px\";\n\n\t\tif(heightNow != scrollHeight){\n\t\t\tscrollHeight = heightNow;\n\t\t\tcell.getRow().normalizeHeight();\n\t\t}\n\t});\n\n\tinput.addEventListener(\"keydown\", function(e){\n\n\t\tswitch(e.keyCode){\n\n\t\t\tcase 13:\n\t\t\t\tif(e.shiftKey && editorParams.shiftEnterSubmit){\n\t\t\t\t\tonChange(e);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", \"number\");\n\n\tif(typeof editorParams.max != \"undefined\"){\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\n\tif(typeof editorParams.min != \"undefined\"){\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\n\tif(typeof editorParams.step != \"undefined\"){\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = cellValue;\n\n\tvar blurFunc = function(e){\n\t\tonChange();\n\t};\n\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\t//submit new value on blur\n\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(){\n\t\tvar value = input.value;\n\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\n\t\tif(value !== cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.setAttribute(\"type\", \"range\");\n\t\n\tif (typeof editorParams.max != \"undefined\") {\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\t\n\tif (typeof editorParams.min != \"undefined\") {\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\t\n\tif (typeof editorParams.step != \"undefined\") {\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\t\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value;\n\t\t\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\t\t\n\t\tif(value != cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e){\n\t\tonChange();\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tfunction convertDate(value){\n\t\tvar newDatetime;\n\t\t\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\t\t\n\t\treturn newDatetime.toFormat(\"yyyy-MM-dd\");\n\t}\n\t\n\tinput.type = \"date\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.max){\n\t\tinput.setAttribute(\"max\", inputFormat ? convertDate(editorParams.max) : editorParams.max);\n\t}\n\n\tif(editorParams.min){\n\t\tinput.setAttribute(\"min\", inputFormat ? convertDate(editorParams.min) : editorParams.min);\n\t}\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\t\t\n\t\t\tcellValue = convertDate(cellValue);\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDate;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDate = DT.fromFormat(String(value), \"yyyy-MM-dd\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDate;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDate.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDate.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"time\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"HH:mm\");\n\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\n\tconsole.log(\"val\", cellValue);\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() == \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxTime = DT.fromFormat(String(value), \"hh:mm\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"datetime-local\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"yyyy-MM-dd\") + \"T\" + newDatetime.toFormat(\"HH:mm\");\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDateTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDateTime = DT.fromISO(String(value));\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDateTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDateTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDateTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","import maskInput from './inputMask.js';\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\n\nexport default class Edit{\n\tconstructor(editor, cell, onRendered, success, cancel, editorParams){\n\t\tthis.edit = editor;\n\t\tthis.table = editor.table;\n\t\tthis.cell = cell;\n\t\tthis.params = this._initializeParams(editorParams);\n\t\t\n\t\tthis.data = [];\n\t\tthis.displayItems = [];\n\t\tthis.currentItems = [];\n\t\tthis.focusedItem = null;\n\t\t\n\t\tthis.input = this._createInputElement();\n\t\tthis.listEl = this._createListElement();\n\t\t\n\t\tthis.initialValues = null; \n\t\t\n\t\tthis.isFilter = cell.getType() === \"header\";\n\t\t\n\t\tthis.filterTimeout = null;\n\t\tthis.filtered = false;\n\t\tthis.typing = false;\n\t\t\n\t\tthis.values = []; \n\t\tthis.popup = null; \n\t\t\n\t\tthis.listIteration = 0;\n\t\t\n\t\tthis.lastAction=\"\";\n\t\tthis.filterTerm=\"\";\n\t\t\n\t\tthis.blurable = true;\n\t\t\n\t\tthis.actions = {\n\t\t\tsuccess:success,\n\t\t\tcancel:cancel\n\t\t};\n\t\t\n\t\tthis._deprecatedOptionsCheck();\n\t\tthis._initializeValue();\n\t\t\n\t\tonRendered(this._onRendered.bind(this));\n\t}\n\t\n\t_deprecatedOptionsCheck(){\n\t\tif(this.params.listItemFormatter){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.sortValuesList){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchFunc){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchingPlaceholder){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t}\n\t\n\t_initializeValue(){\n\t\tvar initialValue = this.cell.getValue();\n\t\t\n\t\tif(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\n\t\t\tinitialValue = this.params.defaultValue;\n\t\t}\n\t\t\n\t\tthis.initialValues = this.params.multiselect ? initialValue : [initialValue];\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.input.value = this.initialValues ? this.initialValues.join(\",\") : \"\";\n\t\t\tthis.headerFilterInitialListGen(); \n\t\t}\n\t}\n\t\n\t_onRendered(){\n\t\tvar cellEl = this.cell.getElement();\n\t\t\n\t\tfunction clickStop(e){\n\t\t\te.stopPropagation();\n\t\t}\t\n\t\t\n\t\tif(!this.isFilter){\n\t\t\tthis.input.style.height = \"100%\";\n\t\t\tthis.input.focus({preventScroll: true});\n\t\t}\n\t\t\n\t\t\n\t\tcellEl.addEventListener(\"click\", clickStop);\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tcellEl.removeEventListener(\"click\", clickStop);\n\t\t}, 1000);\n\t\t\n\t\tthis.input.addEventListener(\"mousedown\", this._preventPopupBlur.bind(this));\n\t}\n\t\n\t_createListElement(){\n\t\tvar listEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-list\");\n\t\t\n\t\tlistEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\tlistEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\t\n\t\treturn listEl;\n\t}\n\t\n\t_setListWidth(){\n\t\tvar element = this.isFilter ? this.input : this.cell.getElement();\n\t\t\n\t\tthis.listEl.style.minWidth = element.offsetWidth + \"px\";\n\t\t\n\t\tif(this.params.maxWidth){\n\t\t\tif(this.params.maxWidth === true){\n\t\t\t\tthis.listEl.style.maxWidth = element.offsetWidth + \"px\";\n\t\t\t}else if(typeof this.params.maxWidth === \"number\"){\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t_createInputElement(){\n\t\tvar attribs = this.params.elementAttributes;\n\t\tvar input = document.createElement(\"input\");\n\t\t\n\t\tinput.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\n\t\t\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\t\n\t\tif(!this.params.autocomplete){\n\t\t\tinput.style.cursor = \"default\";\n\t\t\tinput.style.caretColor = \"transparent\";\n\t\t\t// input.readOnly = (this.edit.currentCell != false);\n\t\t}\n\t\t\n\t\tif(attribs && typeof attribs == \"object\"){\n\t\t\tfor (let key in attribs){\n\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + attribs[\"+\" + key]);\n\t\t\t\t}else{\n\t\t\t\t\tinput.setAttribute(key, attribs[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(this.params.mask){\n\t\t\tmaskInput(input, this.params);\n\t\t}\n\t\t\n\t\tthis._bindInputEvents(input);\n\t\t\n\t\treturn input;\n\t}\n\t\n\t_initializeParams(params){\n\t\tvar valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\n\t\tvalueCheck;\n\t\t\n\t\tparams = Object.assign({}, params);\n\t\t\n\t\tparams.verticalNavigation = params.verticalNavigation || \"editor\";\n\t\tparams.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\n\t\tparams.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\n\t\tparams.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\n\t\t\n\t\tparams.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\n\t\t\n\t\tvalueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\n\t\t\n\t\tif(!valueCheck){\n\t\t\tconsole.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\");\n\t\t}else if(valueCheck > 1){\n\t\t\tconsole.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\");\n\t\t}\n\t\t\n\t\tif(params.autocomplete){\n\t\t\tif(params.multiselect){\n\t\t\t\tparams.multiselect = false;\n\t\t\t\tconsole.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\");\n\t\t\t}\n\t\t}else{\n\t\t\tif(params.freetext){\n\t\t\t\tparams.freetext = false;\n\t\t\t\tconsole.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterFunc){\n\t\t\t\tparams.filterFunc = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterRemote){\n\t\t\t\tparams.filterRemote = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.mask){\n\t\t\t\tparams.mask = false;\n\t\t\t\tconsole.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.allowEmpty){\n\t\t\t\tparams.allowEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.listOnEmpty){\n\t\t\t\tparams.listOnEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(params.filterRemote && !(typeof params.valuesLookup === \"function\" || params.valuesURL)){\n\t\t\tparams.filterRemote = false;\n\t\t\tconsole.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\n\t\t}\n\t\treturn params;\n\t}\n\t//////////////////////////////////////\n\t////////// Event Handling ////////////\n\t//////////////////////////////////////\n\t\n\t_bindInputEvents(input){\n\t\tinput.addEventListener(\"focus\", this._inputFocus.bind(this));\n\t\tinput.addEventListener(\"click\", this._inputClick.bind(this));\n\t\tinput.addEventListener(\"blur\", this._inputBlur.bind(this));\n\t\tinput.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\tinput.addEventListener(\"search\", this._inputSearch.bind(this));\n\t\t\n\t\tif(this.params.autocomplete){\n\t\t\tinput.addEventListener(\"keyup\", this._inputKeyUp.bind(this));\n\t\t}\n\t}\n\t\n\t\n\t_inputFocus(e){\n\t\tthis.rebuildOptionsList();\n\t}\n\t\n\t_filter(){\n\t\tif(this.params.filterRemote){\n\t\t\tclearTimeout(this.filterTimeout);\n\t\t\t\n\t\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\t\tthis.rebuildOptionsList();\n\t\t\t}, this.params.filterDelay);\n\t\t}else{\n\t\t\tthis._filterList();\n\t\t}\n\t}\n\t\n\t_inputClick(e){\n\t\te.stopPropagation();\n\t}\n\t\n\t_inputBlur(e){\n\t\tif(this.blurable){\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.hide();\n\t\t\t}else{\n\t\t\t\tthis._resolveValue(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_inputSearch(){\n\t\tthis._clearChoices();\n\t}\n\t\n\t_inputKeyDown(e){\n\t\tswitch(e.keyCode){\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\t\tthis._keyUp(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 40: //down arrow\n\t\t\t\tthis._keyDown(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //right arrow\n\t\t\t\tthis._keySide(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 13: //enter\n\t\t\t\tthis._keyEnter();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27: //escape\n\t\t\t\tthis._keyEsc();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 36: //home\n\t\t\tcase 35: //end\n\t\t\t\tthis._keyHomeEnd(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 9: //tab\n\t\t\t\tthis._keyTab(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keySelectLetter(e);\n\t\t}\n\t}\n\t\n\t_inputKeyUp(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 38: //up arrow\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //up arrow\n\t\t\tcase 40: //right arrow\n\t\t\tcase 13: //enter\n\t\t\tcase 27: //escape\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keyAutoCompLetter(e);\n\t\t}\n\t}\n\t\n\t_preventPopupBlur(){\n\t\tif(this.popup){\n\t\t\tthis.popup.blockHide();\n\t\t}\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.restoreHide();\n\t\t\t}\n\t\t}, 10);\n\t}\n\t\n\t_preventBlur(){\n\t\tthis.blurable = false;\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tthis.blurable = true;\n\t\t}, 10);\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Keyboard Navigation /////////\n\t//////////////////////////////////////\n\t\n\t_keyTab(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyUp(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index > 0){\n\t\t\t\tthis._focusItem(this.displayItems[index - 1]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyDown(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index < this.displayItems.length - 1){\n\t\t\t\tif(index == -1){\n\t\t\t\t\tthis._focusItem(this.displayItems[0]);\n\t\t\t\t}else{\n\t\t\t\t\tthis._focusItem(this.displayItems[index + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keySide(e){\n\t\tif(!this.params.autocomplete){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\t_keyEnter(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyEsc(e){\n\t\tthis._cancel();\n\t}\n\t\n\t_keyHomeEnd(e){\n\t\tif(this.params.autocomplete){\n\t\t\t//prevent table navigation while using input element\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t}\n\t\n\t_keySelectLetter(e){\n\t\tif(!this.params.autocomplete){\n\t\t\t// if(this.edit.currentCell === false){\n\t\t\te.preventDefault();\n\t\t\t// }\n\t\t\t\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\n\t\t\t\tthis._scrollToValue(e.keyCode);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyAutoCompLetter(e){\n\t\tthis._filter();\n\t\tthis.lastAction = \"typing\";\n\t\tthis.typing = true;\n\t}\n\t\n\t\n\t_scrollToValue(char){\n\t\tclearTimeout(this.filterTimeout);\n\t\t\n\t\tvar character = String.fromCharCode(char).toLowerCase();\n\t\tthis.filterTerm += character.toLowerCase();\n\t\t\n\t\tvar match = this.displayItems.find((item) => {\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\n\t\t});\n\t\t\n\t\tif(match){\n\t\t\tthis._focusItem(match);\n\t\t}\n\t\t\n\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\tthis.filterTerm = \"\";\n\t\t}, 800);\n\t}\n\t\n\t_focusItem(item){\n\t\tthis.lastAction = \"focus\";\n\t\t\n\t\tif(this.focusedItem && this.focusedItem.element){\n\t\t\tthis.focusedItem.element.classList.remove(\"focused\");\n\t\t}\n\t\t\n\t\tthis.focusedItem = item;\n\t\t\n\t\tif(item && item.element){\n\t\t\titem.element.classList.add(\"focused\");\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\n\t\t}\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t/////// Data List Generation /////////\n\t//////////////////////////////////////\n\theaderFilterInitialListGen(){\n\t\tthis._generateOptions(true);\n\t}\n\t\n\trebuildOptionsList(){\n\t\tthis._generateOptions()\n\t\t\t.then(this._sortOptions.bind(this))\n\t\t\t.then(this._buildList.bind(this))\n\t\t\t.then(this._showList.bind(this))\n\t\t\t.catch((e) => {\n\t\t\t\tif(!Number.isInteger(e)){\n\t\t\t\t\tconsole.error(\"List generation error\", e);\n\t\t\t\t}\n\t\t\t});\n\t}\n\t\n\t_filterList(){\n\t\tthis._buildList(this._filterOptions());\n\t\tthis._showList();\n\t}\n\t\n\t_generateOptions(silent){\n\t\tvar values = [];\n\t\tvar iteration = ++ this.listIteration;\n\t\t\n\t\tthis.filtered = false;\n\t\t\n\t\tif(this.params.values){\n\t\t\tvalues = this.params.values;\n\t\t}else if (this.params.valuesURL){\n\t\t\tvalues = this._ajaxRequest(this.params.valuesURL, this.input.value);\n\t\t}else{\n\t\t\tif(typeof this.params.valuesLookup === \"function\"){\n\t\t\t\tvalues = this.params.valuesLookup(this.cell, this.input.value);\n\t\t\t}else if(this.params.valuesLookup){\n\t\t\t\tvalues = this._uniqueColumnValues(this.params.valuesLookupField);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(values instanceof Promise){\n\t\t\tif(!silent){\n\t\t\t\tthis._addPlaceholder(this.params.placeholderLoading);\n\t\t\t}\n\t\t\t\n\t\t\treturn values.then()\n\t\t\t\t.then((responseValues) => {\n\t\t\t\t\tif(this.listIteration === iteration){\n\t\t\t\t\t\treturn this._parseList(responseValues);\n\t\t\t\t\t}else{\n\t\t\t\t\t\treturn Promise.reject(iteration);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.resolve(this._parseList(values));\n\t\t}\n\t}\n\t\n\t_addPlaceholder(contents){\n\t\tvar placeholder = document.createElement(\"div\");\n\t\t\n\t\tif(typeof contents === \"function\"){\n\t\t\tcontents = contents(this.cell.getComponent(), this.listEl);\n\t\t}\n\t\t\n\t\tif(contents){\n\t\t\tthis._clearList();\n\t\t\t\n\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\tplaceholder = contents;\n\t\t\t}else{\n\t\t\t\tplaceholder.classList.add(\"tabulator-edit-list-placeholder\");\n\t\t\t\tplaceholder.innerHTML = contents;\n\t\t\t}\n\t\t\t\n\t\t\tthis.listEl.appendChild(placeholder);\n\t\t\t\n\t\t\tthis._showList();\n\t\t}\n\t}\n\t\n\t_ajaxRequest(url, term){\n\t\tvar params = this.params.filterRemote ? {term:term} : {};\n\t\turl = urlBuilder(url, {}, params);\n\t\t\n\t\treturn fetch(url)\n\t\t\t.then((response)=>{\n\t\t\t\tif(response.ok) {\n\t\t\t\t\treturn response.json()\n\t\t\t\t\t\t.catch((error)=>{\n\t\t\t\t\t\t\tconsole.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treturn Promise.reject(response);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error)=>{\n\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \", error);\n\t\t\t\treturn Promise.reject(error);\n\t\t\t});\n\t}\n\t\n\t_uniqueColumnValues(field){\n\t\tvar output = {},\n\t\tdata = this.table.getData(this.params.valuesLookup),\n\t\tcolumn;\n\t\t\n\t\tif(field){\n\t\t\tcolumn = this.table.columnManager.getColumnByField(field);\n\t\t}else{\n\t\t\tcolumn = this.cell.getColumn()._getSelf();\n\t\t}\n\t\t\n\t\tif(column){\n\t\t\tdata.forEach((row) => {\n\t\t\t\tvar val = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\n\t\t\t\t\toutput[val] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\toutput = [];\n\t\t}\n\t\t\n\t\treturn Object.keys(output);\n\t}\n\t\n\t\n\t_parseList(inputValues){\n\t\tvar data = [];\n\t\t\n\t\tif(!Array.isArray(inputValues)){\n\t\t\tinputValues = Object.entries(inputValues).map(([key, value]) => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:key,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\t\n\t\tinputValues.forEach((value) => {\n\t\t\tif(typeof value !== \"object\"){\n\t\t\t\tvalue = {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:value,\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tthis._parseListItem(value, data, 0);\n\t\t});\n\t\t\n\t\tif(!this.currentItems.length && this.params.freetext){\n\t\t\tthis.input.value = this.initialValues;\n\t\t\tthis.typing = true;\n\t\t\tthis.lastAction = \"typing\";\n\t\t}\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\treturn data; \n\t}\n\t\n\t_parseListItem(option, data, level){\n\t\tvar item = {};\n\t\t\n\t\tif(option.options){\n\t\t\titem = this._parseListGroup(option, level + 1);\n\t\t}else{\n\t\t\titem = {\n\t\t\t\tlabel:option.label,\n\t\t\t\tvalue:option.value,\n\t\t\t\titemParams:option.itemParams,\n\t\t\t\telementAttributes: option.elementAttributes,\n\t\t\t\telement:false,\n\t\t\t\tselected:false,\n\t\t\t\tvisible:true,\n\t\t\t\tlevel:level,\n\t\t\t\toriginal:option,\n\t\t\t};\n\t\t\t\n\t\t\tif(this.initialValues && this.initialValues.indexOf(option.value) > -1){\n\t\t\t\tthis._chooseItem(item, true);\n\t\t\t}\n\t\t}\n\t\t\n\t\tdata.push(item);\n\t}\n\t\n\t_parseListGroup(option, level){\n\t\tvar item = {\n\t\t\tlabel:option.label,\n\t\t\tgroup:true,\n\t\t\titemParams:option.itemParams,\n\t\t\telementAttributes:option.elementAttributes,\n\t\t\telement:false,\n\t\t\tvisible:true,\n\t\t\tlevel:level,\n\t\t\toptions:[],\n\t\t\toriginal:option,\n\t\t};\n\t\t\n\t\toption.options.forEach((child) => {\n\t\t\tthis._parseListItem(child, item.options, level);\n\t\t});\n\t\t\n\t\treturn item;\n\t}\n\t\n\t_sortOptions(options){\n\t\tvar sorter;\n\t\t\n\t\tif(this.params.sort){\n\t\t\tsorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\n\t\t\t\n\t\t\tthis._sortGroup(sorter, options);\n\t\t}\n\t\t\n\t\treturn options;\n\t}\n\t\n\t_sortGroup(sorter, options){\n\t\toptions.sort((a,b) => {\n\t\t\treturn sorter(a.label, b.label, a.value, b.value, a.original, b.original);\n\t\t});\n\t\t\n\t\toptions.forEach((option) => {\n\t\t\tif(option.group){\n\t\t\t\tthis._sortGroup(sorter, option.options);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_defaultSortFunction(as, bs){\n\t\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\t\tvar emptyAlign = 0;\n\t\t\n\t\tif(this.params.sort === \"desc\"){\n\t\t\t[as, bs] = [bs, as];\n\t\t}\n\t\t\n\t\t//handle empty values\n\t\tif(!as && as!== 0){\n\t\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t\t}else if(!bs && bs!== 0){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\ta = String(as).toLowerCase();\n\t\t\tb = String(bs).toLowerCase();\n\t\t\tif(a === b) return 0;\n\t\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\ta = a.match(rx);\n\t\t\tb = b.match(rx);\n\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\twhile(i < L){\n\t\t\t\ta1= a[i];\n\t\t\t\tb1= b[i++];\n\t\t\t\tif(a1 !== b1){\n\t\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t}\n\t\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn a.length > b.length;\n\t\t}\n\t\t\n\t\treturn emptyAlign;\n\t}\n\t\n\t_filterOptions(){\n\t\tvar filterFunc = this.params.filterFunc || this._defaultFilterFunc,\n\t\tterm = this.input.value;\n\t\t\n\t\tif(term){\n\t\t\tthis.filtered = true;\n\t\t\t\n\t\t\tthis.data.forEach((item) => {\n\t\t\t\tthis._filterItem(filterFunc, term, item);\n\t\t\t});\n\t\t}else{\n\t\t\tthis.filtered = false;\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\t_filterItem(func, term, item){\n\t\tvar matches = false;\n\t\t\n\t\tif(!item.group){\n\t\t\titem.visible = func(term, item.label, item.value, item.original);\n\t\t}else{\n\t\t\titem.options.forEach((option) => {\n\t\t\t\tif(this._filterItem(func, term, option)){\n\t\t\t\t\tmatches = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\titem.visible = matches;\n\t\t}\n\t\t\n\t\treturn item.visible;\n\t}\n\t\n\t_defaultFilterFunc(term, label, value, item){\n\t\tterm = String(term).toLowerCase();\n\t\t\n\t\tif(label !== null && typeof label !== \"undefined\"){\n\t\t\tif(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\t//////////////////////////////////////\n\t/////////// Display List /////////////\n\t//////////////////////////////////////\n\t\n\t_clearList(){\n\t\twhile(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\n\t\t\n\t\tthis.displayItems = [];\n\t}\n\t\n\t_buildList(data){\n\t\tthis._clearList();\n\t\t\n\t\tdata.forEach((option) => {\n\t\t\tthis._buildItem(option);\n\t\t});\n\t\t\n\t\tif(!this.displayItems.length){\n\t\t\tthis._addPlaceholder(this.params.placeholderEmpty);\n\t\t} \n\t}\n\t\n\t_buildItem(item){\n\t\tvar el = item.element,\n\t\tcontents;\n\t\t\n\t\tif(!this.filtered || item.visible){\n\t\t\t\n\t\t\tif(!el){\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\n\t\t\t\tcontents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\n\t\t\t\t\n\t\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = contents;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-group\");\n\t\t\t\t}else{\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-item\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\n\t\t\t\t\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\n\t\t\t\t\tfor (let key in item.elementAttributes){\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\tel.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.addEventListener(\"click\", this._groupClick.bind(this, item));\n\t\t\t\t}else{\n\t\t\t\t\tel.addEventListener(\"click\", this._itemClick.bind(this, item));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\t\t\t\n\t\t\t\titem.element = el;\n\t\t\t}\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tthis.listEl.appendChild(el);\n\t\t\t\n\t\t\tif(item.group){\n\t\t\t\titem.options.forEach((option) => {\n\t\t\t\t\tthis._buildItem(option);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.displayItems.push(item);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_showList(){\n\t\tvar startVis = this.popup && this.popup.isVisible();\n\t\t\n\t\tif(this.input.parentNode){\n\t\t\tif(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\n\t\t\t\tif(this.popup){\n\t\t\t\t\tthis.popup.hide(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis._setListWidth();\n\t\t\t\n\t\t\tif(!this.popup){\n\t\t\t\tthis.popup = this.edit.popup(this.listEl);\n\t\t\t}\n\t\t\t\n\t\t\tthis.popup.show(this.cell.getElement(), \"bottom\");\n\t\t\t\n\t\t\tif(!startVis){\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.popup.hideOnBlur(this._resolveValue.bind(this, true));\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_styleItem(item){\n\t\tif(item && item.element){\n\t\t\tif(item.selected){\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}else{\n\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// User Interaction ///////////\n\t//////////////////////////////////////\n\t\n\t_itemClick(item, e){\n\t\te.stopPropagation();\n\t\t\n\t\tthis._chooseItem(item);\n\t}\n\t\n\t_groupClick(item, e){\n\t\te.stopPropagation();\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t////// Current Item Management ///////\n\t//////////////////////////////////////\n\t\n\t_cancel(){\n\t\tthis.popup.hide(true);\n\t\tthis.actions.cancel();\n\t}\n\t\n\t_clearChoices(){\n\t\tthis.typing = true;\n\t\t\n\t\tthis.currentItems.forEach((item) => {\n\t\t\titem.selected = false;\n\t\t\tthis._styleItem(item);\n\t\t});\n\t\t\n\t\tthis.currentItems = [];\n\t\t\n\t\tthis.focusedItem = null;\n\t}\n\t\n\t_chooseItem(item, silent){\n\t\tvar index;\n\t\t\n\t\tthis.typing = false;\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\tindex = this.currentItems.indexOf(item);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.currentItems.splice(index, 1);\n\t\t\t\titem.selected = false;\n\t\t\t}else{\n\t\t\t\tthis.currentItems.push(item);\n\t\t\t\titem.selected = true;\n\t\t\t}\n\t\t\t\n\t\t\tthis.input.value = this.currentItems.map(item => item.label).join(\",\");\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t}else{\n\t\t\tthis.currentItems = [item];\n\t\t\titem.selected = true;\n\t\t\t\n\t\t\tthis.input.value = item.label;\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis._resolveValue();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._focusItem(item);\n\t}\n\t\n\t_resolveValue(blur){\n\t\tvar output, initialValue;\n\t\t\n\t\tif(this.popup){\n\t\t\tthis.popup.hide(true);\n\t\t}\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\toutput = this.currentItems.map(item => item.value);\n\t\t}else{\n\t\t\tif(blur && this.params.autocomplete && this.typing){\n\t\t\t\tif(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\n\t\t\t\t\toutput = this.input.value;\n\t\t\t\t}else{\n\t\t\t\t\tthis.actions.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.currentItems[0]){\n\t\t\t\t\toutput = this.currentItems[0].value;\n\t\t\t\t}else{\n\t\t\t\t\tinitialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;\n\t\t\t\t\t\n\t\t\t\t\tif(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\n\t\t\t\t\t\toutput = initialValue;\n\t\t\t\t\t}else{\n\t\t\t\t\t\toutput = this.params.emptyValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(output === \"\"){\n\t\t\toutput = this.params.emptyValue;\n\t\t}\n\t\t\n\t\tthis.actions.success(output);\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.initialValues = output && !Array.isArray(output) ? [output] : output;\n\t\t\tthis.currentItems = [];\n\t\t}\n\t}\n\t\n}\n","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The select editor has been deprecated, please use the new list editor\");\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\n\n\teditorParams.autocomplete = true;\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","//star rating\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar self = this,\n\telement = cell.getElement(),\n\tvalue = cell.getValue(),\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\tstars = [],\n\tstarsHolder = document.createElement(\"div\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\n\t//change star type\n\tfunction starChange(val){\n\t\tstars.forEach(function(star, i){\n\t\t\tif(i < val){\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}else{\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//build stars\n\tfunction buildStar(i){\n\n\t\tvar starHolder = document.createElement(\"span\");\n\t\tvar nextStar = star.cloneNode(true);\n\n\t\tstars.push(nextStar);\n\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tstarChange(i);\n\t\t});\n\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t});\n\n\t\tstarHolder.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tsuccess(i);\n\t\t\telement.blur();\n\t\t});\n\n\t\tstarHolder.appendChild(nextStar);\n\t\tstarsHolder.appendChild(starHolder);\n\n\t}\n\n\t//handle keyboard navigation value change\n\tfunction changeValue(val){\n\t\tvalue = val;\n\t\tstarChange(val);\n\t}\n\n\t//style cell\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\t//style holding element\n\tstarsHolder.style.verticalAlign = \"middle\";\n\tstarsHolder.style.display = \"inline-block\";\n\tstarsHolder.style.padding = \"4px\";\n\n\t//style star\n\tstar.setAttribute(\"width\", size);\n\tstar.setAttribute(\"height\", size);\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//create correct number of stars\n\tfor(var i=1;i<= maxStars;i++){\n\t\tbuildStar(i);\n\t}\n\n\t//ensure value does not exceed number of stars\n\tvalue = Math.min(parseInt(value), maxStars);\n\n\t// set initial styling of stars\n\tstarChange(value);\n\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\n\t\tstarChange(0);\n\t});\n\n\tstarsHolder.addEventListener(\"click\", function(e){\n\t\tsuccess(0);\n\t});\n\n\telement.addEventListener(\"blur\", function(e){\n\t\tcancel();\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\tchangeValue(value + 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\tchangeValue(value - 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 13: //enter\n\t\t\t\tsuccess(value);\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\treturn starsHolder;\n}","//draggable progress bar\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar element = cell.getElement(),\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\n\tpercent = (max - min) / 100,\n\tvalue = cell.getValue() || 0,\n\thandle = document.createElement(\"div\"),\n\tbar = document.createElement(\"div\"),\n\tmouseDrag, mouseDragWidth;\n\n\t//set new value\n\tfunction updateValue(){\n\t\tvar style = window.getComputedStyle(element, null);\n\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\n\t\tsuccess(calcVal);\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\telement.setAttribute(\"aria-label\", value);\n\t}\n\n\t//style handle\n\thandle.style.position = \"absolute\";\n\thandle.style.right = \"0\";\n\thandle.style.top = \"0\";\n\thandle.style.bottom = \"0\";\n\thandle.style.width = \"5px\";\n\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t//style bar\n\tbar.style.display = \"inline-block\";\n\tbar.style.position = \"relative\";\n\t// bar.style.top = \"8px\";\n\t// bar.style.bottom = \"8px\";\n\t// bar.style.left = \"4px\";\n\t// bar.style.marginRight = \"4px\";\n\tbar.style.height = \"100%\";\n\tbar.style.backgroundColor = \"#488CE9\";\n\tbar.style.maxWidth = \"100%\";\n\tbar.style.minWidth = \"0%\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//style cell\n\telement.style.padding = \"4px 4px\";\n\n\t//make sure value is in range\n\tvalue = Math.min(parseFloat(value), max);\n\tvalue = Math.max(parseFloat(value), min);\n\n\t//workout percentage\n\tvalue = Math.round((value - min) / percent);\n\t// bar.style.right = value + \"%\";\n\tbar.style.width = value + \"%\";\n\n\telement.setAttribute(\"aria-valuemin\", min);\n\telement.setAttribute(\"aria-valuemax\", max);\n\n\tbar.appendChild(handle);\n\n\thandle.addEventListener(\"mousedown\", function(e){\n\t\tmouseDrag = e.screenX;\n\t\tmouseDragWidth = bar.offsetWidth;\n\t});\n\n\thandle.addEventListener(\"mouseover\", function(){\n\t\thandle.style.cursor = \"ew-resize\";\n\t});\n\n\telement.addEventListener(\"mousemove\", function(e){\n\t\tif(mouseDrag){\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\n\t\t}\n\t});\n\n\telement.addEventListener(\"mouseup\", function(e){\n\t\tif(mouseDrag){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\n\t\t\tmouseDrag = false;\n\t\t\tmouseDragWidth = false;\n\n\t\t\tupdateValue();\n\t\t}\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 9: //tab\n\t\t\tcase 13: //enter\n\t\t\t\tupdateValue();\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t}\n\t});\n\n\telement.addEventListener(\"blur\", function(){\n\t\tcancel();\n\t});\n\n\treturn bar;\n}","//checkbox\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar value = cell.getValue(),\n\tinput = document.createElement(\"input\"),\n\ttristate = editorParams.tristate,\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\tindetermState = false,\n\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\n\t\n\tinput.setAttribute(\"type\", \"checkbox\");\n\tinput.style.marginTop = \"5px\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = value;\n\t\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\n\t\tindetermState = true;\n\t\tinput.indeterminate = true;\n\t}\n\t\n\tif(this.table.browser != \"firefox\" && this.table.browser != \"safari\"){ //prevent blur issue on mac firefox\n\t\tonRendered(function(){\n\t\t\tif(cell.getType() === \"cell\"){\n\t\t\t\tinput.focus({preventScroll: true});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tinput.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === \"true\" || value === \"True\" || value === 1);\n\t\n\tfunction setValue(blur){\n\t\tvar checkedValue = input.checked;\n\t\t\n\t\tif(trueValueSet && checkedValue){\n\t\t\tcheckedValue = editorParams.trueValue;\n\t\t}else if(falseValueSet && !checkedValue){\n\t\t\tcheckedValue = editorParams.falseValue;\n\t\t}\n\t\t\n\t\tif(tristate){\n\t\t\tif(!blur){\n\t\t\t\tif(input.checked && !indetermState){\n\t\t\t\t\tinput.checked = false;\n\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\tindetermState = true;\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\tindetermState = false;\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(indetermState){\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\treturn checkedValue;\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"change\", function(e){\n\t\tsuccess(setValue());\n\t});\n\n\tinput.addEventListener(\"blur\", function(e){\n\t\tsuccess(setValue(true));\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tif(e.keyCode == 13){\n\t\t\tsuccess(setValue());\n\t\t}\n\t\tif(e.keyCode == 27){\n\t\t\tcancel();\n\t\t}\n\t});\n\t\n\treturn input;\n}","import input from './editors/input.js';\nimport textarea from './editors/textarea.js';\nimport number from './editors/number.js';\nimport range from './editors/range.js';\nimport date from './editors/date.js';\nimport time from './editors/time.js';\nimport datetime from './editors/datetime.js';\nimport select from './editors/select.js';\nimport list from './editors/list.js';\nimport autocomplete from './editors/autocomplete.js';\nimport star from './editors/star.js';\nimport progress from './editors/progress.js';\nimport tickCross from './editors/tickCross.js';\n\nexport default {\n\tinput:input,\n\ttextarea:textarea,\n\tnumber:number,\n\trange:range,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tselect:select,\n\tlist:list,\n\tautocomplete:autocomplete,\n\tstar:star,\n\tprogress:progress,\n\ttickCross:tickCross,\n};","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultEditors from './defaults/editors.js';\n\nclass Edit extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.currentCell = false; //hold currently editing cell\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening\n\t\tthis.recursionBlock = false; //prevent focus recursion\n\t\tthis.invalidEdit = false;\n\t\tthis.editedCells = [];\n\t\t\n\t\tthis.editors = Edit.editors;\n\t\t\n\t\tthis.registerColumnOption(\"editable\");\n\t\tthis.registerColumnOption(\"editor\");\n\t\tthis.registerColumnOption(\"editorParams\");\n\t\t\n\t\tthis.registerColumnOption(\"cellEditing\");\n\t\tthis.registerColumnOption(\"cellEdited\");\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\n\t\t\n\t\tthis.registerTableOption(\"editTriggerEvent\", \"focus\");\n\t\t\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellIsEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.updateCellClass.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-layout\", this.rowEditableCheck.bind(this));\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\n\t\tthis.subscribe(\"clipboard-paste\", this.pasteBlocker.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\n\t\t\n\t\t\n\t\t// this.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\n\t\t// this.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Paste Negation //////////\n\t///////////////////////////////////\n\t\n\tpasteBlocker(e){\n\t\tif(this.currentCell){\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Keybinding Functions ///////\n\t///////////////////////////////////\n\t\n\tkeybindingNavigateNext(e){\n\t\tvar cell = this.currentCell,\n\t\tnewRow = this.options(\"tabEndNewRow\");\n\n\t\tif(cell){\n\t\t\tif(!this.navigateNext(cell, e)){\n\t\t\t\tif(newRow){\n\t\t\t\t\tcell.getElement().firstChild.blur();\n\t\t\t\t\t\n\t\t\t\t\tif(!this.invalidEdit){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(newRow === true){\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnewRow.then(() => {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tcell.getComponent().navigateNext();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Cell Functions //////////\n\t///////////////////////////////////\n\t\n\tcellIsEdited(cell){\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\n\t}\n\t\n\tcellCancelEdit(cell){\n\t\tif(cell === this.currentCell){\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}else{\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tupdateCellClass(cell){\n\t\tif(this.allowEdit(cell)) {\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\n\t\t}\n\t\telse {\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\n\t\t}\n\t}\n\t\n\tclearCellEdited(cells){\n\t\tif(!cells){\n\t\t\tcells = this.table.modules.edit.getEditedCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n\t\n\tnavigatePrev(cell = this.currentCell, e){\n\t\tvar nextCell, prevRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateLeft();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(prevRow){\n\t\t\t\t\tnextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateNext(cell = this.currentCell, e){\n\t\tvar nextCell, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateRight();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(nextRow){\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateLeft(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateRight(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateUp(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateDown(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfindNextEditableCell(row, index){\n\t\tvar nextCell = false;\n\t\t\n\t\tif(index < row.cells.length-1){\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tnextCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindPrevEditableCell(row, index){\n\t\tvar prevCell = false;\n\t\t\n\t\tif(index > 0){\n\t\t\tfor(var i = index-1; i >= 0; i--){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tprevCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn prevCell;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.editor !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\tcolumnDeleteCheck(column){\n\t\tif(this.currentCell && this.currentCell.column === column){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowDeleteCheck(row){\n\t\tif(this.currentCell && this.currentCell.row === row){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowEditableCheck(row){\n\t\trow.getCells().forEach((cell) => {\n\t\t\tif(cell.column.modules.edit && typeof cell.column.modules.edit.check === \"function\"){\n\t\t\t\tthis.updateCellClass(cell);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//initialize column editor\n\tinitializeColumn(column){\n\t\tvar config = {\n\t\t\teditor:false,\n\t\t\tblocked:false,\n\t\t\tcheck:column.definition.editable,\n\t\t\tparams:column.definition.editorParams || {}\n\t\t};\n\t\t\n\t\t//set column editor\n\t\tswitch(typeof column.definition.editor){\n\t\t\tcase \"string\":\n\t\t\t\tif(this.editors[column.definition.editor]){\n\t\t\t\t\tconfig.editor = this.editors[column.definition.editor];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.editor = column.definition.editor;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"boolean\":\n\t\t\t\tif(column.definition.editor === true){\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\n\t\t\t\t\t\tif(this.editors[column.definition.formatter]){\n\t\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(config.editor){\n\t\t\tcolumn.modules.edit = config;\n\t\t}\n\t}\n\t\n\tgetCurrentCell(){\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\n\t}\n\t\n\tclearEditor(cancel){\n\t\tvar cell = this.currentCell,\n\t\tcellEl;\n\t\t\n\t\tthis.invalidEdit = false;\n\t\t\n\t\tif(cell){\n\t\t\tthis.currentCell = false;\n\t\t\t\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\n\t\t\t\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\n\t\t\t\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\n\t\t}\n\t}\n\t\n\tcancelEdit(){\n\t\tif(this.currentCell){\n\t\t\tvar cell = this.currentCell;\n\t\t\tvar component = this.currentCell.getComponent();\n\t\t\t\n\t\t\tthis.clearEditor(true);\n\t\t\tcell.setValueActual(cell.getValue());\n\t\t\tcell.cellRendered();\n\t\t\t\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\n\t\t\t\tcell.row.normalizeHeight(true);\n\t\t\t}\n\t\t\t\n\t\t\tif(cell.column.definition.cellEditCancelled){\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\n\t\t}\n\t}\n\t\n\t//return a formatted value for a cell\n\tbindEditor(cell){\n\t\tif(cell.column.modules.edit){\n\t\t\tvar self = this,\n\t\t\telement = cell.getElement(true);\n\t\t\t\n\t\t\tthis.updateCellClass(cell);\n\t\t\telement.setAttribute(\"tabindex\", 0);\n\t\t\t\n\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif (e.button === 2) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}else{\n\t\t\t\t\tself.mouseClick = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(this.options(\"editTriggerEvent\") === \"dblclick\"){\n\t\t\t\telement.addEventListener(\"dblclick\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\" || this.options(\"editTriggerEvent\") === \"click\"){\n\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\"){\n\t\t\t\telement.addEventListener(\"focus\", function(e){\n\t\t\t\t\tif(!self.recursionBlock){\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfocusCellNoEvent(cell, block){\n\t\tthis.recursionBlock = true;\n\t\t\n\t\tif(!(block && this.table.browser === \"ie\")){\n\t\t\tcell.getElement().focus({preventScroll: true});\n\t\t}\n\t\t\n\t\tthis.recursionBlock = false;\n\t}\n\t\n\teditCell(cell, forceEdit){\n\t\tthis.focusCellNoEvent(cell);\n\t\tthis.edit(cell, false, forceEdit);\n\t}\n\t\n\tfocusScrollAdjust(cell){\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t\trowEl = cell.row.getElement();\n\t\t\t\n\t\t\tif(rowEl.offsetTop < topEdge){\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\n\t\t\t}else{\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0);\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t}\n\t\t\t\n\t\t\tif(cellEl.offsetLeft < leftEdge){\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\n\t\t\t}else{\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tallowEdit(cell) {\n\t\tvar check = cell.column.modules.edit ? true : false;\n\t\t\n\t\tif(cell.column.modules.edit){\n\t\t\tswitch(typeof cell.column.modules.edit.check){\n\t\t\t\tcase \"function\":\n\t\t\t\t\tif(cell.row.initialized){\n\t\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn check;\n\t}\n\t\n\tedit(cell, e, forceEdit){\n\t\tvar self = this,\n\t\tallowEdit = true,\n\t\trendered = function(){},\n\t\telement = cell.getElement(),\n\t\teditFinished = false,\n\t\tcellEditor, component, params;\n\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\t\t\n\t\tif(this.currentCell){\n\t\t\tif(!this.invalidEdit && this.currentCell !== cell){\n\t\t\t\tthis.cancelEdit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t//handle successful value change\n\t\tfunction success(value){\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\n\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\n\n\t\t\t\t\teditFinished = true;\n\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\t\n\t\t\t\t\tif(!cell.modules.edit){\n\t\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.modules.edit.edited = true;\n\t\t\t\t\t\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\n\t\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\t\treturn valid === true;\n\t\t\t\t}else{\n\t\t\t\t\teditFinished = true;\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\teditFinished = false;\n\t\t\t\t\t}, 10);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//handle aborted edit\n\t\tfunction cancel(){\n\t\t\t// editFinished = true;\n\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tself.cancelEdit();\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\trendered = callback;\n\t\t}\n\t\t\n\t\tif(!cell.column.modules.edit.blocked){\n\t\t\tif(e){\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\t\n\t\t\tallowEdit = this.allowEdit(cell);\n\t\t\t\n\t\t\tif(allowEdit || forceEdit){\n\t\t\t\tself.cancelEdit();\n\t\t\t\t\n\t\t\t\tself.currentCell = cell;\n\t\t\t\t\n\t\t\t\tthis.focusScrollAdjust(cell);\n\t\t\t\t\n\t\t\t\tcomponent = cell.getComponent();\n\t\t\t\t\n\t\t\t\tif(this.mouseClick){\n\t\t\t\t\tthis.mouseClick = false;\n\t\t\t\t\t\n\t\t\t\t\tif(cell.column.definition.cellClick){\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(cell.column.definition.cellEditing){\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\n\t\t\t\t\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\t\t\t\t\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\t\t\t\t\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\t\tif(this.currentCell && cellEditor !== false){\n\t\t\t\t\tif(cellEditor instanceof Node){\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\t\t\t\telement.appendChild(cellEditor);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\t\trendered();\n\t\t\t\t\t\t\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\t\tvar children = element.children;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\t\tthis.blur(element);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.blur(element);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tthis.mouseClick = false;\n\t\t\t\tthis.blur(element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.mouseClick = false;\n\t\t\tthis.blur(element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tblur(element){\n\t\tif(!this.confirm(\"edit-blur\", [element]) ){\n\t\t\telement.blur();\n\t\t}\n\t}\n\t\n\tgetEditedCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.editedCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearEdited(cell){\n\t\tvar editIndex;\n\t\t\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\n\t\t\tcell.modules.edit.edited = false;\n\t\t\t\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\n\t\t}\n\t\t\n\t\teditIndex = this.editedCells.indexOf(cell);\n\t\t\n\t\tif(editIndex > -1){\n\t\t\tthis.editedCells.splice(editIndex, 1);\n\t\t}\n\t}\n}\n\nEdit.moduleName = \"edit\";\n\n//load defaults\nEdit.editors = defaultEditors;\n\n\nexport default Edit;\n","class ExportRow{\n\tconstructor(type, columns, component, indent){\n\t\tthis.type = type;\n\t\tthis.columns = columns;\n\t\tthis.component = component || false;\n\t\tthis.indent = indent || 0;\n\t}\n}\n\nexport default ExportRow;","class ExportColumn{\n\tconstructor(value, component, width, height, depth){\n\t\tthis.value = value;\n\t\tthis.component = component || false;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = depth;\n\t}\n}\n\nexport default ExportColumn;","import Module from '../../core/Module.js';\n\nimport ExportRow from './ExportRow.js';\nimport ExportColumn from './ExportColumn.js';\n\nclass Export extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {};\n\t\tthis.cloneTableStyle = true;\n\t\tthis.colVisProp = \"\";\n\t\t\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html output config\n\t\t\n\t\tthis.registerColumnOption(\"htmlOutput\");\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tgenerateExportList(config, style, range, colVisProp){\n\t\tthis.cloneTableStyle = style;\n\t\tthis.config = config || {};\n\t\tthis.colVisProp = colVisProp;\n\n\t\tvar headers, body;\n\t\t\n\t\tif (range === 'range') {\n\t\t\tvar columns = this.table.modules.selectRange.selectedColumns();\n\t\t\theaders = this.config.columnHeaders !== false\n\t\t\t\t? this.headersToExportRows(this.generateColumnGroupHeaders(columns))\n\t\t\t\t: [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true));\n\t\t} else {\n\t\t\theaders = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range));\n\t\t}\n\n\t\treturn headers.concat(body);\n\t}\n\t\n\tgenerateTable(config, style, range, colVisProp){\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\n\t\t\n\t\treturn this.generateTableElement(list);\n\t}\n\t\n\trowLookup(range){\n\t\tvar rows = [];\n\t\t\n\t\tif(typeof range == \"function\"){\n\t\t\trange.call(this.table).forEach((row) =>{\n\t\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tswitch(range){\n\t\t\t\tcase true:\n\t\t\t\tcase \"visible\":\n\t\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"all\":\n\t\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"selected\":\n\t\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"range\":\n\t\t\t\t\trows = this.table.modules.selectRange.selectedRows();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"active\":\n\t\t\t\tdefault:\n\t\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Object.assign([], rows);\n\t}\n\t\n\tgenerateColumnGroupHeaders(columns){\n\t\tvar output = [];\n\t\t\n\t\tif (!columns) {\n\t\t\tcolumns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\t\t}\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\tvar colData = this.processColumnGroup(column);\n\t\t\t\n\t\t\tif(colData){\n\t\t\t\toutput.push(colData);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\t\n\tprocessColumnGroup(column){\n\t\tvar subGroups = column.columns,\n\t\tmaxDepth = 0,\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\t\t\n\t\tvar groupData = {\n\t\t\ttitle:title,\n\t\t\tcolumn:column,\n\t\t\tdepth:1,\n\t\t};\n\t\t\n\t\tif(subGroups.length){\n\t\t\tgroupData.subGroups = [];\n\t\t\tgroupData.width = 0;\n\t\t\t\n\t\t\tsubGroups.forEach((subGroup) => {\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\n\t\t\t\t\n\t\t\t\tif(subGroupData){\n\t\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\n\t\t\t\t\t\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tgroupData.depth += maxDepth;\n\t\t\t\n\t\t\tif(!groupData.width){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.columnVisCheck(column)){\n\t\t\t\tgroupData.width = 1;\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn groupData;\n\t}\n\t\n\tcolumnVisCheck(column){\n\t\tvar visProp = column.definition[this.colVisProp];\n\t\t\n\t\tif(typeof visProp === \"function\"){\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\n\t\t}\n\t\t\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\n\t}\n\t\n\theadersToExportRows(columns){\n\t\tvar headers = [],\n\t\theaderDepth = 0,\n\t\texportRows = [];\n\t\t\n\t\tfunction parseColumnGroup(column, level){\n\t\t\t\n\t\t\tvar depth = headerDepth - level;\n\t\t\t\n\t\t\tif(typeof headers[level] === \"undefined\"){\n\t\t\t\theaders[level] = [];\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\n\t\t\t\n\t\t\theaders[level].push(column);\n\t\t\t\n\t\t\tif(column.height > 1){\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\n\t\t\t\t\t\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\n\t\t\t\t\t\theaders[level + i] = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\theaders[level + i].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.width > 1){\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\n\t\t\t\t\theaders[level].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.subGroups){\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t//calculate maximum header depth\n\t\tcolumns.forEach(function(column){\n\t\t\tif(column.depth > headerDepth){\n\t\t\t\theaderDepth = column.depth;\n\t\t\t}\n\t\t});\n\t\t\n\t\tcolumns.forEach(function(column){\n\t\t\tparseColumnGroup(column,0);\n\t\t});\n\t\t\n\t\theaders.forEach((header) => {\n\t\t\tvar columns = [];\n\t\t\t\n\t\t\theader.forEach((col) => {\n\t\t\t\tif(col){\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t\t}else{\n\t\t\t\t\tcolumns.push(null);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tbodyToExportRows(rows, columns = []){\n\t\tvar exportRows = [];\n\t\t\n\t\tif (columns.length === 0) {\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\t\tcolumns.push(column.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\n\t\trows = rows.filter((row) => {\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn this.config.rowGroups !== false;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\treturn this.config.columnCalcs !== false;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t});\n\t\t\n\t\trows.forEach((row, i) => {\n\t\t\tvar rowData = row.getData(this.colVisProp);\n\t\t\tvar exportCols = [];\n\t\t\tvar indent = 0;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\tindent = row.level;\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\" :\n\t\t\t\tcase \"row\" :\n\t\t\t\t\tcolumns.forEach((col) => {\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tgenerateTableElement(list){\n\t\tvar table = document.createElement(\"table\"),\n\t\theaderEl = document.createElement(\"thead\"),\n\t\tbodyEl = document.createElement(\"tbody\"),\n\t\tstyles = this.lookupTableStyles(),\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t\tsetup = {};\n\t\t\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\t\t\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t\t}\n\t\t\n\t\t//assign group header formatter\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\t\t\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\n\t\t\tsetup.groupHeader = [setup.groupHeader];\n\t\t}\n\t\t\n\t\ttable.classList.add(\"tabulator-print-table\");\n\t\t\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\n\t\t\n\t\tif(list.length > 1000){\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t\t}\n\t\t\n\t\tlist.forEach((row, i) => {\n\t\t\tlet rowEl;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"header\":\n\t\t\t\t\theaderEl.appendChild(this.generateHeaderElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbodyEl.appendChild(this.generateGroupElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbodyEl.appendChild(this.generateCalcElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\n\t\t\t\t\n\t\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\t\tbodyEl.appendChild(rowEl);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(headerEl.innerHTML){\n\t\t\ttable.appendChild(headerEl);\n\t\t}\n\t\t\n\t\ttable.appendChild(bodyEl);\n\t\t\n\t\t\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\t\treturn table;\n\t}\n\t\n\tlookupTableStyles(){\n\t\tvar styles = {};\n\t\t\n\t\t//lookup row styles\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\t\t\t\n\t\t\tif(styles.firstRow){\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn styles;\n\t}\n\t\n\tgenerateHeaderElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trow.columns.forEach((column) => {\n\t\t\tif(column){\n\t\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tcellEl.colSpan = column.width;\n\t\t\t\tcellEl.rowSpan = column.height;\n\t\t\t\t\n\t\t\t\tcellEl.innerHTML = column.value;\n\t\t\t\t\n\t\t\t\tif(this.cloneTableStyle){\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\t\t\n\t\t\t\tif(column.component._column.visible){\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t\t}else{\n\t\t\t\t\tif(column.component._column.definition.width){\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(column.component._column.parent){\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateGroupElement(row, setup, styles){\n\t\t\n\t\tvar rowEl = document.createElement(\"tr\"),\n\t\tcellEl = document.createElement(\"td\"),\n\t\tgroup = row.columns[0];\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}else{\n\t\t\tif(setup.groupHeader !== false){\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t\t\n\t\tcellEl.colSpan = group.width;\n\t\tcellEl.innerHTML = group.value;\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\t\t\n\t\tif(group.component.isVisible()){\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\n\t\trowEl.appendChild(cellEl);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateCalcElement(row, setup, styles){\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateRowElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\trow.columns.forEach((col, i) => {\n\t\t\tif(col){\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t\tcolumn = col.component._column,\n\t\t\t\ttable = this.table,\n\t\t\t\tindex = table.columnManager.findColumnIndex(column),\n\t\t\t\tvalue = col.value,\n\t\t\t\tcellStyle;\n\t\t\t\t\n\t\t\t\tvar cellWrapper = {\n\t\t\t\t\tmodules:{},\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn cellEl;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\treturn row.component.getData();\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn row.component;\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:function(){\n\t\t\t\t\t\treturn table;\n\t\t\t\t\t},\n\t\t\t\t\tgetComponent:function(){\n\t\t\t\t\t\treturn cellWrapper;\n\t\t\t\t\t},\n\t\t\t\t\tcolumn:column,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\n\t\t\t\t}else{\n\t\t\t\t\tswitch(typeof value){\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(value instanceof Node){\n\t\t\t\t\tcellEl.appendChild(value);\n\t\t\t\t}else{\n\t\t\t\t\tcellEl.innerHTML = value;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\n\t\t\t\t\n\t\t\t\tif(cellStyle){\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\n\t\t\t\t\t\n\t\t\t\t\tif(column.definition.align){\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t\t\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(setup.rowFormatter && row.type === \"row\" && this.config.formatCells !== false){\n\t\t\tlet formatComponent = Object.assign(row.component);\n\n\t\t\tformatComponent.getElement = function(){return rowEl;};\n\n\t\t\tsetup.rowFormatter(row.component);\n\t\t}\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateHTMLTable(list){\n\t\tvar holder = document.createElement(\"div\");\n\t\t\n\t\tholder.appendChild(this.generateTableElement(list));\n\t\t\n\t\treturn holder.innerHTML;\n\t}\n\t\n\tgetHtml(visible, style, config, colVisProp){\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\t\t\n\t\treturn this.generateHTMLTable(list);\n\t}\n\t\n\tmapElementStyles(from, to, props){\n\t\tif(this.cloneTableStyle && from && to){\n\t\t\t\n\t\t\tvar lookup = {\n\t\t\t\t\"background-color\" : \"backgroundColor\",\n\t\t\t\t\"color\" : \"fontColor\",\n\t\t\t\t\"width\" : \"width\",\n\t\t\t\t\"font-weight\" : \"fontWeight\",\n\t\t\t\t\"font-family\" : \"fontFamily\",\n\t\t\t\t\"font-size\" : \"fontSize\",\n\t\t\t\t\"text-align\" : \"textAlign\",\n\t\t\t\t\"border-top\" : \"borderTop\",\n\t\t\t\t\"border-left\" : \"borderLeft\",\n\t\t\t\t\"border-right\" : \"borderRight\",\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\n\t\t\t\t\"padding-top\" : \"paddingTop\",\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\n\t\t\t\t\"padding-right\" : \"paddingRight\",\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\n\t\t\t};\n\t\t\t\n\t\t\tif(window.getComputedStyle){\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\n\t\t\t\t\n\t\t\t\tprops.forEach(function(prop){\n\t\t\t\t\tif(!to.style[lookup[prop]]){\n\t\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nExport.moduleName = \"export\";\n\nexport default Export;\n","export default {\n\n\t//equal to\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal == filterVal ? true : false;\n\t},\n\n\t//less than\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal < filterVal ? true : false;\n\t},\n\n\t//less than or equal to\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal <= filterVal ? true : false;\n\t},\n\n\t//greater than\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal > filterVal ? true : false;\n\t},\n\n\t//greater than or equal to\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal >= filterVal ? true : false;\n\t},\n\n\t//not equal to\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal != filterVal ? true : false;\n\t},\n\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\n\n\t\tif(typeof filterVal == \"string\"){\n\t\t\tfilterVal = new RegExp(filterVal);\n\t\t}\n\n\t\treturn filterVal.test(rowVal);\n\t},\n\n\t//contains the string\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//contains the keywords\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\tmatches = [];\n\n\t\tkeywords.forEach((keyword) =>{\n\t\t\tif(value.includes(keyword)){\n\t\t\t\tmatches.push(true);\n\t\t\t}\n\t\t});\n\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\n\t},\n\n\t//starts with the string\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//ends with the string\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(Array.isArray(filterVal)){\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\treturn false;\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultFilters from './defaults/filters.js';\n\nclass Filter extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.filterList = []; //hold filter list\n\t\tthis.headerFilters = {}; //hold column filters\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.changed = false; //has filtering changed since last render\n\t\tthis.tableInitialized = false;\n\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\n\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\n\t\tthis.registerTableOption(\"placeholderHeaderFilter\", false); //placeholder when header filter is empty\n\n\t\tthis.registerColumnOption(\"headerFilter\");\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\n\t\tthis.registerColumnOption(\"headerFilterParams\");\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\n\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\n\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\n\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.subscribe(\"placeholder\", this.generatePlaceholder.bind(this));\n\n\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\n\t\t}\n\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\n\t}\n\n\ttableBuilt(){\n\t\tif(this.table.options.initialFilter){\n\t\t\tthis.setFilter(this.table.options.initialFilter);\n\t\t}\n\n\t\tif(this.table.options.initialHeaderFilter){\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\n\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.tableInitialized = true;\n\t}\n\n\tremoteFilterParams(data, config, silent, params){\n\t\tparams.filter = this.getFilters(true, true);\n\t\treturn params;\n\t}\n\n\tgeneratePlaceholder(text){\n\t\tif(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){\n\t\t\treturn this.table.options.placeholderHeaderFilter;\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t//set standard filters\n\tuserSetFilter(field, type, value, params){\n\t\tthis.setFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\t//set standard filters\n\tuserRefreshFilter(){\n\t\tthis.refreshFilter();\n\t}\n\n\t//add filter to array\n\tuserAddFilter(field, type, value, params){\n\t\tthis.addFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\tuserSetHeaderFilterFocus(field){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterFocus(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tuserGetHeaderFilterValue(field) {\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\treturn this.getHeaderFilterValue(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t}\n\t}\n\n\tuserSetHeaderFilterValue(field, value){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterValue(column, value);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//remove filter from array\n\tuserRemoveFilter(field, type, value){\n\t\tthis.removeFilter(field, type, value);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear filters\n\tuserClearFilter(all){\n\t\tthis.clearFilter(all);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear header filters\n\tuserClearHeaderFilter(){\n\t\tthis.clearHeaderFilter();\n\t\tthis.refreshFilter();\n\t}\n\n\n\t//search for specific row components\n\tsearchRows(field, type, value){\n\t\treturn this.search(\"rows\", field, type, value);\n\t}\n\n\t//search for specific data\n\tsearchData(field, type, value){\n\t\treturn this.search(\"data\", field, type, value);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumnHeaderFilter(column){\n\t\tvar def = column.definition;\n\n\t\tif(def.headerFilter){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\n\t//initialize column header filter\n\tinitializeColumn(column, value){\n\t\tvar self = this,\n\t\tfield = column.getField();\n\n\t\t//handle successfully value change\n\t\tfunction success(value){\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t\ttype = \"\",\n\t\t\tfilterChangeCheck = \"\",\n\t\t\tfilterFunc;\n\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\n\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\n\t\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!filterFunc){\n\t\t\t\t\t\tswitch(filterType){\n\t\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\n\t\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type};\n\t\t\t\t}else{\n\t\t\t\t\tdelete self.headerFilters[field];\n\t\t\t\t}\n\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\t\tself.trackChanges();\n\t\t\t\t\tself.refreshFilter();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tcolumn.modules.filter = {\n\t\t\tsuccess:success,\n\t\t\tattrType:false,\n\t\t\ttagType:false,\n\t\t\temptyFunc:false,\n\t\t};\n\n\t\tthis.generateHeaderFilterElement(column);\n\t}\n\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\n\t\tvar self = this,\n\t\tsuccess = column.modules.filter.success,\n\t\tfield = column.getField(),\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback;\n\n\t\tcolumn.modules.filter.value = initialValue;\n\n\t\t//handle aborted edit\n\t\tfunction cancel(){}\n\n\t\tfunction onRendered(callback){\n\t\t\tonRenderedCallback = callback;\n\t\t}\n\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t\t}\n\n\t\tif(field){\n\n\t\t\t//set empty value function\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\n\t\t\t\treturn !value && value !== 0;\n\t\t\t};\n\n\t\t\tfilterElement = document.createElement(\"div\");\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t\t//set column editor\n\t\t\tswitch(typeof column.definition.headerFilter){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\n\t\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(editor){\n\n\t\t\t\tcellWrapper = {\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn filterElement;\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:() => {\n\t\t\t\t\t\treturn \"header\";\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnormalizeHeight:function(){\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\n\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params);\n\n\t\t\t\tif(!editorElement){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(!(editorElement instanceof Node)){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//set Placeholder Text\n\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : (column.definition.headerFilterPlaceholder || self.langText(\"headerFilters|default\")));\n\t\t\t\t});\n\n\t\t\t\t//focus on element on click\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\teditorElement.focus();\n\t\t\t\t});\n\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\n\t\t\t\t\tvar left = this.table.columnManager.contentsElement.scrollLeft;\n\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft;\n\n\t\t\t\t\tif(left !== headerPos){\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//live update filters as user types\n\t\t\t\ttypingTimer = false;\n\n\t\t\t\tsearchTrigger = function(e){\n\t\t\t\t\tif(typingTimer){\n\t\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t\t}\n\n\t\t\t\t\ttypingTimer = setTimeout(function(){\n\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\n\t\t\t\t};\n\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\n\t\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\n\t\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//prevent input and select elements from propagating click to column sorters etc\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\t\tif(!reinitialize){\n\t\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t\t}\n\n\t\t\t\tif(onRenderedCallback){\n\t\t\t\t\tonRenderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t\t}\n\t}\n\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\thideHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t\t}\n\t\t});\n\t}\n\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\tshowHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//programmatically set focus of header filter\n\tsetHeaderFilterFocus(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\tcolumn.modules.filter.headerElement.focus();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically get value of header filter\n\tgetHeaderFilterValue(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\treturn column.modules.filter.value;\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically set value of header filter\n\tsetHeaderFilterValue(column, value){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\t\tcolumn.modules.filter.success(value);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\treloadHeaderFilter(column){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\trefreshFilter(){\n\t\tif(this.tableInitialized){\n\t\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\t\tthis.reloadData(null, false, false);\n\t\t\t}else{\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\n\t//check if the filters has changed since last use\n\ttrackChanges(){\n\t\tthis.changed = true;\n\t\tthis.dispatch(\"filter-changed\");\n\t}\n\n\t//check if the filters has changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\n\t//set standard filters\n\tsetFilter(field, type, value, params){\n\t\tthis.filterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tthis.addFilter(field);\n\t}\n\n\t//add filter to array\n\taddFilter(field, type, value, params){\n\t\tvar changed = false;\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tthis.filterList.push(filter);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\n\t\tif(changed){\n\t\t\tthis.trackChanges();\n\t\t}\n\t}\n\n\tfindFilter(filter){\n\t\tvar column;\n\n\t\tif(Array.isArray(filter)){\n\t\t\treturn this.findSubFilters(filter);\n\t\t}\n\n\t\tvar filterFunc = false;\n\n\t\tif(typeof filter.field == \"function\"){\n\t\t\tfilterFunc = function(data){\n\t\t\t\treturn filter.field(data, filter.type || {});// pass params to custom filter function\n\t\t\t};\n\t\t}else{\n\n\t\t\tif(Filter.filters[filter.type]){\n\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}\n\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t}\n\n\t\tfilter.func = filterFunc;\n\n\t\treturn filter.func ? filter : false;\n\t}\n\n\tfindSubFilters(filters){\n\t\tvar output = [];\n\n\t\tfilters.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\toutput.push(filter);\n\t\t\t}\n\t\t});\n\n\t\treturn output.length ? output : false;\n\t}\n\n\t//get all filters\n\tgetFilters(all, ajax){\n\t\tvar output = [];\n\n\t\tif(all){\n\t\t\toutput = this.getHeaderFilters();\n\t\t}\n\n\t\tif(ajax){\n\t\t\toutput.forEach(function(item){\n\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\t\treturn output;\n\t}\n\n\t//filter to Object\n\tfiltersToArray(filterList, ajax){\n\t\tvar output = [];\n\n\t\tfilterList.forEach((filter) => {\n\t\t\tvar item;\n\n\t\t\tif(Array.isArray(filter)){\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\n\t\t\t}else{\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value};\n\n\t\t\t\tif(ajax){\n\t\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\t\titem.type = \"function\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//get all filters\n\tgetHeaderFilters(){\n\t\tvar output = [];\n\n\t\tfor(var key in this.headerFilters){\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//remove filter from array\n\tremoveFilter(field, type, value){\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tvar index = -1;\n\n\t\t\tif(typeof filter.field == \"object\"){\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter === element;\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.filterList.splice(index, 1);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear filters\n\tclearFilter(all){\n\t\tthis.filterList = [];\n\n\t\tif(all){\n\t\t\tthis.clearHeaderFilter();\n\t\t}\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear header filters\n\tclearHeaderFilter(){\n\t\tthis.headerFilters = {};\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.headerFilterColumns.forEach((column) => {\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\n\t\t\t\tdelete column.modules.filter.value;\n\t\t\t}\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\t\tthis.reloadHeaderFilter(column);\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//search data and return matching rows\n\tsearch (searchType, field, type, value){\n\t\tvar activeRows = [],\n\t\tfilterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tfilterList.push(filter);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\tvar match = true;\n\n\t\t\tfilterList.forEach((filter) => {\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t\t}\n\n\t\t});\n\n\t\treturn activeRows;\n\t}\n\n\t//filter row array\n\tfilter(rowList, filters){\n\t\tvar activeRows = [],\n\t\tactiveRowComponents = [];\n\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters(true));\n\t\t}\n\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\n\n\t\t\trowList.forEach((row) => {\n\t\t\t\tif(this.filterRow(row)){\n\t\t\t\t\tactiveRows.push(row);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}else{\n\t\t\tactiveRows = rowList.slice(0);\n\t\t}\n\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\n\n\t\t\tactiveRows.forEach((row) => {\n\t\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t\t});\n\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(true), activeRowComponents);\n\t\t}\n\n\t\treturn activeRows;\n\t}\n\n\t//filter individual row\n\tfilterRow(row, filters){\n\t\tvar match = true,\n\t\tdata = row.getData();\n\n\t\tthis.filterList.forEach((filter) => {\n\t\t\tif(!this.filterRecurse(filter, data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\n\t\tfor(var field in this.headerFilters){\n\t\t\tif(!this.headerFilters[field].func(data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\treturn match;\n\t}\n\n\tfilterRecurse(filter, data){\n\t\tvar match = false;\n\n\t\tif(Array.isArray(filter)){\n\t\t\tfilter.forEach((subFilter) => {\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\n\t\t\t\t\tmatch = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tmatch = filter.func(data);\n\t\t}\n\n\t\treturn match;\n\t}\n}\n\nFilter.moduleName = \"filter\";\n\n//load defaults\nFilter.filters = defaultFilters;\n\nexport default Filter;","export default function(cell, formatterParams, onRendered){\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\treturn cell.getValue();\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\tvar floatVal = parseFloat(cell.getValue()),\n\tsign = \"\",\n\tnumber, integer, decimal, rgx, value;\n\n\tvar decimalSym = formatterParams.decimal || \".\";\n\tvar thousandSym = formatterParams.thousand || \",\";\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\n\tvar symbol = formatterParams.symbol || \"\";\n\tvar after = !!formatterParams.symbolAfter;\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\tif(isNaN(floatVal)){\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t}\n\n\tif(floatVal < 0){\n\t\tfloatVal = Math.abs(floatVal);\n\t\tsign = negativeSign;\n\t}\n\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\tnumber = String(number).split(\".\");\n\n\tinteger = number[0];\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\tif (formatterParams.thousand !== false) {\n\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\twhile (rgx.test(integer)){\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t}\n\t}\n\n\tvalue = integer + decimal;\n\t\n\tif(sign === true){\n\t\tvalue = \"(\" + value + \")\";\n\t\treturn after ? value + symbol : symbol + value;\n\t}else{\n\t\treturn after ? sign + value + symbol : sign + symbol + value;\n\t}\n}","import Helpers from '../../../../core/tools/Helpers.js';\n\n\nexport default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\turlPrefix = formatterParams.urlPrefix || \"\",\n\tdownload = formatterParams.download,\n\tlabel = value,\n\tel = document.createElement(\"a\"),\n\tdata;\n\n\tfunction labelTraverse(path, data){\n\t\tvar item = path.shift(),\n\t\tvalue = data[item];\n\t\t\n\t\tif(path.length && typeof value === \"object\"){\n\t\t\treturn labelTraverse(path, value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tif(formatterParams.labelField){\n\t\tdata = cell.getData();\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\n\t}\n\n\tif(formatterParams.label){\n\t\tswitch(typeof formatterParams.label){\n\t\t\tcase \"string\":\n\t\t\t\tlabel = formatterParams.label;\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(label){\n\t\tif(formatterParams.urlField){\n\t\t\tdata = cell.getData();\n\n\t\t\tvalue = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data);\n\t\t}\n\n\t\tif(formatterParams.url){\n\t\t\tswitch(typeof formatterParams.url){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\tif(formatterParams.target){\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t}\n\n\t\tif(formatterParams.download){\n\n\t\t\tif(typeof download == \"function\"){\n\t\t\t\tdownload = download(cell);\n\t\t\t}else{\n\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t}\n\n\t\t\tel.setAttribute(\"download\", download);\n\t\t}\n\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\treturn el;\n\t}else{\n\t\treturn \" \";\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"img\"),\n\tsrc = cell.getValue();\n\n\tif(formatterParams.urlPrefix){\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t}\n\n\tif(formatterParams.urlSuffix){\n\t\tsrc = src + formatterParams.urlSuffix;\n\t}\n\n\tel.setAttribute(\"src\", src);\n\n\tswitch(typeof formatterParams.height){\n\t\tcase \"number\":\n\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.height = formatterParams.height;\n\t\t\tbreak;\n\t}\n\n\tswitch(typeof formatterParams.width){\n\t\tcase \"number\":\n\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.width = formatterParams.width;\n\t\t\tbreak;\n\t}\n\n\tel.addEventListener(\"load\", function(){\n\t\tcell.getRow().normalizeHeight();\n\t});\n\n\treturn el;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tempty = formatterParams.allowEmpty,\n\ttruthy = formatterParams.allowTruthy,\n\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\n\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")))){\n\t\telement.setAttribute(\"aria-checked\", true);\n\t\treturn tick || \"\";\n\t}else{\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\treturn \"\";\n\t\t}else{\n\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\treturn cross || \"\";\n\t\t}\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif(newDatetime.isValid){\n\t\t\tif(formatterParams.timezone){\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\n\t\t\t}\n\n\t\t\treturn newDatetime.toFormat(outputFormat);\n\t\t}else{\n\t\t\tif(invalid === true || !value){\n\t\t\t\treturn value;\n\t\t\t}else if(typeof invalid === \"function\"){\n\t\t\t\treturn invalid(value);\n\t\t\t}else{\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif (newDatetime.isValid){\n\t\t\tif(humanize){\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\n\t\t\t}else{\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar value = cell.getValue();\n\n\tif (typeof formatterParams[value] === \"undefined\") {\n\t\tconsole.warn('Missing display value for ' + value);\n\t\treturn value;\n\t}\n\n\treturn formatterParams[value];\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\tstars = document.createElement(\"span\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\tstarActive = '',\n\tstarInactive = '';\n\n\t//style stars holder\n\tstars.style.verticalAlign = \"middle\";\n\n\t//style star\n\tstar.setAttribute(\"width\", \"14\");\n\tstar.setAttribute(\"height\", \"14\");\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\tfor(var i=1;i<= maxStars;i++){\n\t\tvar nextStar = star.cloneNode(true);\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\tstars.appendChild(nextStar);\n\t}\n\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\telement.setAttribute(\"aria-label\", value);\n\n\treturn stars;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\tel = document.createElement(\"span\"),\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\tcolor = \"#666666\",\n\tpercent, percentValue;\n\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\n\t\treturn;\n\t}\n\n\tel.classList.add(\"tabulator-traffic-light\");\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set color\n\tswitch(typeof colors){\n\t\tcase \"string\":\n\t\t\tcolor = colors;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = colors(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(colors)){\n\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = colors[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n\n\tel.style.backgroundColor = color;\n\n\treturn el;\n}","import CellComponent from '../../../../core/cell/CellComponent.js';\n\nexport default function(cell, formatterParams = {}, onRendered){ //progress bar\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\telement = cell.getElement(),\n\tmax = formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams.min ? formatterParams.min : 0,\n\tlegendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\tpercent, percentValue, color, legend, legendColor;\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set bar color\n\tswitch(typeof formatterParams.color){\n\t\tcase \"string\":\n\t\t\tcolor = formatterParams.color;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = formatterParams.color(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.color)){\n\t\t\t\tlet unit = 100 / formatterParams.color.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\tcolor = \"#2DC214\";\n\t}\n\n\t//generate legend\n\tswitch(typeof formatterParams.legend){\n\t\tcase \"string\":\n\t\t\tlegend = formatterParams.legend;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegend = formatterParams.legend(value);\n\t\t\tbreak;\n\t\tcase \"boolean\":\n\t\t\tlegend = value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegend = false;\n\t}\n\n\t//set legend color\n\tswitch(typeof formatterParams.legendColor){\n\t\tcase \"string\":\n\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.legendColor)){\n\t\t\t\tlet unit = 100 / formatterParams.legendColor.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegendColor = \"#000\";\n\t}\n\n\telement.style.minWidth = \"30px\";\n\telement.style.position = \"relative\";\n\n\telement.setAttribute(\"aria-label\", percentValue);\n\n\tvar barEl = document.createElement(\"div\");\n\tbarEl.style.display = \"inline-block\";\n\tbarEl.style.width = percentValue + \"%\";\n\tbarEl.style.backgroundColor = color;\n\tbarEl.style.height = \"100%\";\n\n\tbarEl.setAttribute('data-max', max);\n\tbarEl.setAttribute('data-min', min);\n\n\tvar barContainer = document.createElement(\"div\");\n\tbarContainer.style.position = \"relative\";\n\tbarContainer.style.width = \"100%\";\n\tbarContainer.style.height = \"100%\";\n\n\tif(legend){\n\t\tvar legendEl = document.createElement(\"div\");\n\t\tlegendEl.style.position = \"absolute\";\n\t\tlegendEl.style.top = 0;\n\t\tlegendEl.style.left = 0;\n\t\tlegendEl.style.textAlign = legendAlign;\n\t\tlegendEl.style.width = \"100%\";\n\t\tlegendEl.style.color = legendColor;\n\t\tlegendEl.innerHTML = legend;\n\t}\n\n\tonRendered(function(){\n\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\tif(!(cell instanceof CellComponent)){\n\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\tholderEl.style.position = \"absolute\";\n\t\t\tholderEl.style.top = \"4px\";\n\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\tholderEl.style.left = \"4px\";\n\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\telement.appendChild(holderEl);\n\n\t\t\telement = holderEl;\n\t\t}\n\n\t\telement.appendChild(barContainer);\n\t\tbarContainer.appendChild(barEl);\n\n\t\tif(legend){\n\t\t\tbarContainer.appendChild(legendEl);\n\t\t}\n\t});\n\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\tvar content = document.createElement(\"span\");\n\tvar row = cell.getRow();\n\tvar table = cell.getTable();\n\n\trow.watchPosition((position) => {\n\t\tif (formatterParams.relativeToPage) {\n\t\t\tposition += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);\n\t\t}\n\t\tcontent.innerText = position;\n\t});\n\t\n\treturn content;\n}\n","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\treturn \"
    \";\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"div\"),\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\n\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\n\tel.innerHTML = `\n \n \n\n\n\n \n`;\n\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\tfunction toggleList(isOpen){\n\t\tvar collapseEl = config.element;\n\n\t\tconfig.open = isOpen;\n\n\t\tif(collapseEl){\n\n\t\t\tif(config.open){\n\t\t\t\tel.classList.add(\"open\");\n\t\t\t\tcollapseEl.style.display = '';\n\t\t\t}else{\n\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tel.addEventListener(\"click\", function(e){\n\t\te.stopImmediatePropagation();\n\t\ttoggleList(!config.open);\n\t\tcell.getTable().rowManager.adjustTableSize();\n\t});\n\n\ttoggleList(config.open);\n\n\treturn el;\n}","import RowComponent from '../../../../core/row/RowComponent.js';\n\nexport default function(cell, formatterParams, onRendered){\n\tvar checkbox = document.createElement(\"input\");\n\tvar blocked = false;\n\n\tcheckbox.type = 'checkbox';\n\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\n\t\n\tif(this.table.modExists(\"selectRow\", true)){\n\n\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(typeof cell.getRow == 'function'){\n\t\t\tvar row = cell.getRow();\n\n\t\t\tif(row instanceof RowComponent){\n\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\t\tif(!blocked){\n\t\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tblocked = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\tblocked = true;\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t}else{\n\t\t\t\tcheckbox = \"\";\n\t\t\t}\n\t\t}else {\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\n\t\t\t\t\tthis.table.deselectRow();\n\t\t\t\t}else {\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t}\n\t}\n\n\treturn checkbox;\n}","import plaintext from './formatters/plaintext.js';\nimport html from './formatters/html.js';\nimport textarea from './formatters/textarea.js';\nimport money from './formatters/money.js';\nimport link from './formatters/link.js';\nimport image from './formatters/image.js';\nimport tickCross from './formatters/tickCross.js';\nimport datetime from './formatters/datetime.js';\nimport datetimediff from './formatters/datetimediff.js';\nimport lookup from './formatters/lookup.js';\nimport star from './formatters/star.js';\nimport traffic from './formatters/traffic.js';\nimport progress from './formatters/progress.js';\nimport color from './formatters/color.js';\nimport buttonTick from './formatters/buttonTick.js';\nimport buttonCross from './formatters/buttonCross.js';\nimport rownum from './formatters/rownum.js';\nimport handle from './formatters/handle.js';\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\nimport rowSelection from './formatters/rowSelection.js';\n\nexport default {\n\tplaintext:plaintext,\n\thtml:html,\n\ttextarea:textarea,\n\tmoney:money,\n\tlink:link,\n\timage:image,\n\ttickCross:tickCross,\n\tdatetime:datetime,\n\tdatetimediff:datetimediff,\n\tlookup:lookup,\n\tstar:star,\n\ttraffic:traffic,\n\tprogress:progress,\n\tcolor:color,\n\tbuttonTick:buttonTick,\n\tbuttonCross:buttonCross,\n\trownum:rownum,\n\thandle:handle,\n\tresponsiveCollapse:responsiveCollapse,\n\trowSelection:rowSelection,\n};","import Module from '../../core/Module.js';\n\nimport defaultFormatters from './defaults/formatters.js';\n\nclass Format extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.registerColumnOption(\"formatter\");\n\t\tthis.registerColumnOption(\"formatterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"formatterPrint\");\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\n\t\tthis.registerColumnOption(\"formatterClipboard\");\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\n\t\tthis.registerColumnOption(\"titleFormatter\");\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\n\t}\n\t\n\t//initialize column formatter\n\tinitializeColumn(column){\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\t\t\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t\t}\n\t}\n\t\n\tlookupFormatter(column, type){\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\n\t\tformatter = column.definition[\"formatter\" + type];\n\t\t\n\t\t//set column formatter\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tconfig.formatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.formatter = formatter;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn config;\n\t}\n\t\n\tcellRendered(cell){\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\n\t\t\tcell.modules.format.renderedCallback();\n\t\t\tcell.modules.format.rendered = true;\n\t\t}\n\t}\n\t\n\t//return a formatted value for a column header\n\tformatHeader(column, title, el){\n\t\tvar formatter, params, onRendered, mockCell;\n\t\t\n\t\tif(column.definition.titleFormatter){\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\n\t\t\t\n\t\t\tonRendered = (callback) => {\n\t\t\t\tcolumn.titleFormatterRendered = callback;\n\t\t\t};\n\t\t\t\n\t\t\tmockCell = {\n\t\t\t\tgetValue:function(){\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\tgetElement:function(){\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\t\t\t\tgetType:function(){\n\t\t\t\t\treturn \"header\";\n\t\t\t\t},\n\t\t\t\tgetColumn:function(){\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetTable:() => {\n\t\t\t\t\treturn this.table;\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tparams = column.definition.titleFormatterParams || {};\n\t\t\t\n\t\t\tparams = typeof params === \"function\" ? params() : params;\n\t\t\t\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\n\t\t}else{\n\t\t\treturn title;\n\t\t}\n\t}\n\t\n\t\n\t//return a formatted value for a cell\n\tformatValue(cell){\n\t\tvar component = cell.getComponent(),\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\tif(!cell.modules.format){\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\t\t\t\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t}\n\t\t\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n\t}\n\t\n\tformatExportValue(cell, type){\n\t\tvar formatter = cell.column.modules.format[type],\n\t\tparams;\n\t\t\n\t\tif(formatter){\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(cell.getComponent()) : formatter.params;\n\t\t\t\n\t\t\tfunction onRendered(callback){\n\t\t\t\tif(!cell.modules.format){\n\t\t\t\t\tcell.modules.format = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\t\tcell.modules.format.rendered = false;\n\t\t\t}\n\t\t\t\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t\t\t\n\t\t}else{\n\t\t\treturn this.formatValue(cell);\n\t\t}\n\t}\n\t\n\tsanitizeHTML(value){\n\t\tif(value){\n\t\t\tvar entityMap = {\n\t\t\t\t'&': '&',\n\t\t\t\t'<': '<',\n\t\t\t\t'>': '>',\n\t\t\t\t'\"': '"',\n\t\t\t\t\"'\": ''',\n\t\t\t\t'/': '/',\n\t\t\t\t'`': '`',\n\t\t\t\t'=': '='\n\t\t\t};\n\t\t\t\n\t\t\treturn String(value).replace(/[&<>\"'`=/]/g, function (s) {\n\t\t\t\treturn entityMap[s];\n\t\t\t});\n\t\t}else{\n\t\t\treturn value;\n\t\t}\n\t}\n\t\n\temptyToSpace(value){\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n\t}\n\t\n\t//get formatter for cell\n\tgetFormatter(formatter){\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tformatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t//Custom formatter Function, do nothing\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn formatter;\n\t}\n}\n\nFormat.moduleName = \"format\";\n\n//load defaults\nFormat.formatters = defaultFormatters;\n\nexport default Format;","import Module from '../../core/Module.js';\n\nclass FrozenColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.initializationMode = \"left\";\n\t\tthis.active = false;\n\t\tthis.blocked = true;\n\t\t\n\t\tthis.registerColumnOption(\"frozen\");\n\t}\n\t\n\t//reset initial state\n\treset(){\n\t\tthis.initializationMode = \"left\";\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.active = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\n\t\t\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-deleted\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-show\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.reinitializeColumns.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t}\n\t\n\tblockLayout(){\n\t\tthis.blocked = true;\n\t}\n\t\n\tunblockLayout(){\n\t\tthis.blocked = false;\n\t}\n\t\n\tlayoutCell(cell){\n\t\tthis.layoutElement(cell.element, cell.column);\n\t}\n\t\n\treinitializeColumns(){\n\t\tthis.reset();\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tthis.initializeColumn(column);\n\t\t});\n\n\t\tthis.layout();\n\t}\n\t\n\t//initialize specific column\n\tinitializeColumn(column){\n\t\tvar config = {margin:0, edge:false};\n\t\t\n\t\tif(!column.isGroup){\t\t\t\n\t\t\tif(this.frozenCheck(column)){\n\t\t\t\tconfig.position = this.initializationMode;\n\t\t\t\t\n\t\t\t\tif(this.initializationMode == \"left\"){\n\t\t\t\t\tthis.leftColumns.push(column);\n\t\t\t\t}else{\n\t\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.active = true;\n\t\t\t\t\n\t\t\t\tcolumn.modules.frozen = config;\n\t\t\t}else{\n\t\t\t\tthis.initializationMode = \"right\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfrozenCheck(column){\n\t\tif(column.parent.isGroup && column.definition.frozen){\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t\t}\n\t\t\n\t\tif(column.parent.isGroup){\n\t\t\treturn this.frozenCheck(column.parent);\n\t\t}else{\n\t\t\treturn column.definition.frozen;\n\t\t}\n\t}\n\t\n\t//layout calculation rows\n\tlayoutCalcRows(){\n\t\tif(this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modExists(\"groupRows\")){\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\n\t\t\t}\n\t\t}\n\t}\n\t\n\tlayoutGroupCalcs(groups){\n\t\tgroups.forEach((group) => {\n\t\t\tif(group.calcs.top){\n\t\t\t\tthis.layoutRow(group.calcs.top);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.calcs.bottom){\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.groupList && group.groupList.length){\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//calculate column positions and layout headers\n\tlayoutColumnPosition(allCells){\n\t\tvar leftParents = [];\n\t\t\n\t\tvar leftMargin = 0;\n\t\tvar rightMargin = 0;\n\t\t\n\t\tthis.leftColumns.forEach((column, i) => {\t\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tleftMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.leftColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\n\t\t\t\tif(!leftParents.includes(parentEl)){\n\t\t\t\t\tthis.layoutElement(parentEl, column);\n\t\t\t\t\tleftParents.push(parentEl);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column, i) => {\n\t\t\t\n\t\t\tcolumn.modules.frozen.marginValue = rightMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\trightMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.rightColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetColGroupParentElement(column){\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n\t}\n\t\n\t//layout columns appropriately\n\tlayout(){\t\n\t\tif(this.active && !this.blocked){\n\t\t\t//calculate left columns\n\t\t\tthis.layoutColumnPosition();\n\t\t\t\n\t\t\tthis.reinitializeRows();\n\t\t\t\n\t\t\tthis.layoutCalcRows();\n\t\t}\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\t\t\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t\t\n\t\tvisibleRows.forEach((row) =>{\n\t\t\tif(row.type === \"row\"){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutRow(row){\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\n\t\t}\n\t\t\n\t\tthis.leftColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutElement(element, column){\n\t\tvar position;\n\t\t\n\t\tif(column.modules.frozen && element){\n\t\t\telement.style.position = \"sticky\";\n\n\t\t\tif(this.table.rtl){\n\t\t\t\tposition = column.modules.frozen.position === \"left\" ? \"right\" : \"left\";\n\t\t\t}else{\n\t\t\t\tposition = column.modules.frozen.position;\n\t\t\t}\n\t\t\n\t\t\telement.style[position] = column.modules.frozen.margin;\n\n\t\t\telement.classList.add(\"tabulator-frozen\");\n\t\t\t\n\t\t\telement.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\telement.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t}\n\t}\n\n\tadjustForScrollbar(width){\n\t\tif(this.rightColumns.length){\n\t\t\tthis.table.columnManager.getContentsElement().style.width = \"calc(100% - \" + width + \"px)\";\n\t\t}\n\t}\n\t\n\t_calcSpace(columns, index){\n\t\tvar width = 0;\n\t\t\n\t\tfor (let i = 0; i < index; i++){\n\t\t\tif(columns[i].visible){\n\t\t\t\twidth += columns[i].getWidth();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn width;\n\t}\n}\n\nFrozenColumns.moduleName = \"frozenColumns\";\n\nexport default FrozenColumns;","import Module from '../../core/Module.js';\n\nclass FrozenRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.topElement = document.createElement(\"div\");\n\t\tthis.rows = [];\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\n\n\t\t//register table options\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\n\t}\n\n\tinitialize(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\t\t\n\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\tfragment.appendChild(this.topElement);\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\n\n\t\tif(this.table.options.frozenRows){\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t}\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\tinitializeRows(){\n\t\tthis.table.rowManager.getRows().forEach((row) => {\n\t\t\tthis.initializeRow(row);\n\t\t});\n\t}\n\n\tinitializeRow(row){\n\t\tvar frozenRows = this.table.options.frozenRows,\n\t\trowType = typeof frozenRows;\n\n\t\tif(rowType === \"number\"){\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(rowType === \"function\"){\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(Array.isArray(frozenRows)){\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowFrozen(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\treturn index > -1;\n\t}\n\n\tisFrozen(){\n\t\treturn !!this.rows.length;\n\t}\n\n\tvisibleRows(viewable, rows){\n\t\tthis.rows.forEach((row) => {\n\t\t\trows.push(row);\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\t//filter frozen rows out of display data\n\tgetRows(rows){\n\t\tvar output = rows.slice(0);\n\n\t\tthis.rows.forEach(function(row){\n\t\t\tvar index = output.indexOf(row);\n\n\t\t\tif(index > -1){\n\t\t\t\toutput.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tfreezeRow(row){\n\t\tif(!row.modules.frozen){\n\t\t\trow.modules.frozen = true;\n\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\trow.initialize();\n\t\t\trow.normalizeHeight();\n\t\t\n\t\t\tthis.rows.push(row);\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.styleRows();\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t\t}\n\t}\n\n\tunfreezeRow(row){\n\t\tif(row.modules.frozen){\n\n\t\t\trow.modules.frozen = false;\n\n\t\t\tthis.detachRow(row);\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tif(this.rows.length){\n\t\t\t\tthis.styleRows();\n\t\t\t}\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t\t}\n\t}\n\n\tdetachRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t}\n\n\tstyleRows(row){\n\t\tthis.rows.forEach((row, i) => {\n\t\t\tthis.table.rowManager.styleRow(row, i);\n\t\t});\n\t}\n}\n\nFrozenRows.moduleName = \"frozenRows\";\n\nexport default FrozenRows;","//public group object\nclass GroupComponent {\n\tconstructor (group){\n\t\tthis._group = group;\n\t\tthis.type = \"GroupComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"group\", target._group, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetKey(){\n\t\treturn this._group.key;\n\t}\n\n\tgetField(){\n\t\treturn this._group.field;\n\t}\n\n\tgetElement(){\n\t\treturn this._group.element;\n\t}\n\n\tgetRows(){\n\t\treturn this._group.getRows(true);\n\t}\n\n\tgetSubGroups(){\n\t\treturn this._group.getSubGroups(true);\n\t}\n\n\tgetParentGroup(){\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\n\t}\n\n\tisVisible(){\n\t\treturn this._group.visible;\n\t}\n\n\tshow(){\n\t\tthis._group.show();\n\t}\n\n\thide(){\n\t\tthis._group.hide();\n\t}\n\n\ttoggle(){\n\t\tthis._group.toggleVisibility();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible);\n\t}\n\n\t_getSelf(){\n\t\treturn this._group;\n\t}\n\n\tgetTable(){\n\t\treturn this._group.groupManager.table;\n\t}\n}\n\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\nimport GroupComponent from './GroupComponent.js';\n\n//Group functions\nclass Group{\n\t\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\n\t\tthis.groupManager = groupManager;\n\t\tthis.parent = parent;\n\t\tthis.key = key;\n\t\tthis.level = level;\n\t\tthis.field = field;\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\t\tthis.type = \"group\"; //type of element\n\t\tthis.old = oldGroup;\n\t\tthis.rows = [];\n\t\tthis.groups = [];\n\t\tthis.groupList = [];\n\t\tthis.generator = generator;\n\t\tthis.element = false;\n\t\tthis.elementContents = false;\n\t\tthis.height = 0;\n\t\tthis.outerHeight = 0;\n\t\tthis.initialized = false;\n\t\tthis.calcs = {};\n\t\tthis.initialized = false;\n\t\tthis.modules = {};\n\t\tthis.arrowElement = false;\n\t\t\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.createElements();\n\t\tthis.addBindings();\n\t\t\n\t\tthis.createValueGroups();\n\t}\n\t\n\twipe(elementsOnly){\n\t\tif(!elementsOnly){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\tgroup.wipe();\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tif(row.modules){\n\t\t\t\t\t\tdelete row.modules.group;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n\t\n\tcreateElements(){\n\t\tvar arrow = document.createElement(\"div\");\n\t\tarrow.classList.add(\"tabulator-arrow\");\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-row\");\n\t\tthis.element.classList.add(\"tabulator-group\");\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tthis.arrowElement = document.createElement(\"div\");\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\t\tthis.arrowElement.appendChild(arrow);\n\t\t\n\t\t//setup movable rows\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t\t}\n\t}\n\t\n\tcreateValueGroups(){\n\t\tvar level = this.level + 1;\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\n\t\t\t\tthis._createGroup(value, level);\n\t\t\t});\n\t\t}\n\t}\n\t\n\taddBindings(){\n\t\tvar toggleElement;\n\t\t\n\t\tif(this.groupManager.table.options.groupToggleElement){\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\n\t\t\t\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\n\t\t\t\tif(this.groupManager.table.options.groupToggleElement === \"arrow\"){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t}\n\n\t\t\t\t//allow click event to propagate before toggling visibility\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.toggleVisibility();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\t\n\t_createGroup(groupID, level){\n\t\tvar groupKey = level + \"_\" + groupID;\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\t_addRowToGroup(row){\n\t\t\n\t\tvar level = this.level + 1;\n\t\t\n\t\tif(this.hasSubGroups){\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t\tgroupKey = level + \"_\" + groupID;\n\t\t\t\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\t\tif(this.groups[groupKey]){\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!this.groups[groupKey]){\n\t\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_addRow(row){\n\t\tthis.rows.push(row);\n\t\trow.modules.group = this;\n\t}\n\t\n\tinsertRow(row, to, after){\n\t\tvar data = this.conformRowData({});\n\t\t\n\t\trow.updateData(data);\n\t\t\n\t\tvar toIndex = this.rows.indexOf(to);\n\t\t\n\t\tif(toIndex > -1){\n\t\t\tif(after){\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\n\t\t\t}else{\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t\t}\n\t\t}else{\n\t\t\tif(after){\n\t\t\t\tthis.rows.push(row);\n\t\t\t}else{\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\trow.modules.group = this;\n\t\t\n\t\t// this.generateGroupHeaderContents();\n\t\t\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t\t\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\t\n\tscrollHeader(left){\n\t\tif(this.arrowElement){\n\t\t\tthis.arrowElement.style.marginLeft = left;\n\t\t\t\n\t\t\tthis.groupList.forEach(function(child){\n\t\t\t\tchild.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tgetRowIndex(row){}\n\t\n\t//update row data to match grouping constraints\n\tconformRowData(data){\n\t\tif(this.field){\n\t\t\tdata[this.field] = this.key;\n\t\t}else{\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t\t}\n\t\t\n\t\tif(this.parent){\n\t\t\tdata = this.parent.conformRowData(data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\tremoveRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\tvar el = row.getElement();\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t\t\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t}else{\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\t\t\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(el.parentNode){\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupManager.blockRedraw){\n\t\t\t\tthis.generateGroupHeaderContents();\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupList.length){\n\t\t\t\tif(this.parent){\n\t\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t\t}else{\n\t\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetHeadersAndRows(){\n\t\tvar output = [];\n\t\t\n\t\toutput.push(this);\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\t\n\t\tif(this.calcs.top){\n\t\t\tthis.calcs.top.detachElement();\n\t\t\tthis.calcs.top.deleteCells();\n\t\t}\n\t\t\n\t\tif(this.calcs.bottom){\n\t\t\tthis.calcs.bottom.detachElement();\n\t\t\tthis.calcs.bottom.deleteCells();\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\tif(this.visible){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput = output.concat(this.rows);\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetData(visible, transform){\n\t\tvar output = [];\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(!visible || (visible && this.visible)){\n\t\t\tthis.rows.forEach((row) => {\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRowCount(){\n\t\tvar count = 0;\n\t\t\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tcount += group.getRowCount();\n\t\t\t});\n\t\t}else{\n\t\t\tcount = this.rows.length;\n\t\t}\n\t\treturn count;\n\t}\n\n\t\n\ttoggleVisibility(){\n\t\tif(this.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\t\n\thide(){\n\t\tthis.visible = false;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\t\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\trow.detachElement();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\n\t}\n\t\n\tshow(){\n\t\tthis.visible = true;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tvar prev = this.generateElement();\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\t\trow.initialize();\n\t\t\t\t\t\tprev = rowEl;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\n\t}\n\t\n\t_visSet(){\n\t\tvar data = [];\n\t\t\n\t\tif(typeof this.visible == \"function\"){\n\t\t\t\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\tdata.push(row.getData());\n\t\t\t});\n\t\t\t\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t\t}\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\t\n\t\t\t\tif(result){\n\t\t\t\t\tmatch = result;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tif(this.rows.find(function(item){\n\t\t\t\treturn item === row;\n\t\t\t})){\n\t\t\t\tmatch = this;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetSubGroups(component){\n\t\tvar output = [];\n\t\t\n\t\tthis.groupList.forEach(function(child){\n\t\t\toutput.push(component ? child.getComponent() : child);\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRows(component, includeChildren){\n\t\tvar output = [];\n\t\t\n\t\tif(includeChildren && this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getRows(component, includeChildren));\n\t\t\t});\n\t\t}else{\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\toutput.push(component ? row.getComponent() : row);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgenerateGroupHeaderContents(){\n\t\tvar data = [];\n\t\t\n\t\tvar rows = this.getRows(false, true);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\t\t\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\n\t\tif(typeof this.elementContents === \"string\"){\n\t\t\tthis.element.innerHTML = this.elementContents;\n\t\t}else{\n\t\t\tthis.element.appendChild(this.elementContents);\n\t\t}\n\t\t\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n\t}\n\t\n\tgetPath(path = []) {\n\t\tpath.unshift(this.key);\n\t\tif(this.parent) {\n\t\t\tthis.parent.getPath(path);\n\t\t}\n\t\treturn path;\n\t}\n\t\n\t////////////// Standard Row Functions //////////////\n\t\n\tgetElement(){\n\t\treturn this.elementContents ? this.element : this.generateElement();\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.addBindings = false;\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(this.visible){\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t}else{\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t\t}\n\t\t\n\t\tthis.generateGroupHeaderContents();\n\t\t\n\t\t// this.addBindings();\n\t\t\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(){\n\t\tthis.setHeight(this.element.clientHeight);\n\t}\n\t\n\tinitialize(force){\n\t\tif(!this.initialized || force){\n\t\t\tthis.normalizeHeight();\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\treinitialize(){\n\t\tthis.initialized = false;\n\t\tthis.height = 0;\n\t\t\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.initialize(true);\n\t\t}\n\t}\n\t\n\tsetHeight(height){\n\t\tif(this.height != height){\n\t\t\tthis.height = height;\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\tgetGroup(){\n\t\treturn this;\n\t}\n\t\n\treinitializeHeight(){}\n\t\n\tcalcHeight(){}\n\t\n\tsetCellHeight(){}\n\t\n\tclearCellHeight(){}\n\t\n\tdeinitializeHeight(){}\n\n\trendered(){}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new GroupComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n\nexport default Group;","import Module from '../../core/Module.js';\n\nimport Group from './Group.js';\n\nclass GroupRows extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\tthis.groupList = []; //ordered list of groups\n\t\tthis.allowedValues = false;\n\t\tthis.groups = {}; //hold row groups\n\t\t\n\t\tthis.displayHandler = this.getRows.bind(this);\n\n\t\tthis.blockRedraw = false;\n\t\t\n\t\t//register table options\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\n\t\tthis.registerTableOption(\"groupValues\", false);\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\n\t\t\n\t\t//register table functions\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\n\t}\n\t\n\t//initialize group configuration\n\tinitialize(){\n\t\tthis.subscribe(\"table-destroy\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wipe\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wiped\", this._restore_redrawing.bind(this));\n\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t_blockRedrawing(){\n\t\tthis.blockRedraw = true;\n\t}\n\n\t_restore_redrawing(){\n\t\tthis.blockRedraw = false;\n\t}\n\n\tconfigureGroupSetup(){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar groupBy = this.table.options.groupBy,\n\t\t\tstartOpen = this.table.options.groupStartOpen,\n\t\t\tgroupHeader = this.table.options.groupHeader;\n\t\t\t\n\t\t\tthis.allowedValues = this.table.options.groupValues;\n\t\t\t\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\t\t\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\n\t\t\t\t};\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupIDLookups = [];\n\t\t\t\n\t\t\tif(groupBy){\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\t\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\t\t\t\t\t\n\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\tif(col.definition.topCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(col.definition.bottomCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(!Array.isArray(groupBy)){\n\t\t\t\tgroupBy = [groupBy];\n\t\t\t}\n\t\t\t\n\t\t\tgroupBy.forEach((group, i) => {\n\t\t\t\tvar lookupFunc, column;\n\t\t\t\t\n\t\t\t\tif(typeof group == \"function\"){\n\t\t\t\t\tlookupFunc = group;\n\t\t\t\t}else{\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn data[group];\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groupIDLookups.push({\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\t\t\tfunc:lookupFunc,\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tif(startOpen){\n\t\t\t\tif(!Array.isArray(startOpen)){\n\t\t\t\t\tstartOpen = [startOpen];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstartOpen.forEach((level) => {\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.startOpen = startOpen;\n\t\t\t}\n\t\t\t\n\t\t\tif(groupHeader){\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t\t\t}\n\t\t}else{\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\trowSample(rows, prevValue){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar group = this.getGroups(false)[0];\n\t\t\t\n\t\t\tprevValue.push(group.getRows(false)[0]);\n\t\t}\n\t\t\n\t\treturn prevValue;\n\t}\n\t\n\tvirtualRenderFill(){\n\t\tvar el = this.table.rowManager.tableElement;\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\trows = rows.filter((row) => {\n\t\t\t\treturn row.type !== \"group\";\n\t\t\t});\n\t\t\t\n\t\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\n\t\t}else{\n\t\t\treturn rows;\n\t\t}\n\t}\n\t\n\trowAddingIndex(row, index, top){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.assignRowToGroup(row);\n\t\t\t\n\t\t\tvar groupRows = row.modules.group.rows;\n\t\t\t\n\t\t\tif(groupRows.length > 1){\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\n\t\t\t\t\tif(top){\n\t\t\t\t\t\tif(groupRows[0] !== row){\n\t\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn index;\n\t\t}\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"group-changed\");\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tsetGroupBy(groups){\n\t\tthis.table.options.groupBy = groups;\n\t\t\n\t\tif(!this.initialized){\n\t\t\tthis.initialize();\n\t\t}\n\t\t\n\t\tthis.configureGroupSetup();\n\n\t\tif(!groups && this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs === true){\n\t\t\tthis.table.modules.columnCalcs.reinitializeCalcs();\n\t\t}\n\t\t\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupValues(groupValues){\n\t\tthis.table.options.groupValues = groupValues;\n\t\tthis.configureGroupSetup();\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupStartOpen(values){\n\t\tthis.table.options.groupStartOpen = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tsetGroupHeader(values){\n\t\tthis.table.options.groupHeader = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tuserGetGroups(values){\n\t\treturn this.getGroups(true);\n\t}\n\t\n\t// get grouped table data in the same format as getData()\n\tuserGetGroupedData(){\n\t\treturn this.table.options.groupBy ? this.getGroupedData() : this.getData();\n\t}\n\t\n\t\n\t///////////////////////////////////////\n\t///////// Component Functions /////////\n\t///////////////////////////////////////\n\t\n\trowGetGroup(row){\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\trowMoving(from, to, after){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(!after && to instanceof Group){\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t\t}\n\t\t\t\n\t\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\n\t\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\n\t\t\t\n\t\t\tif(toGroup === fromGroup){\n\t\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\n\t\t\t}else{\n\t\t\t\tif(fromGroup){\n\t\t\t\t\tfromGroup.removeRow(from);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttoGroup.insertRow(from, to, after);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\trowDeleting(row){\n\t\t//remove from group\n\t\tif(this.table.options.groupBy && row.modules.group){\n\t\t\trow.modules.group.removeRow(row);\n\t\t}\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.updateGroupRows(true);\n\t\t}\t\n\t}\n\t\n\tcellUpdated(cell){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.reassignRowToGroup(cell.row);\n\t\t}\n\t}\n\t\n\t//return appropriate rows with group headers\n\tgetRows(rows){\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\n\t\t\t\n\t\t\tthis.generateGroups(rows);\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\n\t\t\t}\n\t\t\t\n\t\t\treturn this.updateGroupRows();\n\t\t\t\n\t\t}else{\n\t\t\treturn rows.slice(0);\n\t\t}\n\t}\n\t\n\tgetGroups(component){\n\t\tvar groupComponents = [];\n\t\t\n\t\tthis.groupList.forEach(function(group){\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\tgetChildGroups(group){\n\t\tvar groupComponents = [];\n\t\t\n\t\tif(!group){\n\t\t\tgroup = this;\n\t\t}\n\t\t\n\t\tgroup.groupList.forEach((child) => {\n\t\t\tif(child.groupList.length){\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\n\t\t\t}else{\n\t\t\t\tgroupComponents.push(child);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\twipe(){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tgroup.wipe();\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\tpullGroupListData(groupList) {\n\t\tvar groupListData = [];\n\t\t\n\t\tgroupList.forEach((group) => {\n\t\t\tvar groupHeader = {};\n\t\t\tgroupHeader.level = 0;\n\t\t\tgroupHeader.rowCount = 0;\n\t\t\tgroupHeader.headerContent = \"\";\n\t\t\tvar childData = [];\n\t\t\t\n\t\t\tif (group.hasSubGroups) {\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\n\t\t\t\t\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\tgroupListData = groupListData.concat(childData);\n\t\t\t}\n\t\t\t\n\t\t\telse {\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\t\n\t\t\t\tgroup.getRows().forEach((row) => {\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupListData;\n\t}\n\t\n\tgetGroupedData(){\n\t\t\n\t\treturn this.pullGroupListData(this.groupList);\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\t\n\t\tif(this.options(\"dataTree\")){\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\n\t\t}\n\t\t\n\t\tthis.groupList.forEach((group) => {\n\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\n\t\t\tif(result){\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tcountGroups(){\n\t\treturn this.groupList.length;\n\t}\n\t\n\tgenerateGroups(rows){\n\t\tvar oldGroups = this.groups;\n\t\t\n\t\tthis.groups = {};\n\t\tthis.groupList = [];\n\t\t\n\t\tif(this.allowedValues && this.allowedValues[0]){\n\t\t\tthis.allowedValues[0].forEach((value) => {\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\n\t\t\t});\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\n\t\t\t});\n\t\t}else{\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\n\t\t\t});\n\t\t}\n\t\t\n\t\tObject.values(oldGroups).forEach((group) => {\n\t\t\tgroup.wipe(true);\n\t\t});\t\n\t}\n\t\n\t\n\tcreateGroup(groupID, level, oldGroups){\n\t\tvar groupKey = level + \"_\" + groupID,\n\t\tgroup;\n\t\t\n\t\toldGroups = oldGroups || [];\n\t\t\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\tassignRowToExistingGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tgroupKey = \"0_\" + groupID;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n\t\n\tassignRowToGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\n\t\t\n\t\tif(newGroupNeeded){\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\n\t\t}\n\t\t\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\n\t\t\n\t\treturn !newGroupNeeded;\n\t}\n\t\n\treassignRowToGroup(row){\n\t\tif(row.type === \"row\"){\n\t\t\tvar oldRowGroup = row.modules.group,\n\t\t\toldGroupPath = oldRowGroup.getPath(),\n\t\t\tnewGroupPath = this.getExpectedPath(row),\n\t\t\tsamePath;\n\t\t\t\n\t\t\t// figure out if new group path is the same as old group path\n\t\t\tsamePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\n\t\t\t\treturn element === newGroupPath[index];\n\t\t\t});\n\t\t\t\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\t\t\tif(!samePath) {\n\t\t\t\toldRowGroup.removeRow(row);\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetExpectedPath(row) {\n\t\tvar groupPath = [], rowData = row.getData();\n\t\t\n\t\tthis.groupIDLookups.forEach((groupId) => {\n\t\t\tgroupPath.push(groupId.func(rowData));\n\t\t});\n\t\t\n\t\treturn groupPath;\n\t}\n\t\n\tupdateGroupRows(force){\n\t\tvar output = [];\n\n\t\tif(!this.blockRedraw){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tscrollHeaders(left){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\n\t\t\t}\n\t\t\t\n\t\t\tleft = left + \"px\";\n\t\t\t\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tgroup.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcheckBasicModeGroupHeaderWidth(){\n\t\tvar element = this.table.rowManager.tableElement,\n\t\tonlyGroupHeaders = true;\n\t\t\n\t\tthis.table.rowManager.getDisplayRows().forEach((row, index) =>{\n\t\t\tthis.table.rowManager.styleRow(row, index);\n\t\t\telement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t\t\n\t\t\tif(row.type !== \"group\"){\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n}\n\nGroupRows.moduleName = \"groupRows\";\n\nexport default GroupRows;","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tvar after = (action.data.posFrom - action.data.posTo) > 0;\n\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after);\n\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete:function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after);\n\t\t\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","import Module from '../../core/Module.js';\nimport Row from '../../core/row/Row.js';\nimport Cell from '../../core/cell/Cell.js';\n\nimport defaultUndoers from './defaults/undoers.js';\nimport defaultRedoers from './defaults/redoers.js';\n\nclass History extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.history){\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\n\t}\n\n\trowMoved(from, to, after){\n\t\tthis.action(\"rowMove\", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after});\n\t}\n\n\trowAdded(row, data, pos, index){\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\n\t}\n\n\trowDeleted(row){\n\t\tvar index, rows;\n\n\t\tif(this.table.options.groupBy){\n\n\t\t\trows = row.getComponent().getGroup()._getSelf().rows;\n\t\t\tindex = rows.indexOf(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = rows[index-1];\n\t\t\t}\n\t\t}else{\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\n\t\t\t}\n\t\t}\n\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\n\t}\n\n\tcellUpdated(cell){\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\n\t}\n\n\tclear(){\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t}\n\n\taction(type, component, data){\n\t\tthis.history = this.history.slice(0, this.index + 1);\n\n\t\tthis.history.push({\n\t\t\ttype:type,\n\t\t\tcomponent:component,\n\t\t\tdata:data,\n\t\t});\n\n\t\tthis.index ++;\n\t}\n\n\tgetHistoryUndoSize(){\n\t\treturn this.index + 1;\n\t}\n\n\tgetHistoryRedoSize(){\n\t\treturn this.history.length - (this.index + 1);\n\t}\n\n\tclearComponentHistory(component){\n\t\tvar index = this.history.findIndex(function(item){\n\t\t\treturn item.component === component;\n\t\t});\n\n\t\tif(index > -1){\n\t\t\tthis.history.splice(index, 1);\n\t\t\tif(index <= this.index){\n\t\t\t\tthis.index--;\n\t\t\t}\n\n\t\t\tthis.clearComponentHistory(component);\n\t\t}\n\t}\n\n\tundo(){\n\t\tif(this.index > -1){\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.undoers[action.type].call(this, action);\n\n\t\t\tthis.index--;\n\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Undo Error - No more history to undo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tredo(){\n\t\tif(this.history.length-1 > this.index){\n\n\t\t\tthis.index++;\n\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.redoers[action.type].call(this, action);\n\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Redo Error - No more history to redo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//rebind rows to new element after deletion\n\t_rebindRow(oldRow, newRow){\n\t\tthis.history.forEach(function(action){\n\t\t\tif(action.component instanceof Row){\n\t\t\t\tif(action.component === oldRow){\n\t\t\t\t\taction.component = newRow;\n\t\t\t\t}\n\t\t\t}else if(action.component instanceof Cell){\n\t\t\t\tif(action.component.row === oldRow){\n\t\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\t\tif(field){\n\t\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nHistory.moduleName = \"history\";\n\n//load defaults\nHistory.undoers = defaultUndoers;\nHistory.redoers = defaultRedoers;\n\nexport default History;","import Module from '../../core/Module.js';\n\nclass HtmlTableImport extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.fieldIndex = [];\n\t\tthis.hasIndex = false;\n\t}\n\n\tinitialize(){\n\t\tthis.tableElementCheck();\n\t}\n\n\ttableElementCheck(){\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\n\t\t\tif(this.table.originalElement.childNodes.length){\n\t\t\t\tthis.parseTable();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tparseTable(){\n\t\tvar element = this.table.originalElement,\n\t\toptions = this.table.options,\n\t\theaders = element.getElementsByTagName(\"th\"),\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\n\t\tdata = [];\n\n\t\tthis.hasIndex = false;\n\n\t\tthis.dispatchExternal(\"htmlImporting\");\n\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t\t//check for Tabulator inline options\n\t\tthis._extractOptions(element, options);\n\n\t\tif(headers.length){\n\t\t\tthis._extractHeaders(headers, rows);\n\t\t}else{\n\t\t\tthis._generateBlankHeaders(headers, rows);\n\t\t}\n\n\t\t//iterate through table rows and build data set\n\t\tfor(var index = 0; index < rows.length; index++){\n\t\t\tvar row = rows[index],\n\t\t\tcells = row.getElementsByTagName(\"td\"),\n\t\t\titem = {};\n\n\t\t\t//create index if the don't exist in table\n\t\t\tif(!this.hasIndex){\n\t\t\t\titem[options.index] = index;\n\t\t\t}\n\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\tvar cell = cells[i];\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//add row data to item\n\t\t\tdata.push(item);\n\t\t}\n\n\t\toptions.data = data;\n\n\t\tthis.dispatchExternal(\"htmlImported\");\n\t}\n\n\t//extract tabulator attribute options\n\t_extractOptions(element, options, defaultOptions){\n\t\tvar attributes = element.attributes;\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\n\t\tvar optionsList = {};\n\n\t\toptionsArr.forEach((item) => {\n\t\t\toptionsList[item.toLowerCase()] = item;\n\t\t});\n\n\t\tfor(var index in attributes){\n\t\t\tvar attrib = attributes[index];\n\t\t\tvar name;\n\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//get value of attribute\n\t_attribValue(value){\n\t\tif(value === \"true\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(value === \"false\"){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t//find column if it has already been defined\n\t_findCol(title){\n\t\tvar match = this.table.options.columns.find((column) => {\n\t\t\treturn column.title === title;\n\t\t});\n\n\t\treturn match || false;\n\t}\n\n\t//extract column from headers\n\t_extractHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\texists = false,\n\t\t\tcol = this._findCol(header.textContent),\n\t\t\twidth;\n\n\t\t\tif(col){\n\t\t\t\texists = true;\n\t\t\t}else{\n\t\t\t\tcol = {title:header.textContent.trim()};\n\t\t\t}\n\n\t\t\tif(!col.field) {\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replaceAll(\" \", \"_\");\n\t\t\t}\n\n\t\t\twidth = header.getAttribute(\"width\");\n\n\t\t\tif(width && !col.width)\t{\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\t//check for Tabulator inline options\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tif(col.field == this.table.options.index){\n\t\t\t\tthis.hasIndex = true;\n\t\t\t}\n\n\t\t\tif(!exists){\n\t\t\t\tthis.table.options.columns.push(col);\n\t\t\t}\n\n\t\t}\n\t}\n\n\t//generate blank headers\n\t_generateBlankHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\tcol = {title:\"\", field:\"col\" + index};\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tvar width = header.getAttribute(\"width\");\n\n\t\t\tif(width){\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n}\n\nHtmlTableImport.moduleName = \"htmlTableImport\";\n\nexport default HtmlTableImport;\n","function csvImporter(input){\n\tvar data = [],\n\trow = 0, \n\tcol = 0,\n\tinQuote = false;\n \n\t//Iterate over each character\n\tfor (let index = 0; index < input.length; index++) {\n\t\tlet char = input[index], \n\t\tnextChar = input[index+1]; \n \n\t\t//Initialize empty row\n\t\tif(!data[row]){\n\t\t\tdata[row] = [];\n\t\t}\n\n\t\t//Initialize empty column\n\t\tif(!data[row][col]){\n\t\t\tdata[row][col] = \"\";\n\t\t}\n \n\t\t//Handle quotation mark inside string\n\t\tif (char == '\"' && inQuote && nextChar == '\"') { \n\t\t\tdata[row][col] += char; \n\t\t\tindex++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//Begin / End Quote\n\t\tif (char == '\"') { \n\t\t\tinQuote = !inQuote;\n\t\t\tcontinue;\n\t\t}\n \n\t\t//Next column (if not in quote)\n\t\tif (char == ',' && !inQuote) { \n\t\t\tcol++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CRLF) \n\t\tif (char == '\\r' && nextChar == '\\n' && !inQuote) { \n\t\t\tcol = 0; \n\t\t\trow++; \n\t\t\tindex++; \n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CR or LF) \n\t\tif ((char == '\\r' || char == '\\n') && !inQuote) { \n\t\t\tcol = 0;\n\t\t\trow++;\n\t\t\tcontinue; \n\t\t}\n\n\t\t//Normal Character, append to column\n\t\tdata[row][col] += char;\n\t}\n\n\treturn data;\n}\n\nexport default csvImporter;","export default function(input){\n\ttry {\n\t\treturn JSON.parse(input);\n\t} catch(e) {\n\t\tconsole.warn(\"JSON Import Error - File contents is invalid JSON\", e);\n\t\treturn Promise.reject();\n\t}\n}","function arrayImporter(input){\n\treturn input;\n}\n\nexport default arrayImporter;","import csv from './importers/csv.js';\nimport json from './importers/json.js';\nimport array from './importers/array.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tarray:array,\n};","import Module from '../../core/Module.js';\n\nimport defaultImporters from './defaults/importers.js';\n\nclass Import extends Module{\n \n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.registerTableOption(\"importFormat\");\n\t\tthis.registerTableOption(\"importReader\", \"text\");\n\t}\n \n\tinitialize(){\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\n\n\t\tif(this.table.options.importFormat){\n\t\t\tthis.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\n\t\t\tthis.subscribe(\"data-load\", this.loadData.bind(this), 10);\n\t\t}\n\t}\n\n\tloadDataCheck(data){\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\n\t}\n\n\tloadData(data, params, config, silent, previousData){\n\t\treturn this.importData(this.lookupImporter(), data)\n\t\t\t.then(this.structureData.bind(this))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import data\");\n\t\t\t\treturn Promise.reject(err);\n\t\t\t});\n\t}\n\n\tlookupImporter(importFormat){\n\t\tvar importer;\n \n\t\tif(!importFormat){\n\t\t\timportFormat = this.table.options.importFormat;\n\t\t}\n \n\t\tif(typeof importFormat === \"string\"){\n\t\t\timporter = Import.importers[importFormat];\n\t\t}else{\n\t\t\timporter = importFormat;\n\t\t}\n\n\t\tif(!importer){\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\n\t\t}\n \n\t\treturn importer;\n\t}\n \n\timportFromFile(importFormat, extension){\n\t\tvar importer = this.lookupImporter(importFormat);\n \n\t\tif(importer){\n\t\t\treturn this.pickFile(extension)\n\t\t\t\t.then(this.importData.bind(this, importer))\n\t\t\t\t.then(this.structureData.bind(this))\n\t\t\t\t.then(this.setData.bind(this))\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t});\n\t\t}\n\t}\n \n\tpickFile(extensions){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.type = \"file\";\n\t\t\tinput.accept = extensions;\n \n\t\t\tinput.addEventListener(\"change\", (e) => {\n\t\t\t\tvar file = input.files[0],\n\t\t\t\treader = new FileReader();\n \n\t\t\t\tswitch(this.table.options.importReader){\n\t\t\t\t\tcase \"buffer\":\n\t\t\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"binary\":\n\t\t\t\t\t\treader.readAsBinaryString(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\treader.readAsDataURL(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treader.readAsText(file);\n\t\t\t\t}\n \n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\tresolve(reader.result);\n\t\t\t\t};\n \n\t\t\t\treader.onerror = (e) => {\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\t\treject();\n\t\t\t\t};\n\t\t\t});\n \n\t\t\tinput.click();\n\t\t});\n\t}\n \n\timportData(importer, fileContents){\n\t\tvar data = importer.call(this.table, fileContents);\n \n\t\tif(data instanceof Promise){\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn data ? Promise.resolve(data) : Promise.reject();\n\t\t}\n\t}\n\n\tstructureData(parsedData){\n\t\tvar data = [];\n \n\t\tif(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\n\t\t\tif(this.table.options.autoColumns){\n\t\t\t\tdata = this.structureArrayToObject(parsedData);\n\t\t\t}else{\n\t\t\t\tdata = this.structureArrayToColumns(parsedData);\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn parsedData;\n\t\t}\n\t}\n\n\tstructureArrayToObject(parsedData){\n\t\tvar columns = parsedData.shift();\n\n\t\tvar data = parsedData.map((values) => {\n\t\t\tvar row = {};\n\n\t\t\tcolumns.forEach((key, i) => {\n\t\t\t\trow[key] = values[i];\n\t\t\t});\n\n\t\t\treturn row;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tstructureArrayToColumns(parsedData){\n\t\tvar data = [],\n\t\tcolumns = this.table.getColumns();\n\n\t\t//remove first row if it is the column names\n\t\tif(columns[0] && parsedData[0][0]){\n\t\t\tif(columns[0].getDefinition().title === parsedData[0][0]){\n\t\t\t\tparsedData.shift();\n\t\t\t}\n\t\t}\n \n\t\t//convert row arrays to objects\n\t\tparsedData.forEach((rowData) => {\n\t\t\tvar row = {};\n\n\t\t\trowData.forEach((value, index) => {\n\t\t\t\tvar column = columns[index];\n\n\t\t\t\tif(column){\n\t\t\t\t\trow[column.getField()] = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdata.push(row);\n\t\t});\n\n\t\treturn data;\n\t}\n \n\tsetData(data){\n\t\treturn this.table.setData(data);\n\t}\n}\n\nImport.moduleName = \"import\";\n\n//load defaults\nImport.importers = defaultImporters;\n\nexport default Import;","import Module from '../../core/Module.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\n\nclass Interaction extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.eventMap = {\n\t\t\t//row events\n\t\t\trowClick:\"row-click\",\n\t\t\trowDblClick:\"row-dblclick\",\n\t\t\trowContext:\"row-contextmenu\",\n\t\t\trowMouseEnter:\"row-mouseenter\",\n\t\t\trowMouseLeave:\"row-mouseleave\",\n\t\t\trowMouseOver:\"row-mouseover\",\n\t\t\trowMouseOut:\"row-mouseout\",\n\t\t\trowMouseMove:\"row-mousemove\",\n\t\t\trowMouseDown:\"row-mousedown\",\n\t\t\trowMouseUp:\"row-mouseup\",\n\t\t\trowTap:\"row\",\n\t\t\trowDblTap:\"row\",\n\t\t\trowTapHold:\"row\",\n\n\t\t\t//cell events\n\t\t\tcellClick:\"cell-click\",\n\t\t\tcellDblClick:\"cell-dblclick\",\n\t\t\tcellContext:\"cell-contextmenu\",\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\n\t\t\tcellMouseOver:\"cell-mouseover\",\n\t\t\tcellMouseOut:\"cell-mouseout\",\n\t\t\tcellMouseMove:\"cell-mousemove\",\n\t\t\tcellMouseDown:\"cell-mousedown\",\n\t\t\tcellMouseUp:\"cell-mouseup\",\n\t\t\tcellTap:\"cell\",\n\t\t\tcellDblTap:\"cell\",\n\t\t\tcellTapHold:\"cell\",\n\n\t\t\t//column header events\n\t\t\theaderClick:\"column-click\",\n\t\t\theaderDblClick:\"column-dblclick\",\n\t\t\theaderContext:\"column-contextmenu\",\n\t\t\theaderMouseEnter:\"column-mouseenter\",\n\t\t\theaderMouseLeave:\"column-mouseleave\",\n\t\t\theaderMouseOver:\"column-mouseover\",\n\t\t\theaderMouseOut:\"column-mouseout\",\n\t\t\theaderMouseMove:\"column-mousemove\",\n\t\t\theaderMouseDown:\"column-mousedown\",\n\t\t\theaderMouseUp:\"column-mouseup\",\n\t\t\theaderTap:\"column\",\n\t\t\theaderDblTap:\"column\",\n\t\t\theaderTapHold:\"column\",\n\n\t\t\t//group header\n\t\t\tgroupClick:\"group-click\",\n\t\t\tgroupDblClick:\"group-dblclick\",\n\t\t\tgroupContext:\"group-contextmenu\",\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\n\t\t\tgroupMouseOver:\"group-mouseover\",\n\t\t\tgroupMouseOut:\"group-mouseout\",\n\t\t\tgroupMouseMove:\"group-mousemove\",\n\t\t\tgroupMouseDown:\"group-mousedown\",\n\t\t\tgroupMouseUp:\"group-mouseup\",\n\t\t\tgroupTap:\"group\",\n\t\t\tgroupDblTap:\"group\",\n\t\t\tgroupTapHold:\"group\",\n\t\t};\n\n\t\tthis.subscribers = {};\n\n\t\tthis.touchSubscribers = {};\n\n\t\tthis.columnSubscribers = {};\n\n\t\tthis.touchWatchers = {\n\t\t\trow:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcell:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcolumn:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tgroup:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t}\n\t\t};\n\n\t\tthis.registerColumnOption(\"headerClick\");\n\t\tthis.registerColumnOption(\"headerDblClick\");\n\t\tthis.registerColumnOption(\"headerContext\");\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\n\t\tthis.registerColumnOption(\"headerMouseOver\");\n\t\tthis.registerColumnOption(\"headerMouseOut\");\n\t\tthis.registerColumnOption(\"headerMouseMove\");\n\t\tthis.registerColumnOption(\"headerMouseDown\");\n\t\tthis.registerColumnOption(\"headerMouseUp\");\n\t\tthis.registerColumnOption(\"headerTap\");\n\t\tthis.registerColumnOption(\"headerDblTap\");\n\t\tthis.registerColumnOption(\"headerTapHold\");\n\n\t\tthis.registerColumnOption(\"cellClick\");\n\t\tthis.registerColumnOption(\"cellDblClick\");\n\t\tthis.registerColumnOption(\"cellContext\");\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\n\t\tthis.registerColumnOption(\"cellMouseOver\");\n\t\tthis.registerColumnOption(\"cellMouseOut\");\n\t\tthis.registerColumnOption(\"cellMouseMove\");\n\t\tthis.registerColumnOption(\"cellMouseDown\");\n\t\tthis.registerColumnOption(\"cellMouseUp\");\n\t\tthis.registerColumnOption(\"cellTap\");\n\t\tthis.registerColumnOption(\"cellDblTap\");\n\t\tthis.registerColumnOption(\"cellTapHold\");\n\n\t}\n\n\tinitialize(){\n\t\tthis.initializeExternalEvents();\n\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.clearTouchWatchers.bind(this));\n\t\tthis.subscribe(\"scroll-vertical\", this.clearTouchWatchers.bind(this));\n\t}\n\n\tclearTouchWatchers(){\n\t\tvar types = Object.values(this.touchWatchers);\n\n\t\ttypes.forEach((type) => {\n\t\t\tfor(let key in type){\n\t\t\t\ttype[key] = null;\n\t\t\t}\n\t\t});\n\t}\n\t\t\n\tcellContentsSelectionFixer(e, cell){\n\t\tvar range;\n\n\t\tif(this.table.modExists(\"edit\")){\n\t\t\tif (this.table.modules.edit.currentCell === cell){\n\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t}\n\t\t}\n\n\t\te.preventDefault();\n\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\n\tinitializeExternalEvents(){\n\t\tfor(let key in this.eventMap){\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key));\n\t\t}\n\t}\n\n\tsubscriptionChanged(key, added){\n\t\tif(added){\n\t\t\tif(!this.subscribers[key]){\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t}else{\n\t\t\t\t\tthis.subscribeTouchEvents(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t\tdelete this.subscribers[key];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.unsubscribeTouchEvents(key);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tsubscribeTouchEvents(key){\n\t\tvar type = this.eventMap[key];\n\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\n\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\t\t}\n\n\t\tthis.subscribers[key] = true;\n\t}\n\n\tunsubscribeTouchEvents(key){\n\t\tvar noTouch = true,\n\t\ttype = this.eventMap[key];\n\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\n\t\t\tdelete this.subscribers[key];\n\n\t\t\tfor(let i in this.eventMap){\n\t\t\t\tif(this.eventMap[i] === type){\n\t\t\t\t\tif(this.subscribers[i]){\n\t\t\t\t\t\tnoTouch = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(noTouch){\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\n\t\tfor(let key in this.eventMap){\n\t\t\tif(def[key]){\n\t\t\t\tthis.subscriptionChanged(key, true);\n\n\t\t\t\tif(!this.columnSubscribers[key]){\n\t\t\t\t\tthis.columnSubscribers[key] = [];\n\t\t\t\t}\n\n\t\t\t\tthis.columnSubscribers[key].push(column);\n\t\t\t}\n\t\t}\n\t}\n\n\thandle(action, e, component){\n\t\tthis.dispatchEvent(action, e, component);\n\t}\n\n\thandleTouch(type, action, e, component){\n\t\tvar watchers = this.touchWatchers[type];\n\n\t\tif(type === \"column\"){\n\t\t\ttype = \"header\";\n\t\t}\n\n\t\tswitch(action){\n\t\t\tcase \"start\":\n\t\t\t\twatchers.tap = true;\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\n\t\t\t\twatchers.tapHold = setTimeout(() => {\n\t\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\t\twatchers.tapHold = null;\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\n\t\t\t\t}, 1000);\n\t\t\t\tbreak;\n\n\t\t\tcase \"end\":\n\t\t\t\tif(watchers.tap){\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\n\t\t\t\t}\n\n\t\t\t\tif(watchers.tapDbl){\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\n\t\t\t\t}else{\n\t\t\t\t\twatchers.tapDbl = setTimeout(() => {\n\t\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\t\twatchers.tapDbl = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\twatchers.tapHold = null;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdispatchEvent(action, e, component){\n\t\tvar componentObj = component.getComponent(),\n\t\tcallback;\n\n\t\tif(this.columnSubscribers[action]){\n\n\t\t\tif(component instanceof Cell){\n\t\t\t\tcallback = component.column.definition[action];\n\t\t\t}else if(component instanceof Column){\n\t\t\t\tcallback = component.definition[action];\n\t\t\t}\n\n\t\t\tif(callback){\n\t\t\t\tcallback(e, componentObj);\n\t\t\t}\n\t\t}\n\n\t\tthis.dispatchExternal(action, e, componentObj);\n\t}\n}\n\nInteraction.moduleName = \"interaction\";\n\nexport default Interaction;\n","export default {\n\tnavPrev:\"shift + 9\",\n\tnavNext:9,\n\tnavUp:38,\n\tnavDown:40,\n\tnavLeft:37,\n\tnavRight:39,\n\tscrollPageUp:33,\n\tscrollPageDown:34,\n\tscrollToStart:36,\n\tscrollToEnd:35,\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 67\"],\n\n\trangeJumpUp:[\"ctrl + 38\", \"meta + 38\"],\n\trangeJumpDown:[\"ctrl + 40\", \"meta + 40\"],\n\trangeJumpLeft:[\"ctrl + 37\", \"meta + 37\"],\n\trangeJumpRight:[\"ctrl + 39\", \"meta + 39\"],\n\trangeExpandUp:\"shift + 38\",\n\trangeExpandDown:\"shift + 40\",\n\trangeExpandLeft:\"shift + 37\",\n\trangeExpandRight:\"shift + 39\",\n\trangeExpandJumpUp:[\"ctrl + shift + 38\", \"meta + shift + 38\"],\n\trangeExpandJumpDown:[\"ctrl + shift + 40\", \"meta + shift + 40\"],\n\trangeExpandJumpLeft:[\"ctrl + shift + 37\", \"meta + shift + 37\"],\n\trangeExpandJumpRight:[\"ctrl + shift + 39\", \"meta + shift + 39\"],\n};\n","export default {\n\tkeyBlock:function(e){\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos >= 0){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollPageDown:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\n\t\tscrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos <= scrollMax){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\n\t},\n\tscrollToStart:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToEnd:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tnavPrev:function(e){\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\n\t},\n\n\tnavNext:function(e){\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\n\t},\n\n\tnavLeft:function(e){\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\n\t},\n\n\tnavRight:function(e){\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\n\t},\n\n\tnavUp:function(e){\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\n\t},\n\n\tnavDown:function(e){\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\n\t},\n\n\trangeJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, false);\n\t},\n\trangeJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, false);\n\t},\n\trangeJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, false);\n\t},\n\trangeJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, false);\n\t},\n\trangeExpandLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", false, true);\n\t},\n\trangeExpandRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", false, true);\n\t},\n\trangeExpandUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", false, true);\n\t},\n\trangeExpandDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", false, true);\n\t},\n\trangeExpandJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, true);\n\t},\n\trangeExpandJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, true);\n\t},\n\trangeExpandJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, true);\n\t},\n\trangeExpandJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, true);\n\t},\n\n\tundo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.undo();\n\t\t\t}\n\t\t}\n\t},\n\n\tredo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.redo();\n\t\t\t}\n\t\t}\n\t},\n\n\tcopyToClipboard:function(e){\n\t\tif(!this.table.modules.edit.currentCell){\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t}\n\t\t}\n\t},\n};\n","import Module from '../../core/Module.js';\n\nimport defaultBindings from './defaults/bindings.js';\nimport defaultActions from './defaults/actions.js';\n\nclass Keybindings extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.watchKeys = null;\n\t\tthis.pressedKeys = null;\n\t\tthis.keyupBinding = false;\n\t\tthis.keydownBinding = false;\n\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\n\t}\n\n\tinitialize(){\n\t\tvar bindings = this.table.options.keybindings,\n\t\tmergedBindings = {};\n\n\t\tthis.watchKeys = {};\n\t\tthis.pressedKeys = [];\n\n\t\tif(bindings !== false){\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings);\n\t\t\tObject.assign(mergedBindings, bindings);\n\n\t\t\tthis.mapBindings(mergedBindings);\n\t\t\tthis.bindEvents();\n\t\t}\n\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t}\n\n\tmapBindings(bindings){\n\t\tfor(let key in bindings){\n\t\t\tif(Keybindings.actions[key]){\n\t\t\t\tif(bindings[key]){\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t\t}\n\n\t\t\t\t\tbindings[key].forEach((binding) => {\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\n\t\t\t\t\t\t\n\t\t\t\t\t\tbindingList.forEach((item) => {\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\n\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\tmapBinding(action, symbolsList){\n\t\tvar binding = {\n\t\t\taction: Keybindings.actions[action],\n\t\t\tkeys: [],\n\t\t\tctrl: false,\n\t\t\tshift: false,\n\t\t\tmeta: false,\n\t\t};\n\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\t\tsymbols.forEach((symbol) => {\n\t\t\tswitch(symbol){\n\t\t\t\tcase \"ctrl\":\n\t\t\t\t\tbinding.ctrl = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"shift\":\n\t\t\t\t\tbinding.shift = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"meta\":\n\t\t\t\t\tbinding.meta = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\n\t\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\t\tif(!this.watchKeys[symbol]){\n\t\t\t\t\t\tthis.watchKeys[symbol] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.watchKeys[symbol].push(binding);\n\t\t\t}\n\t\t});\n\t}\n\n\tbindEvents(){\n\t\tvar self = this;\n\n\t\tthis.keyupBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tself.pressedKeys.push(code);\n\n\t\t\t\tbindings.forEach(function(binding){\n\t\t\t\t\tself.checkBinding(e, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tthis.keydownBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n\t}\n\n\tclearBindings(){\n\t\tif(this.keyupBinding){\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t\t}\n\n\t\tif(this.keydownBinding){\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t\t}\n\t}\n\n\tcheckBinding(e, binding){\n\t\tvar match = true;\n\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\n\t\t\tbinding.keys.forEach((key) => {\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\n\n\t\t\t\tif(index == -1){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tbinding.action.call(this, e);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nKeybindings.moduleName = \"keybindings\";\n\n//load defaults\nKeybindings.bindings = defaultBindings;\nKeybindings.actions = defaultActions;\n\nexport default Keybindings;","import Module from '../../core/Module.js';\n\nclass Menu extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.menuContainer = null;\n\t\tthis.nestedMenuBlock = false;\n\t\t\n\t\tthis.currentComponent = null;\n\t\tthis.rootPopup = null;\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\n\t\t\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\n\t\tthis.registerTableOption(\"rowDblClickMenu\", false);\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\n\t\tthis.registerTableOption(\"groupDblClickMenu\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextMenu\");\n\t\tthis.registerColumnOption(\"headerClickMenu\");\n\t\tthis.registerColumnOption(\"headerDblClickMenu\");\n\t\tthis.registerColumnOption(\"headerMenu\");\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\n\t\tthis.registerColumnOption(\"contextMenu\");\n\t\tthis.registerColumnOption(\"clickMenu\");\n\t\tthis.registerColumnOption(\"dblClickMenu\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tif(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\n\t\t}\n\t}\t\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextMenu){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickMenu){\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowDblClickMenu){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextMenu){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickMenu){\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupDblClickMenu){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar\tdef = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){\n\t\t\tthis.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerDblClickMenu\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerMenu){\n\t\t\tthis.initializeColumnHeaderMenu(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\n\t\t}\n\t\t\n\t\tif(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){\n\t\t\tthis.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, \"dblClickMenu\");\n\t\t\tthis.subscribe(\"cell-dblclick\", this.columnSubscribers.dblClickMenu);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderMenu(column){\n\t\tvar icon = column.definition.headerMenuIcon,\n\t\theaderMenuEl;\n\t\t\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\n\t\t\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderMenuEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderMenuEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadMenuTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadMenuTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadMenuEvent(menu, e, component){\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\n\t\t\n\t\tthis.loadMenu(e, component, menu);\n\t}\n\t\n\tloadMenu(e, component, menu, parentEl, parentPopup){\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\n\t\tmenuEl = document.createElement(\"div\"),\n\t\tpopup;\n\t\t\n\t\tmenuEl.classList.add(\"tabulator-menu\");\n\t\t\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t//abort if no menu set\n\t\tif(!menu || !menu.length){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(!parentEl){\n\t\t\tif(this.nestedMenuBlock){\n\t\t\t\t//abort if child menu already open\n\t\t\t\tif(this.rootPopup){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\n\t\t\t\t\tthis.nestedMenuBlock = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\n\t\t\t\n\t\t}else{\n\t\t\tpopup = parentPopup.child(menuEl);\n\t\t}\n\t\t\n\t\tmenu.forEach((item) => {\n\t\t\tvar itemEl = document.createElement(\"div\"),\n\t\t\tlabel = item.label,\n\t\t\tdisabled = item.disabled;\n\t\t\t\n\t\t\tif(item.separator){\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t\t}else{\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\t\t\t\t\n\t\t\t\tif(typeof label == \"function\"){\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(label instanceof Node){\n\t\t\t\t\titemEl.appendChild(label);\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = label;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(typeof disabled == \"function\"){\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(disabled){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(item.action){\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmenuEl.appendChild(itemEl);\n\t\t});\n\t\t\n\t\tmenuEl.addEventListener(\"click\", (e) => {\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\n\t\t\t}\n\t\t});\n\t\t\n\t\tpopup.show(parentEl || e);\n\t\t\n\t\tif(popup === this.rootPopup){\n\t\t\tthis.rootPopup.hideOnBlur(() => {\n\t\t\t\tthis.rootPopup = null;\n\t\t\t\t\n\t\t\t\tif(this.currentComponent){\n\t\t\t\t\tthis.dispatch(\"menu-closed\", menu, popup);\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\n\t\t\t\t\tthis.currentComponent = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.currentComponent = component;\n\t\t\t\n\t\t\tthis.dispatch(\"menu-opened\", menu, popup);\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nMenu.moduleName = \"menu\";\n\nexport default Menu;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating column header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving column\n\t\tthis.toCol = false; //destination column\n\t\tthis.toColAfter = false; //position of moving column relative to the destination column\n\t\tthis.startX = 0; //starting position within header element\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\n\t\tthis.touchMove = false;\n\t\t\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\n\t}\n\t\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.classList.add(\"tabulator-col-placeholder\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.movableColumns){\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"alert-show\", this.abortMove.bind(this));\n\t\t}\n\t}\n\n\tabortMove(){\n\t\tclearTimeout(this.checkTimeout);\n\t}\n\t\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\tcolEl;\n\t\t\n\t\tif(!column.modules.frozen && !column.isGroup){\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tconfig.mousemove = function(e){\n\t\t\t\tif(column.parent === self.moving.parent){\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(self);\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tself.touchMove = false;\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tself.bindTouchEvents(column);\n\t\t}\n\t\t\n\t\tcolumn.modules.moveColumn = config;\n\t}\n\t\n\tbindTouchEvents(column){\n\t\tvar colEl = column.getElement(),\n\t\tstartXMove = false, //shifting center position of the cell\n\t\tnextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\n\t\t\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextCol = column.nextColumn();\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\n\t\t\t\tprevCol = column.prevColumn();\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\n\t\t\t\tnextColWidthLast = 0;\n\t\t\t\tprevColWidthLast = 0;\n\t\t\t\tstartXMove = false;\n\t\t\t\t\n\t\t\t\tthis.startMove(e, column);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\n\t\t\tvar diff, moveToCol;\n\t\t\t\n\t\t\tif(this.moving){\n\t\t\t\tthis.moveHover(e);\n\t\t\t\t\n\t\t\t\tif(!startXMove){\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\n\t\t\t\t\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\n\t\t\t\t\t\tmoveToCol = nextCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\n\t\t\t\t\t\tmoveToCol = prevCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(moveToCol){\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tstartMove(e, column){\n\t\tvar element = column.getElement(),\n\t\theaderElement = this.table.columnManager.getContentsElement(),\n\t\theadersElement = this.table.columnManager.getHeadersElement();\n\t\t\n\t\tthis.moving = column;\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\n\t\t\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\t\t\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t\t\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\t\t\n\t\theaderElement.appendChild(this.hoverElement);\n\t\t\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\n\t\t\n\t\tif(!this.touchMove){\n\t\t\tthis._bindMouseMove();\n\t\t\t\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t\t\n\t\tthis.moveHover(e);\n\t}\n\t\n\t_bindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_unbindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tmoveColumn(column, after){\n\t\tvar movingCells = this.moving.getCells();\n\t\t\n\t\tthis.toCol = column;\n\t\tthis.toColAfter = after;\n\t\t\n\t\tif(after){\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\tendMove(e){\n\t\tif(e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\t\t\t\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\t\t\t\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(this.toCol){\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t\t}\n\t\t\t\n\t\t\tthis.moving = false;\n\t\t\tthis.toCol = false;\n\t\t\tthis.toColAfter = false;\n\t\t\t\n\t\t\tif(!this.touchMove){\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tmoveHover(e){\n\t\tvar columnHolder = this.table.columnManager.getContentsElement(),\n\t\tscrollLeft = columnHolder.scrollLeft,\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\n\t\tscrollPos;\n\t\t\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\n\t\t\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nMoveColumns.moduleName = \"moveColumn\";\n\nexport default MoveColumns;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating row header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving row\n\t\tthis.toRow = false; //destination row\n\t\tthis.toRowAfter = false; //position of moving row relative to the destination row\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\n\t\tthis.startY = 0; //starting Y position within header element\n\t\tthis.startX = 0; //starting X position within header element\n\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\tthis.tableRowDropEvent = false;\n\n\t\tthis.touchMove = false;\n\n\t\tthis.connection = false;\n\t\tthis.connectionSelectorsTables = false;\n\t\tthis.connectionSelectorsElements = false;\n\t\tthis.connectionElements = [];\n\t\tthis.connections = [];\n\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\n\n\t\tthis.registerColumnOption(\"rowHandle\");\n\t}\n\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.classList.add(\"tabulator-row-placeholder\");\n\n\t\treturn el;\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.movableRows){\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeGroupHeader(group){\n\t\tvar self = this,\n\t\tconfig = {};\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, group);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl;\n\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(group, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\tif(rowEl.previousSibling){\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tgroup.modules.moveRow = config;\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\trowEl;\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, row);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(row, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(row, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\n\t\tif(!this.hasHandle){\n\n\t\t\trowEl = row.getElement();\n\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(row, row.getElement());\n\t\t}\n\n\t\trow.modules.moveRow = config;\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tthis.hasHandle = true;\n\t\t}\n\t}\n\n\tinitializeCell(cell){\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tvar self = this,\n\t\t\tcellEl = cell.getElement(true);\n\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, cell.row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\n\t\t}\n\t}\n\n\tbindTouchEvents(row, element){\n\t\tvar startYMove = false, //shifting center position of the cell\n\t\tnextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\n\n\t\telement.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextRow = row.nextRow();\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\n\t\t\t\tprevRow = row.prevRow();\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\n\t\t\t\tnextRowHeightLast = 0;\n\t\t\t\tprevRowHeightLast = 0;\n\t\t\t\tstartYMove = false;\n\n\t\t\t\tthis.startMove(e, row);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\tthis.moving, this.toRow, this.toRowAfter;\n\t\telement.addEventListener(\"touchmove\", (e) => {\n\n\t\t\tvar diff, moveToRow;\n\n\t\t\tif(this.moving){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis.moveHover(e);\n\n\t\t\t\tif(!startYMove){\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t}\n\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\n\t\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\n\t\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(moveToRow){\n\t\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t\tthis.touchMove = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t_bindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\t_unbindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\tstartMove(e, row){\n\t\tvar element = row.getElement();\n\n\t\tthis.setStartPosition(e, row);\n\n\t\tthis.moving = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\t\tif(!this.connection){\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\t\telement.parentNode.removeChild(element);\n\t\t}else{\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\t\tthis.connectToTables(row);\n\t\t}\n\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\t\tif(this.connection){\n\t\t\tdocument.body.appendChild(this.hoverElement);\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t\t}else{\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\n\t\t\tthis._bindMouseMove();\n\t\t}\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\n\n\t\tthis.moveHover(e);\n\t}\n\n\tsetStartPosition(e, row){\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t\telement, position;\n\n\t\telement = row.getElement();\n\t\tif(this.connection){\n\t\t\tposition = element.getBoundingClientRect();\n\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t\t}else{\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\n\t\t}\n\t}\n\n\tendMove(e){\n\t\tif(!e || e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\n\t\t\tif(!this.connection){\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\t}\n\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif(this.toRow){\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\n\t\t\t}\n\n\t\t\tthis.moving = false;\n\t\t\tthis.toRow = false;\n\t\t\tthis.toRowAfter = false;\n\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\t\tif(this.connection){\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\t\tthis.disconnectFromTables();\n\t\t\t}\n\t\t}\n\t}\n\n\tmoveRow(row, after){\n\t\tthis.toRow = row;\n\t\tthis.toRowAfter = after;\n\t}\n\n\tmoveHover(e){\n\t\tif(this.connection){\n\t\t\tthis.moveHoverConnections.call(this, e);\n\t\t}else{\n\t\t\tthis.moveHoverTable.call(this, e);\n\t\t}\n\t}\n\n\tmoveHoverTable(e){\n\t\tvar rowHolder = this.table.rowManager.getElement(),\n\t\tscrollTop = rowHolder.scrollTop,\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop;\n\t\t\n\t\tthis.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + \"px\";\n\t}\n\n\tmoveHoverConnections(e){\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\n\t}\n\n\telementRowDrop(e, element, row){\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\n\t}\n\n\t//establish connection with other tables\n\tconnectToTables(row){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\t\trow:row,\n\t\t\t});\n\t\t}\n\n\t\tif(this.connectionSelectorsElements){\n\n\t\t\tthis.connectionElements = [];\n\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t\t}\n\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\n\t\t\t\tif(typeof query === \"string\"){\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t\t}else{\n\t\t\t\t\tthis.connectionElements.push(query);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.connectionElements.forEach((element) => {\n\t\t\t\tvar dropEvent = (e) => {\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\n\t\t\t\t};\n\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t\t});\n\t\t}\n\t}\n\n\t//disconnect from other tables\n\tdisconnectFromTables(){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t\t}\n\n\t\tthis.connectionElements.forEach((element) => {\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\t\tdelete element.tabulatorElementDropEvent;\n\t\t});\n\t}\n\n\t//accept incomming connection\n\tconnect(table, row){\n\t\tif(!this.connectedTable){\n\t\t\tthis.connectedTable = table;\n\t\t\tthis.connectedRow = row;\n\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\n\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//close incoming connection\n\tdisconnect(table){\n\t\tif(table === this.connectedTable){\n\t\t\tthis.connectedTable = false;\n\t\t\tthis.connectedRow = false;\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t\t}\n\t}\n\n\tdropComplete(table, row, success){\n\t\tvar sender = false;\n\n\t\tif(success){\n\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(sender){\n\t\t\t\tsender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table);\n\t\t\t}else{\n\t\t\t\tif(this.table.options.movableRowsSender){\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}\n\n\t\tthis.endMove();\n\t}\n\n\ttableRowDrop(e, row){\n\t\tvar receiver = false,\n\t\tsuccess = false;\n\n\t\te.stopImmediatePropagation();\n\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\n\t\t\tcase \"string\":\n\t\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(receiver){\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t\t}\n\n\t\tif(success){\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}\n\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\t\trow:row,\n\t\t\tsuccess:success,\n\t\t});\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"connect\":\n\t\t\t\treturn this.connect(table, data.row);\n\n\t\t\tcase \"disconnect\":\n\t\t\t\treturn this.disconnect(table);\n\n\t\t\tcase \"dropcomplete\":\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t}\n\t}\n}\n\nMoveRows.prototype.receivers = {\n\tinsert:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\ttoRow.update(fromRow.getData());\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\treplace:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\ttoRow.delete();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n};\n\nMoveRows.prototype.senders = {\n\tdelete:function(fromRow, toRow, toTable){\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.moduleName = \"moveRow\";\n\nexport default MoveRows;","export default {};","import Module from '../../core/Module.js';\n\nimport defaultMutators from './defaults/mutators.js';\n\nclass Mutator extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of mutation types\n\t\tthis.enabled = true;\n\n\t\tthis.registerColumnOption(\"mutator\");\n\t\tthis.registerColumnOption(\"mutatorParams\");\n\t\tthis.registerColumnOption(\"mutatorData\");\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\n\t\tthis.registerColumnOption(\"mutatorEdit\");\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\n\t\tthis.registerColumnOption(\"mutateLink\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.mutateLink.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\n\t}\n\n\trowDataChanged(row, tempData, updatedData){\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\n\t}\n\n\t//initialize column mutator\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\tmutator;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\n\n\t\t\t\tif(mutator){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\tmutator:mutator,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.mutate = config;\n\t\t}\n\t}\n\n\tlookupMutator(value){\n\t\tvar mutator = false;\n\n\t\t//set column mutator\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Mutator.mutators[value]){\n\t\t\t\t\tmutator = Mutator.mutators[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tmutator = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn mutator;\n\t}\n\n\t//apply mutator to row\n\ttransformRow(data, type, updatedData){\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\tvalue;\n\n\t\tif(this.enabled){\n\n\t\t\tthis.table.columnManager.traverse((column) => {\n\t\t\t\tvar mutator, params, component;\n\n\t\t\t\tif(column.modules.mutate){\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\t\tif(mutator){\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\t\tif((type == \"data\" && !updatedData)|| typeof value !== \"undefined\"){\n\t\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//apply mutator to new cell value\n\ttransformCell(cell, value){\n\t\tif(cell.column.modules.mutate){\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t\t\ttempData = {};\n\n\t\t\tif(mutator){\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\t\t\tcell.column.setFieldValue(tempData, value);\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tmutateLink(cell){\n\t\tvar links = cell.column.definition.mutateLink;\n\n\t\tif(links){\n\t\t\tif(!Array.isArray(links)){\n\t\t\t\tlinks = [links];\n\t\t\t}\n\n\t\t\tlinks.forEach((link) => {\n\t\t\t\tvar linkCell = cell.row.getCell(link);\n\n\t\t\t\tif(linkCell){\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tenable(){\n\t\tthis.enabled = true;\n\t}\n\n\tdisable(){\n\t\tthis.enabled = false;\n\t}\n}\n\nMutator.moduleName = \"mutator\";\n\n//load defaults\nMutator.mutators = defaultMutators;\n\nexport default Mutator;","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\n\tif(totalRows){\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\n\t\t\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\n\t\t\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(ofEl);\n\t\tel.appendChild(totalEl);\n\t\tel.appendChild(rowsEl);\n\t}else{\n\t\tvalueEl.innerHTML = \" 0 \";\n\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(rowsEl);\n\t}\n\t\n\treturn el;\n}","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\t\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\t\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\t\n\tel.appendChild(showingEl);\n\tel.appendChild(valueEl);\n\tel.appendChild(ofEl);\n\tel.appendChild(totalEl);\n\tel.appendChild(rowsEl);\n\t\n\treturn el;\n}","import rows from './pageCounters/rows.js';\nimport pages from './pageCounters/pages.js';\n\n\nexport default {\n\trows:rows,\n\tpages:pages,\n};","import Module from '../../core/Module.js';\n\nimport defaultPageCounters from './defaults/pageCounters.js';\n\nclass Page extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.mode = \"local\";\n\t\tthis.progressiveLoad = false;\n\t\t\n\t\tthis.element = null;\n\t\tthis.pageCounterElement = null;\n\t\tthis.pageCounter = null;\n\t\t\n\t\tthis.size = 0;\n\t\tthis.page = 1;\n\t\tthis.count = 5;\n\t\tthis.max = 1;\n\n\t\tthis.remoteRowCountEstimate = null;\n\t\t\n\t\tthis.initialLoad = true;\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\n\t\t\n\t\tthis.pageSizes = [];\n\t\t\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initial page to show on load\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\n\t\t\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\n\t\t\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\n\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad){\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\n\t\t\t\n\t\t\tthis.createElements();\n\t\t\tthis.initializePageCounter();\n\t\t\tthis.initializePaginator();\n\t\t}else if(this.table.options.progressiveLoad){\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\t\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\t\n\trowAddingPosition(row, top){\n\t\tvar rowManager = this.table.rowManager,\n\t\tdisplayRows = rowManager.getDisplayRows(),\n\t\tindex;\n\t\t\n\t\tif(top){\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[0];\n\t\t\t}else{\n\t\t\t\tif(rowManager.activeRows.length){\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[displayRows.length - 1];\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {index, top};\n\t}\n\t\n\tcalculatePageSizes(){\n\t\tvar testElRow, testElCell;\n\t\t\n\t\tif(this.table.options.paginationSize){\n\t\t\tthis.size = this.table.options.paginationSize;\n\t\t}else{\n\t\t\ttestElRow = document.createElement(\"div\");\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\t\ttestElRow.style.visibility = \"hidden\";\n\t\t\t\n\t\t\ttestElCell = document.createElement(\"div\");\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\n\t\t\t\n\t\t\ttestElRow.appendChild(testElCell);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\n\t\t\t\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\n\t\t}\n\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\n\t\t\n\t\tthis.generatePageSizeSelectList();\n\t}\n\t\n\tinitialLoadComplete(){\n\t\tthis.initialLoad = false;\n\t}\n\t\n\tremotePageParams(data, config, silent, params){\n\t\tif(!this.initialLoad){\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\n\t\t\t\tthis.reset(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\t//configure request params\n\t\tparams.page = this.page;\n\t\t\n\t\t//set page size if defined\n\t\tif(this.size){\n\t\t\tparams.size = this.size;\n\t\t}\n\t\t\n\t\treturn params;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetPageToRow(row){\n\t\tif(this.table.options.pagination){\n\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\treturn this.setPageToRow(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Promise.reject();\n\t}\n\t\n\tuserSetPageSize(size){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.setPageSize(size);\n\t\t\treturn this.setPage(1);\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tscrollVertical(top, dir){\n\t\tvar element, diff, margin;\n\t\tif(!dir && !this.table.dataLoader.loading){\n\t\t\telement = this.table.rowManager.getElement();\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\n\t\t\t\n\t\t\tif(diff < margin){\n\t\t\t\tthis.nextPage()\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\n\t\t\t}\n\t\t}\n\t}\n\t\n\trestOnRenderBefore(rows, renderInPosition){\n\t\tif(!renderInPosition){\n\t\t\tif(this.mode === \"local\"){\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(){\n\t\tthis.refreshData(true, \"all\");\n\t}\n\t\n\tcreateElements(){\n\t\tvar button;\n\t\t\n\t\tthis.element = document.createElement(\"span\");\n\t\tthis.element.classList.add(\"tabulator-paginator\");\n\t\t\n\t\tthis.pagesElement = document.createElement(\"span\");\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\t\t\n\t\tbutton = document.createElement(\"button\");\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"\");\n\t\tbutton.setAttribute(\"title\", \"\");\n\t\t\n\t\tthis.firstBut = button.cloneNode(true);\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\t\t\n\t\tthis.prevBut = button.cloneNode(true);\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\t\t\n\t\tthis.nextBut = button.cloneNode(true);\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\t\t\n\t\tthis.lastBut = button.cloneNode(true);\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\t\t\n\t\tif(this.table.options.paginationSizeSelector){\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t\t}\n\t}\n\t\n\tgeneratePageSizeSelectList(){\n\t\tvar pageSizes = [];\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes = [];\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\n\t\t\t\t\t\tpageSizes.push(this.size * i);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t}else{\n\t\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t\t\n\t\t\tpageSizes.forEach((item) => {\n\t\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\t\titemEl.value = item;\n\t\t\t\t\n\t\t\t\tif(item === true){\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\n\t\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = item;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\n\t\t\t});\n\t\t\t\n\t\t\tthis.pageSizeSelect.value = this.size;\n\t\t}\n\t}\n\t\n\tinitializePageCounter(){\n\t\tvar counter = this.table.options.paginationCounter,\n\t\tpageCounter = null;\n\t\t\n\t\tif(counter){\n\t\t\tif(typeof counter === \"function\"){\n\t\t\t\tpageCounter = counter;\n\t\t\t}else{\n\t\t\t\tpageCounter = Page.pageCounters[counter];\n\t\t\t}\n\t\t\t\n\t\t\tif(pageCounter){\n\t\t\t\tthis.pageCounter = pageCounter;\n\t\t\t\t\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup pagination\n\tinitializePaginator(hidden){\n\t\tvar pageSelectLabel, paginationCounterHolder;\n\t\t\n\t\tif(!hidden){\n\t\t\t//build pagination element\n\t\t\t\n\t\t\t//bind localizations\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\n\t\t\t\tthis.firstBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\n\t\t\t\tthis.prevBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\n\t\t\t\tthis.nextBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\n\t\t\t\tthis.lastBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\t//click bindings\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(1);\n\t\t\t});\n\t\t\t\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.previousPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.nextPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(this.max);\n\t\t\t});\n\t\t\t\n\t\t\tif(this.table.options.paginationElement){\n\t\t\t\tthis.element = this.table.options.paginationElement;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.pageSizeSelect){\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\n\t\t\t\t\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\n\t\t\t\t\tthis.setPage(1);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//append to DOM\n\t\t\tthis.element.appendChild(this.firstBut);\n\t\t\tthis.element.appendChild(this.prevBut);\n\t\t\tthis.element.appendChild(this.pagesElement);\n\t\t\tthis.element.appendChild(this.nextBut);\n\t\t\tthis.element.appendChild(this.lastBut);\n\t\t\t\n\t\t\tif(!this.table.options.paginationElement){\n\t\t\t\tif(this.table.options.paginationCounter){\n\n\t\t\t\t\tpaginationCounterHolder; \n\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(paginationCounterHolder){\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.footerAppend(this.pageCounterElement);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.footerAppend(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.page = this.table.options.paginationInitialPage;\n\t\t\tthis.count = this.table.options.paginationButtonCount;\n\t\t}\n\t\t\n\t\t//set default values\n\t\tthis.mode = this.table.options.paginationMode;\n\t}\n\t\n\tinitializeProgressive(mode){\n\t\tthis.initializePaginator(true);\n\t\tthis.mode = \"progressive_\" + mode;\n\t\tthis.progressiveLoad = true;\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"page-changed\");\n\t}\n\t\n\t//calculate maximum page from number of rows\n\tsetMaxRows(rowCount){\n\t\tif(!rowCount){\n\t\t\tthis.max = 1;\n\t\t}else{\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\n\t\t}\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t}\n\t}\n\t\n\t//reset to first page without triggering action\n\treset(force){\n\t\tif(!this.initialLoad){\n\t\t\tif(this.mode == \"local\" || force){\n\t\t\t\tthis.page = 1;\n\t\t\t\tthis.trackChanges();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//set the maximum page\n\tsetMaxPage(max){\n\t\t\n\t\tmax = parseInt(max);\n\t\t\n\t\tthis.max = max || 1;\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t\tthis.trigger();\n\t\t}\n\t}\n\t\n\t//set current page number\n\tsetPage(page){\n\t\tswitch(page){\n\t\t\tcase \"first\":\n\t\t\t\treturn this.setPage(1);\n\t\n\t\t\tcase \"prev\":\n\t\t\t\treturn this.previousPage();\n\t\t\t\n\t\t\tcase \"next\":\n\t\t\t\treturn this.nextPage();\n\t\t\t\n\t\t\tcase \"last\":\n\t\t\t\treturn this.setPage(this.max);\n\t\t}\n\t\t\n\t\tpage = parseInt(page);\n\t\t\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\n\t\t\tthis.page = page;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageToRow(row){\n\t\tvar rows = this.displayRows(-1);\n\t\tvar index = rows.indexOf(row);\n\t\n\t\tif(index > -1){\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\n\t\t\t\n\t\t\treturn this.setPage(page);\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageSize(size){\n\t\tif(size !== true){\n\t\t\tsize = parseInt(size);\n\t\t}\n\n\t\tif(size > 0){\n\t\t\tthis.size = size;\n\t\t\tthis.dispatchExternal(\"pageSizeChanged\", size);\n\t\t}\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t// this.pageSizeSelect.value = size;\n\t\t\tthis.generatePageSizeSelectList();\n\t\t}\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\t_setPageCounter(totalRows, size, currentRow){\n\t\tvar content;\n\t\t\n\t\tif(this.pageCounter){\n\n\t\t\tif(this.mode === \"remote\"){\n\t\t\t\tsize = this.size;\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\n\t\t\t}\n\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\n\t\t\t\n\t\t\tswitch(typeof content){\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif(content instanceof Node){\n\t\t\t\t\t\n\t\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.pageCounterElement.appendChild(content);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\t\n\t\t\t\t\t\tif(content != null){\n\t\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.pageCounterElement.innerHTML = content;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup the pagination buttons\n\t_setPageButtons(){\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\n\t\t\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\n\t\t\n\t\tif(this.page == 1){\n\t\t\tthis.firstBut.disabled = true;\n\t\t\tthis.prevBut.disabled = true;\n\t\t}else{\n\t\t\tthis.firstBut.disabled = false;\n\t\t\tthis.prevBut.disabled = false;\n\t\t}\n\t\t\n\t\tif(this.page == this.max){\n\t\t\tthis.lastBut.disabled = true;\n\t\t\tthis.nextBut.disabled = true;\n\t\t}else{\n\t\t\tthis.lastBut.disabled = false;\n\t\t\tthis.nextBut.disabled = false;\n\t\t}\n\t\t\n\t\tfor(let i = min; i <= max; i++){\n\t\t\tif(i>0 && i <= this.max){\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.footerRedraw();\n\t}\n\t\n\t_generatePageButton(page){\n\t\tvar button = document.createElement(\"button\");\n\t\t\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tif(page == this.page){\n\t\t\tbutton.classList.add(\"active\");\n\t\t}\n\t\t\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\t\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t\t});\n\t\t\n\t\tbutton.setAttribute(\"data-page\", page);\n\t\tbutton.textContent = page;\n\t\t\n\t\tbutton.addEventListener(\"click\", (e) => {\n\t\t\tthis.setPage(page);\n\t\t});\n\t\t\n\t\treturn button;\n\t}\n\t\n\t//previous page\n\tpreviousPage(){\n\t\tif(this.page > 1){\n\t\t\tthis.page--;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//next page\n\tnextPage(){\n\t\tif(this.page < this.max){\n\t\t\tthis.page++;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tif(!this.progressiveLoad){\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\n\t\t\t}\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//return current page number\n\tgetPage(){\n\t\treturn this.page;\n\t}\n\t\n\t//return max page number\n\tgetPageMax(){\n\t\treturn this.max;\n\t}\n\t\n\tgetPageSize(size){\n\t\treturn this.size;\n\t}\n\t\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\t\n\t//return appropriate rows for current page\n\tgetRows(data){\n\t\tvar actualRowPageSize = 0,\n\t\toutput, start, end, actualStartRow;\n\n\t\tvar actualRows = data.filter((row) => {\n\t\t\treturn row.type === \"row\";\n\t\t});\n\t\t\n\t\tif(this.mode == \"local\"){\n\t\t\toutput = [];\n\t\t\t\n\t\t\tthis.setMaxRows(data.length);\n\t\t\t\n\t\t\tif(this.size === true){\n\t\t\t\tstart = 0;\n\t\t\t\tend = data.length;\n\t\t\t}else{\n\t\t\t\tstart = this.size * (this.page - 1);\n\t\t\t\tend = start + parseInt(this.size);\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageButtons();\n\t\t\t\n\t\t\tfor(let i = start; i < end; i++){\n\t\t\t\tlet row = data[i];\n\n\t\t\t\tif(row){\n\t\t\t\t\toutput.push(row);\n\n\t\t\t\t\tif(row.type === \"row\"){\n\t\t\t\t\t\tif(!actualStartRow){\n\t\t\t\t\t\t\tactualStartRow = row;\n\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\tactualRowPageSize++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\n\t\t\t\n\t\t\treturn output;\n\t\t}else{\n\t\t\tthis._setPageButtons();\n\t\t\tthis._setPageCounter(actualRows.length);\n\t\t\t\n\t\t\treturn data.slice(0);\n\t\t}\n\t}\n\t\n\ttrigger(){\n\t\tvar left;\n\t\t\n\t\tswitch(this.mode){\n\t\t\tcase \"local\":\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\n\t\t\t\n\t\t\t\tthis.refreshData();\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\n\t\t\t\treturn Promise.resolve();\n\t\t\t\n\t\t\tcase \"remote\":\n\t\t\t\tthis.dataChanging = true;\n\t\t\t\treturn this.reloadData(null)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.dataChanging = false;\n\t\t\t\t\t});\n\t\t\t\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\treturn this.reloadData(null, true);\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\n\t\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t_parseRemoteData(data){\n\t\tvar margin;\n\t\t\n\t\tif(typeof data.last_page === \"undefined\"){\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\n\t\t}\n\t\t\n\t\tif(data.data){\n\t\t\tthis.max = parseInt(data.last_page) || 1;\n\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\n\t\t\t\n\t\t\tif(this.progressiveLoad){\n\t\t\t\tswitch(this.mode){\n\t\t\t\t\tcase \"progressive_load\":\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page == 1){\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\n\t\t\t\t\t\n\t\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\n\t\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\n\t\t}\n\t\t\n\t\treturn data.data;\n\t}\n\t\n\t//handle the footer element being redrawn\n\tfooterRedraw(){\n\t\tvar footer = this.table.footerManager.containerElement;\n\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}else{\n\t\t\tthis.pagesElement.style.display = '';\n\t\t\t\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\t\tthis.pagesElement.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n}\n\nPage.moduleName = \"page\";\n\n//load defaults\nPage.pageCounters = defaultPageCounters;\n\nexport default Page;\n","// read persistance information from storage\nexport default {\n\tlocal:function(id, type){\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie:function(id, type){\n\t\tvar cookie = document.cookie,\n\t\tkey = id + \"-\" + type,\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\n\t\tend, data;\n\n\t\t//if cookie exists, decode and load column data into tabulator\n\t\tif(cookiePos > -1){\n\t\t\tcookie = cookie.slice(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif(end > -1){\n\t\t\t\tcookie = cookie.slice(0, end);\n\t\t\t}\n\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t}\n\n\t\treturn data ? JSON.parse(data) : false;\n\t}\n};\n","//write persistence information to storage\nexport default {\n\tlocal:function(id, type, data){\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie:function(id, type, data){\n\t\tvar expireDate = new Date();\n\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t}\n};","import Module from '../../core/Module.js';\n\nimport defaultReaders from './defaults/readers.js';\nimport defaultWriters from './defaults/writers.js';\n\nclass Persistence extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = \"\";\n\t\tthis.id = \"\";\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\t\tthis.defWatcherBlock = false;\n\t\tthis.config = {};\n\t\tthis.readFunc = false;\n\t\tthis.writeFunc = false;\n\n\t\tthis.registerTableOption(\"persistence\", false);\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\n\t}\n\n\t// Test for whether localStorage is available for use.\n\tlocalStorageTest() {\n\t\tvar testKey = \"_tabulator_test\";\n\n\t\ttry {\n\t\t\twindow.localStorage.setItem( testKey, testKey);\n\t\t\twindow.localStorage.removeItem( testKey );\n\t\t\treturn true;\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//setup parameters\n\tinitialize(){\n\t\tif(this.table.options.persistence){\n\t\t\t//determine persistent layout storage type\n\t\t\tvar mode = this.table.options.persistenceMode,\n\t\t\tid = this.table.options.persistenceID,\n\t\t\tretrievedData;\n\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\n\n\t\t\tif(this.table.options.persistenceReaderFunc){\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.readers[this.mode]){\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.table.options.persistenceWriterFunc){\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.writers[this.mode]){\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//set storage tag\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\n\n\t\t\tthis.config = {\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\t\t\theaderFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter,\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\n\t\t\t};\n\n\t\t\t//load pagination data if needed\n\t\t\tif(this.config.page){\n\t\t\t\tretrievedData = this.retrieveData(\"page\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.paginationInitialPage;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//load group data if needed\n\t\t\tif(this.config.group){\n\t\t\t\tretrievedData = this.retrieveData(\"group\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.groupHeader;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.config.columns){\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\n\t\t\t}\n\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\n\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"headerFilter\"));\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"column-width\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\n\t\t}\n\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\n\t}\n\n\teventSave(type){\n\t\tif(this.config[type]){\n\t\t\tthis.save(type);\n\t\t}\n\t}\n\n\ttableBuilt(){\n\t\tvar sorters, filters, headerFilters;\n\n\t\tif(this.config.sort){\n\t\t\tsorters = this.load(\"sort\");\n\n\t\t\tif(!sorters === false){\n\t\t\t\tthis.table.options.initialSort = sorters;\n\t\t\t}\n\t\t}\n\n\t\tif(this.config.filter){\n\t\t\tfilters = this.load(\"filter\");\n\n\t\t\tif(!filters === false){\n\t\t\t\tthis.table.options.initialFilter = filters;\n\t\t\t}\n\t\t}\n\t\tif(this.config.headerFilter){\n\t\t\theaderFilters = this.load(\"headerFilter\");\n\n\t\t\tif(!headerFilters === false){\n\t\t\t\tthis.table.options.initialHeaderFilter = headerFilters;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\ttableRedraw(force){\n\t\tif(force && this.config.columns){\n\t\t\tthis.save(\"columns\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tgetColumnLayout(){\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\n\t}\n\n\tsetColumnLayout(layout){\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true));\n\t\treturn true;\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumn(column){\n\t\tvar def, keys;\n\n\t\tif(this.config.columns){\n\t\t\tthis.defWatcherBlock = true;\n\n\t\t\tdef = column.getDefinition();\n\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\t\tkeys.forEach((key)=>{\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\t\tvar value = def[key];\n\n\t\t\t\tif(props){\n\t\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\t\tset: (newValue) => {\n\t\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(props.set){\n\t\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget:() => {\n\t\t\t\t\t\t\tif(props.get){\n\t\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.defWatcherBlock = false;\n\t\t}\n\t}\n\n\t//load saved definitions\n\tload(type, current){\n\t\tvar data = this.retrieveData(type);\n\n\t\tif(current){\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//retrieve data from memory\n\tretrieveData(type){\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n\t}\n\n\t//merge old and new column definitions\n\tmergeDefinition(oldCols, newCols, mergeAllNew){\n\t\tvar output = [];\n\n\t\tnewCols = newCols || [];\n\n\t\tnewCols.forEach((column, to) => {\n\t\t\tvar from = this._findColumn(oldCols, column),\n\t\t\tkeys;\n\n\t\t\tif(from){\n\t\t\t\tif(mergeAllNew){\n\t\t\t\t\tkeys = Object.keys(column);\n\t\t\t\t}else if(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(from);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\n\t\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(from.columns){\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\n\t\t\t\t}\n\n\t\t\t\toutput.push(from);\n\t\t\t}\n\t\t});\n\n\t\toldCols.forEach((column, i) => {\n\t\t\tvar from = this._findColumn(newCols, column);\n\n\t\t\tif (!from) {\n\t\t\t\tif(output.length>i){\n\t\t\t\t\toutput.splice(i, 0, column);\n\t\t\t\t}else{\n\t\t\t\t\toutput.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//find matching columns\n\t_findColumn(columns, subject){\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\n\n\t\treturn columns.find(function(col){\n\t\t\tswitch(type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\n\t\t\t\tcase \"field\":\n\t\t\t\t\treturn col.field === subject.field;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\treturn col === subject;\n\t\t\t}\n\t\t});\n\t}\n\n\t//save data\n\tsave(type){\n\t\tvar data = {};\n\n\t\tswitch(type){\n\t\t\tcase \"columns\":\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\t\tbreak;\n\n\t\t\tcase \"filter\":\n\t\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"headerFilter\":\n\t\t\t\tdata = this.table.modules.filter.getHeaderFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"sort\":\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tdata = this.getGroupConfig();\n\t\t\t\tbreak;\n\n\t\t\tcase \"page\":\n\t\t\t\tdata = this.getPageConfig();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(this.writeFunc){\n\t\t\tthis.writeFunc(this.id, type, data);\n\t\t}\n\n\t}\n\n\t//ensure sorters contain no function data\n\tvalidateSorters(data){\n\t\tdata.forEach(function(item){\n\t\t\titem.column = item.field;\n\t\t\tdelete item.field;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetGroupConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.group){\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tgetPageConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.page){\n\t\t\tif(this.config.page === true || this.config.page.size){\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t\t}\n\n\t\t\tif(this.config.page === true || this.config.page.page){\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\n\t//parse columns for data to store\n\tparseColumns(columns){\n\t\tvar definitions = [],\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\t\tcolumns.forEach((column) => {\n\t\t\tvar defStore = {},\n\t\t\tcolDef = column.getDefinition(),\n\t\t\tkeys;\n\n\t\t\tif(column.isGroup){\n\t\t\t\tdefStore.title = colDef.title;\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\n\t\t\t}else{\n\t\t\t\tdefStore.field = column.getField();\n\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t\tkeys.push(\"visible\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tswitch(key){\n\t\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdefinitions.push(defStore);\n\t\t});\n\n\t\treturn definitions;\n\t}\n}\n\nPersistence.moduleName = \"persistence\";\n\nPersistence.moduleInitOrder = -10;\n\n//load defaults\nPersistence.readers = defaultReaders;\nPersistence.writers = defaultWriters;\n\nexport default Persistence;","import Module from '../../core/Module.js';\n\nclass Popup extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\n\t\tthis.registerTableOption(\"rowDblClickPopup\", false);\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\n\t\tthis.registerTableOption(\"groupDblClickPopup\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextPopup\");\n\t\tthis.registerColumnOption(\"headerClickPopup\");\n\t\tthis.registerColumnOption(\"headerDblClickPopup\");\n\t\tthis.registerColumnOption(\"headerPopup\");\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\n\t\tthis.registerColumnOption(\"contextPopup\");\n\t\tthis.registerColumnOption(\"clickPopup\");\n\t\tthis.registerColumnOption(\"dblClickPopup\");\n\n\t\tthis.registerComponentFunction(\"cell\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"group\", \"popup\", this._componentPopupCall.bind(this));\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\t_componentPopupCall(component, contents, position){\n\t\tthis.loadPopupEvent(contents, null, component, position);\n\t}\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextPopup){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickPopup){\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\n\t\t}\n\n\t\tif(this.table.options.rowDblClickPopup){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextPopup){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickPopup){\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\n\t\t}\n\n\t\tif(this.table.options.groupDblClickPopup){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\n\t\t\n\t\t\n\t\t}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){\n\t\t\tthis.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerDblClickPopup\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickPopup);\n\t\t}\n\t\t\n\t\tif(def.headerPopup){\n\t\t\tthis.initializeColumnHeaderPopup(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\n\t\t}\n\n\t\tif(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){\n\t\t\tthis.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, \"dblClickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.dblClickPopup);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderPopup(column){\n\t\tvar icon = column.definition.headerPopupIcon,\n\t\theaderPopupEl;\n\t\t\n\t\theaderPopupEl = document.createElement(\"span\");\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\n\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderPopupEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderPopupEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadPopupTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadPopupTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadPopupEvent(contents, e, component, position){\n\t\tvar renderedCallback;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\n\t\t\n\t\tthis.loadPopup(e, component, contents, renderedCallback, position);\n\t}\n\t\n\tloadPopup(e, component, contents, renderedCallback, position){\n\t\tvar touch = !(e instanceof MouseEvent),\n\t\tcontentsEl, popup;\n\t\t\n\t\tif(contents instanceof HTMLElement){\n\t\t\tcontentsEl = contents;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\tcontentsEl.innerHTML = contents;\n\t\t}\n\t\t\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\n\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tpopup = this.popup(contentsEl);\n\n\t\tif(typeof renderedCallback === \"function\"){\n\t\t\tpopup.renderCallback(renderedCallback);\n\t\t}\n\n\t\tif(e){\n\t\t\tpopup.show(e);\n\t\t}else{\n\t\t\tpopup.show(component.getElement(), position || \"center\");\n\t\t}\n\n\t\t\n\t\tpopup.hideOnBlur(() => {\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\n\t\t});\n\n\n\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\n\t}\n}\n\nPopup.moduleName = \"popup\";\n\nexport default Popup;\n","import Module from '../../core/Module.js';\n\nclass Print extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.element = false;\n\t\tthis.manualBlock = false;\n\t\tthis.beforeprintEventHandler = null;\n\t\tthis.afterprintEventHandler = null;\n\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\n\n\t\tthis.registerColumnOption(\"print\");\n\t\tthis.registerColumnOption(\"titlePrint\");\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\tthis.beforeprintEventHandler = this.replaceTable.bind(this);\n\t\t\tthis.afterprintEventHandler = this.cleanup.bind(this);\n\n\t\t\twindow.addEventListener(\"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.addEventListener(\"afterprint\", this.afterprintEventHandler);\n\t\t\tthis.subscribe(\"table-destroy\", this.destroy.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\n\t}\n\n\tdestroy(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\twindow.removeEventListener( \"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.removeEventListener( \"afterprint\", this.afterprintEventHandler );\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\treplaceTable(){\n\t\tif(!this.manualBlock){\n\t\t\tthis.element = document.createElement(\"div\");\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\t\tthis.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\t\tthis.table.element.style.display = \"none\";\n\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t\t}\n\t}\n\n\tcleanup(){\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\t\tif(this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\tthis.table.element.style.display = \"\";\n\t\t}\n\t}\n\n\tprintFullscreen(visible, style, config){\n\t\tvar scrollX = window.scrollX,\n\t\tscrollY = window.scrollY,\n\t\theaderEl = document.createElement(\"div\"),\n\t\tfooterEl = document.createElement(\"div\"),\n\t\ttableEl = this.table.modules.export.generateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\n\t\theaderContent, footerContent;\n\n\t\tthis.manualBlock = true;\n\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\t\tif(this.table.options.printHeader){\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\t\tif(typeof headerContent == \"string\"){\n\t\t\t\theaderEl.innerHTML = headerContent;\n\t\t\t}else{\n\t\t\t\theaderEl.appendChild(headerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(headerEl);\n\t\t}\n\n\t\tthis.element.appendChild(tableEl);\n\n\t\tif(this.table.options.printFooter){\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\n\t\t\tif(typeof footerContent == \"string\"){\n\t\t\t\tfooterEl.innerHTML = footerContent;\n\t\t\t}else{\n\t\t\t\tfooterEl.appendChild(footerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(footerEl);\n\t\t}\n\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\t\tdocument.body.appendChild(this.element);\n\n\t\tif(this.table.options.printFormatter){\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t\t}\n\n\t\twindow.print();\n\n\t\tthis.cleanup();\n\n\t\twindow.scrollTo(scrollX, scrollY);\n\n\t\tthis.manualBlock = false;\n\t}\n}\n\nPrint.moduleName = \"print\";\n\nexport default Print;","import Module from '../../core/Module.js';\n\nclass ReactiveData extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.data = false;\n\t\tthis.blocked = false; //block reactivity while performing update\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\t\tthis.currentVersion = 0;\n\t\t\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.reactiveData){\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\n\t\t}\n\t}\n\t\n\twatchData(data){\n\t\tvar self = this,\n\t\tversion;\n\t\t\n\t\tthis.currentVersion ++;\n\t\t\n\t\tversion = this.currentVersion;\n\t\t\n\t\tthis.unwatchData();\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\t//override array push function\n\t\tthis.origFuncs.push = data.push;\n\t\t\n\t\tObject.defineProperty(this.data, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\t\n\t\t\t\t\tself.block(\"data-push\");\n\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.push.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-push\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array unshift function\n\t\tthis.origFuncs.unshift = data.unshift;\n\t\t\n\t\tObject.defineProperty(this.data, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-unshift\");\n\t\t\t\t\t\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.unshift.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-unshift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array shift function\n\t\tthis.origFuncs.shift = data.shift;\n\t\t\n\t\tObject.defineProperty(this.data, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-shift\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.shift.call(data);\n\n\t\t\t\t\tself.unblock(\"data-shift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array pop function\n\t\tthis.origFuncs.pop = data.pop;\n\t\t\n\t\tObject.defineProperty(this.data, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-pop\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.pop.call(data);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-pop\");\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array splice function\n\t\tthis.origFuncs.splice = data.splice;\n\t\t\n\t\tObject.defineProperty(this.data, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t\tend = args[1],\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\n\t\t\t\tstartRow, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-splice\");\n\t\t\t\t\t//add new rows\n\t\t\t\t\tif(newRows){\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(startRow){\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//delete removed rows\n\t\t\t\t\tif(end !== 0){\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\t\t\t\t\t\t\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(newRows || end !== 0){\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.splice.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-splice\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result ;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchData(){\n\t\tif(this.data !== false){\n\t\t\tfor(var key in this.origFuncs){\n\t\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable:true,\n\t\t\t\t\twritable:true,\n\t\t\t\t\tvalue: this.origFuncs.key,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\twatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tthis.watchKey(row, data, key);\n\t\t}\n\t\t\n\t\tif(this.table.options.dataTree){\n\t\t\tthis.watchTreeChildren(row);\n\t\t}\n\t}\n\t\n\twatchTreeChildren (row){\n\t\tvar self = this,\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\n\t\torigFuncs = {};\n\t\t\n\t\tif(childField){\n\t\t\t\n\t\t\torigFuncs.push = childField.push;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"push\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-push\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-push\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.unshift = childField.unshift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-unshift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-unshift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.shift = childField.shift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-shift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.shift.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-shift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.pop = childField.pop;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-pop\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.pop.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-pop\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.splice = childField.splice;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-splice\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-splice\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trebuildTree(row){\n\t\tthis.table.modules.dataTree.initializeRow(row);\n\t\tthis.table.modules.dataTree.layoutRow(row);\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\t\n\twatchKey(row, data, key){\n\t\tvar self = this,\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\n\t\tvalue = data[key],\n\t\tversion = this.currentVersion;\n\t\t\n\t\tObject.defineProperty(data, key, {\n\t\t\tset: (newValue) => {\n\t\t\t\tvalue = newValue;\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"key\");\n\t\t\t\t\t\n\t\t\t\t\tvar update = {};\n\t\t\t\t\tupdate[key] = newValue;\n\t\t\t\t\trow.updateData(update);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"key\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(props.set){\n\t\t\t\t\tprops.set(newValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\tget:() => {\n\t\t\t\t\n\t\t\t\tif(props.get){\n\t\t\t\t\tprops.get();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn value;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tObject.defineProperty(data, key, {\n\t\t\t\tvalue:data[key],\n\t\t\t});\n\t\t}\n\t}\n\t\n\tblock(key){\n\t\tif(!this.blocked){\n\t\t\tthis.blocked = key;\n\t\t}\n\t}\n\t\n\tunblock(key){\n\t\tif(this.blocked === key){\n\t\t\tthis.blocked = false;\n\t\t}\n\t}\n}\n\nReactiveData.moduleName = \"reactiveData\";\n\nexport default ReactiveData;\n\n\n\n","import Module from '../../core/Module.js';\n\nclass ResizeColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.startColumn = false;\n\t\tthis.startX = false;\n\t\tthis.startWidth = false;\n\t\tthis.latestX = false;\n\t\tthis.handle = null;\n\t\tthis.initialNextColumn = null;\n\t\tthis.nextColumn = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.registerColumnOption(\"resizable\", true);\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\n\t}\n\t\n\tinitializeEventWatchers(){\n\t\tif(!this.initialized){\n\t\t\t\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t\n\tlayoutCellHandles(cell){\n\t\tif(cell.row.type === \"row\"){\n\t\t\tthis.deInitializeComponent(cell);\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\n\t\t}\n\t}\n\t\n\tlayoutColumnHeader(column){\n\t\tif(column.definition.resizable){\n\t\t\tthis.initializeEventWatchers();\n\t\t\tthis.deInitializeComponent(column);\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\n\t\t}\n\t}\n\t\n\tcolumnLayoutUpdated(column){\n\t\tvar prev = column.prevColumn();\n\t\t\n\t\tthis.reinitializeColumn(column);\n\t\t\n\t\tif(prev){\n\t\t\tthis.reinitializeColumn(prev);\n\t\t}\n\t}\n\t\n\tcolumnWidthUpdated(column){\n\t\tif(column.modules.frozen){\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfrozenColumnOffset(column){\n\t\tvar offset = false;\n\n\t\tif(column.modules.frozen){\n\t\t\toffset = column.modules.frozen.marginValue; \n\n\t\t\tif(column.modules.frozen.position === \"left\"){\n\t\t\t\toffset += column.getWidth() - 3;\n\t\t\t}else{\n\t\t\t\tif(offset){\n\t\t\t\t\toffset -= 3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn offset !== false ? offset + \"px\" : false;\n\t}\n\t\n\treinitializeColumn(column){\n\t\tvar frozenOffset = this.frozenColumnOffset(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\n\t\t\t\tif(frozenOffset){\n\t\t\t\t\tcell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t\t\tcell.modules.resize.handleEl.style[\"z-index\"] = 11;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\n\t\t\tif(frozenOffset){\n\t\t\t\tcolumn.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\n\t\t}\n\t}\n\t\n\tinitializeColumn(type, component, column, element){\n\t\tvar self = this,\n\t\tvariableHeight = false,\n\t\tmode = column.definition.resizable,\n\t\tconfig = {},\n\t\tnearestColumn = column.getLastColumn();\n\t\t\n\t\t//set column resize mode\n\t\tif(type === \"header\"){\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\t\tconfig = {variableHeight:variableHeight};\n\t\t}\n\t\t\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\n\t\t\t\n\t\t\tvar handle = document.createElement('span');\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\n\t\t\t\n\t\t\thandle.addEventListener(\"click\", function(e){\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t\n\t\t\tvar handleDown = function(e){\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t};\n\t\t\t\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\t\t\t\n\t\t\t//resize column on double click\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\n\t\t\t\t\n\t\t\t\te.stopPropagation();\n\t\t\t\tnearestColumn.reinitializeWidth(true);\n\t\t\t\t\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(column.modules.frozen){\n\t\t\t\thandle.style.position = \"sticky\";\n\t\t\t\thandle.style[column.modules.frozen.position] = this.frozenColumnOffset(column);\n\t\t\t}\n\t\t\t\n\t\t\tconfig.handleEl = handle;\n\t\t\t\n\t\t\tif(element.parentNode && column.visible){\n\t\t\t\telement.after(handle);\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tcomponent.modules.resize = config;\n\t}\n\t\n\tdeInitializeColumn(column){\n\t\tthis.deInitializeComponent(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tthis.deInitializeComponent(cell);\n\t\t});\n\t}\n\t\n\tdeInitializeComponent(component){\n\t\tvar handleEl;\n\t\t\n\t\tif(component.modules.resize){\n\t\t\thandleEl = component.modules.resize.handleEl;\n\t\t\t\n\t\t\tif(handleEl && handleEl.parentElement){\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tresizeHandle(component, height){\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\n\t\t}\n\t}\n\t\n\t_checkResizability(column){\n\t\treturn column.definition.resizable;\n\t}\n\t\n\t_mouseDown(e, column, handle){\n\t\tvar self = this;\n\t\t\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tfunction mouseMove(e){\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\n\t\t\tstartDiff = x - self.startX,\n\t\t\tmoveDiff = x - self.latestX,\n\t\t\tblockedBefore, blockedAfter;\n\t\t\t\n\t\t\tself.latestX = x;\n\t\t\t\n\t\t\tif(self.table.rtl){\n\t\t\t\tstartDiff = -startDiff;\n\t\t\t\tmoveDiff = -moveDiff;\n\t\t\t}\n\t\t\t\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\n\t\t\t\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tif(moveDiff < 0){\n\t\t\t\tself.nextColumn = self.initialNextColumn;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\n\t\t\t\t\n\t\t\t\tif(moveDiff > 0){\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(self.nextColumn){\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.table.columnManager.rerenderColumns(true);\n\t\t\t\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction mouseUp(e){\n\t\t\t\n\t\t\t//block editor from taking action while resizing is taking place\n\t\t\tif(self.startColumn.modules.edit){\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\t\t\t\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\t\t\t\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(self.startWidth !== column.getWidth()){\n\t\t\t\tself.table.columnManager.verticalAlignHeaders();\n\n\t\t\t\tself.dispatch(\"column-resized\", column);\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\n\t\t\t}\n\t\t}\n\t\t\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\t\t\n\t\t//block editor from taking action while resizing is taking place\n\t\tif(self.startColumn.modules.edit){\n\t\t\tself.startColumn.modules.edit.blocked = true;\n\t\t}\n\t\t\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\t\tself.latestX = self.startX;\n\t\tself.startWidth = column.getWidth();\n\t\t\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeColumns.moduleName = \"resizeColumns\";\n\nexport default ResizeColumns;","import Module from '../../core/Module.js';\n\nclass ResizeRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.startColumn = false;\n\t\tthis.startY = false;\n\t\tthis.startHeight = false;\n\t\tthis.handle = null;\n\t\tthis.prevHandle = null;\n\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.resizableRows){\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\trowEl = row.getElement();\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-row-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function(e){\n\t\t\tself.startRow = row;\n\t\t\tself._mouseDown(e, row, handle);\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\n\t\tprevHandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function(e){\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\t\tif(prevRow){\n\t\t\t\tself.startRow = prevRow;\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\n\n\t\trowEl.appendChild(handle);\n\t\trowEl.appendChild(prevHandle);\n\t}\n\n\t_mouseDown(e, row, handle){\n\t\tvar self = this;\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e){\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t\t}\n\n\t\tfunction mouseUp(e){\n\n\t\t\t// //block editor from taking action while resizing is taking place\n\t\t\t// if(self.startColumn.modules.edit){\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t\t// }\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\n\t\t}\n\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\n\t\t//block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = true;\n\t\t// }\n\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\t\tself.startHeight = row.getHeight();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeRows.moduleName = \"resizeRows\";\n\nexport default ResizeRows;","import Module from '../../core/Module.js';\n\nclass ResizeTable extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.binding = false;\n\t\tthis.visibilityObserver = false;\n\t\tthis.resizeObserver = false;\n\t\tthis.containerObserver = false;\n\t\t\n\t\tthis.tableHeight = 0;\n\t\tthis.tableWidth = 0;\n\t\tthis.containerHeight = 0;\n\t\tthis.containerWidth = 0;\n\t\t\n\t\tthis.autoResize = false;\n\t\t\n\t\tthis.visible = false;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.initialRedraw = false;\n\t\t\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.autoResize){\n\t\t\tvar table = this.table,\n\t\t\ttableStyle;\n\t\t\t\n\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\n\t\t\tif(table.element.parentNode){\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\n\t\t\t\t\n\t\t\t\tthis.initializeVisibilityObserver();\n\t\t\t\t\n\t\t\t\tthis.autoResize = true;\n\t\t\t\t\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(table.element.parentNode){\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.resizeObserver.observe(table.element);\n\t\t\t\t\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\n\t\t\t\t\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.binding = function(){\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t\t}\n\t}\n\t\n\tinitializeVisibilityObserver(){\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\n\t\t\tthis.visible = entries[0].isIntersecting;\n\t\t\t\n\t\t\tif(!this.initialized){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.initialRedraw = !this.visible;\n\t\t\t}else{\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.redrawTable(this.initialRedraw);\n\t\t\t\t\tthis.initialRedraw = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.visibilityObserver.observe(this.table.element);\n\t}\n\t\n\tredrawTable(force){\n\t\tif(this.initialized && this.visible){\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\t\t\tthis.table.redraw(force);\n\t\t}\n\t}\n\t\n\ttableResized(){\n\t\tthis.table.rowManager.redraw();\n\t}\n\t\n\tclearBindings(){\n\t\tif(this.binding){\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\n\t\t}\n\t\t\n\t\tif(this.resizeObserver){\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.visibilityObserver){\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.containerObserver){\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t\t}\n\t}\n}\n\nResizeTable.moduleName = \"resizeTable\";\n\nexport default ResizeTable;","import Module from '../../core/Module.js';\n\nclass ResponsiveLayout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.columns = [];\n\t\tthis.hiddenColumns = [];\n\t\tthis.mode = \"\";\n\t\tthis.index = 0;\n\t\tthis.collapseFormatter = [];\n\t\tthis.collapseStartOpen = true;\n\t\tthis.collapseHandleColumn = false;\n\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\n\n\t\tthis.registerColumnOption(\"responsive\");\n\t}\n\n\t//generate responsive columns list\n\tinitialize(){\n\t\tif(this.table.options.responsiveLayout){\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\n\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.generateCollapsedRowContent.bind(this));\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\ttableRedraw(force){\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\n\t\t\tif(!force){\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeResponsivity(){\n\t\tvar columns = [];\n\n\t\tthis.mode = this.table.options.responsiveLayout;\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\t\tthis.hiddenColumns = [];\n\n\t\t//determine level of responsivity for each column\n\t\tthis.table.columnManager.columnsByIndex.forEach((column, i) => {\n\t\t\tif(column.modules.responsive){\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\n\t\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\t\tcolumns.push(column);\n\n\t\t\t\t\tif(!column.visible && this.mode === \"collapse\"){\n\t\t\t\t\t\tthis.hiddenColumns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//sort list by responsivity\n\t\tcolumns = columns.reverse();\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\n\t\t});\n\n\t\tthis.columns = columns;\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.generateCollapsedContent();\n\t\t}\n\n\t\t//assign collapse column\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\n\t\t\t\tthis.collapseHandleColumn = col;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif(this.collapseHandleColumn){\n\t\t\tif(this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}else{\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//define layout information\n\tinitializeColumn(column){\n\t\tvar def = column.getDefinition();\n\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\n\t}\n\n\tinitializeRow(row){\n\t\tvar el;\n\n\t\tif(row.type !== \"calc\"){\n\t\t\tel = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\t\trow.modules.responsiveLayout = {\n\t\t\t\telement:el,\n\t\t\t\topen:this.collapseStartOpen,\n\t\t\t};\n\n\t\t\tif(!this.collapseStartOpen){\n\t\t\t\tel.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tlayoutRow(row){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t}\n\t}\n\n\t//update column visibility\n\tupdateColumnVisibility(column, responsiveToggle){\n\t\tif(!responsiveToggle && column.modules.responsive){\n\t\t\tcolumn.modules.responsive.visible = column.visible;\n\t\t\tthis.initializeResponsivity();\n\t\t}\n\t}\n\n\thideColumn(column){\n\t\tvar colCount = this.hiddenColumns.length;\n\n\t\tcolumn.hide(false, true);\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.hiddenColumns.unshift(column);\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !colCount){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tshowColumn(column){\n\t\tvar index;\n\n\t\tcolumn.show(false, true);\n\t\t//set column width to prevent calculation loops on uninitialized columns\n\t\tcolumn.setWidth(column.getWidth());\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t\t}\n\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//redraw columns to fit space\n\tupdate(){\n\t\tvar working = true;\n\n\t\twhile(working){\n\n\t\t\tlet width = this.table.modules.layout.getMode() == \"fitColumns\" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth();\n\n\t\t\tlet diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width;\n\n\t\t\tif(diff < 0){\n\t\t\t\t//table is too wide\n\t\t\t\tlet column = this.columns[this.index];\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.hideColumn(column);\n\t\t\t\t\tthis.index ++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\t//table has spare space\n\t\t\t\tlet column = this.columns[this.index -1];\n\n\t\t\t\tif(column){\n\t\t\t\t\tif(diff > 0){\n\t\t\t\t\t\tif(diff >= column.getWidth()){\n\t\t\t\t\t\t\tthis.showColumn(column);\n\t\t\t\t\t\t\tthis.index --;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tworking = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!this.table.rowManager.activeRowsCount){\n\t\t\t\tthis.table.rowManager.renderEmptyScroll();\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedContent(){\n\t\tvar rows = this.table.rowManager.getDisplayRows();\n\n\t\trows.forEach((row) => {\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t});\n\t}\n\n\tgenerateCollapsedRowContent(row){\n\t\tvar el, contents;\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\tel = row.modules.responsiveLayout.element;\n\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\n\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\t\tif(contents){\n\t\t\t\tel.appendChild(contents);\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedRowData(row){\n\t\tvar data = row.getData(),\n\t\toutput = [],\n\t\tmockCellComponent;\n\n\t\tthis.hiddenColumns.forEach((column) => {\n\t\t\tvar value = column.getFieldValue(data);\n\n\t\t\tif(column.definition.title && column.field){\n\t\t\t\tif(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){\n\n\t\t\t\t\tmockCellComponent = {\n\t\t\t\t\t\tvalue:false,\n\t\t\t\t\t\tdata:{},\n\t\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\tfunction onRendered(callback){\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tformatCollapsedData(data){\n\t\tvar list = document.createElement(\"table\");\n\n\t\tdata.forEach(function(item){\n\t\t\tvar row = document.createElement(\"tr\");\n\t\t\tvar titleData = document.createElement(\"td\");\n\t\t\tvar valueData = document.createElement(\"td\");\n\t\t\tvar node_content;\n\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\t\ttitleData.appendChild(titleHighlight);\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\n\t\t\t\ttitleHighlight.innerHTML = text || item.title;\n\t\t\t});\n\n\t\t\tif(item.value instanceof Node){\n\t\t\t\tnode_content = document.createElement(\"div\");\n\t\t\t\tnode_content.appendChild(item.value);\n\t\t\t\tvalueData.appendChild(node_content);\n\t\t\t}else{\n\t\t\t\tvalueData.innerHTML = item.value;\n\t\t\t}\n\n\t\t\trow.appendChild(titleData);\n\t\t\trow.appendChild(valueData);\n\t\t\tlist.appendChild(row);\n\t\t}, this);\n\n\t\treturn Object.keys(data).length ? list : \"\";\n\t}\n}\n\nResponsiveLayout.moduleName = \"responsiveLayout\";\n\nexport default ResponsiveLayout;\n","import Module from '../../core/Module.js';\n\nclass SelectRow extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = false; //flag selecting in progress\n\t\tthis.lastClickedRow = false; //last clicked row\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\t\tthis.selectedRows = []; //hold selected rows\n\t\tthis.headerCheckboxElement = null; // hold header select element\n\t\t\n\t\tthis.registerTableOption(\"selectableRows\", \"highlight\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRangeMode\", \"drag\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\n\t\tthis.registerTableOption(\"selectableRowsPersistence\", true); // maintain selection when table view is updated\n\t\tthis.registerTableOption(\"selectableRowsCheck\", function(data, row){return true;}); //check whether row is selectable\n\t\t\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\n\t}\n\t\n\tinitialize(){\n\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tif(this.table.options.selectableRows === \"highlight\" && this.table.options.selectableRange){\n\t\t\tthis.table.options.selectableRows = false;\n\t\t}\n\n\t\tif(this.table.options.selectableRows !== false){\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"selectable\", \"selectableRows\", true);\n\t\tthis.deprecationCheck(\"selectableRollingSelection\", \"selectableRowsRollingSelection\", true);\n\t\tthis.deprecationCheck(\"selectableRangeMode\", \"selectableRowsRangeMode\", true);\n\t\tthis.deprecationCheck(\"selectablePersistence\", \"selectableRowsPersistence\", true);\n\t\tthis.deprecationCheck(\"selectableCheck\", \"selectableRowsCheck\", true);\n\t}\n\t\n\trowRetrieve(type, prevValue){\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\n\t}\n\t\n\trowDeleted(row){\n\t\tthis._deselectRow(row, true);\n\t}\n\t\n\tclearSelectionData(silent){\n\t\tvar prevSelected = this.selectedRows.length;\n\n\t\tthis.selecting = false;\n\t\tthis.lastClickedRow = false;\n\t\tthis.selectPrev = [];\n\t\tthis.selectedRows = [];\n\t\t\n\t\tif(prevSelected && silent !== true){\n\t\t\tthis._rowSelectionChanged();\n\t\t}\n\t}\n\t\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tselectable = self.checkRowSelectability(row),\n\t\telement = row.getElement();\n\t\t\n\t\t// trigger end of row selection\n\t\tvar endSelect = function(){\n\t\t\t\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.selecting = false;\n\t\t\t}, 50);\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t\t};\n\t\t\n\t\trow.modules.select = {selected:false};\n\n\t\telement.classList.toggle(\"tabulator-selectable\", selectable);\n\t\telement.classList.toggle(\"tabulator-unselectable\", !selectable);\n\t\t\n\t\t//set row selection class\n\t\tif(self.checkRowSelectability(row)){\t\t\t\n\t\t\tif(self.table.options.selectableRows && self.table.options.selectableRows != \"highlight\"){\n\t\t\t\tif(self.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\n\t\t\t\t}else{\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!self.selecting){\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\t\t\tif(e.shiftKey){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selecting = true;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selectPrev = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\thandleComplexRowClick(row, e){\n\t\tif(e.shiftKey){\n\t\t\tthis.table._clearSelection();\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\n\t\t\t\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\n\t\t\t\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\t\t\t\n\t\t\tif(e.ctrlKey || e.metaKey){\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.options.selectableRows !== true && !this.isRowSelected(row)){\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectableRows){\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.lastClickedRow = row;\n\t\t\t}else{\n\t\t\t\tthis.deselectRows(undefined, true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.selectableRows !== true){\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectableRows){\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectableRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectRows(toggledRows);\n\t\t\t}\n\t\t\tthis.table._clearSelection();\n\t\t}\n\t\telse if(e.ctrlKey || e.metaKey){\n\t\t\tthis.toggleRow(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}else{\n\t\t\tthis.deselectRows(undefined, true);\n\t\t\tthis.selectRows(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}\n\t}\n\n\tcheckRowSelectability(row){\n\t\tif(row && row.type === \"row\"){\n\t\t\treturn this.table.options.selectableRowsCheck.call(this.table, row.getComponent());\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\t//toggle row selection\n\ttoggleRow(row){\n\t\tif(this.checkRowSelectability(row)){\n\t\t\tif(row.modules.select && row.modules.select.selected){\n\t\t\t\tthis._deselectRow(row);\n\t\t\t}else{\n\t\t\t\tthis._selectRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//select a number of rows\n\tselectRows(rows){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._selectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(false, changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._selectRow(rowMatch, false, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//select an individual row\n\t_selectRow(rowInfo, silent, force){\n\t\t//handle max row count\n\t\tif(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){\n\t\t\tif(this.selectedRows.length >= this.table.options.selectableRows){\n\t\t\t\tif(this.table.options.selectableRowsRollingSelection){\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t\t}else{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\n\t\t\n\t\tif(row){\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = true;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tthis._rowSelectionChanged(silent, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisRowSelected(row){\n\t\treturn this.selectedRows.indexOf(row) !== -1;\n\t}\n\t\n\t//deselect a number of rows\n\tdeselectRows(rows, silent){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = Object.assign([], this.selectedRows);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._deselectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(silent, [], changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._deselectRow(rowMatch, silent, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//deselect an individual row\n\t_deselectRow(rowInfo, silent){\n\t\tvar self = this,\n\t\trow = self.table.rowManager.findRow(rowInfo),\n\t\tindex, element;\n\t\t\n\t\tif(row){\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\n\t\t\t\treturn selectedRow == row;\n\t\t\t});\n\t\t\t\n\t\t\tif(index > -1){\n\n\t\t\t\telement = row.getElement();\n\t\t\t\t\n\t\t\t\tif(element){\n\t\t\t\t\telement.classList.remove(\"tabulator-selected\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = false;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t\t}\n\t\t\t\tself.selectedRows.splice(index, 1);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tself._rowSelectionChanged(silent, undefined, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetSelectedData(){\n\t\tvar data = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetSelectedRows(){\n\t\tvar rows = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\trows.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t_rowSelectionChanged(silent, selected = [], deselected = []){\n\t\tif(this.headerCheckboxElement){\n\t\t\tif(this.selectedRows.length === 0){\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\n\t\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else {\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(!silent){\n\t\t\tif(!Array.isArray(selected)){\n\t\t\t\tselected = [selected];\n\t\t\t}\n\n\t\t\tselected = selected.map(row => row.getComponent());\n\n\t\t\tif(!Array.isArray(deselected)){\n\t\t\t\tdeselected = [deselected];\n\t\t\t}\n\n\t\t\tdeselected = deselected.map(row => row.getComponent());\n\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows(), selected, deselected);\n\t\t}\n\t}\n\t\n\tregisterRowSelectCheckbox (row, element) {\n\t\tif(!row._row.modules.select){\n\t\t\trow._row.modules.select = {};\n\t\t}\n\t\t\n\t\trow._row.modules.select.checkboxEl = element;\n\t}\n\t\n\tregisterHeaderSelectCheckbox (element) {\n\t\tthis.headerCheckboxElement = element;\n\t}\n\t\n\tchildRowSelection(row, select){\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\t\t\n\t\tif(select){\n\t\t\tfor(let child of children){\n\t\t\t\tthis._selectRow(child, true);\n\t\t\t}\n\t\t}else{\n\t\t\tfor(let child of children){\n\t\t\t\tthis._deselectRow(child, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nSelectRow.moduleName = \"selectRow\";\n\nexport default SelectRow;","//sort numbers\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar decimal = params.decimalSeparator;\n\tvar thousand = params.thousandSeparator;\n\tvar emptyAlign = 0;\n\n\ta = String(a);\n\tb = String(b);\n\n\tif(thousand){\n\t\ta = a.split(thousand).join(\"\");\n\t\tb = b.split(thousand).join(\"\");\n\t}\n\n\tif(decimal){\n\t\ta = a.split(decimal).join(\".\");\n\t\tb = b.split(decimal).join(\".\");\n\t}\n\n\ta = parseFloat(a);\n\tb = parseFloat(b);\n\n\t//handle non numeric values\n\tif(isNaN(a)){\n\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t}else if(isNaN(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\treturn a - b;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort strings\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\tvar locale;\n\n\t//handle empty values\n\tif(!a){\n\t\temptyAlign = !b ? 0 : -1;\n\t}else if(!b){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\tswitch(typeof params.locale){\n\t\t\tcase \"boolean\":\n\t\t\t\tif(params.locale){\n\t\t\t\t\tlocale = this.langLocale();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"string\":\n\t\t\t\tlocale = params.locale;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort datetime\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tif(typeof DT != \"undefined\"){\n\t\tif(!DT.isDateTime(a)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\ta = DT.fromISO(String(a));\n\t\t\t}else{\n\t\t\t\ta = DT.fromFormat(String(a), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!DT.isDateTime(b)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\tb = DT.fromISO(String(b));\n\t\t\t}else{\n\t\t\t\tb = DT.fromFormat(String(b), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!a.isValid){\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\n\t\t}else if(!b.isValid){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\t//compare valid values\n\t\t\treturn a - b;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\n\t}else{\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\n\t}\n}","import datetime from './datetime.js';\n\n//sort date\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"dd/MM/yyyy\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","import datetime from './datetime.js';\n\n//sort times\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"HH:mm\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","//sort booleans\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\treturn el1 - el2;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar type = params.type || \"length\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tfunction calc(value){\n\t\tvar result;\n\n\t\tswitch(type){\n\t\t\tcase \"length\":\n\t\t\t\tresult = value.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"sum\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"max\":\n\t\t\t\tresult = Math.max.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"min\":\n\t\t\t\tresult = Math.min.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"avg\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t}) / value.length;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t//handle non array values\n\tif(!Array.isArray(a)){\n\t\temptyAlign = !Array.isArray(b) ? 0 : -1;\n\t}else if(!Array.isArray(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\treturn calc(b) - calc(a);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\treturn el1 - el2;\n}","//sort alpha numeric strings\nexport default function(as, bs, aRow, bRow, column, dir, params){\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\n\t//handle empty values\n\tif(!as && as!== 0){\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t}else if(!bs && bs!== 0){\n\t\temptyAlign = 1;\n\t}else{\n\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\ta = String(as).toLowerCase();\n\t\tb = String(bs).toLowerCase();\n\t\tif(a === b) return 0;\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\ta = a.match(rx);\n\t\tb = b.match(rx);\n\t\tL = a.length > b.length ? b.length : a.length;\n\t\twhile(i < L){\n\t\t\ta1= a[i];\n\t\t\tb1= b[i++];\n\t\t\tif(a1 !== b1){\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\treturn a1 - b1;\n\t\t\t\t}\n\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t}\n\t\t}\n\n\t\treturn a.length > b.length;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import number from './sorters/number.js';\nimport string from './sorters/string.js';\nimport date from './sorters/date.js';\nimport time from './sorters/time.js';\nimport datetime from './sorters/datetime.js';\nimport boolean from './sorters/boolean.js';\nimport array from './sorters/array.js';\nimport exists from './sorters/exists.js';\nimport alphanum from './sorters/alphanum.js';\n\nexport default {\n\tnumber:number,\n\tstring:string,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tboolean:boolean,\n\tarray:array,\n\texists:exists,\n\talphanum:alphanum\n};","import Module from '../../core/Module.js';\n\nimport defaultSorters from './defaults/sorters.js';\n\nclass Sort extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\t\t\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\n\t\t\n\t\tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\n\t\tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\n\t\tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\n\t\tthis.registerTableOption(\"headerSortElement\", \"
    \"); //header sort element\n\t\tthis.registerTableOption(\"headerSortClickElement\", \"header\"); //element which triggers sort when clicked\n\t\t\n\t\tthis.registerColumnOption(\"sorter\");\n\t\tthis.registerColumnOption(\"sorterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"headerSort\", true);\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\n\t\tthis.registerColumnOption(\"headerSortTristate\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.registerDataHandler(this.sort.bind(this), 20);\n\t\t\n\t\tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\n\t\tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\n\t\tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\n\t\t\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\n\t\t}\n\t}\n\t\n\ttableBuilt(){\n\t\tif(this.table.options.initialSort){\n\t\t\tthis.setSort(this.table.options.initialSort);\n\t\t}\n\t}\n\t\n\tremoteSortParams(data, config, silent, params){\n\t\tvar sorters = this.getSort();\n\t\t\n\t\tsorters.forEach((item) => {\n\t\t\tdelete item.column;\n\t\t});\n\t\t\n\t\tparams.sort = sorters;\n\t\t\n\t\treturn params;\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetSort(sortList, dir){\n\t\tthis.setSort(sortList, dir);\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\tclearSort(){\n\t\tthis.clear();\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\t//initialize column header for sorting\n\tinitializeColumn(column){\n\t\tvar sorter = false,\n\t\tcolEl,\n\t\tarrowEl;\n\t\t\n\t\tswitch(typeof column.definition.sorter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Sort.sorters[column.definition.sorter]){\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tcolumn.modules.sort = {\n\t\t\tsorter:sorter, dir:\"none\",\n\t\t\tparams:column.definition.sorterParams || {},\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\n\t\t\ttristate: column.definition.headerSortTristate,\n\t\t};\n\t\t\n\t\tif(column.definition.headerSort !== false){\n\t\t\t\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\t\t\t\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortClickElement){\n\t\t\t\tcase \"icon\":\n\t\t\t\t\tarrowEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"header\":\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortElement){\n\t\t\t\tcase \"function\":\n\t\t\t\t//do nothing\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"object\":\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t\t}\n\t\t\t\n\t\t\t//create sorter arrow\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\n\t\t\t\n\t\t\tcolumn.modules.sort.element = arrowEl;\n\t\t\t\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t\n\t\t\tif(this.table.options.headerSortClickElement === \"icon\"){\n\t\t\t\tarrowEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//sort on click\n\t\t\t(this.table.options.headerSortClickElement === \"icon\" ? arrowEl : colEl).addEventListener(\"click\", (e) => {\n\t\t\t\tvar dir = \"\",\n\t\t\t\tsorters=[],\n\t\t\t\tmatch = false;\n\t\t\t\t\n\t\t\t\tif(column.modules.sort){\n\t\t\t\t\tif(column.modules.sort.tristate){\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\n\t\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = this.getSort();\n\t\t\t\t\t\t\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(match > -1){\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//add to existing sort\n\t\t\t\t\t\tthis.setSort(sorters);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(dir == \"none\"){\n\t\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\t\tthis.setSort(column, dir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\n\t\t\t\t\tthis.refreshSort();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trefreshSort(){\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.reloadData(null, false, false);\n\t\t}else{\n\t\t\tthis.refreshData(true);\n\t\t}\n\t\t\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\t\n\t//check if the sorters have changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\t\n\t//return current sorters\n\tgetSort(){\n\t\tvar self = this,\n\t\tsorters = [];\n\t\t\n\t\tself.sortList.forEach(function(item){\n\t\t\tif(item.column){\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn sorters;\n\t}\n\t\n\t//change sort list and trigger sort\n\tsetSort(sortList, dir){\n\t\tvar self = this,\n\t\tnewSortList = [];\n\t\t\n\t\tif(!Array.isArray(sortList)){\n\t\t\tsortList = [{column: sortList, dir:dir}];\n\t\t}\n\t\t\n\t\tsortList.forEach(function(item){\n\t\t\tvar column;\n\t\t\t\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\titem.column = column;\n\t\t\t\tnewSortList.push(item);\n\t\t\t\tself.changed = true;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tself.sortList = newSortList;\n\t\t\n\t\tthis.dispatch(\"sort-changed\");\n\t}\n\t\n\t//clear sorters\n\tclear(){\n\t\tthis.setSort([]);\n\t}\n\t\n\t//find appropriate sorter for column\n\tfindSorter(column){\n\t\tvar row = this.table.rowManager.activeRows[0],\n\t\tsorter = \"string\",\n\t\tfield, value;\n\t\t\n\t\tif(row){\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\t\t\t\n\t\t\tif(field){\n\t\t\t\t\n\t\t\t\tvalue = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Sort.sorters[sorter];\n\t}\n\t\n\t//work through sort list sorting data\n\tsort(data){\n\t\tvar self = this,\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t\tsortListActual = [],\n\t\trowComponents = [];\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorting\")){\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\n\t\t}\n\t\t\n\t\tself.clearColumnHeaders();\n\t\t\n\t\tif(this.table.options.sortMode !== \"remote\"){\n\t\t\t\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tvar sortObj;\n\t\t\t\t\n\t\t\t\tif(item.column){\n\t\t\t\t\tsortObj = item.column.modules.sort;\n\t\t\t\t\t\n\t\t\t\t\tif(sortObj){\n\t\t\t\t\t\t\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\t\t\tif(!sortObj.sorter){\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\t\t\t\t\t\t\n\t\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//sort data\n\t\t\tif (sortListActual.length) {\n\t\t\t\tself._sortItems(data, sortListActual);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorted\")){\n\t\t\tdata.forEach((row) => {\n\t\t\t\trowComponents.push(row.getComponent());\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//clear sort arrows on columns\n\tclearColumnHeaders(){\n\t\tthis.table.columnManager.getRealColumns().forEach((column) => {\n\t\t\tif(column.modules.sort){\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//set the column header sort direction\n\tsetColumnHeader(column, dir){\n\t\tcolumn.modules.sort.dir = dir;\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir === \"asc\" ? \"ascending\" : \"descending\");\n\t\tthis.setColumnHeaderSortIcon(column, dir);\n\t}\n\t\n\tsetColumnHeaderSortIcon(column, dir){\n\t\tvar sortEl = column.modules.sort.element,\n\t\tarrowEl;\n\t\t\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\n\t\t\t\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\n\t\t\t\n\t\t\tif(typeof arrowEl === \"object\"){\n\t\t\t\tsortEl.appendChild(arrowEl);\n\t\t\t}else{\n\t\t\t\tsortEl.innerHTML = arrowEl;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//sort each item in sort list\n\t_sortItems(data, sortList){\n\t\tvar sorterCount = sortList.length - 1;\n\t\t\n\t\tdata.sort((a, b) => {\n\t\t\tvar result;\n\t\t\t\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\n\t\t\t\tlet sortItem = sortList[i];\n\t\t\t\t\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\t\t\t\t\n\t\t\t\tif(result !== 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\t\t});\n\t}\n\t\n\t//process individual rows for a sort function on active data\n\t_sortRow(a, b, column, dir, params){\n\t\tvar el1Comp, el2Comp;\n\t\t\n\t\t//switch elements depending on search direction\n\t\tvar el1 = dir == \"asc\" ? a : b;\n\t\tvar el2 = dir == \"asc\" ? b : a;\n\t\t\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\t\t\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\t\t\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\t\t\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n\t}\n}\n\nSort.moduleName = \"sort\";\n\n//load defaults\nSort.sorters = defaultSorters;\n\nexport default Sort;\n","class RangeComponent {\n\tconstructor(range) {\n\t\tthis._range = range;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function (target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t} else {\n\t\t\t\t\treturn target._range.table.componentFunctionBinder.handle(\"range\", target._range, name);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tgetElement() {\n\t\treturn this._range.element;\n\t}\n\n\tgetData() {\n\t\treturn this._range.getData();\n\t}\n\n\tgetCells() {\n\t\treturn this._range.getCells(true);\n\t}\n\n\tgetStructuredCells() {\n\t\treturn this._range.getStructuredCells();\n\t}\n\n\tgetRows() {\n\t\treturn this._range.getRows().map((row) => row.getComponent());\n\t}\n\n\tgetColumns() {\n\t\treturn this._range.getColumns().map((column) => column.getComponent());\n\t}\n\t\n\tgetBounds() {\n\t\treturn this._range.getBounds();\n\t}\n\n\tgetTopEdge() {\n\t\treturn this._range.top;\n\t}\n\n\tgetBottomEdge() {\n\t\treturn this._range.bottom;\n\t}\n\n\tgetLeftEdge() {\n\t\treturn this._range.left;\n\t}\n\n\tgetRightEdge() {\n\t\treturn this._range.right;\n\t}\n\n\tsetBounds(start, end){\n\t\tif(this._range.destroyedGuard(\"setBounds\")){\n\t\t\tthis._range.setBounds(start ? start._cell : start, end ? end._cell : end);\n\t\t}\n\t}\n\n\tsetStartBound(start){\n\t\tif(this._range.destroyedGuard(\"setStartBound\")){\n\t\t\tthis._range.setEndBound(start ? start._cell : start);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tsetEndBound(end){\n\t\tif(this._range.destroyedGuard(\"setEndBound\")){\n\t\t\tthis._range.setEndBound(end ? end._cell : end);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tclearValues(){\n\t\tif(this._range.destroyedGuard(\"clearValues\")){\n\t\t\tthis._range.clearValues();\n\t\t}\n\t}\n\n\tremove(){\n\t\tif(this._range.destroyedGuard(\"remove\")){\n\t\t\tthis._range.destroy(true);\n\t\t}\n\t}\n}\n\nexport default RangeComponent;\n","import CoreFeature from '../../core/CoreFeature.js';\nimport RangeComponent from \"./RangeComponent\";\n\nclass Range extends CoreFeature{\n\tconstructor(table, rangeManager, start, end) {\n\t\tsuper(table);\n\t\t\n\t\tthis.rangeManager = rangeManager;\n\t\tthis.element = null;\n\t\tthis.initialized = false;\n\t\tthis.initializing = {\n\t\t\tstart:false,\n\t\t\tend:false,\n\t\t};\n\t\tthis.destroyed = false;\n\t\t\n\t\tthis.top = 0;\n\t\tthis.bottom = 0;\n\t\tthis.left = 0;\n\t\tthis.right = 0;\n\t\t\n\t\tthis.table = table;\n\t\tthis.start = {row:0, col:0};\n\t\tthis.end = {row:0, col:0};\n\n\t\tif(this.rangeManager.rowHeader){\n\t\t\tthis.left = 1;\n\t\t\tthis.right = 1;\n\t\t\tthis.start.col = 1;\n\t\t\tthis.end.col = 1;\n\t\t}\n\t\t\n\t\tthis.initElement();\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.initBounds(start, end);\n\t\t});\n\t}\n\t\n\tinitElement(){\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-range\");\n\t}\n\t\n\tinitBounds(start, end){\n\t\tthis._updateMinMax();\n\t\t\n\t\tif(start){\n\t\t\tthis.setBounds(start, end || start);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Boundary Setup ///////\n\t///////////////////////////////////\n\t\n\tsetStart(row, col) {\n\t\tif(this.start.row !== row || this.start.col !== col){\n\t\t\tthis.start.row = row;\n\t\t\tthis.start.col = col;\n\t\t\t\n\t\t\tthis.initializing.start = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetEnd(row, col) {\n\t\tif(this.end.row !== row || this.end.col !== col){\n\t\t\tthis.end.row = row;\n\t\t\tthis.end.col = col;\n\t\t\t\n\t\t\tthis.initializing.end = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetBounds(start, end, visibleRows){\n\t\tif(start){\n\t\t\tthis.setStartBound(start);\n\t\t}\n\t\t\n\t\tthis.setEndBound(end || start);\n\t\tthis.rangeManager.layoutElement(visibleRows);\n\t}\n\t\n\tsetStartBound(element){\n\t\tvar row, col;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tthis.setStart(0, element.getPosition() - 1);\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\t\n\t\t\tif (element.column === this.rangeManager.rowHeader) {\n\t\t\t\tthis.setStart(row, 1);\n\t\t\t} else {\n\t\t\t\tthis.setStart(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tsetEndBound(element){\n\t\tvar rowsCount = this._getTableRows().length,\n\t\trow, col, isRowHeader;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tif (this.rangeManager.selecting === \"column\") {\n\t\t\t\t\tthis.setEnd(rowsCount - 1, element.getPosition() - 1);\n\t\t\t\t} else if (this.rangeManager.selecting === \"cell\") {\n\t\t\t\t\tthis.setEnd(0, element.getPosition() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\tisRowHeader = element.column === this.rangeManager.rowHeader;\n\t\t\t\n\t\t\tif (this.rangeManager.selecting === \"row\") {\n\t\t\t\tthis.setEnd(row, this._getTableColumns().length - 1);\n\t\t\t} else if (this.rangeManager.selecting !== \"row\" && isRowHeader) {\n\t\t\t\tthis.setEnd(row, 0);\n\t\t\t} else if (this.rangeManager.selecting === \"column\") {\n\t\t\t\tthis.setEnd(rowsCount - 1, col);\n\t\t\t} else {\n\t\t\t\tthis.setEnd(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_updateMinMax() {\n\t\tthis.top = Math.min(this.start.row, this.end.row);\n\t\tthis.bottom = Math.max(this.start.row, this.end.row);\n\t\tthis.left = Math.min(this.start.col, this.end.col);\n\t\tthis.right = Math.max(this.start.col, this.end.col);\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeChanged\", this.getComponent());\n\t\t}else{\n\t\t\tif(this.initializing.start && this.initializing.end){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.dispatchExternal(\"rangeAdded\", this.getComponent());\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_getTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\t_getTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Rendering ///////\n\t///////////////////////////////////\n\t\n\tlayout() {\n\t\tvar _vDomTop = this.table.rowManager.renderer.vDomTop,\n\t\t_vDomBottom = this.table.rowManager.renderer.vDomBottom,\n\t\t_vDomLeft = this.table.columnManager.renderer.leftCol,\n\t\t_vDomRight = this.table.columnManager.renderer.rightCol,\t\t\n\t\ttop, bottom, left, right, topLeftCell, bottomRightCell;\n\t\t\n\t\tif (_vDomTop == null) {\n\t\t\t_vDomTop = 0;\n\t\t}\n\t\t\n\t\tif (_vDomBottom == null) {\n\t\t\t_vDomBottom = Infinity;\n\t\t}\n\t\t\n\t\tif (_vDomLeft == null) {\n\t\t\t_vDomLeft = 0;\n\t\t}\n\t\t\n\t\tif (_vDomRight == null) {\n\t\t\t_vDomRight = Infinity;\n\t\t}\n\t\t\n\t\tif (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) {\n\t\t\ttop = Math.max(this.top, _vDomTop);\n\t\t\tbottom = Math.min(this.bottom, _vDomBottom);\n\t\t\tleft = Math.max(this.left, _vDomLeft);\n\t\t\tright = Math.min(this.right, _vDomRight);\n\t\t\t\n\t\t\ttopLeftCell = this.rangeManager.getCell(top, left);\n\t\t\tbottomRightCell = this.rangeManager.getCell(bottom, right);\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-range-active\");\n\t\t\t// this.element.classList.toggle(\"tabulator-range-active\", this === this.rangeManager.activeRange);\n\t\t\t\n\t\t\tthis.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.top = topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t\tthis.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t}\n\t}\n\t\n\tatTopLeft(cell) {\n\t\treturn cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left;\n\t}\n\t\n\tatBottomRight(cell) {\n\t\treturn cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right;\n\t}\n\t\n\toccupies(cell) {\n\t\treturn this.occupiesRow(cell.row) && this.occupiesColumn(cell.column);\n\t}\n\t\n\toccupiesRow(row) {\n\t\treturn this.top <= row.position - 1 && row.position - 1 <= this.bottom;\n\t}\n\t\n\toccupiesColumn(col) {\n\t\treturn this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right;\n\t}\n\t\n\toverlaps(left, top, right, bottom) {\n\t\tif ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tgetData() {\n\t\tvar data = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tvar rowData = row.getData(),\n\t\t\tresult = {};\n\t\t\t\n\t\t\tcolumns.forEach((column) => {\n\t\t\t\tresult[column.field] = rowData[column.field];\n\t\t\t});\n\t\t\t\n\t\t\tdata.push(result);\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetCells(structured, component) {\n\t\tvar cells = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\tif (structured) {\n\t\t\tcells = rows.map((row) => {\n\t\t\t\tvar arr = [];\n\t\t\t\t\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tarr.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn arr;\n\t\t\t});\n\t\t} else {\n\t\t\trows.forEach((row) => {\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tcells.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn cells;\n\t}\n\t\n\tgetStructuredCells() {\n\t\treturn this.getCells(true, true);\n\t}\n\t\n\tgetRows() {\n\t\treturn this._getTableRows().slice(this.top, this.bottom + 1);\n\t}\n\t\n\tgetColumns() {\n\t\treturn this._getTableColumns().slice(this.left, this.right + 1);\n\t}\n\t\n\tclearValues(){\n\t\tvar cells = this.getCells();\n\t\tvar clearValue = this.table.options.selectableRangeClearCellsValue;\n\t\t\n\t\tthis.table.blockRedraw();\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tcell.setValue(clearValue);\n\t\t});\n\t\t\n\t\tthis.table.restoreRedraw();\n\t\t\n\t}\n\t\n\tgetBounds(component){\n\t\tvar cells = this.getCells(false, component),\n\t\toutput = {\n\t\t\tstart:null,\n\t\t\tend:null,\n\t\t};\n\t\t\n\t\tif(cells.length){\n\t\t\toutput.start = cells[0];\n\t\t\toutput.end = cells[cells.length - 1];\n\t\t}else{\n\t\t\tconsole.warn(\"No bounds defined on range\");\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponent() {\n\t\tif (!this.component) {\n\t\t\tthis.component = new RangeComponent(this);\n\t\t}\n\t\treturn this.component;\n\t}\n\t\n\tdestroy(notify) {\n\t\tthis.destroyed = true;\n\t\t\n\t\tthis.element.remove();\n\t\t\n\t\tif(notify){\n\t\t\tthis.rangeManager.rangeRemoved(this);\n\t\t}\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeRemoved\", this.getComponent());\n\t\t}\n\t}\n\t\n\tdestroyedGuard(func){\n\t\tif(this.destroyed){\n\t\t\tconsole.warn(\"You cannot call the \" + func + \" function on a destroyed range\");\n\t\t}\n\t\t\n\t\treturn !this.destroyed;\n\t}\n}\n\nexport default Range;\n","import Module from \"../../core/Module.js\";\nimport Range from \"./Range.js\";\n\nclass SelectRange extends Module {\n\tconstructor(table) {\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = \"cell\";\n\t\tthis.mousedown = false;\n\t\tthis.ranges = [];\n\t\tthis.overlay = null;\n\t\tthis.rowHeader = null;\n\t\tthis.layoutChangeTimeout = null;\n\t\tthis.columnSelection = false;\n\t\tthis.rowSelection = false;\n\t\tthis.maxRanges = 0;\n\t\tthis.activeRange = false;\n\t\tthis.blockKeydown = false;\n\t\t\n\t\tthis.keyDownEvent = this._handleKeyDown.bind(this);\n\t\tthis.mouseUpEvent = this._handleMouseUp.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"selectableRange\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeColumns\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeRows\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeClearCells\", false); //allow clearing of active range\n\t\tthis.registerTableOption(\"selectableRangeClearCellsValue\", undefined); //value for cleared active range\n\n\t\tthis.registerTableFunction(\"getRangesData\", this.getRangesData.bind(this));\n\t\tthis.registerTableFunction(\"getRanges\", this.getRanges.bind(this));\n\t\tthis.registerTableFunction(\"addRange\", this.addRangeFromComponent.bind(this));\n\n\t\tthis.registerComponentFunction(\"cell\", \"getRanges\", this.cellGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getRanges\", this.rowGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getRanges\", this.colGetRanges.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Initialization ///////\n\t///////////////////////////////////\n\t\n\tinitialize() {\n\t\tif (this.options(\"selectableRange\")) {\t\t\n\t\t\tif(!this.options(\"selectableRows\")){\n\t\t\t\t\n\t\t\t\tthis.maxRanges = this.options(\"selectableRange\");\n\t\t\t\t\n\t\t\t\tthis.initializeTable();\n\t\t\t\tthis.initializeWatchers();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"SelectRange functionality cannot be used in conjunction with row selection\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tinitializeTable() {\t\t\n\t\tthis.overlay = document.createElement(\"div\");\n\t\tthis.overlay.classList.add(\"tabulator-range-overlay\");\n\t\t\n\t\tthis.rangeContainer = document.createElement(\"div\");\n\t\tthis.rangeContainer.classList.add(\"tabulator-range-container\");\n\t\t\n\t\tthis.activeRangeCellElement = document.createElement(\"div\");\n\t\tthis.activeRangeCellElement.classList.add(\"tabulator-range-cell-active\");\n\t\t\n\t\tthis.overlay.appendChild(this.rangeContainer);\n\t\tthis.overlay.appendChild(this.activeRangeCellElement);\n\t\t\n\t\tthis.table.rowManager.element.addEventListener(\"keydown\", this.keyDownEvent);\n\t\t\n\t\tthis.resetRanges();\n\t\t\n\t\tthis.table.rowManager.element.appendChild(this.overlay);\n\t\tthis.table.columnManager.element.setAttribute(\"tabindex\", 0);\n\t\tthis.table.element.classList.add(\"tabulator-ranges\");\n\t}\n\t\n\tinitializeWatchers() {\n\t\tthis.columnSelection = this.options(\"selectableRangeColumns\");\n\t\tthis.rowSelection = this.options(\"selectableRangeRows\");\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-mousedown\", this.handleColumnMouseDown.bind(this));\n\t\tthis.subscribe(\"column-mousemove\", this.handleColumnMouseMove.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.handleColumnResized.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.updateHeaderColumn.bind(this));\n\n\t\tthis.subscribe(\"cell-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.renderCell.bind(this));\n\t\tthis.subscribe(\"cell-mousedown\", this.handleCellMouseDown.bind(this));\n\t\tthis.subscribe(\"cell-mousemove\", this.handleCellMouseMove.bind(this));\n\t\tthis.subscribe(\"cell-click\", this.handleCellClick.bind(this));\n\t\tthis.subscribe(\"cell-editing\", this.handleEditingCell.bind(this));\n\t\t\n\t\tthis.subscribe(\"page-changed\", this.redraw.bind(this));\n\n\t\tthis.subscribe(\"scroll-vertical\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.layoutChange.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-destroy\", this.tableDestroyed.bind(this));\n\t\tthis.subscribe(\"data-processed\", this.resetRanges.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-layout\", this.layoutElement.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.redraw.bind(this));\n\t\tthis.subscribe(\"table-destroy\", this.tableDestroyed.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-editor-clear\", this.finishEditingCell.bind(this));\n\t\tthis.subscribe(\"edit-blur\", this.restoreFocus.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-left\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-right\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.keyNavigate.bind(this, \"up\"));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.keyNavigate.bind(this, \"down\"));\n\t\tthis.subscribe(\"keybinding-nav-range\", this.keyNavigateRange.bind(this));\n\t}\n\t\n\t\n\tinitializeColumn(column) {\n\t\tif(this.columnSelection && column.definition.headerSort && this.options(\"headerSortClickElement\") !== \"icon\"){\n\t\t\tconsole.warn(\"Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.\");\n\t\t}\n\t\t\n\t\tif (column.modules.edit) {\n\t\t\t// Block editor from taking action so we can trigger edit by\n\t\t\t// double clicking.\n\t\t\t// column.modules.edit.blocked = true;\n\t\t}\n\t}\n\t\n\tupdateHeaderColumn(){\n\t\tif(this.rowSelection){\n\t\t\tthis.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];\n\t\t\t\n\t\t\tif(this.rowHeader){\n\t\t\t\tthis.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + \" tabulator-range-row-header\";\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.headerSort){\n\t\t\t\t\tconsole.warn(\"Using column headerSort with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.editor){\n\t\t\t\t\tconsole.warn(\"Using column editor with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Table Functions ///////\n\t///////////////////////////////////\n\t\n\tgetRanges(){\n\t\treturn this.ranges.map((range) => range.getComponent());\n\t}\n\t\n\tgetRangesData() {\n\t\treturn this.ranges.map((range) => range.getData());\n\t}\n\t\n\taddRangeFromComponent(start, end){\n\t\tstart = start ? start._cell : null;\n\t\tend = end ? end._cell : null;\n\t\t\n\t\treturn this.addRange(start, end);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Component Functions ///////\n\t///////////////////////////////////\n\t\n\tcellGetRanges(cell){\n\t\tvar ranges = [];\n\t\t\n\t\tif (cell.column === this.rowHeader) {\n\t\t\tranges = this.ranges.filter((range) => range.occupiesRow(cell.row));\n\t\t} else {\n\t\t\tranges = this.ranges.filter((range) => range.occupies(cell));\n\t\t}\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\trowGetRanges(row){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesRow(row));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\tcolGetRanges(col){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesColumn(col));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Event Handlers /////////\n\t///////////////////////////////////\n\t\n\t_handleMouseUp(e){\n\t\tthis.mousedown = false;\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t}\n\t\n\t_handleKeyDown(e) {\n\t\tif (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) {\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t// is editing a cell?\n\t\t\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.table.modules.edit.editCell(this.getActiveCell());\n\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tif ((e.key === \"Backspace\" || e.key === \"Delete\") && this.options(\"selectableRangeClearCells\")) {\n\t\t\t\tif(this.activeRange){\n\t\t\t\t\tthis.activeRange.clearValues();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeFocus(cell){\n\t\tvar range;\n\t\t\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\t\n\trestoreFocus(element){\n\t\tthis.table.rowManager.element.focus();\n\t\t\n\t\treturn true;\n\t}\n\t\n\t///////////////////////////////////\n\t////// Column Functionality ///////\n\t///////////////////////////////////\n\t\n\thandleColumnResized(column) {\n\t\tvar selected;\n\t\t\n\t\tif (this.selecting !== \"column\" && this.selecting !== \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tselected = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (!selected) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.ranges.forEach((range) => {\n\t\t\tvar selectedColumns = range.getColumns(true);\n\t\t\t\n\t\t\tselectedColumns.forEach((selectedColumn) => {\n\t\t\t\tif (selectedColumn !== column) {\n\t\t\t\t\tselectedColumn.setWidth(column.width);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\thandleColumnMouseDown(event, column) {\n\t\tif (event.button === 2 && (this.selecting === \"column\" || this.selecting === \"all\") && this.activeRange.occupiesColumn(column)) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, column);\n\t}\n\t\n\thandleColumnMouseMove(e, column) {\n\t\tif (column === this.rowHeader || !this.mousedown || this.selecting === 'all') {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, column, true);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Cell Functionality ///////\n\t///////////////////////////////////\n\t\n\trenderCell(cell) {\n\t\tvar el = cell.getElement(),\n\t\trangeIdx = this.ranges.findIndex((range) => range.occupies(cell));\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", rangeIdx !== -1);\n\t\tel.classList.toggle(\"tabulator-range-only-cell-selected\", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) &&\tthis.ranges[0].atBottomRight(cell));\n\t\t\n\t\tel.dataset.range = rangeIdx;\n\t}\n\t\n\thandleCellMouseDown(event, cell) {\n\t\tif (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === \"row\" || this.selecting === \"all\") && this.activeRange.occupiesRow(cell.row)))) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, cell);\n\t}\n\t\n\thandleCellMouseMove(e, cell) {\n\t\tif (!this.mousedown || this.selecting === \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, cell, true);\n\t}\n\t\n\thandleCellClick(e, cell){\n\t\tthis.initializeFocus(cell);\n\t}\n\t\n\thandleEditingCell(cell) {\n\t\tif(this.activeRange){\n\t\t\tthis.activeRange.setBounds(cell);\n\t\t}\n\t}\n\t\n\tfinishEditingCell() {\n\t\tthis.blockKeydown = true;\n\t\tthis.table.rowManager.element.focus();\n\n\t\tsetTimeout(() => {\n\t\t\tthis.blockKeydown = false;\n\t\t}, 10);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Navigation ///////\n\t///////////////////////////////////\n\t\n\tkeyNavigate(dir, e){\n\t\tif(this.navigate(false, false, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tkeyNavigateRange(e, dir, jump, expand){\n\t\tif(this.navigate(jump, expand, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tnavigate(jump, expand, dir) {\n\t\tvar moved = false,\n\t\trange, rangeEdge, nextRow, nextCol, row, column;\n\t\t\n\t\t// Don't navigate while editing\n\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// If there are more than 1 range, use the active range and destroy the others\n\t\tif (this.ranges.length > 1) {\n\t\t\tthis.ranges = this.ranges.filter((range) => {\n\t\t\t\tif (range === this.activeRange) {\n\t\t\t\t\trange.setEnd(range.start.row, range.start.col);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\trange.destroy();\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\trange = this.activeRange;\n\t\t\n\t\trangeEdge = expand ? range.end : range.start;\n\t\tnextRow = rangeEdge.row;\n\t\tnextCol = rangeEdge.col;\n\t\t\n\t\tif(jump){\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = this.findJumpCellRight(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = this.findJumpCellUp(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = this.findJumpCellDown(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}else{\n\t\t\tif(expand){\n\t\t\t\tif ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = Math.max(nextCol - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = Math.max(nextRow - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = Math.min(nextRow + 1, this.getTableRows().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tmoved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row;\n\t\t\n\t\tif(!expand){\n\t\t\trange.setStart(nextRow, nextCol);\n\t\t}\n\t\t\n\t\trange.setEnd(nextRow, nextCol);\n\t\t\n\t\tif(!expand){\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (moved) {\n\t\t\trow = this.getRowByRangePos(range.end.row);\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col);\n\t\t\t\n\t\t\tif ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) {\n\t\t\t\tcolumn.getComponent().scrollTo(undefined, false);\n\t\t\t} else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) {\n\t\t\t\trow.getComponent().scrollTo(undefined, false);\n\t\t\t} else {\n\t\t\t\t// Use faster autoScroll when the elements are on the DOM\n\t\t\t\tthis.autoScroll(range, row.getElement(), column.getElement());\n\t\t\t}\n\t\t\t\n\t\t\tthis.layoutElement();\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\trangeRemoved(removed){\n\t\tthis.ranges = this.ranges.filter((range) => range !== removed);\n\t\t\n\t\tif(this.activeRange === removed){\n\t\t\tif(this.ranges.length){\n\t\t\t\tthis.activeRange = this.ranges[this.ranges.length - 1];\n\t\t\t}else{\n\t\t\t\tthis.addRange();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.layoutElement();\n\t}\n\t\n\tfindJumpCell(cells, reverse, emptyStart, emptySide){\n\t\tvar nextCell;\n\t\t\n\t\tif(reverse){\n\t\t\tcells = cells.reverse();\n\t\t}\n\t\t\n\t\tfor(let currentCell of cells){\n\t\t\tlet currentValue = currentCell.getValue();\n\t\t\t\n\t\t\tif(emptyStart){\n\t\t\t\tnextCell = currentCell;\n\t\t\t\tif(currentValue){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(emptySide){\n\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindJumpCellLeft(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false,\n\t\tjumpCol = colPos,\n\t\ttargetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos),\n\t\tnextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellRight(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false,\n\t\tjumpCol = colPos,\n\t\tnextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellUp(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\tfindJumpCellDown(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Selection ///////\n\t///////////////////////////////////\n\tnewSelection(event, element) {\n\t\tvar range;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(!this.columnSelection){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (element === this.rowHeader) {\n\t\t\t\trange = this.resetRanges();\n\t\t\t\tthis.selecting = \"all\";\n\t\t\t\t\n\t\t\t\tvar topLeftCell, bottomRightCell = this.getCell(-1, -1);\n\n\t\t\t\tif(this.rowHeader){\n\t\t\t\t\ttopLeftCell = this.getCell(0, 1);\n\t\t\t\t}else{\n\t\t\t\t\ttopLeftCell = this.getCell(0, 0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trange.setBounds(topLeftCell, bottomRightCell);\t\t\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis.selecting = \"column\";\n\t\t\t}\n\t\t} else if (element.column === this.rowHeader) {\n\t\t\tthis.selecting = \"row\";\n\t\t} else {\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (event.shiftKey) {\n\t\t\tthis.activeRange.setBounds(false, element);\n\t\t} else if (event.ctrlKey) {\n\t\t\tthis.addRange().setBounds(element);\n\t\t} else {\n\t\t\tthis.resetRanges().setBounds(element);\n\t\t}\n\t}\n\t\n\tautoScroll(range, row, column) {\n\t\tvar tableHolder = this.table.rowManager.element,\n\t\trowHeader, rect, view, withinHorizontalView, withinVerticalView;\n\n\t\tif (typeof row === 'undefined') {\n\t\t\trow = this.getRowByRangePos(range.end.row).getElement();\n\t\t}\n\t\t\n\t\tif (typeof column === 'undefined') {\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col).getElement();\n\t\t}\n\n\t\tif (this.rowHeader) {\n\t\t\trowHeader = this.rowHeader.getElement();\n\t\t}\n\t\t\n\t\trect = {\n\t\t\tleft: column.offsetLeft,\n\t\t\tright: column.offsetLeft + column.offsetWidth,\n\t\t\ttop: row.offsetTop,\n\t\t\tbottom: row.offsetTop + row.offsetHeight,\n\t\t};\n\t\t\n\t\tview = {\n\t\t\tleft: tableHolder.scrollLeft,\n\t\t\tright: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),\n\t\t\ttop: tableHolder.scrollTop,\n\t\t\tbottom:\ttableHolder.scrollTop +\ttableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,\n\t\t};\n\n\t\tif (rowHeader) {\n\t\t\tview.left += rowHeader.offsetWidth;\n\t\t}\n\t\t\n\t\twithinHorizontalView = view.left < rect.left &&\trect.left < view.right && view.left < rect.right &&\trect.right < view.right;\n\t\t\n\t\twithinVerticalView = view.top < rect.top &&\trect.top < view.bottom && view.top < rect.bottom &&\trect.bottom < view.bottom;\n\t\t\n\t\tif (!withinHorizontalView) {\n\t\t\tif (rect.left < view.left) {\n\t\t\t\ttableHolder.scrollLeft = rect.left;\n\t\t\t\tif (rowHeader) {\n\t\t\t\t\ttableHolder.scrollLeft -= rowHeader.offsetWidth;\n\t\t\t\t}\n\t\t\t} else if (rect.right > view.right) {\n\t\t\t\ttableHolder.scrollLeft = rect.right - tableHolder.clientWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!withinVerticalView) {\n\t\t\tif (rect.top < view.top) {\n\t\t\t\ttableHolder.scrollTop = rect.top;\n\t\t\t} else if (rect.bottom > view.bottom) {\n\t\t\t\ttableHolder.scrollTop = rect.bottom - tableHolder.clientHeight;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Layout ///////\n\t///////////////////////////////////\n\t\n\tlayoutChange(){\n\t\tthis.overlay.style.visibility = \"hidden\";\n\t\tclearTimeout(this.layoutChangeTimeout);\n\t\tthis.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200);\n\t}\n\t\n\tredraw(force) {\n\t\tif (force) {\n\t\t\tthis.selecting = 'cell';\n\t\t\tthis.resetRanges();\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\t\n\tlayoutElement(visibleRows) {\n\t\tvar rows;\n\t\t\n\t\tif (visibleRows) {\n\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t} else {\n\t\t\trows = this.table.rowManager.getRows();\n\t\t}\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\trow.cells.forEach((cell) => this.renderCell(cell));\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.getTableColumns().forEach((column) => {\n\t\t\tthis.layoutColumn(column);\n\t\t});\n\t\t\n\t\tthis.layoutRanges();\n\t}\n\t\n\tlayoutRow(row) {\n\t\tvar el = row.getElement(),\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesRow(row));\n\t\t\n\t\tif (this.selecting === \"row\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutColumn(column) {\n\t\tvar el = column.getElement(),\t\t\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (this.selecting === \"column\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutRanges() {\n\t\tvar activeCell;\n\t\t\n\t\tif (!this.table.initialized) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tactiveCell = this.getActiveCell();\n\t\t\n\t\tif (!activeCell) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.top =\tactiveCell.row.getElement().offsetTop + \"px\";\n\t\tthis.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + \"px\";\n\t\t\n\t\tthis.ranges.forEach((range) => range.layout());\n\t\t\n\t\tthis.overlay.style.visibility = \"visible\";\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Helper Functions ///////\n\t///////////////////////////////////\t\n\t\n\tgetCell(rowIdx, colIdx) {\n\t\tvar row;\n\t\t\n\t\tif (colIdx < 0) {\n\t\t\tcolIdx = this.getTableColumns().length + colIdx;\n\t\t\tif (colIdx < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (rowIdx < 0) {\n\t\t\trowIdx = this.getTableRows().length + rowIdx;\n\t\t}\n\t\t\n\t\trow = this.table.rowManager.getRowFromPosition(rowIdx + 1);\n\t\t\n\t\treturn row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null;\n\t}\n\t\n\t\n\tgetActiveCell() {\n\t\treturn this.getCell(this.activeRange.start.row, this.activeRange.start.col);\n\t}\n\t\n\tgetRowByRangePos(pos) {\n\t\treturn this.getTableRows()[pos];\n\t}\n\t\n\tgetColumnByRangePos(pos) {\n\t\treturn this.getTableColumns()[pos];\n\t}\n\t\n\tgetTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\tgetTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\taddRange(start, end) {\n\t\tvar range;\n\t\t\n\t\tif(this.maxRanges !== true && this.ranges.length >= this.maxRanges){\n\t\t\tthis.ranges.shift().destroy();\n\t\t}\n\t\t\n\t\trange = new Range(this.table, this, start, end);\n\t\t\n\t\tthis.activeRange = range;\n\t\tthis.ranges.push(range);\n\t\tthis.rangeContainer.appendChild(range.element);\n\t\t\n\t\treturn range;\n\t}\n\t\n\tresetRanges() {\n\t\tvar range, cell;\n\t\t\n\t\tthis.ranges.forEach((range) => range.destroy());\n\t\tthis.ranges = [];\n\t\t\n\t\trange = this.addRange();\n\t\t\n\t\tif(this.table.rowManager.activeRows.length){\n\t\t\tcell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0];\n\n\t\t\tif(cell){\n\t\t\t\trange.setBounds(cell);\n\t\t\t\tthis.initializeFocus(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn range;\n\t}\n\t\n\ttableDestroyed(){\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t\tthis.table.rowManager.element.removeEventListener(\"keydown\", this.keyDownEvent);\n\t}\n\t\n\tselectedRows(component) {\n\t\treturn component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows();\n\t}\n\t\n\tselectedColumns(component) {\n\t\treturn component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();\n\t}\n}\n\nSelectRange.moduleName = \"selectRange\";\n\nexport default SelectRange;\n","import Module from '../../core/Module.js';\nimport Cell from '../../core/cell/Cell.js';\n\nclass Tooltip extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.tooltipSubscriber = null,\n\t\tthis.headerSubscriber = null,\n\t\t\n\t\tthis.timeout = null;\n\t\tthis.popupInstance = null;\n\t\t\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \n\t\t\n\t\tthis.registerColumnOption(\"tooltip\");\n\t\tthis.registerColumnOption(\"headerTooltip\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheckMsg(\"tooltipGenerationMode\", \"This option is no longer needed as tooltips are always generated on hover now\");\n\t}\t\n\t\n\tinitializeColumn(column){\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\n\t\t\tthis.headerSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\n\t\t}\n\t\t\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\n\t\t\tthis.tooltipSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\n\t\t}\n\t}\n\t\n\tmousemoveCheck(action, e, component){\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\n\t\t\n\t\tif(tooltip){\n\t\t\tthis.clearPopup();\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\n\t\t}\n\t}\n\n\tmouseoutCheck(action, e, component){\n\t\tif(!this.popupInstance){\n\t\t\tthis.clearPopup();\n\t\t}\n\t}\n\t\n\tclearPopup(action, e, component){\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = null;\n\t\t\n\t\tif(this.popupInstance){\n\t\t\tthis.popupInstance.hide();\n\t\t}\n\t}\n\t\n\tloadTooltip(e, component, tooltip){\n\t\tvar contentsEl, renderedCallback, coords;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(typeof tooltip === \"function\"){\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\n\t\t}\n\t\t\n\t\tif(tooltip instanceof HTMLElement){\n\t\t\tcontentsEl = tooltip;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\t\n\t\t\tif(tooltip === true){\n\t\t\t\tif(component instanceof Cell){\n\t\t\t\t\ttooltip = component.value;\n\t\t\t\t}else{\n\t\t\t\t\tif(component.definition.field){\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\ttooltip = component.definition.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcontentsEl.innerHTML = tooltip;\n\t\t}\n\t\t\n\t\tif(tooltip || tooltip === 0 || tooltip === false){\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\n\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault());\n\t\t\t\n\t\t\tthis.popupInstance = this.popup(contentsEl);\n\t\t\t\n\t\t\tif(typeof renderedCallback === \"function\"){\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\n\t\t\t}\n\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\n\t\t\t\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\n\t\t\t\tthis.popupInstance = null;\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nTooltip.moduleName = \"tooltip\";\n\nexport default Tooltip;\n","export default {\n\t//is integer\n\tinteger: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//must be alphanumeric\n\talphanumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvar reg = new RegExp(/^[a-z0-9]+$/i);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//maximum value\n\tmax: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\n\t//minimum string length\n\tminLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(typeof parameters == \"string\"){\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function(row){\n\t\t\tvar data = row.getData();\n\n\t\t\tif(data !== cellData){\n\t\t\t\tif(value == column.getFieldValue(data)){\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired:function(cell, value, parameters){\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultValidators from './defaults/validators.js';\n\nclass Validate extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.invalidCells = [];\n\t\t\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\n\t\t\n\t\tthis.registerColumnOption(\"validator\");\n\t\t\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\n\t}\n\t\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Event Handling //////////\n\t///////////////////////////////////\n\t\n\teditValidate(cell, value, previousValue){\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\n\t\t\n\t\t// allow time for editor to make render changes then style cell\n\t\tif(valid !== true){\n\t\t\tsetTimeout(() => {\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn valid;\n\t}\n\t\n\teditorClear(cell, cancelled){\n\t\tif(cancelled){\n\t\t\tif(cell.column.modules.validate){\n\t\t\t\tthis.cellValidate(cell);\n\t\t\t}\n\t\t}\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t}\n\t\n\teditedClear(cell){\n\t\tif(cell.modules.validate){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Cell Functions /////////\n\t///////////////////////////////////\n\t\n\tcellIsValid(cell){\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\n\t}\n\t\n\tcellValidate(cell){\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Column Functions ////////\n\t///////////////////////////////////\n\t\n\tcolumnValidate(column){\n\t\tvar invalid = [];\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Row Functions //////////\n\t///////////////////////////////////\n\t\n\trowValidate(row){\n\t\tvar invalid = [];\n\t\t\n\t\trow.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\tuserClearCellValidation(cells){\n\t\tif(!cells){\n\t\t\tcells = this.getInvalidCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.clearValidation(cell._getSelf());\n\t\t});\n\t}\n\t\n\tuserValidate(cells){\n\t\tvar output = [];\n\t\t\n\t\t//clear row data\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trow = row.getComponent();\n\t\t\t\n\t\t\tvar valid = row.validate();\n\t\t\t\n\t\t\tif(valid !== true){\n\t\t\t\toutput = output.concat(valid);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output.length ? output : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.validator !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//validate\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = [],\n\t\tvalidator;\n\t\t\n\t\tif(column.definition.validator){\n\t\t\t\n\t\t\tif(Array.isArray(column.definition.validator)){\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\n\t\t\t\t\tvalidator = self._extractValidator(item);\n\t\t\t\t\t\n\t\t\t\t\tif(validator){\n\t\t\t\t\t\tconfig.push(validator);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\t\t\t\t\n\t\t\t\tif(validator){\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.validate = config.length ? config : false;\n\t\t}\n\t}\n\t\n\t_extractValidator(value){\n\t\tvar type, params, pos;\n\t\t\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tpos = value.indexOf(':');\n\t\t\t\n\t\t\t\tif(pos > -1){\n\t\t\t\t\ttype = value.substring(0,pos);\n\t\t\t\t\tparams = value.substring(pos+1);\n\t\t\t\t}else{\n\t\t\t\t\ttype = value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\treturn this._buildValidator(type, params);\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\treturn this._buildValidator(value);\n\t\t\t\n\t\t\tcase \"object\":\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t}\n\t}\n\t\n\t_buildValidator(type, params){\n\t\t\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\n\t\t\n\t\tif(!func){\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn {\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\n\t\t\t\tfunc:func,\n\t\t\t\tparams:params,\n\t\t\t};\n\t\t}\n\t}\n\t\n\tvalidate(validators, cell, value){\n\t\tvar self = this,\n\t\tfailedValidators = [],\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\n\t\tif(validators){\n\t\t\tvalidators.forEach((item) => {\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\n\t\t\t\t\tfailedValidators.push({\n\t\t\t\t\t\ttype:item.type,\n\t\t\t\t\t\tparameters:item.params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(!cell.modules.validate){\n\t\t\tcell.modules.validate = {};\n\t\t}\n\t\t\n\t\tif(!failedValidators.length){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}else{\n\t\t\tcell.modules.validate.invalid = failedValidators;\n\t\t\t\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t}\n\t\t\t\n\t\t\tif(invalidIndex == -1){\n\t\t\t\tthis.invalidCells.push(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn failedValidators.length ? failedValidators : true;\n\t}\n\t\n\tgetInvalidCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.invalidCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearValidation(cell){\n\t\tvar invalidIndex;\n\t\t\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\n\t\t\t\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\t\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nValidate.moduleName = \"validate\";\n\n//load defaults\nValidate.validators = defaultValidators;\n\nexport default Validate;\n","//tabulator with all modules installed\nimport {default as Tabulator} from './Tabulator.js';\nimport * as modules from '../core/modules/optional.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nclass TabulatorFull extends Tabulator {}\n\n//bind modules and static functionality\nnew ModuleBinder(TabulatorFull, modules);\n\nexport default TabulatorFull;\n"],"names":["defaultOptions","RendererVirtualDomHorizontal","RendererBasicHorizontal","RendererVirtualDomVertical","RendererBasicVertical","InteractionMonitor","generateParamsList","defaultURLGenerator","List","Edit","html","textarea","tickCross","datetime","star","progress","csv","json","array","Popup","number","date","time"],"mappings":"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"} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator.min.js b/tmp/tabulator-5.6.1/dist/js/tabulator.min.js deleted file mode 100644 index 3004126..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v5.6.1 (c) Oliver Folkerd 2024 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Tabulator=t()}(this,(function(){"use strict";class e{constructor(e){this.table=e}reloadData(e,t,i){return this.table.dataLoader.load(e,void 0,void 0,void 0,t,i)}langText(){return this.table.modules.localize.getText(...arguments)}langBind(){return this.table.modules.localize.bind(...arguments)}langLocale(){return this.table.modules.localize.getLocale(...arguments)}commsConnections(){return this.table.modules.comms.getConnections(...arguments)}commsSend(){return this.table.modules.comms.send(...arguments)}layoutMode(){return this.table.modules.layout.getMode()}layoutRefresh(e){return this.table.modules.layout.layout(e)}subscribe(){return this.table.eventBus.subscribe(...arguments)}unsubscribe(){return this.table.eventBus.unsubscribe(...arguments)}subscribed(e){return this.table.eventBus.subscribed(e)}subscriptionChange(){return this.table.eventBus.subscriptionChange(...arguments)}dispatch(){return this.table.eventBus.dispatch(...arguments)}chain(){return this.table.eventBus.chain(...arguments)}confirm(){return this.table.eventBus.confirm(...arguments)}dispatchExternal(){return this.table.externalEvents.dispatch(...arguments)}subscribedExternal(e){return this.table.externalEvents.subscribed(e)}subscriptionChangeExternal(){return this.table.externalEvents.subscriptionChange(...arguments)}options(e){return this.table.options[e]}setOption(e,t){return void 0!==t&&(this.table.options[e]=t),this.table.options[e]}deprecationCheck(e,t,i){return this.table.deprecationAdvisor.check(e,t,i)}deprecationCheckMsg(e,t){return this.table.deprecationAdvisor.checkMsg(e,t)}deprecationMsg(e){return this.table.deprecationAdvisor.msg(e)}module(e){return this.table.module(e)}}class t{constructor(e){return this._column=e,this.type="ColumnComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._column.table.componentFunctionBinder.handle("column",e._column,t)}})}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getTitleDownload(){return this._column.getTitleDownload()}getCells(){var e=[];return this._column.cells.forEach((function(t){e.push(t.getComponent())})),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach((function(e){e.show()})):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach((function(e){e.hide()})):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach((function(t){e.push(t.getComponent())})),e}getParentColumn(){return this._column.parent instanceof n&&this._column.parent.getComponent()}_getSelf(){return this._column}scrollTo(e,t){return this._column.table.columnManager.scrollToColumn(this._column,e,t)}getTable(){return this._column.table}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return!!e&&e.getComponent()}getPrevColumn(){var e=this._column.prevColumn();return!!e&&e.getComponent()}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.columnManager.rerenderColumns(!0),t}}var i={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,maxInitialWidth:void 0,cssClass:void 0,variableHeight:void 0,headerVertical:void 0,headerHozAlign:void 0,headerWordWrap:!1,editableTitle:void 0};class s{constructor(e){return this._cell=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._cell.table.componentFunctionBinder.handle("cell",e._cell,t)}})}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(e){return this._cell.row.getData(e)}getType(){return"cell"}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class o extends e{constructor(e,t){super(e.table),this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell")}_configureCell(){var e=this.element,t=this.column.getField();(e.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(e.style.display="inline-flex",e.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[this.column.vertAlign]||"",this.column.hozAlign&&(e.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[this.column.hozAlign]||"")),t&&e.setAttribute("tabulator-field",t),this.column.definition.cssClass)&&this.column.definition.cssClass.split(" ").forEach((t=>{e.classList.add(t)}));this.dispatch("cell-init",this),this.column.visible||this.hide()}_generateContents(){var e;switch(typeof(e=this.chain("cell-format",this,null,(()=>this.element.innerHTML=this.value)))){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.dispatch("cell-rendered",this)}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t,i){this.setValueProcessData(e,t,i)&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.column.definition.cellEdited&&this.column.definition.cellEdited.call(this.table,this.getComponent()),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}setValueProcessData(e,t,i){var s=!1;return(this.value!==e||i)&&(s=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),s&&this.dispatch("cell-value-changed",this),s}setValueActual(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this.dispatch("cell-layout",this)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null,this.dispatch("cell-height",this,"")}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled,this.dispatch("cell-height",this,this.row.heightStyled)}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}delete(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}getIndex(){return this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new s(this)),this.component}}class n extends e{constructor(e,t){super(t.table),this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleDownload=null,this.titleFormatterRendered=!1,this.mapDefinitions(),this.setField(this.definition.field),this.modules={},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.maxInitialWidth=null,this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this.definition.columns?(this.isGroup=!0,this.definition.columns.forEach(((e,t)=>{var i=new n(e,this);this.attachColumn(i)})),this.checkColumnVisibility()):t.registerColumnField(this),this._initialize()}createElement(){var e=document.createElement("div");switch(e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),this.table.options.columnHeaderVertAlign){case"middle":e.style.justifyContent="center";break;case"bottom":e.style.justifyContent="flex-end"}return e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitions(){var e=this.table.options.columnDefaults;if(e)for(let t in e)void 0===this.definition[t]&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(n.defaultOptionList,this.definition)}checkDefinition(){Object.keys(this.definition).forEach((e=>{-1===n.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)}))}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach((function(e){e.reRegisterPosition()})):this.registerColumnPosition(this)}_initialize(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.dispatch("column-init",this)}_buildColumnHeader(){var e=this.definition;(this.dispatch("column-layout",this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass)&&e.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(parseInt(e.minWidth)),e.maxInitialWidth&&(this.maxInitialWidth=parseInt(e.maxInitialWidth)),e.maxWidth&&this.setMaxWidth(parseInt(e.maxWidth)),this.reinitializeWidth(),this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}_buildColumnHeaderContent(){var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=document.createElement("div");if(t.classList.add("tabulator-col-title"),e.headerWordWrap&&t.classList.add("tabulator-col-title-wrap"),e.editableTitle){var i=document.createElement("input");i.classList.add("tabulator-title-editor"),i.addEventListener("click",(e=>{e.stopPropagation(),i.focus()})),i.addEventListener("mousedown",(e=>{e.stopPropagation()})),i.addEventListener("change",(()=>{e.title=i.value,this.dispatchExternal("columnTitleChanged",this.getComponent())})),t.appendChild(i),e.field?this.langBind("columns|"+e.field,(t=>{i.value=t||e.title||" "})):i.value=e.title||" "}else e.field?this.langBind("columns|"+e.field,(i=>{this._formatColumnHeaderTitle(t,i||e.title||" ")})):this._formatColumnHeaderTitle(t,e.title||" ");return t}_formatColumnHeaderTitle(e,t){var i=this.chain("column-format",[this,t,e],null,(()=>t));switch(typeof i){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":e.innerHTML="";break;default:e.innerHTML=i}}_buildGroupHeader(){(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t,i=e,s=this.fieldStructure,o=s.length;for(let e=0;e{t.push(e),t=t.concat(e.getColumns(!0))})):t=this.columns,t}getCells(){return this.cells}getTopColumn(){return this.parent.isGroup?this.parent.getTopColumn():this}getDefinition(e){var t=[];return this.isGroup&&e&&(this.columns.forEach((function(e){t.push(e.getDefinition(!0))})),this.definition.columns=t),this.definition}checkColumnVisibility(){var e=!1;this.columns.forEach((function(t){t.visible&&(e=!0)})),e?(this.show(),this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1)):this.hide()}show(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(e){e.show()})),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager.verticalAlignHeaders(),this.dispatch("column-show",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}hide(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager.verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(e){e.hide()})),this.dispatch("column-hide",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}matchChildWidths(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})),this.contentElement.style.maxWidth=e-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())}removeChild(e){var t=this.columns.indexOf(e);t>-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(e){e.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this)}checkCellHeights(){var e=[];this.cells.forEach((function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)})),e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()}))}getWidth(){var e=0;return this.isGroup?this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})):e=this.width,e}getLeftOffset(){var e=this.element.offsetLeft;return this.parent.isGroup&&(e+=this.parent.getLeftOffset()),e}getHeight(){return Math.ceil(this.element.getBoundingClientRect().height)}setMinWidth(e){this.maxWidth&&e>this.maxWidth&&(e=this.maxWidth,console.warn("the minWidth ("+e+"px) for column '"+this.field+"' cannot be bigger that its maxWidth ("+this.maxWidthStyled+")")),this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(e){e.setMinWidth()}))}setMaxWidth(e){this.minWidth&&e{this.isGroup&&this.columns.forEach((function(e){e.delete()})),this.dispatch("column-delete",this);var i=this.cells.length;for(let e=0;e-1&&this._nextVisibleColumn(e+1)}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(e),this.dispatch("column-width-fit-after",this)}fitToData(e){if(!this.isGroup){this.widthFixed||(this.element.style.width="",this.cells.forEach((e=>{e.clearWidth()})));var t=this.element.offsetWidth;if((!this.width||!this.widthFixed)&&(this.cells.forEach((e=>{var i=e.getWidth();i>t&&(t=i)})),t)){var i=t+1;this.maxInitialWidth&&!e&&(i=Math.min(i,this.maxInitialWidth)),this.setWidthActual(i)}}}updateDefinition(e){var t;return this.isGroup||this.parent.isGroup?(console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"),Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(t=Object.assign({},this.getDefinition()),t=Object.assign(t,e),this.table.columnManager.addColumn(t,!1,this).then((e=>(t.field==this.field&&(this.field=!1),this.delete().then((()=>e.getComponent()))))))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new t(this)),this.component}getPosition(){return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this)+1}}n.defaultOptionList=i;class r{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static retrieveNestedData(e,t,i){var s,o=e?t.split(e):[t],n=o.length;for(let e=0;ee.subject===l)),r>-1?t[n]=i[r].copy:(a=Object.assign(Array.isArray(l)?[]:{},l),i.unshift({subject:l,copy:a}),t[n]=this.deepClone(l,a,i)))}return t}}class a{constructor(e,t,i={}){this.table=e,this.msgType=t,this.registeredDefaults=Object.assign({},i)}register(e,t){this.registeredDefaults[e]=t}generate(e,t={}){var i=Object.assign({},this.registeredDefaults),s=this.table.options.debugInvalidOptions||!0===t.debugInvalidOptions;Object.assign(i,e);for(let e in t)i.hasOwnProperty(e)||(s&&console.warn("Invalid "+this.msgType+" option:",e),i[e]=t.key);for(let e in i)e in t?i[e]=t[e]:Array.isArray(i[e])?i[e]=Object.assign([],i[e]):"object"==typeof i[e]&&null!==i[e]?i[e]=Object.assign({},i[e]):void 0===i[e]&&delete i[e];return i}}class l extends e{constructor(e){super(e),this.elementVertical=e.rowManager.element,this.elementHorizontal=e.columnManager.element,this.tableElement=e.rowManager.tableElement,this.verticalFillMode="fit"}initialize(){}clearRows(){}clearColumns(){}reinitializeColumnWidths(e){}renderRows(){}renderColumns(){}rerenderRows(e){e&&e()}rerenderColumns(e,t){}renderRowCells(e){}rerenderRowCells(e,t){}scrollColumns(e,t){}scrollRows(e,t){}resize(){}scrollToRow(e){}scrollToRowNearestTop(e){}visibleRows(e){return[]}rows(){return this.table.rowManager.getDisplayRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}clear(){this.clearRows(),this.clearColumns()}render(){this.renderRows(),this.renderColumns()}rerender(e){this.rerenderRows(),this.rerenderColumns()}scrollToRowPosition(e,t,i){var s=this.rows().indexOf(e),o=e.getElement(),n=0;return new Promise(((a,l)=>{if(s>-1){if(void 0===i&&(i=this.table.options.scrollToRowIfVisible),!i&&r.elVisible(o)&&(n=r.elOffset(o).top-r.elOffset(this.elementVertical).top)>0&&n{i.appendChild(e.getElement())})),e.element.appendChild(i),t||e.cells.forEach((e=>{e.cellRendered()}))}reinitializeColumnWidths(e){e.forEach((function(e){e.reinitializeWidth()}))}}class d extends l{constructor(e){super(e),this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.windowBuffer=200,this.visibleRows=null,this.initialized=!1,this.isFitData=!1,this.columns=[]}initialize(){this.compatibilityCheck(),this.layoutCheck(),this.vertScrollListen()}compatibilityCheck(){"fitDataTable"==this.options("layout")&&console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"),this.options("responsiveLayout")&&console.warn("Horizontal Virtual DOM is not compatible with responsive columns"),this.options("rtl")&&console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction")}layoutCheck(){this.isFitData=this.options("layout").startsWith("fitData")}vertScrollListen(){this.subscribe("scroll-vertical",this.clearVisRowCache.bind(this)),this.subscribe("data-refreshed",this.clearVisRowCache.bind(this))}clearVisRowCache(){this.visibleRows=null}renderColumns(e,t){this.dataChange()}scrollColumns(e,t){this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.windowBuffer)))}calcWindowBuffer(){var e=this.elementVertical.clientWidth;this.table.columnManager.columnsByIndex.forEach((t=>{if(t.visible){var i=t.getWidth();i>e&&(e=i)}})),this.windowBuffer=2*e}rerenderColumns(e,t){var i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol},s=0;e&&!this.initialized||(this.clear(),this.calcWindowBuffer(),this.scrollLeft=this.elementVertical.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.windowBuffer,this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,this.table.columnManager.columnsByIndex.forEach((e=>{var t,i={};e.visible&&(e.modules.frozen||(t=e.getWidth(),i.leftPos=s,i.rightPos=s+t,i.width=t,this.isFitData&&(i.fitDataCheck=!e.modules.vdomHoz||e.modules.vdomHoz.fitDataCheck),s+t>this.vDomScrollPosLeft&&s{t.appendChild(e.getElement())})),e.element.appendChild(t),e.cells.forEach((e=>{e.cellRendered()}))}}rerenderRowCells(e,t){this.reinitializeRow(e,t)}reinitializeColumnWidths(e){for(let e=this.leftCol;e<=this.rightCol;e++)this.columns[e].reinitializeWidth()}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e,t,i=!1;if(this.isFitData){if(this.table.columnManager.columnsByIndex.forEach((e=>{!e.definition.width&&e.visible&&(i=!0)})),i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,e=this.chain("rows-sample",[1],[],(()=>this.table.rowManager.getDisplayRows()))[0])){t=e.getElement(),e.generateCells(),this.tableElement.appendChild(t);for(let i=0;i{e!==this.columns[i]&&(t=!1)})),!t)}reinitializeRows(){var e=this.getVisibleRows(),t=this.table.rowManager.getRows().filter((t=>!e.includes(t)));e.forEach((e=>{this.reinitializeRow(e,!0)})),t.forEach((e=>{e.deinitialize()}))}getVisibleRows(){return this.visibleRows||(this.visibleRows=this.table.rowManager.getVisibleRows()),this.visibleRows}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,Math.abs(e)>this.windowBuffer/2?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let s=e;s{if("group"!==e.type){var t=e.getCell(i);e.getElement().insertBefore(t.getElement(),e.getCell(this.columns[this.rightCol]).getElement().nextSibling),t.cellRendered()}})),this.fitDataColActualWidthCheck(i),this.rightCol++,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.rightCol=this.rightCol)})),this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth()):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}addColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol-1];if(i)if(i.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){e=!0,this.getVisibleRows().forEach((e=>{if("group"!==e.type){var t=e.getCell(i);e.getElement().insertBefore(t.getElement(),e.getCell(this.columns[this.leftCol]).getElement()),t.cellRendered()}})),this.leftCol--,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.leftCol=this.leftCol)})),this.leftCol<=0?this.vDomPadLeft=0:this.vDomPadLeft-=i.getWidth();let t=this.fitDataColActualWidthCheck(i);t&&(this.scrollLeft=this.elementVertical.scrollLeft=this.elementVertical.scrollLeft+t,this.vDomPadRight-=t)}else t=!1;else t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}removeColRight(){for(var e=!1,t=!0;t;){let i=this.columns[this.rightCol];i&&i.modules.vdomHoz.leftPos>this.vDomScrollPosRight?(e=!0,this.getVisibleRows().forEach((e=>{if("group"!==e.type){var t=e.getCell(i);try{e.getElement().removeChild(t.getElement())}catch(e){console.warn("Could not removeColRight",e.message)}}})),this.vDomPadRight+=i.getWidth(),this.rightCol--,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.rightCol=this.rightCol)}))):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}removeColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol];i&&i.modules.vdomHoz.rightPos{if("group"!==e.type){var t=e.getCell(i);try{e.getElement().removeChild(t.getElement())}catch(e){console.warn("Could not removeColLeft",e.message)}}})),this.vDomPadLeft+=i.getWidth(),this.leftCol++,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.leftCol=this.leftCol)}))):t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}fitDataColActualWidthCheck(e){var t,i;return e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),(i=(t=e.getWidth())-e.modules.vdomHoz.width)&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.columns.indexOf(e)+1,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1),i}initializeRow(e){if("group"!==e.type){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol},this.table.modules.frozenColumns&&this.table.modules.frozenColumns.leftColumns.forEach((t=>{this.appendCell(e,t)}));for(let t=this.leftCol;t<=this.rightCol;t++)this.appendCell(e,this.columns[t]);this.table.modules.frozenColumns&&this.table.modules.frozenColumns.rightColumns.forEach((t=>{this.appendCell(e,t)}))}}appendCell(e,t){if(t&&t.visible){let i=e.getCell(t);e.getElement().appendChild(i.getElement()),i.cellRendered()}}reinitializeRow(e,t){if("group"!==e.type&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class c extends e{constructor(e){super(e),this.blockHozScrollEvent=!1,this.headersElement=null,this.contentsElement=null,this.element=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.optionsList=new a(this.table,"column definition",i),this.redrawBlock=!1,this.redrawBlockUpdate=null,this.renderer=null}initialize(){this.initializeRenderer(),this.headersElement=this.createHeadersElement(),this.contentsElement=this.createHeaderContentsElement(),this.element=this.createHeaderElement(),this.contentsElement.insertBefore(this.headersElement,this.contentsElement.firstChild),this.element.insertBefore(this.contentsElement,this.element.firstChild),this.initializeScrollWheelWatcher(),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("scrollbar-vertical",this.padVerticalScrollbar.bind(this))}padVerticalScrollbar(e){this.table.rtl?this.headersElement.style.marginLeft=e+"px":this.headersElement.style.marginRight=e+"px"}initializeRenderer(){var e,t={virtual:d,basic:h};(e="string"==typeof this.table.options.renderHorizontal?t[this.table.options.renderHorizontal]:this.table.options.renderHorizontal)?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize()):console.error("Unable to find matching renderer:",this.table.options.renderHorizontal)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e.setAttribute("role","row"),e}createHeaderContentsElement(){var e=document.createElement("div");return e.classList.add("tabulator-header-contents"),e.setAttribute("role","rowgroup"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),e.setAttribute("role","rowgroup"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}getElement(){return this.element}getContentsElement(){return this.contentsElement}getHeadersElement(){return this.headersElement}scrollHorizontal(e){this.contentsElement.scrollLeft=e,this.scrollLeft=e,this.renderer.scrollColumns(e)}initializeScrollWheelWatcher(){this.contentsElement.addEventListener("wheel",(e=>{var t;e.deltaX&&(t=this.contentsElement.scrollLeft+e.deltaX,this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))}))}generateColumnsFromRowData(e){var t,i,s=[],o=this.table.options.autoColumnsDefinitions;if(e&&e.length){for(var n in t=e[0]){let e={field:n,title:n},o=t[n];switch(typeof o){case"undefined":i="string";break;case"boolean":i="boolean";break;case"object":i=Array.isArray(o)?"array":"string";break;default:i=isNaN(o)||""===o?o.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}e.sorter=i,s.push(e)}if(o)switch(typeof o){case"function":this.table.options.columns=o.call(this.table,s);break;case"object":Array.isArray(o)?s.forEach((e=>{var t=o.find((t=>t.field===e.field));t&&Object.assign(e,t)})):s.forEach((e=>{o[e.field]&&Object.assign(e,o[e.field])})),this.table.options.columns=s}else this.table.options.columns=s;this.setColumns(this.table.options.columns)}}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),e.forEach(((e,t)=>{this._addColumn(e)})),this._reIndexColumns(),this.dispatch("columns-loaded"),this.rerenderColumns(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var s=new n(e,this),o=s.getElement(),r=i?this.findColumnIndex(i):i;if(i&&r>-1){var a=i.getTopColumn(),l=this.columns.indexOf(a),h=a.getElement();t?(this.columns.splice(l,0,s),h.parentNode.insertBefore(o,h)):(this.columns.splice(l+1,0,s),h.parentNode.insertBefore(o,h.nextSibling))}else t?(this.columns.unshift(s),this.headersElement.insertBefore(s.getElement(),this.headersElement.firstChild)):(this.columns.push(s),this.headersElement.appendChild(s.getElement()));return s.columnRendered(),s}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach((function(e){e.reRegisterPosition()}))}verticalAlignHeaders(){var e=0;this.redrawBlock||(this.headersElement.style.height="",this.columns.forEach((e=>{e.clearVerticalAlign()})),this.columns.forEach((t=>{var i=t.getHeight();i>e&&(e=i)})),this.headersElement.style.height=e+"px",this.columns.forEach((t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)})),this.table.rowManager.adjustTableSize())}findColumn(e){var i;if("object"!=typeof e)return this.columnsByField[e]||!1;if(e instanceof n)return e;if(e instanceof t)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return i=[],this.columns.forEach((e=>{i.push(e),i=i.concat(e.getColumns(!0))})),i.find((t=>t.element===e))||!1}return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach((i=>{(this.table.options.nestedFieldSeparator?i.split(this.table.options.nestedFieldSeparator)[0]:i)===e&&t.push(this.columnsByField[i])})),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibleColumn(){var e=this.columnsByIndex.findIndex((e=>e.visible));return e>-1&&this.columnsByIndex[e]}getVisibleColumnsByIndex(){return this.columnsByIndex.filter((e=>e.visible))}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex((t=>e===t))}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach(((t,i)=>{e(t,i)}))}getDefinitions(e){var t=[];return this.columnsByIndex.forEach((i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())})),t}getDefinitionTree(){var e=[];return this.columns.forEach((t=>{e.push(t.getDefinition(!0))})),e}getComponents(e){var t=[];return(e?this.columns:this.columnsByIndex).forEach((e=>{t.push(e.getComponent())})),t}getWidth(){var e=0;return this.columnsByIndex.forEach((t=>{t.visible&&(e+=t.getWidth())})),e}moveColumn(e,t,i){t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this.moveColumnActual(e,t,i),this.verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}_moveColumnInArray(e,t,i,s,o){var n,r=e.indexOf(t);r>-1&&(e.splice(r,1),(n=e.indexOf(i))>-1?s&&(n+=1):n=r,e.splice(n,0,t),o&&(this.chain("column-moving-rows",[t,i,s],null,[])||[]).concat(this.table.rowManager.rows).forEach((function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(n,0,t)}})))}scrollToColumn(e,t,i){var s=0,o=e.getLeftOffset(),n=0,r=e.getElement();return new Promise(((a,l)=>{if(void 0===t&&(t=this.table.options.scrollToColumnPosition),void 0===i&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":n=-this.element.clientWidth/2;break;case"right":n=r.clientWidth-this.headersElement.clientWidth}if(!i&&o>0&&o+r.offsetWidth{t.push(i.generateCell(e))})),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var s,o,n;i.visible&&(s=i.definition.width||0,o=parseInt(i.minWidth),n="string"==typeof s?s.indexOf("%")>-1?e/100*parseInt(s):parseInt(s):s,t+=n>o?n:o)})),t}addColumn(e,t,i){return new Promise(((s,o)=>{var n=this._addColumn(e,t,i);this._reIndexColumns(),this.dispatch("column-add",e,t,i),"fitColumns"!=this.layoutMode()&&n.reinitializeWidth(),this.redraw(!0),this.table.rowManager.reinitialize(),this.rerenderColumns(),s(n)}))}deregisterColumn(e){var t,i=e.getField();i&&delete this.columnsByField[i],(t=this.columnsByIndex.indexOf(e))>-1&&this.columnsByIndex.splice(t,1),(t=this.columns.indexOf(e))>-1&&this.columns.splice(t,1),this.verticalAlignHeaders(),this.redraw()}rerenderColumns(e,t){this.redrawBlock?(!1===e||!0===e&&null===this.redrawBlockUpdate)&&(this.redrawBlockUpdate=e):this.renderer.rerenderColumns(e,t)}blockRedraw(){this.redrawBlock=!0,this.redrawBlockUpdate=null}restoreRedraw(){this.redrawBlock=!1,this.verticalAlignHeaders(),this.renderer.rerenderColumns(this.redrawBlockUpdate)}redraw(e){r.elVisible(this.element)&&this.verticalAlignHeaders(),e&&(this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(e),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}class u{constructor(e){return this._row=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(){return this._row.getPosition()}watchPosition(e){return this._row.watchPosition(e)}delete(){return this._row.delete()}scrollTo(e,t){return this._row.table.rowManager.scrollToRow(this._row,e,t)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}_getSelf(){return this._row}reformat(){return this._row.reinitialize()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e?e.getComponent():e}getPrevRow(){var e=this._row.prevRow();return e?e.getComponent():e}}class m extends e{constructor(e,t,i="row"){super(t.table),this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.position=0,this.positionWatchers=[],this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){this.createElement(),this.dispatch("row-init",this)}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e,t){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.initialized=!0,this.table.columnManager.renderer.renderRowCells(this,t),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this)}else this.table.columnManager.renderer.rerenderRowCells(this,t)}rendered(){this.cells.forEach((e=>{e.cellRendered()}))}reinitializeHeight(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)}deinitialize(){this.initialized=!1}deinitializeHeight(){this.heightInitialized=!1}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.dispatch("row-relayout",this)}calcHeight(e){var t,i=0;this.table.options.rowHeight?this.height=this.table.options.rowHeight:(t=this.table.options.resizableRows?this.element.clientHeight:0,this.cells.forEach((function(e){var t=e.getHeight();t>i&&(i=t)})),this.height=e?Math.max(i,t):this.manualHeight?this.height:Math.max(i,t)),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}setCellHeight(){this.cells.forEach((function(e){e.setHeight()})),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach((function(e){e.clearHeight()}))}normalizeHeight(e){e&&!this.table.options.rowHeight&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.data=this.chain("row-data-init-before",[this,e],void 0,e),this.dispatch("row-data-init-after",this)}updateData(e){var t,i=this.element&&r.elVisible(this.element),s={};return new Promise(((o,n)=>{"string"==typeof e&&(e=JSON.parse(e)),this.dispatch("row-data-save-before",this),this.subscribed("row-data-changing")&&(s=Object.assign(s,this.data),s=Object.assign(s,e)),t=this.chain("row-data-changing",[this,s,e],null,e);for(let e in t)this.data[e]=t[e];this.dispatch("row-data-save-after",this);for(let s in e){this.table.columnManager.getColumnsByFieldRoot(s).forEach((e=>{let s=this.getCell(e.getField());if(s){let o=e.getFieldValue(t);s.getValue()!==o&&(s.setValueProcessData(o),i&&s.cellRendered())}}))}i?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),this.dispatch("row-data-changed",this,i,e),this.dispatchExternal("rowUpdated",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),o()}))}getData(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}getCell(e){return e=this.table.columnManager.findColumn(e),this.initialized||0!==this.cells.length||this.generateCells(),this.cells.find((function(t){return t.column===e}))}getCellIndex(e){return this.cells.findIndex((function(t){return t===e}))}findCell(e){return this.cells.find((t=>t.element===e))}getCells(){return this.initialized||0!==this.cells.length||this.generateCells(),this.cells}nextRow(){return this.table.rowManager.nextDisplayRow(this,!0)||!1}prevRow(){return this.table.rowManager.prevDisplayRow(this,!0)||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}delete(){return this.dispatch("row-delete",this),this.deleteActual(),Promise.resolve()}deleteActual(e){this.detachModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}detachModules(){this.dispatch("row-deleting",this)}deleteCells(){var e=this.cells.length;for(let t=0;t{e(this.position)})))}watchPosition(e){this.positionWatchers.push(e),e(this.position)}getGroup(){return this.modules.group||!1}getComponent(){return this.component||(this.component=new u(this)),this.component}}class p extends l{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.scrollTop=0,e.scrollLeft=0,e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility=""}renderRows(){var e=this.tableElement,t=!0,i=document.createDocumentFragment(),s=this.rows();s.forEach(((e,s)=>{this.styleRow(e,s),e.initialize(!1,!0),"group"!==e.type&&(t=!1),i.appendChild(e.getElement())})),e.appendChild(i),s.forEach((e=>{e.rendered(),e.heightInitialized||e.calcHeight(!0)})),s.forEach((e=>{e.heightInitialized||e.setCellHeight()})),e.style.minWidth=t?this.table.columnManager.getWidth()+"px":""}rerenderRows(e){this.clearRows(),e&&e(),this.renderRows(),this.rows().length||this.table.rowManager.tableEmpty()}scrollToRowNearestTop(e){var t=r.elOffset(e.getElement()).top;return!(Math.abs(this.elementVertical.scrollTop-t)>Math.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-t))}scrollToRow(e){var t=e.getElement();this.elementVertical.scrollTop=r.elOffset(t).top-r.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}visibleRows(e){return this.rows()}}class g extends l{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}renderRows(){this._virtualRenderFill()}rerenderRows(e){for(var t=this.elementVertical.scrollTop,i=!1,s=!1,o=this.table.rowManager.scrollLeft,n=this.rows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(n[r]){var a=t-n[r].getElement().offsetTop;if(!(!1===s||Math.abs(a){e.deinitializeHeight()})),e&&e(),this.rows().length?this._virtualRenderFill(!1===i?this.rows.length-1:i,!0,s||0):(this.clear(),this.table.rowManager.tableEmpty()),this.scrollColumns(o)}scrollColumns(e){this.table.rowManager.scrollHorizontal(e)}scrollRows(e,t){var i=e-this.vDomScrollPosTop,s=e-this.vDomScrollPosBottom,o=2*this.vDomWindowBuffer,n=this.rows();if(this.scrollTop=e,-i>o||s>o){var r=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*n.length)),this.scrollColumns(r)}else t?(i<0&&this._addTopRow(n,-i),s<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(n,-s):this.vDomScrollPosBottom=this.scrollTop)):(s>=0&&this._addBottomRow(n,s),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(n,i):this.vDomScrollPosTop=this.scrollTop))}resize(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}scrollToRowNearestTop(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}scrollToRow(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}visibleRows(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,s=!1,o=0,n=0,r=this.rows();if(e)o=this.vDomTop,n=this.vDomBottom;else for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(r[a])if(s){if(!(i-r[a].getElement().offsetTop>=0))break;n=a}else if(t-r[a].getElement().offsetTop>=0)o=a;else{if(s=!0,!(i-r[a].getElement().offsetTop>=0))break;n=a}return r.slice(o,n+1)}_virtualRenderFill(e,t,i){var s,o,n=this.tableElement,a=this.elementVertical,l=0,h=0,d=0,c=0,u=0,m=0,p=this.rows(),g=p.length,b=0,f=[],v=0,w=0,C=this.table.rowManager.fixedHeight,E=this.elementVertical.clientHeight,y=this.table.options.rowHeight,R=!0;if(i=i||0,e=e||0){for(;n.firstChild;)n.removeChild(n.firstChild);(c=(g-e+1)*this.vDomRowHeight){e.rendered(),e.heightInitialized||e.calcHeight(!0)})),f.forEach((e=>{e.heightInitialized||e.setCellHeight()})),f.forEach((e=>{d=e.getHeight(),vthis.vDomWindowBuffer&&(this.vDomWindowBuffer=2*d),v++})),R=this.table.rowManager.adjustTableSize(),E=this.elementVertical.clientHeight,R&&(C||this.table.options.maxHeight)&&(y=h/v,w=Math.max(this.vDomWindowMinTotalRows,Math.ceil(E/y+this.vDomWindowBuffer/y)))}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-u,this.vDomBottomPad=this.vDomBottom==g-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-h-u,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((h+u)/v),this.vDomBottomPad=this.vDomRowHeight*(g-this.vDomBottom-1),this.vDomScrollHeight=u+h+this.vDomBottomPad-E),n.style.paddingTop=this.vDomTopPad+"px",n.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+u+i-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-E:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-E),this.elementVertical.scrollWidth>this.elementVertical.clientWidth&&t&&(this.scrollTop+=this.elementVertical.offsetHeight-E),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,a.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}_addTopRow(e,t){for(var i=this.tableElement,s=[],o=0,n=this.vDomTop-1,r=0,a=!0;a;)if(this.vDomTop){let l,h,d=e[n];d&&r=l?(this.styleRow(d,n),i.insertBefore(d.getElement(),i.firstChild),d.initialized&&d.heightInitialized||s.push(d),d.initialize(),h||(l=d.getElement().offsetHeight,l>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l)),t-=l,o+=l,this.vDomTop--,n--,r++):a=!1):a=!1}else a=!1;for(let e of s)e.clearCellHeight();this._quickNormalizeRowHeight(s),o&&(this.vDomTopPad-=o,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n<1&&(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=o)}_removeTopRow(e,t){for(var i=[],s=0,o=0,n=!0;n;){let r,a=e[this.vDomTop];a&&o=r?(this.vDomTop++,t-=r,s+=r,i.push(a),o++):n=!1):n=!1}for(let e of i){let t=e.getElement();t.parentNode&&t.parentNode.removeChild(t)}s&&(this.vDomTopPad+=s,this.tableElement.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?s:s+this.vDomWindowBuffer)}_addBottomRow(e,t){for(var i=this.tableElement,s=[],o=0,n=this.vDomBottom+1,r=0,a=!0;a;){let l,h,d=e[n];d&&r=l?(this.styleRow(d,n),i.appendChild(d.getElement()),d.initialized&&d.heightInitialized||s.push(d),d.initialize(),h||(l=d.getElement().offsetHeight,l>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l)),t-=l,o+=l,this.vDomBottom++,n++,r++):a=!1):a=!1}for(let e of s)e.clearCellHeight();this._quickNormalizeRowHeight(s),o&&(this.vDomBottomPad-=o,(this.vDomBottomPad<0||n==e.length-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=o)}_removeBottomRow(e,t){for(var i=[],s=0,o=0,n=!0;n;){let r,a=e[this.vDomBottom];a&&o=r?(this.vDomBottom--,t-=r,s+=r,i.push(a),o++):n=!1):n=!1}for(let e of i){let t=e.getElement();t.parentNode&&t.parentNode.removeChild(t)}s&&(this.vDomBottomPad+=s,this.vDomBottomPad<0&&(this.vDomBottomPad=0),this.tableElement.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=s)}_quickNormalizeRowHeight(e){for(let t of e)t.calcHeight();for(let t of e)t.setCellHeight()}}class b extends e{constructor(e){super(e),this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.placeholder=null,this.placeholderContents=null,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRowsPipeline=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRenderInPosition=!1,this.dataPipeline=[],this.displayPipeline=[],this.scrollbarWidth=0,this.renderer=null}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableholder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e.setAttribute("role","rowgroup"),e}initializePlaceholder(){var e=this.table.options.placeholder;if("function"==typeof e&&(e=e.call(this.table)),e=this.chain("placeholder",[e],e,e)||e){let t=document.createElement("div");if(t.classList.add("tabulator-placeholder"),"string"==typeof e){let i=document.createElement("div");i.classList.add("tabulator-placeholder-contents"),i.innerHTML=e,t.appendChild(i),this.placeholderContents=i}else"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(t.appendChild(e),this.placeholderContents=e):(console.warn("Invalid placeholder provided, must be string or HTML Element",e),this.el=null);this.placeholder=t}}getElement(){return this.element}getTableElement(){return this.tableElement}initialize(){this.initializePlaceholder(),this.initializeRenderer(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",(()=>{var e=this.element.scrollLeft,t=this.scrollLeft>e,i=this.element.scrollTop,s=this.scrollTop>i;this.scrollLeft!=e&&(this.scrollLeft=e,this.dispatch("scroll-horizontal",e,t),this.dispatchExternal("scrollHorizontal",e,t),this._positionPlaceholder()),this.scrollTop!=i&&(this.scrollTop=i,this.renderer.scrollRows(i,s),this.dispatch("scroll-vertical",i,s),this.dispatchExternal("scrollVertical",i,s))}))}findRow(e){if("object"!=typeof e){if(void 0===e)return!1;return this.rows.find((t=>t.data[this.table.options.index]==e))||!1}if(e instanceof m)return e;if(e instanceof u)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return this.rows.find((t=>t.getElement()===e))||!1}return!1}getRowFromDataObject(e){return this.rows.find((t=>t.data===e))||!1}getRowFromPosition(e){return this.getDisplayRows().find((t=>t.getPosition()===e&&t.isDisplayed()))}scrollToRow(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}setData(e,t,i){return new Promise(((s,o)=>{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition((()=>{this._setDataActual(e)})):(this.table.options.autoColumns&&i&&this.table.initialized&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),s()}))}_setDataActual(e,t){this.dispatchExternal("dataProcessing",e),this._wipeElements(),Array.isArray(e)?(this.dispatch("data-processing",e),e.forEach(((e,t)=>{if(e&&"object"==typeof e){var i=new m(e,this);this.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",e)})),this.refreshActiveData(!1,!1,t),this.dispatch("data-processed",e),this.dispatchExternal("dataProcessed",e)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",typeof e,"\nData: ",e)}_wipeElements(){this.dispatch("rows-wipe"),this.destroy(),this.adjustTableSize(),this.dispatch("rows-wiped")}destroy(){this.rows.forEach((e=>{e.wipe()})),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0}deleteRow(e,t){var i=this.rows.indexOf(e),s=this.activeRows.indexOf(e);s>-1&&this.activeRows.splice(s,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator((t=>{var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t||this.reRenderInPosition(),this.regenerateRowPositions(),this.dispatchExternal("rowDeleted",e.getComponent()),this.displayRowsCount||this.tableEmpty(),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}addRow(e,t,i,s){return this.addRowActual(e,t,i,s)}addRows(e,t,i,s){var o=[];return new Promise(((n,r)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),(void 0===i&&t||void 0!==i&&!t)&&e.reverse(),e.forEach(((e,s)=>{var n=this.addRow(e,t,i,!0);o.push(n),this.dispatch("row-added",n,e,t,i)})),this.refreshActiveData(!!s&&"displayPipeline",!1,!0),this.regenerateRowPositions(),this.displayRowsCount&&this._clearPlaceholder(),n(o)}))}findAddRowPos(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e}addRowActual(e,t,i,s){var o,n,r=e instanceof m?e:new m(e||{},this),a=this.findAddRowPos(t),l=-1;return i||(n=this.chain("row-adding-position",[r,a],null,{index:i,top:a}),i=n.index,a=n.top),void 0!==i&&(i=this.findRow(i)),(i=this.chain("row-adding-index",[r,i,a],null,i))&&(l=this.rows.indexOf(i)),i&&l>-1?(o=this.activeRows.indexOf(i),this.displayRowIterator((function(e){var t=e.indexOf(i);t>-1&&e.splice(a?t:t+1,0,r)})),o>-1&&this.activeRows.splice(a?o:o+1,0,r),this.rows.splice(a?l:l+1,0,r)):a?(this.displayRowIterator((function(e){e.unshift(r)})),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator((function(e){e.push(r)})),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",r.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s||this.reRenderInPosition(),r}moveRow(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowPositions(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}moveRowActual(e,t,i){this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator((s=>{this.moveRowInArray(s,e,t,i)})),this.dispatch("row-moving",e,t,i)}moveRowInArray(e,t,i,s){var o,n,r;if(t!==i&&((o=e.indexOf(t))>-1&&(e.splice(o,1),(n=e.indexOf(i))>-1?s?e.splice(n+1,0,t):e.splice(n,0,t):e.splice(o,0,t)),e===this.getDisplayRows())){r=n>o?n:o+1;for(let t=o-1&&t}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),s=!1;return!1!==i&&i-1)&&i}getData(e,t){var i=[];return this.getRows(e).forEach((function(e){"row"==e.type&&i.push(e.getData(t||"data"))})),i}getComponents(e){var t=[];return this.getRows(e).forEach((function(e){t.push(e.getComponent())})),t}getDataCount(e){return this.getRows(e).length}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}registerDataPipelineHandler(e,t){void 0!==t?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort(((e,t)=>e.priority-t.priority))):console.error("Data pipeline handlers must have a priority in order to be registered")}registerDisplayPipelineHandler(e,t){void 0!==t?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort(((e,t)=>e.priority-t.priority))):console.error("Display pipeline handlers must have a priority in order to be registered")}refreshActiveData(e,t,i){var s=this.table,o="",n=0,a=["all","dataPipeline","display","displayPipeline","end"];if(!this.table.destroyed){if("function"==typeof e)if((n=this.dataPipeline.findIndex((t=>t.handler===e)))>-1)o="dataPipeline",t&&(n==this.dataPipeline.length-1?o="display":n++);else{if(!((n=this.displayPipeline.findIndex((t=>t.handler===e)))>-1))return void console.error("Unable to refresh data, invalid handler provided",e);o="displayPipeline",t&&(n==this.displayPipeline.length-1?o="end":n++)}else o=e||"all",n=0;if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===o&&n{"row"===e.type&&(e.setPosition(t),t++)}))}setActiveRows(e){this.activeRows=this.activeRows=Object.assign([],e),this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length}setDisplayRows(e,t){this.displayRows[t]=e,t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length)}getDisplayRows(e){return void 0===e?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e,t){var i=Object.assign([],this.renderer.visibleRows(!t));return e&&(i=this.chain("rows-visible",[t],i,i)),i}displayRowIterator(e){this.activeRowsPipeline.forEach(e),this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t=[];switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!1,!0);break;default:t=this.chain("rows-retrieve",e,null,this.rows)||this.rows}return t}reRenderInPosition(e){this.redrawBlock?e?e():this.redrawBlockRenderInPosition=!0:(this.dispatchExternal("renderStarted"),this.renderer.rerenderRows(e),this.fixedHeight||this.adjustTableSize(),this.scrollBarCheck(),this.dispatchExternal("renderComplete"))}scrollBarCheck(){var e=0;this.element.scrollHeight>this.element.clientHeight&&(e=this.element.offsetWidth-this.element.clientWidth),e!==this.scrollbarWidth&&(this.scrollbarWidth=e,this.dispatch("scrollbar-vertical",e))}initializeRenderer(){var e,t={virtual:g,basic:p};(e="string"==typeof this.table.options.renderVertical?t[this.table.options.renderVertical]:this.table.options.renderVertical)?(this.renderMode=this.table.options.renderVertical,this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize(),!this.table.element.clientHeight&&!this.table.options.height||this.table.options.minHeight&&this.table.options.maxHeight?this.fixedHeight=!1:this.fixedHeight=!0):console.error("Unable to find matching renderer:",this.table.options.renderVertical)}getRenderMode(){return this.renderMode}renderTable(){this.dispatchExternal("renderStarted"),this.element.scrollTop=0,this._clearTable(),this.displayRowsCount?(this.renderer.renderRows(),this.firstRender&&(this.firstRender=!1,this.fixedHeight||this.adjustTableSize(),this.layoutRefresh(!0))):this.renderEmptyScroll(),this.fixedHeight||this.adjustTableSize(),this.dispatch("table-layout"),this.displayRowsCount||this._showPlaceholder(),this.scrollBarCheck(),this.dispatchExternal("renderComplete")}renderEmptyScroll(){this.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearTable(){this._clearPlaceholder(),this.scrollTop=0,this.scrollLeft=0,this.renderer.clearRows()}tableEmpty(){this.renderEmptyScroll(),this._showPlaceholder()}checkPlaceholder(){this.displayRowsCount?this._clearPlaceholder():this.tableEmpty()}_showPlaceholder(){this.placeholder&&(this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.initializePlaceholder(),this.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.placeholder),this._positionPlaceholder(),this.adjustTableSize())}_clearPlaceholder(){this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.tableElement.style.minWidth="",this.tableElement.style.display=""}_positionPlaceholder(){this.placeholder&&this.placeholder.parentNode&&(this.placeholder.style.width=this.table.columnManager.getWidth()+"px",this.placeholderContents.style.width=this.table.rowManager.element.clientWidth+"px",this.placeholderContents.style.marginLeft=this.scrollLeft+"px")}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}normalizeHeight(){this.activeRows.forEach((function(e){e.normalizeHeight()}))}adjustTableSize(){let e,t=this.element.clientHeight,i=!1;if("fill"===this.renderer.verticalFillMode){let s=Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));if(this.fixedHeight){e=isNaN(this.table.options.minHeight)?this.table.options.minHeight:this.table.options.minHeight+"px";const t="calc(100% - "+s+"px)";this.element.style.minHeight=e||"calc(100% - "+s+"px)",this.element.style.height=t,this.element.style.maxHeight=t}else this.element.style.height="",this.element.style.height=this.table.element.clientHeight-s+"px",this.element.scrollTop=this.scrollTop;this.renderer.resize(),this.fixedHeight||t==this.element.clientHeight||(i=!0,this.subscribed("table-resize")?this.dispatch("table-resize"):this.redraw()),this.scrollBarCheck()}return this._positionPlaceholder(),i}reinitialize(){this.rows.forEach((function(e){e.reinitialize(!0)}))}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.handler,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRenderInPosition&&this.reRenderInPosition(),this.redrawBlockRenderInPosition=!1}redraw(e){this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():(this.reRenderInPosition(),this.scrollHorizontal(this.scrollLeft))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class f extends e{constructor(e){super(e),this.active=!1,this.element=this.createElement(),this.containerElement=this.createContainerElement(),this.external=!1}initialize(){this.initializeElement()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}createContainerElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer-contents"),this.element.appendChild(e),e}initializeElement(){if(this.table.options.footerElement)if("string"==typeof this.table.options.footerElement)"<"===this.table.options.footerElement[0]?this.containerElement.innerHTML=this.table.options.footerElement:(this.external=!0,this.containerElement=document.querySelector(this.table.options.footerElement));else this.element=this.table.options.footerElement}getElement(){return this.element}append(e){this.activate(),this.containerElement.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e){this.activate(),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display=""))}redraw(){this.dispatch("footer-redraw")}}class v extends e{constructor(e){super(e),this.el=null,this.abortClasses=["tabulator-headers","tabulator-table"],this.previousTargets={},this.listeners=["click","dblclick","contextmenu","mouseenter","mouseleave","mouseover","mouseout","mousemove","mouseup","mousedown","touchstart","touchend"],this.componentMap={"tabulator-cell":"cell","tabulator-row":"row","tabulator-group":"group","tabulator-col":"column"},this.pseudoTrackers={row:{subscriber:null,target:null},cell:{subscriber:null,target:null},group:{subscriber:null,target:null},column:{subscriber:null,target:null}},this.pseudoTracking=!1}initialize(){this.el=this.table.element,this.buildListenerMap(),this.bindSubscriptionWatchers()}buildListenerMap(){var e={};this.listeners.forEach((t=>{e[t]={handler:null,components:[]}})),this.listeners=e}bindPseudoEvents(){Object.keys(this.pseudoTrackers).forEach((e=>{this.pseudoTrackers[e].subscriber=this.pseudoMouseEnter.bind(this,e),this.subscribe(e+"-mouseover",this.pseudoTrackers[e].subscriber)})),this.pseudoTracking=!0}pseudoMouseEnter(e,t,i){this.pseudoTrackers[e].target!==i&&(this.pseudoTrackers[e].target&&this.dispatch(e+"-mouseleave",t,this.pseudoTrackers[e].target),this.pseudoMouseLeave(e,t),this.pseudoTrackers[e].target=i,this.dispatch(e+"-mouseenter",t,i))}pseudoMouseLeave(e,t){var i=Object.keys(this.pseudoTrackers),s={row:["cell"],cell:["row"]};(i=i.filter((t=>{var i=s[e];return t!==e&&(!i||i&&!i.includes(t))}))).forEach((e=>{var i=this.pseudoTrackers[e].target;this.pseudoTrackers[e].target&&(this.dispatch(e+"-mouseleave",t,i),this.pseudoTrackers[e].target=null)}))}bindSubscriptionWatchers(){var e=Object.keys(this.listeners),t=Object.values(this.componentMap);for(let i of t)for(let t of e){let e=i+"-"+t;this.subscriptionChange(e,this.subscriptionChanged.bind(this,i,t))}this.subscribe("table-destroy",this.clearWatchers.bind(this))}subscriptionChanged(e,t,i){var s=this.listeners[t].components,o=s.indexOf(e),n=!1;i?-1===o&&(s.push(e),n=!0):this.subscribed(e+"-"+t)||o>-1&&(s.splice(o,1),n=!0),"mouseenter"!==t&&"mouseleave"!==t||this.pseudoTracking||this.bindPseudoEvents(),n&&this.updateEventListeners()}updateEventListeners(){for(let e in this.listeners){let t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}track(e,t){var i=t.composedPath&&t.composedPath()||t.path,s=this.findTargets(i);s=this.bindComponents(e,s),this.triggerEvents(e,t,s),!this.pseudoTracking||"mouseover"!=e&&"mouseleave"!=e||Object.keys(s).length||this.pseudoMouseLeave("none",t)}findTargets(e){var t={};let i=Object.keys(this.componentMap);for(let s of e){let e=s.classList?[...s.classList]:[];if(e.filter((e=>this.abortClasses.includes(e))).length)break;let o=e.filter((e=>i.includes(e)));for(let e of o)t[this.componentMap[e]]||(t[this.componentMap[e]]=s)}return t.group&&t.group===t.row&&delete t.row,t}bindComponents(e,t){var i=Object.keys(t).reverse(),s=this.listeners[e],o={},n={};for(let e of i){let i,r=t[e],a=this.previousTargets[e];if(a&&a.target===r)i=a.component;else switch(e){case"row":case"group":if(s.components.includes("row")||s.components.includes("cell")||s.components.includes("group")){i=this.table.rowManager.getVisibleRows(!0).find((e=>e.getElement()===r)),t.row&&t.row.parentNode&&t.row.parentNode.closest(".tabulator-row")&&(t[e]=!1)}break;case"column":s.components.includes("column")&&(i=this.table.columnManager.findColumn(r));break;case"cell":s.components.includes("cell")&&(o.row instanceof m?i=o.row.findCell(r):t.row&&console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"))}i&&(o[e]=i,n[e]={target:r,component:i})}return this.previousTargets=n,o}triggerEvents(e,t,i){var s=this.listeners[e];for(let o in i)i[o]&&s.components.includes(o)&&this.dispatch(o+"-"+e,t,i[o])}clearWatchers(){for(let e in this.listeners){let t=this.listeners[e];t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}}class w{constructor(e){this.table=e,this.bindings={}}bind(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,i):this.bindings[e][t]=i}handle(e,t,i){if(this.bindings[e]&&this.bindings[e][i]&&"function"==typeof this.bindings[e][i].bind)return this.bindings[e][i].bind(null,t);"then"===i||"string"!=typeof i||i.startsWith("_")||this.table.options.debugInvalidComponentFuncs&&console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}class C extends e{constructor(e){super(e),this.requestOrder=0,this.loading=!1}initialize(){}load(e,t,i,s,o,n){var r=++this.requestOrder;return this.table.destroyed?Promise.resolve():(this.dispatchExternal("dataLoading",e),!e||0!=e.indexOf("{")&&0!=e.indexOf("[")||(e=JSON.parse(e)),this.confirm("data-loading",[e,t,i,o])?(this.loading=!0,o||this.alertLoader(),t=this.chain("data-params",[e,i,o],t||{},t||{}),t=this.mapParams(t,this.table.options.dataSendParams),this.chain("data-load",[e,t,i,o],!1,Promise.resolve([])).then((e=>{if(this.table.destroyed)console.warn("Data Load Response Blocked - Table has been destroyed");else{Array.isArray(e)||"object"!=typeof e||(e=this.mapParams(e,this.objectInvert(this.table.options.dataReceiveParams)));var t=this.chain("data-loaded",e,null,e);r==this.requestOrder?(this.clearAlert(),!1!==t&&(this.dispatchExternal("dataLoaded",t),this.table.rowManager.setData(t,s,void 0===n?!s:n))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")}})).catch((e=>{console.error("Data Load Error: ",e),this.dispatchExternal("dataLoadError",e),o||this.alertError(),setTimeout((()=>{this.clearAlert()}),this.table.options.dataLoaderErrorTimeout)})).finally((()=>{this.loading=!1}))):(this.dispatchExternal("dataLoaded",e),e||(e=[]),this.table.rowManager.setData(e,s,void 0===n?!s:n),Promise.resolve()))}mapParams(e,t){var i={};for(let s in e)i[t.hasOwnProperty(s)?t[s]:s]=e[s];return i}objectInvert(e){var t={};for(let i in e)t[e[i]]=i;return t}blockActiveLoad(){this.requestOrder++}alertLoader(){("function"==typeof this.table.options.dataLoader?this.table.options.dataLoader():this.table.options.dataLoader)&&this.table.alertManager.alert(this.table.options.dataLoaderLoading||this.langText("data|loading"))}alertError(){this.table.alertManager.alert(this.table.options.dataLoaderError||this.langText("data|error"),"error")}clearAlert(){this.table.alertManager.clear()}}class E{constructor(e,t,i){this.table=e,this.events={},this.optionsList=t||{},this.subscriptionNotifiers={},this.dispatch=i?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=i}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((e=>e===t)))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}else delete this.events[e];this._notifySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}subscribed(e){return this.events[e]&&this.events[e].length}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((e=>{e(t)}))}_dispatch(){var e,t=Array.from(arguments),i=t.shift();return this.events[i]&&this.events[i].forEach(((i,s)=>{let o=i.apply(this.table,t);s||(e=o)})),e}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="ExternalEvent:"+e[0],(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}}class y{constructor(e){this.events={},this.subscriptionNotifiers={},this.dispatch=e?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=e?this._debugChain.bind(this):this._chain.bind(this),this.confirm=e?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=e}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t,i=1e4){this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort(((e,t)=>e.priority-t.priority)),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((e=>e.callback===t)))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}this._notifySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}subscribed(e){return this.events[e]&&this.events[e].length}_chain(e,t,i,s){var o=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach(((e,i)=>{o=e.callback.apply(this,t.concat([o]))})),o):"function"==typeof s?s():s}_confirm(e,t){var i=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach(((e,s)=>{e.callback.apply(this,t)&&(i=!0)})),i}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((e=>{e(t)}))}_dispatch(){var e=Array.from(arguments),t=e.shift();this.events[t]&&this.events[t].forEach((t=>{t.callback.apply(this,e)}))}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}_debugChain(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._chain(...arguments)}_debugConfirm(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._confirm(...arguments)}}class R extends e{constructor(e){super(e)}_warnUser(){this.options("debugDeprecation")&&console.warn(...arguments)}check(e,t,i){var s="";return void 0===this.options(e)||(s="Deprecated Setup Option - Use of the %c"+e+"%c option is now deprecated",t?(s=s+", Please use the %c"+t+"%c option instead",this._warnUser(s,"font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;"),i&&(this.table.options[t]=this.table.options[e])):this._warnUser(s,"font-weight: bold;","font-weight: normal;"),!1)}checkMsg(e,t){return void 0===this.options(e)||(this._warnUser("%cDeprecated Setup Option - Use of the %c"+e+" %c option is now deprecated, "+t,"font-weight: normal;","font-weight: bold;","font-weight: normal;"),!1)}msg(e){this._warnUser(e)}}class x{static register(e){x.tables.push(e)}static deregister(e){var t=x.tables.indexOf(e);t>-1&&x.tables.splice(t,1)}static lookupTable(e,t){var i,s,o=[];if("string"==typeof e){if((i=document.querySelectorAll(e)).length)for(var n=0;n{e.stopPropagation()}))),this}_fitToScreen(e,t,i,s,o){var n=this.container===document.body?document.documentElement.scrollTop:this.container.scrollTop;if((e+this.element.offsetWidth>=this.container.offsetWidth||this.reversedX)&&(this.element.style.left="",this.element.style.right=i?this.container.offsetWidth-s.left+"px":this.container.offsetWidth-e+"px",this.reversedX=!0),t+this.element.offsetHeight>Math.max(this.container.offsetHeight,n?this.container.scrollHeight:0))if(i)if("bottom"===o)this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight-i.offsetHeight-1+"px";else this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+i.offsetHeight+1+"px";else this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+"px"}isVisible(){return this.visible}hideOnBlur(e){return this.blurable=!0,this.visible&&(setTimeout((()=>{this.visible&&(this.table.rowManager.element.addEventListener("scroll",this.blurEvent),this.subscribe("cell-editing",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),document.body.addEventListener("mousedown",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent),this.blurEventsBound=!0)}),100),this.blurCallback=e),this}_escapeCheck(e){27==e.keyCode&&this.hide()}blockHide(){this.hideable=!1}restoreHide(){this.hideable=!0}hide(e=!1){return this.visible&&this.hideable&&(this.blurable&&this.blurEventsBound&&(document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),document.body.removeEventListener("mousedown",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent),this.unsubscribe("cell-editing",this.blurEvent),this.blurEventsBound=!1),this.childPopup&&this.childPopup.hide(),this.parent&&(this.parent.childPopup=null),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.visible=!1,this.blurCallback&&!e&&this.blurCallback(),this.unsubscribe("table-destroy",this.destroyBinding)),this}child(e){return this.childPopup&&this.childPopup.hide(),this.childPopup=new T(this.table,e,this),this.childPopup}}class k extends e{constructor(e,t){super(e),this._handler=null}initialize(){}registerTableOption(e,t){this.table.optionsList.register(e,t)}registerColumnOption(e,t){this.table.columnManager.optionsList.register(e,t)}registerTableFunction(e,t){void 0===this.table[e]?this.table[e]=(...i)=>(this.table.initGuard(e),t(...i)):console.warn("Unable to bind table function, name already in use",e)}registerComponentFunction(e,t,i){return this.table.componentFunctionBinder.bind(e,t,i)}registerDataHandler(e,t){this.table.rowManager.registerDataPipelineHandler(e,t),this._handler=e}registerDisplayHandler(e,t){this.table.rowManager.registerDisplayPipelineHandler(e,t),this._handler=e}displayRows(e){var t,i=this.table.rowManager.displayRows.length-1;if(this._handler&&(t=this.table.rowManager.displayPipeline.findIndex((e=>e.handler===this._handler)))>-1&&(i=t),e&&(i+=e),this._handler)return i>-1?this.table.rowManager.getDisplayRows(i):this.activeRows()}activeRows(){return this.table.rowManager.activeRows}refreshData(e,t){t||(t=this._handler),t&&this.table.rowManager.refreshActiveData(t,!1,e)}footerAppend(e){return this.table.footerManager.append(e)}footerPrepend(e){return this.table.footerManager.prepend(e)}footerRemove(e){return this.table.footerManager.remove(e)}popup(e,t){return new T(this.table,e,t)}alert(e,t){return this.table.alertManager.alert(e,t)}clearAlert(){return this.table.alertManager.clear()}}function M(e,t){e.forEach((function(e){e.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}var L={fitData:function(e,t){t&&this.table.columnManager.renderer.reinitializeColumnWidths(e),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:M,fitDataTable:M,fitDataStretch:function(e,t){var i=0,s=this.table.rowManager.element.clientWidth,o=0,n=!1;e.forEach(((e,t)=>{e.widthFixed||e.reinitializeWidth(),(this.table.options.responsiveLayout?e.modules.responsive.visible:e.visible)&&(n=e),e.visible&&(i+=e.getWidth())})),n?(o=s-i+n.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(n.setWidth(0),this.table.modules.responsiveLayout.update()),o>0?n.setWidth(o):n.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e,t){var i,s,o=this.table.rowManager.element.getBoundingClientRect().width,n=0,r=0,a=0,l=[],h=[],d=0,c=0;function u(e){return"string"==typeof e?e.indexOf("%")>-1?o/100*parseInt(e):parseInt(e):e}function m(e,t,i,s){var o=[],n=0,r=0,l=0,h=a,d=0,c=0,p=[];function g(e){return i*(e.column.definition.widthGrow||1)}function b(e){return u(e.width)-i*(e.column.definition.widthShrink||0)}return e.forEach((function(e,n){var r=s?b(e):g(e);e.column.minWidth>=r?o.push(e):e.column.maxWidth&&e.column.maxWidththis.table.rowManager.element.clientHeight&&(o-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach((function(e){var t,i,s;e.visible&&(t=e.definition.width,i=parseInt(e.minWidth),t?(s=u(t),n+=s>i?s:i,e.definition.widthShrink&&(h.push({column:e,width:s>i?s:i}),d+=e.definition.widthShrink)):(l.push({column:e,width:0}),a+=e.definition.widthGrow||1))})),r=o-n,i=Math.floor(r/a),c=m(l,r,i,!1),l.length&&c>0&&(l[l.length-1].width+=c),l.forEach((function(e){r-=e.width})),(s=Math.abs(c)+r)>0&&d&&(c=m(h,s,Math.floor(s/d),!0)),c&&h.length&&(h[h.length-1].width-=c),l.forEach((function(e){e.column.setWidth(e.width)})),h.forEach((function(e){e.column.setWidth(e.width)}))}};class S extends k{constructor(e){super(e,"layout"),this.mode=null,this.registerTableOption("layout","fitData"),this.registerTableOption("layoutColumnsOnNewData",!1),this.registerColumnOption("widthGrow"),this.registerColumnOption("widthShrink")}initialize(){var e=this.table.options.layout;S.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode),this.subscribe("column-init",this.initializeColumn.bind(this))}initializeColumn(e){e.definition.widthGrow&&(e.definition.widthGrow=Number(e.definition.widthGrow)),e.definition.widthShrink&&(e.definition.widthShrink=Number(e.definition.widthShrink))}getMode(){return this.mode}layout(e){this.dispatch("layout-refreshing"),S.modes[this.mode].call(this,this.table.columnManager.columnsByIndex,e),this.dispatch("layout-refreshed")}}S.moduleName="layout",S.modes=L;class D extends k{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={},this.registerTableOption("locale",!1),this.registerTableOption("langs",{})}initialize(){this.langList=r.deepClone(D.langs),!1!==this.table.options.columnDefaults.headerFilterPlaceholder&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);for(let e in this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&"object"==typeof e[i]?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){if(!0===(e=e||"default")&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let t=e.split("-")[0];this.langList[t]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,t),e=t):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=r.deepClone(this.langList.default||{}),"default"!=e&&function e(t,i){for(var s in t)"object"==typeof t[s]?(i[s]||(i[s]={}),e(t[s],i[s])):i[s]=t[s]}(this.langList[e],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=(t?e+"|"+t:e).split("|");return this._getLangElement(i,this.locale)||""}_getLangElement(e,t){var i=this.lang;return e.forEach((function(e){var t;i&&(t=i[e],i=void 0!==t&&t)})),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach((t=>{t(this.getText(e),this.lang)}))}}D.moduleName="localize",D.langs={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All",counter:{showing:"Showing",of:"of",rows:"rows",pages:"pages"}},headerFilters:{default:"filter column...",columns:{}}}};class P extends k{constructor(e){super(e)}initialize(){this.registerTableFunction("tableComms",this.receive.bind(this))}getConnections(e){var t=[];return x.lookupTable(e).forEach((e=>{this.table!==e&&t.push(e)})),t}send(e,t,i,s){var o=this.getConnections(e);o.forEach((e=>{e.tableComms(this.table.element,t,i,s)})),!o.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,s){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,s);console.warn("Inter-table Comms Error - no such module:",t)}}P.moduleName="comms";var z=Object.freeze({__proto__:null,LayoutModule:S,LocalizeModule:D,CommsModule:P});class H{constructor(e,t){this.bindStaticFunctionality(e),this.bindModules(e,z,!0),t&&this.bindModules(e,t)}bindStaticFunctionality(e){e.moduleBindings={},e.extendModule=function(t,i,s){if(e.moduleBindings[t]){var o=e.moduleBindings[t][i];if(o)if("object"==typeof s)for(let e in s)o[e]=s[e];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",i)}else console.warn("Module Error - module does not exist:",t)},e.registerModule=function(t){Array.isArray(t)||(t=[t]),t.forEach((t=>{e.registerModuleBinding(t)}))},e.registerModuleBinding=function(t){e.moduleBindings[t.moduleName]=t},e.findTable=function(e){var t=x.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t},e.prototype.bindModules=function(){var t=[],i=[],s=[];for(var o in this.modules={},e.moduleBindings){let n=e.moduleBindings[o],r=new n(this);this.modules[o]=r,n.prototype.moduleCore?this.modulesCore.push(r):n.moduleInitOrder?n.moduleInitOrder<0?t.push(r):i.push(r):s.push(r)}t.sort(((e,t)=>e.moduleInitOrder>t.moduleInitOrder?1:-1)),i.sort(((e,t)=>e.moduleInitOrder>t.moduleInitOrder?1:-1)),this.modulesRegular=t.concat(s.concat(i))}}bindModules(e,t,i){var s=Object.values(t);i&&s.forEach((e=>{e.prototype.moduleCore=!0})),e.registerModule(s)}}class F extends e{constructor(e){super(e),this.element=this._createAlertElement(),this.msgElement=this._createMsgElement(),this.type=null,this.element.appendChild(this.msgElement)}_createAlertElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert"),e}_createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert-msg"),e.setAttribute("role","alert"),e}_typeClass(){return"tabulator-alert-state-"+this.type}alert(e,t="msg"){if(e){for(this.clear(),this.dispatch("alert-show",t),this.type=t;this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.add(this._typeClass()),"function"==typeof e&&(e=e()),e instanceof HTMLElement?this.msgElement.appendChild(e):this.msgElement.innerHTML=e,this.table.element.appendChild(this.element)}}clear(){this.dispatch("alert-hide",this.type),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.msgElement.classList.remove(this._typeClass())}}class _{constructor(e,t){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.alertManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.originalElement=null,this.componentFunctionBinder=new w(this),this.dataLoader=!1,this.modules={},this.modulesCore=[],this.modulesRegular=[],this.deprecationAdvisor=new R(this),this.optionsList=new a(this,"table constructor"),this.initialized=!1,this.destroyed=!1,this.initializeElement(e)&&(this.initializeCoreSystems(t),setTimeout((()=>{this._create()}))),x.register(this)}initializeElement(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}initializeCoreSystems(e){this.columnManager=new c(this),this.rowManager=new b(this),this.footerManager=new f(this),this.dataLoader=new C(this),this.alertManager=new F(this),this.bindModules(),this.options=this.optionsList.generate(_.defaultOptions,e),this._clearObjectPointers(),this._mapDeprecatedFunctionality(),this.externalEvents=new E(this,this.options,this.options.debugEventsExternal),this.eventBus=new y(this.options.debugEventsInternal),this.interactionMonitor=new v(this),this.dataLoader.initialize(),this.footerManager.initialize()}_mapDeprecatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this._rtlCheck(),this._buildElement(),this._initializeTable(),this._loadInitialData(),this.initialized=!0,this.externalEvents.dispatch("tableBuilt")}_rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==e.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),Array.isArray(this.options.data)&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}_buildElement(){var e,t=this.element,i=this.options;if("TABLE"===t.tagName){this.originalElement=this.element,e=document.createElement("div");var s=t.attributes;for(var o in s)"object"==typeof s[o]&&e.setAttribute(s[o].name,s[o].value);t.parentNode.replaceChild(e,t),this.element=t=e}for(t.classList.add("tabulator"),t.setAttribute("role","grid");t.firstChild;)t.removeChild(t.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",t.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",t.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",t.style.maxHeight=i.maxHeight)}_initializeTable(){var e=this.element,t=this.options;this.interactionMonitor.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modulesCore.forEach((e=>{e.initialize()})),e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&t.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modulesRegular.forEach((e=>{e.initialize()})),this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built")}_loadInitialData(){this.dataLoader.load(this.options.data),this.columnManager.verticalAlignHeaders()}destroy(){var e=this.element;for(this.destroyed=!0,x.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.destroy();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator"),this.externalEvents.dispatch("tableDestroyed")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):e.indexOf("Mac OS")>-1?(this.browser="safari",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.slice(0,4))}initGuard(e,t){var i,s;return this.options.debugInitialization&&!this.initialized&&(e||(e=" "==(s="Error"==(i=(new Error).stack.split("\n"))[0]?i[2]:i[1])[0]?s.trim().split(" ")[1].split(".")[1]:s.trim().split("@")[0]),console.warn("Table Not Initialized - Calling the "+e+" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function."+(t?" "+t:""))),this.initialized}blockRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-blocking"),this.rowManager.blockRedraw(),this.columnManager.blockRedraw(),this.eventBus.dispatch("redraw-blocked")}restoreRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-restoring"),this.rowManager.restoreRedraw(),this.columnManager.restoreRedraw(),this.eventBus.dispatch("redraw-restored")}setData(e,t,i){return this.initGuard(!1,"To set initial data please use the 'data' property in the table constructor."),this.dataLoader.load(e,t,i,!1)}clearData(){this.initGuard(),this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}replaceData(e,t,i){return this.initGuard(),this.dataLoader.load(e,t,i,!0,!0)}updateData(e){var t=0;return this.initGuard(),new Promise(((i,s)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e&&e.length>0?e.forEach((e=>{var o=this.rowManager.findRow(e[this.options.index]);o?(t++,o.updateData(e).then((()=>{--t||i()})).catch((t=>{s("Update Error - Unable to update row",e,t)}))):s("Update Error - Unable to find row",e)})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))}addData(e,t,i){return this.initGuard(),new Promise(((s,o)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then((e=>{var t=[];e.forEach((function(e){t.push(e.getComponent())})),s(t)})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}updateOrAddData(e){var t=[],i=0;return this.initGuard(),new Promise(((s,o)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e&&e.length>0?e.forEach((e=>{var o=this.rowManager.findRow(e[this.options.index]);i++,o?o.updateData(e).then((()=>{i--,t.push(o.getComponent()),i||s(t)})):this.rowManager.addRows(e).then((e=>{i--,t.push(e[0].getComponent()),i||s(t)}))})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e){var t=this.rowManager.getRowFromPosition(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){var t=[];this.initGuard(),Array.isArray(e)||(e=[e]);for(let i of e){let e=this.rowManager.findRow(i,!0);if(!e)return console.error("Delete Error - No matching row found:",i),Promise.reject("Delete Error - No matching row found");t.push(e)}return t.sort(((e,t)=>this.rowManager.rows.indexOf(e)>this.rowManager.rows.indexOf(t)?1:-1)),t.forEach((e=>{e.delete()})),this.rowManager.reRenderInPosition(),Promise.resolve()}addRow(e,t,i){return this.initGuard(),"string"==typeof e&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i,!0).then((e=>e[0].getComponent()))}updateOrAddRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((()=>i.getComponent())):this.rowManager.addRows(t).then((e=>e[0].getComponent()))}updateRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((()=>Promise.resolve(i.getComponent()))):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}scrollToRow(e,t,i){var s=this.rowManager.findRow(e);return s?this.rowManager.scrollToRow(s,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}moveRow(e,t,i){var s=this.rowManager.findRow(e);this.initGuard(),s?s.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e){var t=this.rowManager.findRow(e);return t?t.getPosition():(console.warn("Position Error - No matching row found:",e),!1)}setColumns(e){this.initGuard(!1,"To set initial columns please use the 'columns' property in the table constructor"),this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}showColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show()}hideColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide()}toggleColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()}addColumn(e,t,i){var s=this.columnManager.findColumn(i);return this.initGuard(),this.columnManager.addColumn(e,t,s).then((e=>e.getComponent()))}deleteColumn(e){var t=this.columnManager.findColumn(e);return this.initGuard(),t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}updateColumnDefinition(e,t){var i=this.columnManager.findColumn(e);return this.initGuard(),i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}moveColumn(e,t,i){var s=this.columnManager.findColumn(e),o=this.columnManager.findColumn(t);this.initGuard(),s?o?this.columnManager.moveColumn(s,o,i):console.warn("Move Error - No matching column found:",o):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise(((s,o)=>{var n=this.columnManager.findColumn(e);return n?this.columnManager.scrollToColumn(n,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))}))}redraw(e){this.initGuard(),this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw(!0)}on(e,t){this.externalEvents.subscribe(e,t)}off(e,t){this.externalEvents.unsubscribe(e,t)}dispatchEvent(){Array.from(arguments).shift(),this.externalEvents.dispatch(...arguments)}alert(e,t){this.initGuard(),this.alertManager.alert(e,t)}clearAlert(){this.initGuard(),this.alertManager.clear()}modExists(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)}module(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}}_.defaultOptions={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,debugInvalidComponentFuncs:!0,debugInitialization:!0,debugDeprecation:!0,height:!1,minHeight:!1,maxHeight:!1,columnHeaderVertAlign:"top",popupContainer:!1,columns:[],columnDefaults:{},data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,rowHeight:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataLoaderErrorTimeout:3e3,dataSendParams:{},dataReceiveParams:{}},new H(_);class O extends k{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"],this.registerColumnOption("accessor"),this.registerColumnOption("accessorParams"),this.registerColumnOption("accessorData"),this.registerColumnOption("accessorDataParams"),this.registerColumnOption("accessorDownload"),this.registerColumnOption("accessorDownloadParams"),this.registerColumnOption("accessorClipboard"),this.registerColumnOption("accessorClipboardParams"),this.registerColumnOption("accessorPrint"),this.registerColumnOption("accessorPrintParams"),this.registerColumnOption("accessorHtmlOutput"),this.registerColumnOption("accessorHtmlOutputParams")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((s=>{var o,n="accessor"+(s.charAt(0).toUpperCase()+s.slice(1));e.definition[n]&&(o=this.lookupAccessor(e.definition[n]))&&(t=!0,i[n]={accessor:o,params:e.definition[n+"Params"]||{}})})),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":O.accessors[e]?t=O.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),s=e.getComponent(),o=r.deepClone(e.data||{});return this.table.columnManager.traverse((function(e){var n,r,a,l;e.modules.accessor&&(r=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(n=e.getFieldValue(o))&&(l=e.getComponent(),a="function"==typeof r.params?r.params(n,o,t,l,s):r.params,e.setFieldValue(o,r.accessor(n,o,t,a,l,s)))})),o}}O.moduleName="accessor",O.accessors={};function A(e,t){var i=[];if(t=t||"",Array.isArray(e))e.forEach(((e,s)=>{i=i.concat(A(e,t?t+"["+s+"]":s))}));else if("object"==typeof e)for(var s in e)i=i.concat(A(e[s],t?t+"["+s+"]":s));else i.push({key:t,value:e});return i}function B(e){var t=A(e),i=[];return t.forEach((function(e){i.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))})),i.join("&")}function V(e,t,i){return e&&i&&Object.keys(i).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+B(i))),e}function I(e,t){var i=[];if(t=t||"",Array.isArray(e))e.forEach(((e,s)=>{i=i.concat(I(e,t?t+"["+s+"]":s))}));else if("object"==typeof e)for(var s in e)i=i.concat(I(e[s],t?t+"["+s+"]":s));else i.push({key:t,value:e});return i}var N={json:{headers:{"Content-Type":"application/json"},body:function(e,t,i){return JSON.stringify(i)}},form:{headers:{},body:function(e,t,i){var s=I(i),o=new FormData;return s.forEach((function(e){o.append(e.key,e.value)})),o}}};class W extends k{constructor(e){super(e),this.config={},this.url="",this.urlGenerator=!1,this.params=!1,this.loaderPromise=!1,this.registerTableOption("ajaxURL",!1),this.registerTableOption("ajaxURLGenerator",!1),this.registerTableOption("ajaxParams",{}),this.registerTableOption("ajaxConfig","get"),this.registerTableOption("ajaxContentType","form"),this.registerTableOption("ajaxRequestFunc",!1),this.registerTableOption("ajaxRequesting",(function(){})),this.registerTableOption("ajaxResponse",!1),this.contentTypeFormatters=W.contentTypeFormatters}initialize(){this.loaderPromise=this.table.options.ajaxRequestFunc||W.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||W.defaultURLGenerator,this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.setDefaultConfig(this.table.options.ajaxConfig),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-params",this.requestParams.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}requestParams(e,t,i,s){var o=this.table.options.ajaxParams;return o&&("function"==typeof o&&(o=o.call(this.table)),s=Object.assign(Object.assign({},o),s)),s}requestDataCheck(e,t,i,s){return!((e||!this.url)&&"string"!=typeof e)}requestData(e,t,i,s,o){var n;return!o&&this.requestDataCheck(e)?(e&&this.setUrl(e),n=this.generateConfig(i),this.sendRequest(this.url,t,n)):o}setDefaultConfig(e={}){this.config=Object.assign({},W.defaultConfig),"string"==typeof e?this.config.method=e:Object.assign(this.config,e)}generateConfig(e={}){var t=Object.assign({},this.config);return"string"==typeof e?t.method=e:Object.assign(t,e),t}setUrl(e){this.url=e}getUrl(){return this.url}sendRequest(e,t,i){return!1!==this.table.options.ajaxRequesting.call(this.table,e,t)?this.loaderPromise(e,i,t).then((i=>(this.table.options.ajaxResponse&&(i=this.table.options.ajaxResponse.call(this.table,e,t,i)),i))):Promise.reject()}}W.moduleName="ajax",W.defaultConfig={method:"GET"},W.defaultURLGenerator=V,W.defaultLoaderPromise=function(e,t,i){var s;return new Promise(((o,n)=>{if(e=this.urlGenerator.call(this.table,e,t,i),"GET"!=t.method.toUpperCase())if(s="object"==typeof this.table.options.ajaxContentType?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType]){for(var r in s.headers)t.headers||(t.headers={}),void 0===t.headers[r]&&(t.headers[r]=s.headers[r]);t.body=s.body.call(this,e,t,i)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers.Origin&&(t.headers.Origin=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then((e=>{e.ok?e.json().then((e=>{o(e)})).catch((e=>{n(e),console.warn("Ajax Load Error - Invalid JSON returned",e)})):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),n(e))})).catch((e=>{console.error("Ajax Load Error - Connection Error: ",e),n(e)}))):(console.warn("Ajax Load Error - No URL Set"),o([]))}))},W.contentTypeFormatters=N;class j extends k{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0,this.registerTableOption("clipboard",!1),this.registerTableOption("clipboardCopyStyled",!0),this.registerTableOption("clipboardCopyConfig",!1),this.registerTableOption("clipboardCopyFormatter",!1),this.registerTableOption("clipboardCopyRowRange","active"),this.registerTableOption("clipboardPasteParser","table"),this.registerTableOption("clipboardPasteAction","insert"),this.registerColumnOption("clipboard"),this.registerColumnOption("titleClipboard")}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(e=>{var t,i,s;this.blocked||(e.preventDefault(),this.customSelection?(t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t))):(s=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard"),t=(i=this.table.modules.export.generateHTMLTable(s))?this.generatePlainContent(s):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))),window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.dispatchExternal("clipboardCopied",t,i),this.reset())})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(e=>{this.paste(e)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach((e=>{var i=[];e.columns.forEach((t=>{var s="";if(t)if("group"===e.type&&(t.value=t.component.getKey()),null===t.value)s="";else switch(typeof t.value){case"object":s=JSON.stringify(t.value);break;case"undefined":s="";break;default:s=t.value}i.push(s)})),t.push(i.join("\t"))})),t.join("\n")}copy(e,t){var i,s;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(this.table.element),(i=window.getSelection()).toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((s=document.body.createTextRange()).moveToElementText(this.table.element),s.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=j.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=j.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}}paste(e){var t,i,s;this.checkPasteOrigin(e)&&(t=this.getPasteData(e),(i=this.pasteParser.call(this,t))?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),s=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,s)):this.dispatchExternal("clipboardPasteError",t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach((e=>{t.push(this.table.modules.mutator.transformRow(e,"clipboard"))})):t=e,t}checkPasteOrigin(e){var t=!0;return!this.confirm("clipboard-paste",[e])&&["DIV","SPAN"].includes(e.target.tagName)||(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}}j.moduleName="clipboard",j.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)},range:function(e){var t,i,s,o,n,r=[],a=this.table.modules.selectRange.activeRange,l=!1;return n=e.length,a&&(i=(t=a.getBounds()).start,t.start===t.end&&(l=!0),i&&(s=(r=this.table.rowManager.activeRows.slice()).indexOf(i.row),o=l?e.length:r.indexOf(t.end.row)-s+1,s>-1&&(this.table.blockRedraw(),(r=r.slice(s,s+o)).forEach(((t,i)=>{t.updateData(e[i%n])})),this.table.restoreRedraw()))),r}},j.pasteParsers={table:function(e){var t=[],i=!0,s=this.table.columnManager.columns,o=[],n=[];return(e=e.split("\n")).forEach((function(e){t.push(e.split("\t"))})),!(!t.length||1===t.length&&t[0].length<2)&&(t[0].forEach((function(e){var t=s.find((function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()}));t?o.push(t):i=!1})),i||(i=!0,o=[],t[0].forEach((function(e){var t=s.find((function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()}));t?o.push(t):i=!1})),i||(o=this.table.columnManager.columnsByIndex)),i&&t.shift(),t.forEach((function(e){var t={};e.forEach((function(e,i){o[i]&&(t[o[i].field]=e)})),n.push(t)})),n)},range:function(e){var t,i,s,o,n,r=[],a=[],l=this.table.modules.selectRange.activeRange,h=!1;return!!(l&&(i=(t=l.getBounds()).start,t.start===t.end&&(h=!0),i&&((e=e.split("\n")).forEach((function(e){r.push(e.split("\t"))})),r.length&&(n=(o=this.table.columnManager.getVisibleColumnsByIndex()).indexOf(i.column))>-1)))&&(s=h?r[0].length:o.indexOf(t.end.column)-n+1,o=o.slice(n,n+s),r.forEach((e=>{var t={},i=e.length;o.forEach((function(s,o){t[s.field]=e[o%i]})),a.push(t)})),a)}};class G{constructor(e){return this._row=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}_getSelf(){return this._row}}var U={avg:function(e,t,i){var s=0,o=void 0!==i.precision?i.precision:2;return e.length&&(s=e.reduce((function(e,t){return Number(e)+Number(t)})),s/=e.length,s=!1!==o?s.toFixed(o):s),parseFloat(s).toString()},max:function(e,t,i){var s=null,o=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))>s||null===s)&&(s=e)})),null!==s?!1!==o?s.toFixed(o):s:""},min:function(e,t,i){var s=null,o=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))(e||0===t)&&e.indexOf(t)===i)).length}};class J extends k{constructor(e){super(e),this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.blocked=!1,this.recalcAfterBlock=!1,this.registerTableOption("columnCalcs",!0),this.registerColumnOption("topCalc"),this.registerColumnOption("topCalcParams"),this.registerColumnOption("topCalcFormatter"),this.registerColumnOption("topCalcFormatterParams"),this.registerColumnOption("bottomCalc"),this.registerColumnOption("bottomCalcParams"),this.registerColumnOption("bottomCalcFormatter"),this.registerColumnOption("bottomCalcFormatterParams")}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e}initialize(){this.genColumn=new n({field:"value"},this),this.subscribe("cell-value-changed",this.cellValueChanged.bind(this)),this.subscribe("column-init",this.initializeColumnCheck.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("column-moved",this.recalcActiveRows.bind(this)),this.subscribe("column-add",this.recalcActiveRows.bind(this)),this.subscribe("data-refreshed",this.recalcActiveRowsRefresh.bind(this)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("rows-visible",this.visibleRows.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this)),this.subscribe("redraw-blocked",this.blockRedraw.bind(this)),this.subscribe("redraw-restored",this.restoreRedraw.bind(this)),this.subscribe("table-redrawing",this.resizeHolderWidth.bind(this)),this.subscribe("column-resized",this.resizeHolderWidth.bind(this)),this.subscribe("column-show",this.resizeHolderWidth.bind(this)),this.subscribe("column-hide",this.resizeHolderWidth.bind(this)),this.registerTableFunction("getCalcResults",this.getResults.bind(this)),this.registerTableFunction("recalc",this.userRecalc.bind(this)),this.resizeHolderWidth()}resizeHolderWidth(){this.topElement.style.minWidth=this.table.columnManager.headersElement.offsetWidth+"px"}tableRedraw(e){this.recalc(this.table.rowManager.activeRows),e&&this.redraw()}blockRedraw(){this.blocked=!0,this.recalcAfterBlock=!1}restoreRedraw(){this.blocked=!1,this.recalcAfterBlock&&(this.recalcAfterBlock=!1,this.recalcActiveRowsRefresh())}userRecalc(){this.recalc(this.table.rowManager.activeRows)}blockCheck(){return this.blocked&&(this.recalcAfterBlock=!0),this.blocked}visibleRows(e,t){return this.topRow&&t.unshift(this.topRow),this.botRow&&t.push(this.botRow),t}rowsUpdated(e){this.table.options.groupBy?this.recalcRowGroup(e):this.recalcActiveRows()}recalcActiveRowsRefresh(){this.table.options.groupBy&&this.table.options.dataTreeStartExpanded&&this.table.options.dataTree?this.recalcAll():this.recalcActiveRows()}recalcActiveRows(){this.recalc(this.table.rowManager.activeRows)}cellValueChanged(e){(e.column.definition.topCalc||e.column.definition.bottomCalc)&&(this.table.options.groupBy?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.recalcActiveRows(),"table"!=this.table.options.columnCalcs&&this.recalcRowGroup(e.row)):this.recalcActiveRows())}initializeColumnCheck(e){(e.definition.topCalc||e.definition.bottomCalc)&&this.initializeColumn(e)}initializeColumn(e){var t=e.definition,i={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(typeof t.topCalc){case"string":J.calculations[t.topCalc]?i.topCalc=J.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":i.topCalc=t.topCalc}i.topCalc&&(e.modules.columnCalcs=i,this.topCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(t.bottomCalc){switch(typeof t.bottomCalc){case"string":J.calculations[t.bottomCalc]?i.botCalc=J.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":i.botCalc=t.bottomCalc}i.botCalc&&(e.modules.columnCalcs=i,this.botCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}}registerColumnField(){}removeCalcs(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.footerRemove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()}reinitializeCalcs(){this.topCalcs.length&&this.initializeTopRow(),this.botCalcs.length&&this.initializeBottomRow()}initializeTopRow(){var e=document.createDocumentFragment();this.topInitialized||(e.appendChild(document.createElement("br")),e.appendChild(this.topElement),this.table.columnManager.getContentsElement().insertBefore(e,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)}initializeBottomRow(){this.botInitialized||(this.footerPrepend(this.botElement),this.botInitialized=!0)}scrollHorizontal(e){this.botInitialized&&this.botRow&&(this.botElement.scrollLeft=e)}recalc(e){var t,i;if(!this.blockCheck()&&(this.topInitialized||this.botInitialized)){if(t=this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),i=this.generateRow("top",t),this.topRow=i;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(i.getElement()),i.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),i=this.generateRow("bottom",t),this.botRow=i;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(i.getElement()),i.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}}recalcRowGroup(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))}recalcAll(){(this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalcActiveRows(),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs&&this.table.modules.groupRows.getChildGroups().forEach((e=>{this.recalcGroup(e)})))}recalcGroup(e){var t,i;this.blockCheck()||e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[];return e.forEach((e=>{if(t.push(e.getData()),this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs&&e.modules.dataTree&&e.modules.dataTree.open){var i=this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(e));t=t.concat(i)}})),t}generateRow(e,t){var i,s=this.generateRowData(e,t);return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),i=new m(s,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),i.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),i.component=!1,i.getComponent=()=>(i.component||(i.component=new G(i)),i.component),i.generateCells=()=>{var t=[];this.table.columnManager.columnsByIndex.forEach((s=>{this.genColumn.setField(s.getField()),this.genColumn.hozAlign=s.hozAlign,s.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(s.definition[e+"CalcFormatter"]),params:s.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=s.definition.cssClass;var n=new o(this.genColumn,i);n.getElement(),n.column=s,n.setWidth(),s.cells.push(n),t.push(n),s.visible||n.hide()})),i.cells=t},i}generateRowData(e,t){var i,s,o={},n="top"==e?this.topCalcs:this.botCalcs,r="top"==e?"topCalc":"botCalc";return n.forEach((function(e){var n=[];e.modules.columnCalcs&&e.modules.columnCalcs[r]&&(t.forEach((function(t){n.push(e.getFieldValue(t))})),s=r+"Params",i="function"==typeof e.modules.columnCalcs[s]?e.modules.columnCalcs[s](n,t):e.modules.columnCalcs[s],e.setFieldValue(o,e.modules.columnCalcs[r](n,t,i)))})),o}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.getGroups(!0).forEach((t=>{e[t.getKey()]=this.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),s={};return i.forEach((e=>{s[e.getKey()]=this.getGroupResults(e)})),{top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:s}}adjustForScrollbar(e){this.botRow&&(this.table.rtl?this.botElement.style.paddingLeft=e+"px":this.botElement.style.paddingRight=e+"px")}}J.moduleName="columnCalcs",J.calculations=U;class X extends k{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.registerTableOption("dataTree",!1),this.registerTableOption("dataTreeFilter",!0),this.registerTableOption("dataTreeSort",!0),this.registerTableOption("dataTreeElementColumn",!1),this.registerTableOption("dataTreeBranchElement",!0),this.registerTableOption("dataTreeChildIndent",9),this.registerTableOption("dataTreeChildField","_children"),this.registerTableOption("dataTreeCollapseElement",!1),this.registerTableOption("dataTreeExpandElement",!1),this.registerTableOption("dataTreeStartExpanded",!1),this.registerTableOption("dataTreeChildColumnCalcs",!1),this.registerTableOption("dataTreeSelectPropagate",!1),this.registerComponentFunction("row","treeCollapse",this.collapseRow.bind(this)),this.registerComponentFunction("row","treeExpand",this.expandRow.bind(this)),this.registerComponentFunction("row","treeToggle",this.toggleRow.bind(this)),this.registerComponentFunction("row","getTreeParent",this.getTreeParent.bind(this)),this.registerComponentFunction("row","getTreeChildren",this.getRowChildren.bind(this)),this.registerComponentFunction("row","addTreeChild",this.addTreeChildRow.bind(this)),this.registerComponentFunction("row","isTreeExpanded",this.isRowExpanded.bind(this))}initialize(){if(this.table.options.dataTree){var e=null,t=this.table.options;switch(this.field=t.dataTreeChildField,this.indent=t.dataTreeChildIndent,this.options("movableRows")&&console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"),t.dataTreeBranchElement?!0===t.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof t.dataTreeBranchElement?((e=document.createElement("div")).innerHTML=t.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=t.dataTreeBranchElement:(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch-empty")),t.dataTreeCollapseElement?"string"==typeof t.dataTreeCollapseElement?((e=document.createElement("div")).innerHTML=t.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=t.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
    "),t.dataTreeExpandElement?"string"==typeof t.dataTreeExpandElement?((e=document.createElement("div")).innerHTML=t.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=t.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
    "),typeof t.dataTreeStartExpanded){case"boolean":this.startOpen=function(e,i){return t.dataTreeStartExpanded};break;case"function":this.startOpen=t.dataTreeStartExpanded;break;default:this.startOpen=function(e,i){return t.dataTreeStartExpanded[i]}}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("cell-value-updated",this.cellValueChanged.bind(this)),this.subscribe("edit-cancelled",this.cellValueChanged.bind(this)),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.subscribe("table-built",this.initializeElementField.bind(this)),this.subscribe("table-redrawing",this.tableRedrawing.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}tableRedrawing(e){e&&this.table.rowManager.getRows().forEach((e=>{this.reinitializeRowChildren(e)}))}initializeElementField(){var e=this.table.columnManager.getFirstVisibleColumn();this.elementField=this.table.options.dataTreeElementColumn||!!e&&e.field}getRowChildren(e){return this.getTreeChildren(e,!0)}columnMoving(){var e=[];return this.table.rowManager.rows.forEach((t=>{e=e.concat(this.getTreeChildren(t,!1,!0))})),e}rowDataChanged(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}cellValueChanged(e){e.column.getField()===this.elementField&&this.layoutRow(e.row)}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),s=i||!i&&"object"==typeof t&&null!==t;!s&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!s&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!s&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!s)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!s)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:s}}reinitializeRowChildren(e){this.getTreeChildren(e,!1,!0).forEach((function(e){e.reinitialize(!0)}))}layoutRow(e){var t=(this.elementField?e.getCell(this.elementField):e.getCells()[0]).getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,t),e.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),t.insertBefore(i.branchEl,t.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?t.style.paddingRight=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":t.style.paddingLeft=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,s=i.controlEl;t=t||e.getCells()[0].getElement(),!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.collapseRow(e)}))):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.expandRow(e)}))),i.controlEl.addEventListener("mousedown",(e=>{e.stopPropagation()})),s&&s.parentNode===t?s.parentNode.replaceChild(i.controlEl,s):t.insertBefore(i.controlEl,t.firstChild))}getRows(e){var t=[];return e.forEach(((e,i)=>{var s;t.push(e),e instanceof m&&(e.create(),(s=e.modules.dataTree).index||!1===s.children||this.getChildren(e).forEach((e=>{e.create(),t.push(e)})))})),t}getChildren(e,t){var i=e.modules.dataTree,s=[],o=[];return!1!==i.children&&(i.open||t)&&(Array.isArray(i.children)||(i.children=this.generateChildren(e)),s=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(i.children):i.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(s),s.forEach((e=>{o.push(e),this.getChildren(e).forEach((e=>{o.push(e)}))}))),o}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach((i=>{var s=new m(i||{},this.table.rowManager);s.create(),s.modules.dataTree.index=e.modules.dataTree.index+1,s.modules.dataTree.parent=e,s.modules.dataTree.children&&(s.modules.dataTree.open=this.startOpen(s.getComponent(),s.modules.dataTree.index)),t.push(s)})),t}expandRow(e,t){var i=e.modules.dataTree;!1!==i.children&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",e.getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))}isRowExpanded(e){return e.modules.dataTree.open}getTreeParent(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()}getTreeParentRoot(e){return e.modules.dataTree&&e.modules.dataTree.parent?this.getTreeParentRoot(e.modules.dataTree.parent):e}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(t.children):t.children).forEach((e=>{e instanceof m&&i.push(e)}))),i}rowDelete(e){var t,i=e.modules.dataTree.parent;i&&(!1!==(t=this.findChildIndex(e,i))&&i.data[this.field].splice(t,1),i.data[this.field].length||delete i.data[this.field],this.initializeRow(i),this.layoutRow(i)),this.refreshData(!0)}addTreeChildRow(e,t,i,s){var o=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==s&&!1!==(o=this.findChildIndex(s,e))&&e.data[this.field].splice(i?o:o+1,0,t),!1===o&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}findChildIndex(e,t){var i=!1;return"object"==typeof e?e instanceof m?i=e.data:e instanceof u?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?t.modules.dataTree&&(i=t.modules.dataTree.children.find((t=>t instanceof m&&t.element===e)))&&(i=i.data):null===e&&(i=!1):i=void 0!==e&&t.data[this.field].find((t=>t.data[this.table.options.index]==e)),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i}getTreeChildren(e,t,i){var s=e.modules.dataTree,o=[];return s&&s.children&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),s.children.forEach((e=>{e instanceof m&&(o.push(t?e.getComponent():e),i&&(o=o.concat(this.getTreeChildren(e,t,i))))}))),o}getChildField(){return this.field}redrawNeeded(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]}}X.moduleName="dataTree";var q={csv:function(e,t={},i){var s=t.delimiter?t.delimiter:",",o=[],n=[];e.forEach((e=>{var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(((e,t)=>{e&&1===e.depth&&(n[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')}));break;case"row":e.columns.forEach((e=>{if(e){switch(typeof e.value){case"object":e.value=null!==e.value?JSON.stringify(e.value):"";break;case"undefined":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}})),o.push(t.join(s))}})),n.length&&o.unshift(n.join(s)),o=o.join("\n"),t.bom&&(o="\ufeff"+o),i(o,"text/csv")},json:function(e,t,i){var s=[];e.forEach((e=>{var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((e=>{e&&(t[e.component.getTitleDownload()||e.component.getField()]=e.value)})),s.push(t)}})),i(s=JSON.stringify(s,null,"\t"),"application/json")},jsonLines:function(e,t,i){const s=[];e.forEach((e=>{const t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((e=>{e&&(t[e.component.getTitleDownload()||e.component.getField()]=e.value)})),s.push(JSON.stringify(t))}})),i(s.join("\n"),"application/x-ndjson")},pdf:function(e,t={},i){var s=[],o=[],n={},r=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},a=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},l=t.jsPDF||{},h=t.title?t.title:"";function d(e,t){var i=[];return e.columns.forEach((e=>{var s;if(e){switch(typeof e.value){case"object":e.value=null!==e.value?JSON.stringify(e.value):"";break;case"undefined":e.value=""}s={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(s.styles=t),i.push(s)}})),i}l.orientation||(l.orientation=t.orientation||"landscape"),l.unit||(l.unit="pt"),e.forEach((e=>{switch(e.type){case"header":s.push(d(e));break;case"group":o.push(d(e,r));break;case"calc":o.push(d(e,a));break;case"row":o.push(d(e))}}));var c=new jspdf.jsPDF(l);t.autoTable&&(n="function"==typeof t.autoTable?t.autoTable(c)||{}:t.autoTable),h&&(n.didDrawPage=function(e){c.text(h,40,30)}),n.head=s,n.body=o,c.autoTable(n),t.documentProcessing&&t.documentProcessing(c),i(c.output("arraybuffer"),"application/pdf")},xlsx:function(t,i,s){var o=i.sheetName||"Sheet1",n=XLSX.utils.book_new(),r=new e(this),a=!("compress"in i)||i.compress,l=i.writeOptions||{bookType:"xlsx",bookSST:!0,compression:a};function h(){var e=[],i=[],s={},o={s:{c:0,r:0},e:{c:t[0]?t[0].columns.reduce(((e,t)=>e+(t&&t.width?t.width:1)),0):0,r:t.length}};return t.forEach(((t,s)=>{var o=[];t.columns.forEach((function(e,t){e?(o.push(e.value instanceof Date||"object"!=typeof e.value?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&(e.height>1||e.width>1)&&i.push({s:{r:s,c:t},e:{r:s+e.height-1,c:t+e.width-1}})):o.push("")})),e.push(o)})),XLSX.utils.sheet_add_aoa(s,e),s["!ref"]=XLSX.utils.encode_range(o),i.length&&(s["!merges"]=i),s}if(l.type="binary",n.SheetNames=[],n.Sheets={},i.sheetOnly)s(h());else{if(i.sheets)for(var d in i.sheets)!0===i.sheets[d]?(n.SheetNames.push(d),n.Sheets[d]=h()):(n.SheetNames.push(d),r.commsSend(i.sheets[d],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(e){n.Sheets[d]=e}}));else n.SheetNames.push(o),n.Sheets[o]=h();i.documentProcessing&&(n=i.documentProcessing(n)),s(function(e){for(var t=new ArrayBuffer(e.length),i=new Uint8Array(t),s=0;s!=e.length;++s)i[s]=255&e.charCodeAt(s);return t}(XLSX.write(n,l)),"application/octet-stream")}},html:function(e,t,i){this.modExists("export",!0)&&i(this.modules.export.generateHTMLTable(e),"text/html")}};class K extends k{constructor(e){super(e),this.registerTableOption("downloadEncoder",(function(e,t){return new Blob([e],{type:t})})),this.registerTableOption("downloadReady",void 0),this.registerTableOption("downloadConfig",{}),this.registerTableOption("downloadRowRange","active"),this.registerColumnOption("download"),this.registerColumnOption("titleDownload")}initialize(){this.deprecatedOptionsCheck(),this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}deprecatedOptionsCheck(){this.deprecationCheck("downloadReady","downloadEncoder")}downloadToTab(e,t,i,s){this.download(e,t,i,s,!0)}download(e,t,i,s,o){var n=!1;if("function"==typeof e?n=e:K.downloaders[e]?n=K.downloaders[e]:console.warn("Download Error - No such download type found: ",e),n){var r=this.generateExportList(s);n.call(this.table,r,i||{},function(i,s){o?!0===o?this.triggerDownload(i,s,e,t,!0):o(i):this.triggerDownload(i,s,e,t)}.bind(this))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach((e=>{var t;"group"===e.type&&(t=e.columns[0],i&&i[e.indent]&&(t.value=i[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))})),t}triggerDownload(e,t,i,s,o){var n=document.createElement("a"),r=this.table.options.downloadEncoder(e,t);r&&(o?window.open(window.URL.createObjectURL(r)):(s=s||"Tabulator."+("function"==typeof i?"txt":i),navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,s):(n.setAttribute("href",window.URL.createObjectURL(r)),n.setAttribute("download",s),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n))),this.dispatchExternal("downloadComplete"))}commsReceived(e,t,i){if("intercept"===t)this.download(i.type,"",i.options,i.active,i.intercept)}}function Y(e,t){var i=t.mask,s=void 0!==t.maskLetterChar?t.maskLetterChar:"A",o=void 0!==t.maskNumberChar?t.maskNumberChar:"9",n=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*";function r(t){var a=i[t];void 0!==a&&a!==n&&a!==s&&a!==o&&(e.value=e.value+""+a,r(t+1))}e.addEventListener("keydown",(t=>{var r=e.value.length,a=t.key;if(t.keyCode>46&&!t.ctrlKey&&!t.metaKey){if(r>=i.length)return t.preventDefault(),t.stopPropagation(),!1;switch(i[r]){case s:if(a.toUpperCase()==a.toLowerCase())return t.preventDefault(),t.stopPropagation(),!1;break;case o:if(isNaN(a))return t.preventDefault(),t.stopPropagation(),!1;break;case n:break;default:if(a!==i[r])return t.preventDefault(),t.stopPropagation(),!1}}})),e.addEventListener("keyup",(i=>{i.keyCode>46&&t.maskAutoFill&&r(e.value.length)})),e.placeholder||(e.placeholder=i),t.maskAutoFill&&r(e.value.length)}K.moduleName="download",K.downloaders=q;class ${constructor(e,t,i,s,o,n){this.edit=e,this.table=e.table,this.cell=t,this.params=this._initializeParams(n),this.data=[],this.displayItems=[],this.currentItems=[],this.focusedItem=null,this.input=this._createInputElement(),this.listEl=this._createListElement(),this.initialValues=null,this.isFilter="header"===t.getType(),this.filterTimeout=null,this.filtered=!1,this.typing=!1,this.values=[],this.popup=null,this.listIteration=0,this.lastAction="",this.filterTerm="",this.blurable=!0,this.actions={success:s,cancel:o},this._deprecatedOptionsCheck(),this._initializeValue(),i(this._onRendered.bind(this))}_deprecatedOptionsCheck(){this.params.listItemFormatter&&this.cell.getTable().deprecationAdvisor.msg("The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options"),this.params.sortValuesList&&this.cell.getTable().deprecationAdvisor.msg("The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options"),this.params.searchFunc&&this.cell.getTable().deprecationAdvisor.msg("The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options"),this.params.searchingPlaceholder&&this.cell.getTable().deprecationAdvisor.msg("The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options")}_initializeValue(){var e=this.cell.getValue();void 0===e&&void 0!==this.params.defaultValue&&(e=this.params.defaultValue),this.initialValues=this.params.multiselect?e:[e],this.isFilter&&(this.input.value=this.initialValues?this.initialValues.join(","):"",this.headerFilterInitialListGen())}_onRendered(){var e=this.cell.getElement();function t(e){e.stopPropagation()}this.isFilter||(this.input.style.height="100%",this.input.focus({preventScroll:!0})),e.addEventListener("click",t),setTimeout((()=>{e.removeEventListener("click",t)}),1e3),this.input.addEventListener("mousedown",this._preventPopupBlur.bind(this))}_createListElement(){var e=document.createElement("div");return e.classList.add("tabulator-edit-list"),e.addEventListener("mousedown",this._preventBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e}_setListWidth(){var e=this.isFilter?this.input:this.cell.getElement();this.listEl.style.minWidth=e.offsetWidth+"px",this.params.maxWidth&&(!0===this.params.maxWidth?this.listEl.style.maxWidth=e.offsetWidth+"px":"number"==typeof this.params.maxWidth?this.listEl.style.maxWidth=this.params.maxWidth+"px":this.listEl.style.maxWidth=this.params.maxWidth)}_createInputElement(){var e=this.params.elementAttributes,t=document.createElement("input");if(t.setAttribute("type",this.params.clearable?"search":"text"),t.style.padding="4px",t.style.width="100%",t.style.boxSizing="border-box",this.params.autocomplete||(t.style.cursor="default",t.style.caretColor="transparent"),e&&"object"==typeof e)for(let i in e)"+"==i.charAt(0)?(i=i.slice(1),t.setAttribute(i,t.getAttribute(i)+e["+"+i])):t.setAttribute(i,e[i]);return this.params.mask&&Y(t,this.params),this._bindInputEvents(t),t}_initializeParams(e){var t,i=["values","valuesURL","valuesLookup"];return(e=Object.assign({},e)).verticalNavigation=e.verticalNavigation||"editor",e.placeholderLoading=void 0===e.placeholderLoading?"Searching ...":e.placeholderLoading,e.placeholderEmpty=void 0===e.placeholderEmpty?"No Results Found":e.placeholderEmpty,e.filterDelay=void 0===e.filterDelay?300:e.filterDelay,e.emptyValue=Object.keys(e).includes("emptyValue")?e.emptyValue:"",(t=Object.keys(e).filter((e=>i.includes(e))).length)?t>1&&console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"):console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"),e.autocomplete?e.multiselect&&(e.multiselect=!1,console.warn("list editor config error - multiselect option is not available when autocomplete is enabled")):(e.freetext&&(e.freetext=!1,console.warn("list editor config error - freetext option is only available when autocomplete is enabled")),e.filterFunc&&(e.filterFunc=!1,console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled")),e.filterRemote&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled")),e.mask&&(e.mask=!1,console.warn("list editor config error - mask option is only available when autocomplete is enabled")),e.allowEmpty&&(e.allowEmpty=!1,console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled")),e.listOnEmpty&&(e.listOnEmpty=!1,console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"))),e.filterRemote&&"function"!=typeof e.valuesLookup&&!e.valuesURL&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source")),e}_bindInputEvents(e){e.addEventListener("focus",this._inputFocus.bind(this)),e.addEventListener("click",this._inputClick.bind(this)),e.addEventListener("blur",this._inputBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e.addEventListener("search",this._inputSearch.bind(this)),this.params.autocomplete&&e.addEventListener("keyup",this._inputKeyUp.bind(this))}_inputFocus(e){this.rebuildOptionsList()}_filter(){this.params.filterRemote?(clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout((()=>{this.rebuildOptionsList()}),this.params.filterDelay)):this._filterList()}_inputClick(e){e.stopPropagation()}_inputBlur(e){this.blurable&&(this.popup?this.popup.hide():this._resolveValue(!0))}_inputSearch(){this._clearChoices()}_inputKeyDown(e){switch(e.keyCode){case 38:this._keyUp(e);break;case 40:this._keyDown(e);break;case 37:case 39:this._keySide(e);break;case 13:this._keyEnter();break;case 27:this._keyEsc();break;case 36:case 35:this._keyHomeEnd(e);break;case 9:this._keyTab(e);break;default:this._keySelectLetter(e)}}_inputKeyUp(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:this._keyAutoCompLetter(e)}}_preventPopupBlur(){this.popup&&this.popup.blockHide(),setTimeout((()=>{this.popup&&this.popup.restoreHide()}),10)}_preventBlur(){this.blurable=!1,setTimeout((()=>{this.blurable=!0}),10)}_keyTab(e){this.params.autocomplete&&"typing"===this.lastAction?this._resolveValue(!0):this.focusedItem&&this._chooseItem(this.focusedItem,!0)}_keyUp(e){var t=this.displayItems.indexOf(this.focusedItem);("editor"==this.params.verticalNavigation||"hybrid"==this.params.verticalNavigation&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&this._focusItem(this.displayItems[t-1]))}_keyDown(e){var t=this.displayItems.indexOf(this.focusedItem);("editor"==this.params.verticalNavigation||"hybrid"==this.params.verticalNavigation&&t=38&&e.keyCode<=90&&this._scrollToValue(e.keyCode))}_keyAutoCompLetter(e){this._filter(),this.lastAction="typing",this.typing=!0}_scrollToValue(e){clearTimeout(this.filterTimeout);var t=String.fromCharCode(e).toLowerCase();this.filterTerm+=t.toLowerCase();var i=this.displayItems.find((e=>void 0!==e.label&&e.label.toLowerCase().startsWith(this.filterTerm)));i&&this._focusItem(i),this.filterTimeout=setTimeout((()=>{this.filterTerm=""}),800)}_focusItem(e){this.lastAction="focus",this.focusedItem&&this.focusedItem.element&&this.focusedItem.element.classList.remove("focused"),this.focusedItem=e,e&&e.element&&(e.element.classList.add("focused"),e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"}))}headerFilterInitialListGen(){this._generateOptions(!0)}rebuildOptionsList(){this._generateOptions().then(this._sortOptions.bind(this)).then(this._buildList.bind(this)).then(this._showList.bind(this)).catch((e=>{Number.isInteger(e)||console.error("List generation error",e)}))}_filterList(){this._buildList(this._filterOptions()),this._showList()}_generateOptions(e){var t=[],i=++this.listIteration;return this.filtered=!1,this.params.values?t=this.params.values:this.params.valuesURL?t=this._ajaxRequest(this.params.valuesURL,this.input.value):"function"==typeof this.params.valuesLookup?t=this.params.valuesLookup(this.cell,this.input.value):this.params.valuesLookup&&(t=this._uniqueColumnValues(this.params.valuesLookupField)),t instanceof Promise?(e||this._addPlaceholder(this.params.placeholderLoading),t.then().then((e=>this.listIteration===i?this._parseList(e):Promise.reject(i)))):Promise.resolve(this._parseList(t))}_addPlaceholder(e){var t=document.createElement("div");"function"==typeof e&&(e=e(this.cell.getComponent(),this.listEl)),e&&(this._clearList(),e instanceof HTMLElement?t=e:(t.classList.add("tabulator-edit-list-placeholder"),t.innerHTML=e),this.listEl.appendChild(t),this._showList())}_ajaxRequest(e,t){return e=V(e,{},this.params.filterRemote?{term:t}:{}),fetch(e).then((e=>e.ok?e.json().catch((e=>(console.warn("List Ajax Load Error - Invalid JSON returned",e),Promise.reject(e)))):(console.error("List Ajax Load Error - Connection Error: "+e.status,e.statusText),Promise.reject(e)))).catch((e=>(console.error("List Ajax Load Error - Connection Error: ",e),Promise.reject(e))))}_uniqueColumnValues(e){var t,i={},s=this.table.getData(this.params.valuesLookup);return(t=e?this.table.columnManager.getColumnByField(e):this.cell.getColumn()._getSelf())?s.forEach((e=>{var s=t.getFieldValue(e);null!=s&&""!==s&&(i[s]=!0)})):(console.warn("unable to find matching column to create select lookup list:",e),i=[]),Object.keys(i)}_parseList(e){var t=[];return Array.isArray(e)||(e=Object.entries(e).map((([e,t])=>({label:t,value:e})))),e.forEach((e=>{"object"!=typeof e&&(e={label:e,value:e}),this._parseListItem(e,t,0)})),!this.currentItems.length&&this.params.freetext&&(this.input.value=this.initialValues,this.typing=!0,this.lastAction="typing"),this.data=t,t}_parseListItem(e,t,i){var s={};e.options?s=this._parseListGroup(e,i+1):(s={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,selected:!1,visible:!0,level:i,original:e},this.initialValues&&this.initialValues.indexOf(e.value)>-1&&this._chooseItem(s,!0)),t.push(s)}_parseListGroup(e,t){var i={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,visible:!0,level:t,options:[],original:e};return e.options.forEach((e=>{this._parseListItem(e,i.options,t)})),i}_sortOptions(e){var t;return this.params.sort&&(t="function"==typeof this.params.sort?this.params.sort:this._defaultSortFunction.bind(this),this._sortGroup(t,e)),e}_sortGroup(e,t){t.sort(((t,i)=>e(t.label,i.label,t.value,i.value,t.original,i.original))),t.forEach((t=>{t.group&&this._sortGroup(e,t.options)}))}_defaultSortFunction(e,t){var i,s,o,n,r,a=0,l=/(\d+)|(\D+)/g,h=/\d/,d=0;if("desc"===this.params.sort&&([e,t]=[t,e]),e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((i=String(e).toLowerCase())===(s=String(t).toLowerCase()))return 0;if(!h.test(i)||!h.test(s))return i>s?1:-1;for(i=i.match(l),s=s.match(l),r=i.length>s.length?s.length:i.length;an?1:-1;return i.length>s.length}d=1}else d=t||0===t?-1:0;return d}_filterOptions(){var e=this.params.filterFunc||this._defaultFilterFunc,t=this.input.value;return t?(this.filtered=!0,this.data.forEach((i=>{this._filterItem(e,t,i)}))):this.filtered=!1,this.data}_filterItem(e,t,i){var s=!1;return i.group?(i.options.forEach((i=>{this._filterItem(e,t,i)&&(s=!0)})),i.visible=s):i.visible=e(t,i.label,i.value,i.original),i.visible}_defaultFilterFunc(e,t,i,s){return e=String(e).toLowerCase(),null!=t&&(String(t).toLowerCase().indexOf(e)>-1||String(i).toLowerCase().indexOf(e)>-1)}_clearList(){for(;this.listEl.firstChild;)this.listEl.removeChild(this.listEl.firstChild);this.displayItems=[]}_buildList(e){this._clearList(),e.forEach((e=>{this._buildItem(e)})),this.displayItems.length||this._addPlaceholder(this.params.placeholderEmpty)}_buildItem(e){var t,i=e.element;if(!this.filtered||e.visible){if(!i){if((i=document.createElement("div")).tabIndex=0,(t=this.params.itemFormatter?this.params.itemFormatter(e.label,e.value,e.original,i):e.label)instanceof HTMLElement?i.appendChild(t):i.innerHTML=t,e.group?i.classList.add("tabulator-edit-list-group"):i.classList.add("tabulator-edit-list-item"),i.classList.add("tabulator-edit-list-group-level-"+e.level),e.elementAttributes&&"object"==typeof e.elementAttributes)for(let t in e.elementAttributes)"+"==t.charAt(0)?(t=t.slice(1),i.setAttribute(t,this.input.getAttribute(t)+e.elementAttributes["+"+t])):i.setAttribute(t,e.elementAttributes[t]);e.group?i.addEventListener("click",this._groupClick.bind(this,e)):i.addEventListener("click",this._itemClick.bind(this,e)),i.addEventListener("mousedown",this._preventBlur.bind(this)),e.element=i}this._styleItem(e),this.listEl.appendChild(i),e.group?e.options.forEach((e=>{this._buildItem(e)})):this.displayItems.push(e)}}_showList(){var e=this.popup&&this.popup.isVisible();if(this.input.parentNode){if(this.params.autocomplete&&""===this.input.value&&!this.params.listOnEmpty)return void(this.popup&&this.popup.hide(!0));this._setListWidth(),this.popup||(this.popup=this.edit.popup(this.listEl)),this.popup.show(this.cell.getElement(),"bottom"),e||setTimeout((()=>{this.popup.hideOnBlur(this._resolveValue.bind(this,!0))}),10)}}_styleItem(e){e&&e.element&&(e.selected?e.element.classList.add("active"):e.element.classList.remove("active"))}_itemClick(e,t){t.stopPropagation(),this._chooseItem(e)}_groupClick(e,t){t.stopPropagation()}_cancel(){this.popup.hide(!0),this.actions.cancel()}_clearChoices(){this.typing=!0,this.currentItems.forEach((e=>{e.selected=!1,this._styleItem(e)})),this.currentItems=[],this.focusedItem=null}_chooseItem(e,t){var i;this.typing=!1,this.params.multiselect?((i=this.currentItems.indexOf(e))>-1?(this.currentItems.splice(i,1),e.selected=!1):(this.currentItems.push(e),e.selected=!0),this.input.value=this.currentItems.map((e=>e.label)).join(","),this._styleItem(e)):(this.currentItems=[e],e.selected=!0,this.input.value=e.label,this._styleItem(e),t||this._resolveValue()),this._focusItem(e)}_resolveValue(e){var t,i;if(this.popup&&this.popup.hide(!0),this.params.multiselect)t=this.currentItems.map((e=>e.value));else if(e&&this.params.autocomplete&&this.typing){if(!(this.params.freetext||this.params.allowEmpty&&""===this.input.value))return void this.actions.cancel();t=this.input.value}else t=this.currentItems[0]?this.currentItems[0].value:null==(i=Array.isArray(this.initialValues)?this.initialValues[0]:this.initialValues)||""===i?i:this.params.emptyValue;""===t&&(t=this.params.emptyValue),this.actions.success(t),this.isFilter&&(this.initialValues=t&&!Array.isArray(t)?[t]:t,this.currentItems=[])}}var Z={input:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input");if(r.setAttribute("type",o.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function a(e){null==n&&""!==r.value||r.value!==n?i(r.value)&&(n=r.value):s()}return r.value=void 0!==n?n:"",t((function(){"cell"===e.getType()&&(r.focus({preventScroll:!0}),r.style.height="100%",o.selectContents&&r.select())})),r.addEventListener("change",a),r.addEventListener("blur",a),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:a();break;case 27:s();break;case 35:case 36:e.stopPropagation()}})),o.mask&&Y(r,o),r},textarea:function(e,t,i,s,o){var n=e.getValue(),r=o.verticalNavigation||"hybrid",a=String(null!=n?n:""),l=document.createElement("textarea"),h=0;if(l.style.display="block",l.style.padding="2px",l.style.height="100%",l.style.width="100%",l.style.boxSizing="border-box",l.style.whiteSpace="pre-wrap",l.style.resize="none",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),l.setAttribute(e,l.getAttribute(e)+o.elementAttributes["+"+e])):l.setAttribute(e,o.elementAttributes[e]);function d(t){null==n&&""!==l.value||l.value!==n?(i(l.value)&&(n=l.value),setTimeout((function(){e.getRow().normalizeHeight()}),300)):s()}return l.value=a,t((function(){"cell"===e.getType()&&(l.focus({preventScroll:!0}),l.style.height="100%",l.scrollHeight,l.style.height=l.scrollHeight+"px",e.getRow().normalizeHeight(),o.selectContents&&l.select())})),l.addEventListener("change",d),l.addEventListener("blur",d),l.addEventListener("keyup",(function(){l.style.height="";var t=l.scrollHeight;l.style.height=t+"px",t!=h&&(h=t,e.getRow().normalizeHeight())})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:e.shiftKey&&o.shiftEnterSubmit&&d();break;case 27:s();break;case 38:("editor"==r||"hybrid"==r&&l.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==r||"hybrid"==r&&l.selectionStart!==l.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),o.mask&&Y(l,o),l},number:function(e,t,i,s,o){var n=e.getValue(),r=o.verticalNavigation||"editor",a=document.createElement("input");if(a.setAttribute("type","number"),void 0!==o.max&&a.setAttribute("max",o.max),void 0!==o.min&&a.setAttribute("min",o.min),void 0!==o.step&&a.setAttribute("step",o.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),a.setAttribute(e,a.getAttribute(e)+o.elementAttributes["+"+e])):a.setAttribute(e,o.elementAttributes[e]);a.value=n;var l=function(e){h()};function h(){var e=a.value;isNaN(e)||""===e||(e=Number(e)),e!==n?i(e)&&(n=e):s()}return t((function(){"cell"===e.getType()&&(a.removeEventListener("blur",l),a.focus({preventScroll:!0}),a.style.height="100%",a.addEventListener("blur",l),o.selectContents&&a.select())})),a.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:h();break;case 27:s();break;case 38:case 40:"editor"==r&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),o.mask&&Y(a,o),a},range:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),void 0!==o.max&&r.setAttribute("max",o.max),void 0!==o.min&&r.setAttribute("min",o.min),void 0!==o.step&&r.setAttribute("step",o.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function a(){var e=r.value;isNaN(e)||""===e||(e=Number(e)),e!=n?i(e)&&(n=e):s()}return r.value=n,t((function(){"cell"===e.getType()&&(r.focus({preventScroll:!0}),r.style.height="100%")})),r.addEventListener("blur",(function(e){a()})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:a();break;case 27:s()}})),r},date:function(e,t,i,s,o){var n=o.format,r=o.verticalNavigation||"editor",a=n?window.DateTime||luxon.DateTime:null,l=e.getValue(),h=document.createElement("input");function d(e){return(a.isDateTime(e)?e:"iso"===n?a.fromISO(String(e)):a.fromFormat(String(e),n)).toFormat("yyyy-MM-dd")}if(h.type="date",h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",o.max&&h.setAttribute("max",n?d(o.max):o.max),o.min&&h.setAttribute("min",n?d(o.min):o.min),o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),h.setAttribute(e,h.getAttribute(e)+o.elementAttributes["+"+e])):h.setAttribute(e,o.elementAttributes[e]);function c(){var e,t=h.value;if(null==l&&""!==t||t!==l){if(t&&n)switch(e=a.fromFormat(String(t),"yyyy-MM-dd"),n){case!0:t=e;break;case"iso":t=e.toISO();break;default:t=e.toFormat(n)}i(t)&&(l=h.value)}else s()}return l=void 0!==l?l:"",n&&(a?l=d(l):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),h.value=l,t((function(){"cell"===e.getType()&&(h.focus({preventScroll:!0}),h.style.height="100%",o.selectContents&&h.select())})),h.addEventListener("blur",(function(e){(e.relatedTarget||e.rangeParent||e.explicitOriginalTarget!==h)&&c()})),h.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:c();break;case 27:s();break;case 35:case 36:e.stopPropagation();break;case 38:case 40:"editor"==r&&(e.stopImmediatePropagation(),e.stopPropagation())}})),h},time:function(e,t,i,s,o){var n,r=o.format,a=o.verticalNavigation||"editor",l=r?window.DateTime||luxon.DateTime:null,h=e.getValue(),d=document.createElement("input");if(d.type="time",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),d.setAttribute(e,d.getAttribute(e)+o.elementAttributes["+"+e])):d.setAttribute(e,o.elementAttributes[e]);function c(){var e,t=d.value;if(null==h&&""!==t||t!==h){if(t&&r)switch(e=l.fromFormat(String(t),"hh:mm"),r){case!0:t=e;break;case"iso":t=e.toISO();break;default:t=e.toFormat(r)}i(t)&&(h=d.value)}else s()}return h=void 0!==h?h:"",r&&(l?(n=l.isDateTime(h)?h:"iso"===r?l.fromISO(String(h)):l.fromFormat(String(h),r),h=n.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),console.log("val",h),d.value=h,t((function(){"cell"==e.getType()&&(d.focus({preventScroll:!0}),d.style.height="100%",o.selectContents&&d.select())})),d.addEventListener("blur",(function(e){(e.relatedTarget||e.rangeParent||e.explicitOriginalTarget!==d)&&c()})),d.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:c();break;case 27:s();break;case 35:case 36:e.stopPropagation();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}})),d},datetime:function(e,t,i,s,o){var n,r=o.format,a=o.verticalNavigation||"editor",l=r?window.DateTime||luxon.DateTime:null,h=e.getValue(),d=document.createElement("input");if(d.type="datetime-local",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),d.setAttribute(e,d.getAttribute(e)+o.elementAttributes["+"+e])):d.setAttribute(e,o.elementAttributes[e]);function c(){var e,t=d.value;if(null==h&&""!==t||t!==h){if(t&&r)switch(e=l.fromISO(String(t)),r){case!0:t=e;break;case"iso":t=e.toISO();break;default:t=e.toFormat(r)}i(t)&&(h=d.value)}else s()}return h=void 0!==h?h:"",r&&(l?(n=l.isDateTime(h)?h:"iso"===r?l.fromISO(String(h)):l.fromFormat(String(h),r),h=n.toFormat("yyyy-MM-dd")+"T"+n.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,t((function(){"cell"===e.getType()&&(d.focus({preventScroll:!0}),d.style.height="100%",o.selectContents&&d.select())})),d.addEventListener("blur",(function(e){(e.relatedTarget||e.rangeParent||e.explicitOriginalTarget!==d)&&c()})),d.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:c();break;case 27:s();break;case 35:case 36:e.stopPropagation();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}})),d},select:function(e,t,i,s,o){return this.deprecationMsg("The select editor has been deprecated, please use the new list editor"),new $(this,e,t,i,s,o).input},list:function(e,t,i,s,o){return new $(this,e,t,i,s,o).input},autocomplete:function(e,t,i,s,o){return this.deprecationMsg("The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam"),o.autocomplete=!0,new $(this,e,t,i,s,o).input},star:function(e,t,i,s,o){var n=this,r=e.getElement(),a=e.getValue(),l=r.getElementsByTagName("svg").length||5,h=r.getElementsByTagName("svg")[0]?r.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],c=document.createElement("div"),u=document.createElementNS("http://www.w3.org/2000/svg","svg");function m(e){d.forEach((function(t,i){i'):("ie"==n.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')}))}function p(e){var t=document.createElement("span"),s=u.cloneNode(!0);d.push(s),t.addEventListener("mouseenter",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),m(e)})),t.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),t.addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),r.blur()})),t.appendChild(s),c.appendChild(t)}function g(e){a=e,m(e)}if(r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",c.style.verticalAlign="middle",c.style.display="inline-block",c.style.padding="4px",u.setAttribute("width",h),u.setAttribute("height",h),u.setAttribute("viewBox","0 0 512 512"),u.setAttribute("xml:space","preserve"),u.style.padding="0 1px",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+o.elementAttributes["+"+e])):c.setAttribute(e,o.elementAttributes[e]);for(var b=1;b<=l;b++)p(b);return m(a=Math.min(parseInt(a),l)),c.addEventListener("mousemove",(function(e){m(0)})),c.addEventListener("click",(function(e){i(0)})),r.addEventListener("blur",(function(e){s()})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:g(a+1);break;case 37:g(a-1);break;case 13:i(a);break;case 27:s()}})),c},progress:function(e,t,i,s,o){var n,r,a=e.getElement(),l=void 0===o.max?a.getElementsByTagName("div")[0]&&a.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,h=void 0===o.min?a.getElementsByTagName("div")[0]&&a.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,d=(l-h)/100,c=e.getValue()||0,u=document.createElement("div"),m=document.createElement("div");function p(){var e=window.getComputedStyle(a,null),t=d*Math.round(m.offsetWidth/((a.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+h;i(t),a.setAttribute("aria-valuenow",t),a.setAttribute("aria-label",c)}if(u.style.position="absolute",u.style.right="0",u.style.top="0",u.style.bottom="0",u.style.width="5px",u.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),m.setAttribute(e,m.getAttribute(e)+o.elementAttributes["+"+e])):m.setAttribute(e,o.elementAttributes[e]);return a.style.padding="4px 4px",c=Math.min(parseFloat(c),l),c=Math.max(parseFloat(c),h),c=Math.round((c-h)/d),m.style.width=c+"%",a.setAttribute("aria-valuemin",h),a.setAttribute("aria-valuemax",l),m.appendChild(u),u.addEventListener("mousedown",(function(e){n=e.screenX,r=m.offsetWidth})),u.addEventListener("mouseover",(function(){u.style.cursor="ew-resize"})),a.addEventListener("mousemove",(function(e){n&&(m.style.width=r+e.screenX-n+"px")})),a.addEventListener("mouseup",(function(e){n&&(e.stopPropagation(),e.stopImmediatePropagation(),n=!1,r=!1,p())})),a.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+a.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-a.clientWidth/100+"px";break;case 9:case 13:p();break;case 27:s()}})),a.addEventListener("blur",(function(){s()})),m},tickCross:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input"),a=o.tristate,l=void 0===o.indeterminateValue?null:o.indeterminateValue,h=!1,d=Object.keys(o).includes("trueValue"),c=Object.keys(o).includes("falseValue");if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function u(e){var t=r.checked;return d&&t?t=o.trueValue:c&&!t&&(t=o.falseValue),a?e?h?l:t:r.checked&&!h?(r.checked=!1,r.indeterminate=!0,h=!0,l):(h=!1,t):t}return r.value=n,!a||void 0!==n&&n!==l&&""!==n||(h=!0,r.indeterminate=!0),"firefox"!=this.table.browser&&"safari"!=this.table.browser&&t((function(){"cell"===e.getType()&&r.focus({preventScroll:!0})})),r.checked=d?n===o.trueValue:!0===n||"true"===n||"True"===n||1===n,r.addEventListener("change",(function(e){i(u())})),r.addEventListener("blur",(function(e){i(u(!0))})),r.addEventListener("keydown",(function(e){13==e.keyCode&&i(u()),27==e.keyCode&&s()})),r}};class Q extends k{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[],this.editors=Q.editors,this.registerColumnOption("editable"),this.registerColumnOption("editor"),this.registerColumnOption("editorParams"),this.registerColumnOption("cellEditing"),this.registerColumnOption("cellEdited"),this.registerColumnOption("cellEditCancelled"),this.registerTableOption("editTriggerEvent","focus"),this.registerTableFunction("getEditedCells",this.getEditedCells.bind(this)),this.registerTableFunction("clearCellEdited",this.clearCellEdited.bind(this)),this.registerTableFunction("navigatePrev",this.navigatePrev.bind(this)),this.registerTableFunction("navigateNext",this.navigateNext.bind(this)),this.registerTableFunction("navigateLeft",this.navigateLeft.bind(this)),this.registerTableFunction("navigateRight",this.navigateRight.bind(this)),this.registerTableFunction("navigateUp",this.navigateUp.bind(this)),this.registerTableFunction("navigateDown",this.navigateDown.bind(this)),this.registerComponentFunction("cell","isEdited",this.cellIsEdited.bind(this)),this.registerComponentFunction("cell","clearEdited",this.clearEdited.bind(this)),this.registerComponentFunction("cell","edit",this.editCell.bind(this)),this.registerComponentFunction("cell","cancelEdit",this.cellCancelEdit.bind(this)),this.registerComponentFunction("cell","navigatePrev",this.navigatePrev.bind(this)),this.registerComponentFunction("cell","navigateNext",this.navigateNext.bind(this)),this.registerComponentFunction("cell","navigateLeft",this.navigateLeft.bind(this)),this.registerComponentFunction("cell","navigateRight",this.navigateRight.bind(this)),this.registerComponentFunction("cell","navigateUp",this.navigateUp.bind(this)),this.registerComponentFunction("cell","navigateDown",this.navigateDown.bind(this))}initialize(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("cell-value-changed",this.updateCellClass.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("row-layout",this.rowEditableCheck.bind(this)),this.subscribe("data-refreshing",this.cancelEdit.bind(this)),this.subscribe("clipboard-paste",this.pasteBlocker.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this,void 0)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this,void 0)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this,void 0))}pasteBlocker(e){if(this.currentCell)return!0}keybindingNavigateNext(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(t,e)||i&&(t.getElement().firstChild.blur(),this.invalidEdit||(i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(t.row.getComponent())):this.table.addRow(Object.assign({},i))).then((()=>{setTimeout((()=>{t.getComponent().navigateNext()}))}))))}cellIsEdited(e){return!!e.modules.edit&&e.modules.edit.edited}cellCancelEdit(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}updateCellClass(e){this.allowEdit(e)?e.getElement().classList.add("tabulator-editable"):e.getElement().classList.remove("tabulator-editable")}clearCellEdited(e){e||(e=this.table.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.table.modules.edit.clearEdited(e._getSelf())}))}navigatePrev(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateLeft())return!0;if((s=this.table.rowManager.prevDisplayRow(e.row,!0))&&(i=this.findPrevEditableCell(s,s.cells.length)))return i.getComponent().edit(),!0}return!1}navigateNext(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateRight())return!0;if((s=this.table.rowManager.nextDisplayRow(e.row,!0))&&(i=this.findNextEditableCell(s,-1)))return i.getComponent().edit(),!0}return!1}navigateLeft(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findPrevEditableCell(e.row,i)))&&(s.getComponent().edit(),!0)}navigateRight(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findNextEditableCell(e.row,i)))&&(s.getComponent().edit(),!0)}navigateUp(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.prevDisplayRow(e.row,!0)))&&(s.cells[i].getComponent().edit(),!0)}navigateDown(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.nextDisplayRow(e.row,!0)))&&(s.cells[i].getComponent().edit(),!0)}findNextEditableCell(e,t){var i=!1;if(t0)for(var s=t-1;s>=0;s--){let t=e.cells[s];if(t.column.modules.edit&&r.elVisible(t.getElement())){if(this.allowEdit(t)){i=t;break}}}return i}initializeColumnCheck(e){void 0!==e.definition.editor&&this.initializeColumn(e)}columnDeleteCheck(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}rowDeleteCheck(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}rowEditableCheck(e){e.getCells().forEach((e=>{e.column.modules.edit&&"function"==typeof e.column.modules.edit.check&&this.updateCellClass(e)}))}initializeColumn(e){var t={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(typeof e.definition.editor){case"string":this.editors[e.definition.editor]?t.editor=this.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":t.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?this.editors[e.definition.formatter]?t.editor=this.editors[e.definition.formatter]:t.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}t.editor&&(e.modules.edit=t)}getCurrentCell(){return!!this.currentCell&&this.currentCell.getComponent()}clearEditor(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),this.dispatch("edit-editor-clear",i,e),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-editing"),i.table.element.classList.remove("tabulator-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatch("edit-cancelled",e),this.dispatchExternal("cellEditCancelled",t)}}bindEditor(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);this.updateCellClass(e),i.setAttribute("tabindex",0),i.addEventListener("mousedown",(function(e){2===e.button?e.preventDefault():t.mouseClick=!0})),"dblclick"===this.options("editTriggerEvent")&&i.addEventListener("dblclick",(function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))})),"focus"!==this.options("editTriggerEvent")&&"click"!==this.options("editTriggerEvent")||i.addEventListener("click",(function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))})),"focus"===this.options("editTriggerEvent")&&i.addEventListener("focus",(function(i){t.recursionBlock||t.edit(e,i,!1)}))}}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,s=e.row.getElement();s.offsetTopi&&(this.table.rowManager.element.scrollTop+=s.offsetTop+s.offsetHeight-i);var o=this.table.rowManager.element.scrollLeft,n=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,r=e.getElement();this.table.modExists("frozenColumns")&&(o+=parseInt(this.table.modules.frozenColumns.leftMargin||0),n-=parseInt(this.table.modules.frozenColumns.rightMargin||0)),"virtual"===this.table.options.renderHorizontal&&(o-=parseInt(this.table.columnManager.renderer.vDomPadLeft),n-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),r.offsetLeftn&&(this.table.rowManager.element.scrollLeft+=r.offsetLeft+r.offsetWidth-n)}}allowEdit(e){var t=!!e.column.modules.edit;if(e.column.modules.edit)switch(typeof e.column.modules.edit.check){case"function":e.row.initialized&&(t=e.column.modules.edit.check(e.getComponent()));break;case"string":t=!!e.row.data[e.column.modules.edit.check];break;case"boolean":t=e.column.modules.edit.check}return t}edit(e,t,i){var s,o,n,r=this,a=function(){},l=e.getElement(),h=!1;if(!this.currentCell){if(e.column.modules.edit.blocked)return this.mouseClick=!1,this.blur(l),!1;if(t&&t.stopPropagation(),this.allowEdit(e)||i){if(r.cancelEdit(),r.currentCell=e,this.focusScrollAdjust(e),o=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.definition.cellClick&&e.column.definition.cellClick.call(this.table,t,o)),e.column.definition.cellEditing&&e.column.definition.cellEditing.call(this.table,o),this.dispatch("cell-editing",e),this.dispatchExternal("cellEditing",o),n="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(o):e.column.modules.edit.params,s=e.column.modules.edit.editor.call(r,o,(function(e){a=e}),(function(t){if(r.currentCell===e&&!h){var i=r.chain("edit-success",[e,t],!0,!0);return!0===i||"highlight"===r.table.options.validationMode?(h=!0,r.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==r.editedCells.indexOf(e)&&r.editedCells.push(e),e.setValue(t,!0),!0===i):(h=!0,r.invalidEdit=!0,r.focusCellNoEvent(e,!0),a(),setTimeout((()=>{h=!1}),10),!1)}}),(function(){r.currentCell!==e||h||r.cancelEdit()}),n),!this.currentCell||!1===s)return this.blur(l),!1;if(!(s instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",s),this.blur(l),!1;for(l.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-editing"),e.table.element.classList.add("tabulator-editing");l.firstChild;)l.removeChild(l.firstChild);l.appendChild(s),a();for(var d=l.children,c=0;c{e.push(t.getComponent())})),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,this.dispatch("edit-edited-clear",e)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)}}Q.moduleName="edit",Q.editors=Z;class ee{constructor(e,t,i,s){this.type=e,this.columns=t,this.component=i||!1,this.indent=s||0}}class te{constructor(e,t,i,s,o){this.value=e,this.component=t||!1,this.width=i,this.height=s,this.depth=o}}class ie extends k{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp="",this.registerTableOption("htmlOutputConfig",!1),this.registerColumnOption("htmlOutput"),this.registerColumnOption("titleHtmlOutput")}initialize(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}generateExportList(e,t,i,s){var o,n;if(this.cloneTableStyle=t,this.config=e||{},this.colVisProp=s,"range"===i){var r=this.table.modules.selectRange.selectedColumns();o=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders(r)):[],n=this.bodyToExportRows(this.rowLookup(i),this.table.modules.selectRange.selectedColumns(!0))}else o=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],n=this.bodyToExportRows(this.rowLookup(i));return o.concat(n)}generateTable(e,t,i,s){var o=this.generateExportList(e,t,i,s);return this.generateTableElement(o)}rowLookup(e){var t=[];if("function"==typeof e)e.call(this.table).forEach((e=>{(e=this.table.rowManager.findRow(e))&&t.push(e)}));else switch(e){case!0:case"visible":t=this.table.rowManager.getVisibleRows(!1,!0);break;case"all":t=this.table.rowManager.rows;break;case"selected":t=this.table.modules.selectRow.selectedRows;break;case"range":t=this.table.modules.selectRange.selectedRows();break;default:t=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],t)}generateColumnGroupHeaders(e){var t=[];return e||(e=!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex),e.forEach((e=>{var i=this.processColumnGroup(e);i&&t.push(i)})),t}processColumnGroup(e){var t=e.columns,i=0,s={title:e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,column:e,depth:1};if(t.length){if(s.subGroups=[],s.width=0,t.forEach((e=>{var t=this.processColumnGroup(e);t&&(s.width+=t.width,s.subGroups.push(t),t.depth>i&&(i=t.depth))})),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s}columnVisCheck(e){var t=e.definition[this.colVisProp];return"function"==typeof t&&(t=t.call(this.table,e.getComponent())),!1!==t&&(e.visible||!e.visible&&t)}headersToExportRows(e){var t=[],i=0,s=[];function o(e,s){var n=i-s;if(void 0===t[s]&&(t[s]=[]),e.height=e.subGroups?1:n-e.depth+1,t[s].push(e),e.height>1)for(let i=1;i1)for(let i=1;ii&&(i=e.depth)})),e.forEach((function(e){o(e,0)})),t.forEach((e=>{var t=[];e.forEach((e=>{if(e){let i=void 0===e.title?"":e.title;t.push(new te(i,e.column.getComponent(),e.width,e.height,e.depth))}else t.push(null)})),s.push(new ee("header",t))})),s}bodyToExportRows(e,t=[]){var i=[];return 0===t.length&&this.table.columnManager.columnsByIndex.forEach((e=>{this.columnVisCheck(e)&&t.push(e.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),(e=e.filter((e=>{switch(e.type){case"group":return!1!==this.config.rowGroups;case"calc":return!1!==this.config.columnCalcs;case"row":return!(this.table.options.dataTree&&!1===this.config.dataTree&&e.modules.dataTree.parent)}return!0}))).forEach(((e,s)=>{var o=e.getData(this.colVisProp),n=[],r=0;switch(e.type){case"group":r=e.level,n.push(new te(e.key,e.getComponent(),t.length,1));break;case"calc":case"row":t.forEach((e=>{n.push(new te(e._column.getFieldValue(o),e,1,1))})),this.table.options.dataTree&&!1!==this.config.dataTree&&(r=e.modules.dataTree.index)}i.push(new ee(e.type,n,e.getComponent(),r))})),i}generateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),s=document.createElement("tbody"),o=this.lookupTableStyles(),n=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==n?n:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(((e,t)=>{let n;switch(e.type){case"header":i.appendChild(this.generateHeaderElement(e,r,o));break;case"group":s.appendChild(this.generateGroupElement(e,r,o));break;case"calc":s.appendChild(this.generateCalcElement(e,r,o));break;case"row":n=this.generateRowElement(e,r,o),this.mapElementStyles(t%2&&o.evenRow?o.evenRow:o.oddRow,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s.appendChild(n)}})),i.innerHTML&&t.appendChild(i),t.appendChild(s),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}generateHeaderElement(e,t,i){var s=document.createElement("tr");return e.columns.forEach((e=>{if(e){var t=document.createElement("th"),i=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,this.cloneTableStyle&&(t.style.boxSizing="border-box"),i.forEach((function(e){t.classList.add(e)})),this.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?this.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&this.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),s.appendChild(t)}})),s}generateGroupElement(e,t,i){var s=document.createElement("tr"),o=document.createElement("td"),n=e.columns[0];return s.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?n.value=t.groupHeader[e.indent](n.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1!==t.groupHeader&&(n.value=e.component._group.generator(n.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)),o.colSpan=n.width,o.innerHTML=n.value,s.classList.add("tabulator-print-table-group"),s.classList.add("tabulator-group-level-"+e.indent),n.component.isVisible()&&s.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,o,["padding-top","padding-left","padding-right","padding-bottom"]),s.appendChild(o),s}generateCalcElement(e,t,i){var s=this.generateRowElement(e,t,i);return s.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s}generateRowElement(e,t,i){var s=document.createElement("tr");if(s.classList.add("tabulator-print-table-row"),e.columns.forEach(((o,n)=>{if(o){var r,a=document.createElement("td"),l=o.component._column,h=this.table,d=h.columnManager.findColumnIndex(l),c=o.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return a},getType:function(){return"cell"},getColumn:function(){return l.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getTable:function(){return h},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach((function(e){a.classList.add(e)})),this.table.modExists("format")&&!1!==this.config.formatCells)c=this.table.modules.format.formatExportValue(u,this.colVisProp);else switch(typeof c){case"object":c=null!==c?JSON.stringify(c):"";break;case"undefined":c=""}c instanceof Node?a.appendChild(c):a.innerHTML=c,(r=i.styleCells&&i.styleCells[d]?i.styleCells[d]:i.firstCell)&&(this.mapElementStyles(r,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","text-align"]),l.definition.align&&(a.style.textAlign=l.definition.align)),this.table.options.dataTree&&!1!==this.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==n)&&(e.component._row.modules.dataTree.controlEl&&a.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),e.component._row.modules.dataTree.branchEl&&a.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),s.appendChild(a),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback()}})),t.rowFormatter&&"row"===e.type&&!1!==this.config.formatCells){Object.assign(e.component).getElement=function(){return s},t.rowFormatter(e.component)}return s}generateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.generateTableElement(e)),t.innerHTML}getHtml(e,t,i,s){var o=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,s||"htmlOutput");return this.generateHTMLTable(o)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var s={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var o=window.getComputedStyle(e);i.forEach((function(e){t.style[s[e]]||(t.style[s[e]]=o.getPropertyValue(e))}))}}}}ie.moduleName="export";var se={"=":function(e,t,i,s){return t==e},"<":function(e,t,i,s){return t":function(e,t,i,s){return t>e},">=":function(e,t,i,s){return t>=e},"!=":function(e,t,i,s){return t!=e},regex:function(e,t,i,s){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,i,s){var o=e.toLowerCase().split(void 0===s.separator?" ":s.separator),n=String(null==t?"":t).toLowerCase(),r=[];return o.forEach((e=>{n.includes(e)&&r.push(!0)})),s.matchAll?r.length===o.length:!!r.length},starts:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,i,s){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}};class oe extends k{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1,this.tableInitialized=!1,this.registerTableOption("filterMode","local"),this.registerTableOption("initialFilter",!1),this.registerTableOption("initialHeaderFilter",!1),this.registerTableOption("headerFilterLiveFilterDelay",300),this.registerTableOption("placeholderHeaderFilter",!1),this.registerColumnOption("headerFilter"),this.registerColumnOption("headerFilterPlaceholder"),this.registerColumnOption("headerFilterParams"),this.registerColumnOption("headerFilterEmptyCheck"),this.registerColumnOption("headerFilterFunc"),this.registerColumnOption("headerFilterFuncParams"),this.registerColumnOption("headerFilterLiveFilter"),this.registerTableFunction("searchRows",this.searchRows.bind(this)),this.registerTableFunction("searchData",this.searchData.bind(this)),this.registerTableFunction("setFilter",this.userSetFilter.bind(this)),this.registerTableFunction("refreshFilter",this.userRefreshFilter.bind(this)),this.registerTableFunction("addFilter",this.userAddFilter.bind(this)),this.registerTableFunction("getFilters",this.getFilters.bind(this)),this.registerTableFunction("setHeaderFilterFocus",this.userSetHeaderFilterFocus.bind(this)),this.registerTableFunction("getHeaderFilterValue",this.userGetHeaderFilterValue.bind(this)),this.registerTableFunction("setHeaderFilterValue",this.userSetHeaderFilterValue.bind(this)),this.registerTableFunction("getHeaderFilters",this.getHeaderFilters.bind(this)),this.registerTableFunction("removeFilter",this.userRemoveFilter.bind(this)),this.registerTableFunction("clearFilter",this.userClearFilter.bind(this)),this.registerTableFunction("clearHeaderFilter",this.userClearHeaderFilter.bind(this)),this.registerComponentFunction("column","headerFilterFocus",this.setHeaderFilterFocus.bind(this)),this.registerComponentFunction("column","reloadHeaderFilter",this.reloadHeaderFilter.bind(this)),this.registerComponentFunction("column","getHeaderFilterValue",this.getHeaderFilterValue.bind(this)),this.registerComponentFunction("column","setHeaderFilterValue",this.setHeaderFilterValue.bind(this))}initialize(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.subscribe("placeholder",this.generatePlaceholder.bind(this)),"remote"===this.table.options.filterMode&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}tableBuilt(){this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach((e=>{var t=this.table.columnManager.findColumn(e.field);if(!t)return console.warn("Column Filter Error - No matching column found:",e.field),!1;this.setHeaderFilterValue(t,e.value)})),this.tableInitialized=!0}remoteFilterParams(e,t,i,s){return s.filter=this.getFilters(!0,!0),s}generatePlaceholder(e){if(this.table.options.placeholderHeaderFilter&&Object.keys(this.headerFilters).length)return this.table.options.placeholderHeaderFilter}userSetFilter(e,t,i,s){this.setFilter(e,t,i,s),this.refreshFilter()}userRefreshFilter(){this.refreshFilter()}userAddFilter(e,t,i,s){this.addFilter(e,t,i,s),this.refreshFilter()}userSetHeaderFilterFocus(e){var t=this.table.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.setHeaderFilterFocus(t)}userGetHeaderFilterValue(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}userSetHeaderFilterValue(e,t){var i=this.table.columnManager.findColumn(e);if(!i)return console.warn("Column Filter Error - No matching column found:",e),!1;this.setHeaderFilterValue(i,t)}userRemoveFilter(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}userClearFilter(e){this.clearFilter(e),this.refreshFilter()}userClearHeaderFilter(){this.clearHeaderFilter(),this.refreshFilter()}searchRows(e,t,i){return this.search("rows",e,t,i)}searchData(e,t,i){return this.search("data",e,t,i)}initializeColumnHeaderFilter(e){e.definition.headerFilter&&this.initializeColumn(e)}initializeColumn(e,t){var i=this,s=e.getField();e.modules.filter={success:function(t){var o,n="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",r="",a="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete i.headerFilters[s];else{switch(e.modules.filter.value=t,typeof e.definition.headerFilterFunc){case"string":oe.filters[e.definition.headerFilterFunc]?(r=e.definition.headerFilterFunc,o=function(i){var s=e.definition.headerFilterFuncParams||{},o=e.getFieldValue(i);return s="function"==typeof s?s(t,o,i):s,oe.filters[e.definition.headerFilterFunc](t,o,i,s)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=o=function(i){var s=e.definition.headerFilterFuncParams||{},o=e.getFieldValue(i);return s="function"==typeof s?s(t,o,i):s,e.definition.headerFilterFunc(t,o,i,s)}}if(!o)if("partial"===n)o=function(i){var s=e.getFieldValue(i);return null!=s&&String(s).toLowerCase().indexOf(String(t).toLowerCase())>-1},r="like";else o=function(i){return e.getFieldValue(i)==t},r="=";i.headerFilters[s]={value:t,func:o,type:r}}e.modules.filter.value=t,a=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==a&&(i.prevHeaderFilterChangeCheck=a,i.trackChanges(),i.refreshFilter())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var s,o,n,r,a,l,h,d,c=this,u=e.modules.filter.success,m=e.getField();if(e.modules.filter.value=t,e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&0!==e},(s=document.createElement("div")).classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(o=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":o=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?o=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(o=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):o=c.table.modules.edit.editors.input}if(o){if(r={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return s},getColumn:function(){return e.getComponent()},getTable:()=>this.table,getType:()=>"header",getRow:function(){return{normalizeHeight:function(){}}}},h="function"==typeof(h=e.definition.headerFilterParams||{})?h.call(c.table,r):h,!(n=o.call(this.table.modules.edit,r,(function(e){d=e}),u,(function(){}),h)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(n instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",n);c.langBind("headerFilters|columns|"+e.definition.field,(function(t){n.setAttribute("placeholder",void 0!==t&&t?t:e.definition.headerFilterPlaceholder||c.langText("headerFilters|default"))})),n.addEventListener("click",(function(e){e.stopPropagation(),n.focus()})),n.addEventListener("focus",(e=>{var t=this.table.columnManager.contentsElement.scrollLeft;t!==this.table.rowManager.element.scrollLeft&&(this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})),a=!1,l=function(e){a&&clearTimeout(a),a=setTimeout((function(){u(n.value)}),c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=n,e.modules.filter.attrType=n.hasAttribute("type")?n.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=n.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(n.addEventListener("keyup",l),n.addEventListener("search",l),"number"==e.modules.filter.attrType&&n.addEventListener("change",(function(e){u(n.value)})),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&n.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||n.addEventListener("mousedown",(function(e){e.stopPropagation()}))),s.appendChild(n),e.contentElement.appendChild(s),i||c.headerFilterColumns.push(e),d&&d()}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")}))}showHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")}))}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}refreshFilter(){this.tableInitialized&&("remote"===this.table.options.filterMode?this.reloadData(null,!1,!1):this.refreshData(!0))}trackChanges(){this.changed=!0,this.dispatch("filter-changed")}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,s){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),this.addFilter(e)}addFilter(e,t,i,s){var o=!1;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),e.forEach((e=>{(e=this.findFilter(e))&&(this.filterList.push(e),o=!0)})),o&&this.trackChanges()}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:oe.filters[e.type]?i=(t=this.table.columnManager.getColumnByField(e.field))?function(i){return oe.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return oe.filters[e.type](e.value,t[e.field],t,e.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e}findSubFilters(e){var t=[];return e.forEach((e=>{(e=this.findFilter(e))&&t.push(e)})),!!t.length&&t}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach((function(e){"function"==typeof e.type&&(e.type="function")})),i=i.concat(this.filtersToArray(this.filterList,t))}filtersToArray(e,t){var i=[];return e.forEach((e=>{var s;Array.isArray(e)?i.push(this.filtersToArray(e,t)):(s={field:e.field,type:e.type,value:e.value},t&&"function"==typeof s.type&&(s.type="function"),i.push(s))})),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach((e=>{var t=-1;(t="object"==typeof e.field?this.filterList.findIndex((t=>e===t)):this.filterList.findIndex((t=>e.field===t.field&&e.type===t.type&&e.value===t.value)))>-1?this.filterList.splice(t,1):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)})),this.trackChanges()}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}clearHeaderFilter(){this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((e=>{void 0!==e.modules.filter.value&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,this.reloadHeaderFilter(e)})),this.trackChanges()}search(e,t,i,s){var o=[],n=[];return Array.isArray(t)||(t=[{field:t,type:i,value:s}]),t.forEach((e=>{(e=this.findFilter(e))&&n.push(e)})),this.table.rowManager.rows.forEach((t=>{var i=!0;n.forEach((e=>{this.filterRecurse(e,t.getData())||(i=!1)})),i&&o.push("data"===e?t.getData("data"):t.getComponent())})),o}filter(e,t){var i=[],s=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters(!0)),"remote"!==this.table.options.filterMode&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach((e=>{this.filterRow(e)&&i.push(e)})):i=e.slice(0),this.subscribedExternal("dataFiltered")&&(i.forEach((e=>{s.push(e.getComponent())})),this.dispatchExternal("dataFiltered",this.getFilters(!0),s)),i}filterRow(e,t){var i=!0,s=e.getData();for(var o in this.filterList.forEach((e=>{this.filterRecurse(e,s)||(i=!1)})),this.headerFilters)this.headerFilters[o].func(s)||(i=!1);return i}filterRecurse(e,t){var i=!1;return Array.isArray(e)?e.forEach((e=>{this.filterRecurse(e,t)&&(i=!0)})):i=e.func(t),i}}oe.moduleName="filter",oe.filters=se;var ne={plaintext:function(e,t,i){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,i){return e.getValue()},textarea:function(e,t,i){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,i){var s,o,n,r,a,l=parseFloat(e.getValue()),h="",d=t.decimal||".",c=t.thousand||",",u=t.negativeSign||"-",m=t.symbol||"",p=!!t.symbolAfter,g=void 0!==t.precision?t.precision:2;if(isNaN(l))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));if(l<0&&(l=Math.abs(l),h=u),s=!1!==g?l.toFixed(g):l,o=(s=String(s).split("."))[0],n=s.length>1?d+s[1]:"",!1!==t.thousand)for(r=/(\d+)(\d{3})/;r.test(o);)o=o.replace(r,"$1"+c+"$2");return a=o+n,!0===h?(a="("+a+")",p?a+m:m+a):p?h+a+m:h+m+a},link:function(e,t,i){var s,o=e.getValue(),n=t.urlPrefix||"",a=t.download,l=o,h=document.createElement("a");if(t.labelField&&(s=e.getData(),l=function e(t,i){var s=i[t.shift()];return t.length&&"object"==typeof s?e(t,s):s}(t.labelField.split(this.table.options.nestedFieldSeparator),s)),t.label)switch(typeof t.label){case"string":l=t.label;break;case"function":l=t.label(e)}if(l){if(t.urlField&&(s=e.getData(),o=r.retrieveNestedData(this.table.options.nestedFieldSeparator,t.urlField,s)),t.url)switch(typeof t.url){case"string":o=t.url;break;case"function":o=t.url(e)}return h.setAttribute("href",n+o),t.target&&h.setAttribute("target",t.target),t.download&&(a="function"==typeof a?a(e):!0===a?"":a,h.setAttribute("download",a)),h.innerHTML=this.emptyToSpace(this.sanitizeHTML(l)),h}return" "},image:function(e,t,i){var s=document.createElement("img"),o=e.getValue();switch(t.urlPrefix&&(o=t.urlPrefix+e.getValue()),t.urlSuffix&&(o+=t.urlSuffix),s.setAttribute("src",o),typeof t.height){case"number":s.style.height=t.height+"px";break;case"string":s.style.height=t.height}switch(typeof t.width){case"number":s.style.width=t.width+"px";break;case"string":s.style.width=t.width}return s.addEventListener("load",(function(){e.getRow().normalizeHeight()})),s},tickCross:function(e,t,i){var s=e.getValue(),o=e.getElement(),n=t.allowEmpty,r=t.allowTruthy,a=Object.keys(t).includes("trueValue"),l=void 0!==t.tickElement?t.tickElement:'',h=void 0!==t.crossElement?t.crossElement:'';return a&&s===t.trueValue||!a&&(r&&s||!0===s||"true"===s||"True"===s||1===s||"1"===s)?(o.setAttribute("aria-checked",!0),l||""):!n||"null"!==s&&""!==s&&null!=s?(o.setAttribute("aria-checked",!1),h||""):(o.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,i){var s,o=window.DateTime||luxon.DateTime,n=t.inputFormat||"yyyy-MM-dd HH:mm:ss",r=t.outputFormat||"dd/MM/yyyy HH:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue();if(void 0!==o)return(s=o.isDateTime(l)?l:"iso"===n?o.fromISO(String(l)):o.fromFormat(String(l),n)).isValid?(t.timezone&&(s=s.setZone(t.timezone)),s.toFormat(r)):!0!==a&&l?"function"==typeof a?a(l):a:l;console.error("Format Error - 'datetime' formatter is dependant on luxon.js")},datetimediff:function(e,t,i){var s,o=window.DateTime||luxon.DateTime,n=t.inputFormat||"yyyy-MM-dd HH:mm:ss",r=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",a=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:"days",h=void 0!==t.humanize&&t.humanize,d=void 0!==t.date?t.date:o.now(),c=e.getValue();if(void 0!==o)return(s=o.isDateTime(c)?c:"iso"===n?o.fromISO(String(c)):o.fromFormat(String(c),n)).isValid?h?s.diff(d,l).toHuman()+(a?" "+a:""):parseInt(s.diff(d,l)[l])+(a?" "+a:""):!0===r?c:"function"==typeof r?r(c):r;console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js")},lookup:function(e,t,i){var s=e.getValue();return void 0===t[s]?(console.warn("Missing display value for "+s),s):t[s]},star:function(e,t,i){var s=e.getValue(),o=e.getElement(),n=t&&t.stars?t.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",s=s&&!isNaN(s)?parseInt(s):0,s=Math.max(0,Math.min(s,n));for(var l=1;l<=n;l++){var h=a.cloneNode(!0);h.innerHTML=l<=s?'':'',r.appendChild(h)}return o.style.whiteSpace="nowrap",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.setAttribute("aria-label",s),r},traffic:function(e,t,i){var s,o,n=this.sanitizeHTML(e.getValue())||0,r=document.createElement("span"),a=t&&t.max?t.max:100,l=t&&t.min?t.min:0,h=t&&void 0!==t.color?t.color:["red","orange","green"],d="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(r.classList.add("tabulator-traffic-light"),o=parseFloat(n)<=a?parseFloat(n):a,o=parseFloat(o)>=l?parseFloat(o):l,s=(a-l)/100,o=Math.round((o-l)/s),typeof h){case"string":d=h;break;case"function":d=h(n);break;case"object":if(Array.isArray(h)){var c=100/h.length,u=Math.floor(o/c);u=Math.min(u,h.length-1),d=h[u=Math.max(u,0)];break}}return r.style.backgroundColor=d,r}},progress:function(e,t={},i){var o,n,r,a,l,h=this.sanitizeHTML(e.getValue())||0,d=e.getElement(),c=t.max?t.max:100,u=t.min?t.min:0,m=t.legendAlign?t.legendAlign:"center";switch(n=parseFloat(h)<=c?parseFloat(h):c,n=parseFloat(n)>=u?parseFloat(n):u,o=(c-u)/100,n=Math.round((n-u)/o),typeof t.color){case"string":r=t.color;break;case"function":r=t.color(h);break;case"object":if(Array.isArray(t.color)){let e=100/t.color.length,i=Math.floor(n/e);i=Math.min(i,t.color.length-1),i=Math.max(i,0),r=t.color[i];break}default:r="#2DC214"}switch(typeof t.legend){case"string":a=t.legend;break;case"function":a=t.legend(h);break;case"boolean":a=h;break;default:a=!1}switch(typeof t.legendColor){case"string":l=t.legendColor;break;case"function":l=t.legendColor(h);break;case"object":if(Array.isArray(t.legendColor)){let e=100/t.legendColor.length,i=Math.floor(n/e);i=Math.min(i,t.legendColor.length-1),i=Math.max(i,0),l=t.legendColor[i]}break;default:l="#000"}d.style.minWidth="30px",d.style.position="relative",d.setAttribute("aria-label",n);var p=document.createElement("div");p.style.display="inline-block",p.style.width=n+"%",p.style.backgroundColor=r,p.style.height="100%",p.setAttribute("data-max",c),p.setAttribute("data-min",u);var g=document.createElement("div");if(g.style.position="relative",g.style.width="100%",g.style.height="100%",a){var b=document.createElement("div");b.style.position="absolute",b.style.top=0,b.style.left=0,b.style.textAlign=m,b.style.width="100%",b.style.color=l,b.innerHTML=a}return i((function(){if(!(e instanceof s)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",d.appendChild(t),d=t}d.appendChild(g),g.appendChild(p),a&&g.appendChild(b)})),""},color:function(e,t,i){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,i){return''},buttonCross:function(e,t,i){return''},rownum:function(e,t,i){var s=document.createElement("span"),o=e.getRow(),n=e.getTable();return o.watchPosition((e=>{t.relativeToPage&&(e+=n.modules.page.getPageSize()*(n.modules.page.getPage()-1)),s.innerText=e})),s},handle:function(e,t,i){return e.getElement().classList.add("tabulator-row-handle"),"
    "},responsiveCollapse:function(e,t,i){var s=document.createElement("div"),o=e.getRow()._row.modules.responsiveLayout;function n(e){var t=o.element;o.open=e,t&&(o.open?(s.classList.add("open"),t.style.display=""):(s.classList.remove("open"),t.style.display="none"))}return s.classList.add("tabulator-responsive-collapse-toggle"),s.innerHTML='\n \n \n\n\n\n \n',e.getElement().classList.add("tabulator-row-handle"),s.addEventListener("click",(function(t){t.stopImmediatePropagation(),n(!o.open),e.getTable().rowManager.adjustTableSize()})),n(o.open),s},rowSelection:function(e,t,i){var s=document.createElement("input"),o=!1;if(s.type="checkbox",s.setAttribute("aria-label","Select Row"),this.table.modExists("selectRow",!0))if(s.addEventListener("click",(e=>{e.stopPropagation()})),"function"==typeof e.getRow){var n=e.getRow();n instanceof u?(s.addEventListener("change",(e=>{"click"===this.table.options.selectableRowsRangeMode&&o?o=!1:n.toggleSelect()})),"click"===this.table.options.selectableRowsRangeMode&&s.addEventListener("click",(e=>{o=!0,this.table.modules.selectRow.handleComplexRowClick(n._row,e)})),s.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,s)):s=""}else s.addEventListener("change",(e=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(t.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(s);return s}};class re extends k{constructor(e){super(e),this.registerColumnOption("formatter"),this.registerColumnOption("formatterParams"),this.registerColumnOption("formatterPrint"),this.registerColumnOption("formatterPrintParams"),this.registerColumnOption("formatterClipboard"),this.registerColumnOption("formatterClipboardParams"),this.registerColumnOption("formatterHtmlOutput"),this.registerColumnOption("formatterHtmlOutputParams"),this.registerColumnOption("titleFormatter"),this.registerColumnOption("titleFormatterParams")}initialize(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},s=e.definition["formatter"+t];switch(typeof s){case"string":re.formatters[s]?i.formatter=re.formatters[s]:(console.warn("Formatter Error - No such formatter found: ",s),i.formatter=re.formatters.plaintext);break;case"function":i.formatter=s;break;default:i.formatter=re.formatters.plaintext}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatHeader(e,t,i){var s,o,n,r;return e.definition.titleFormatter?(s=this.getFormatter(e.definition.titleFormatter),n=t=>{e.titleFormatterRendered=t},r={getValue:function(){return t},getElement:function(){return i},getType:function(){return"header"},getColumn:function(){return e.getComponent()},getTable:()=>this.table},o="function"==typeof(o=e.definition.titleFormatterParams||{})?o():o,s.call(this,r,o,n)):t}formatValue(e){var t=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(t):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,t,i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}formatExportValue(e,t){var i,s=e.column.modules.format[t];if(s){function o(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}return i="function"==typeof s.params?s.params(e.getComponent()):s.params,s.formatter.call(this,e.getComponent(),i,o)}return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=/]/g,(function(e){return t[e]}))}return e}emptyToSpace(e){return null==e||""===e?" ":e}getFormatter(e){switch(typeof e){case"string":re.formatters[e]?e=re.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=re.formatters.plaintext);break;case"function":break;default:e=re.formatters.plaintext}return e}}re.moduleName="format",re.formatters=ne;class ae extends k{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.initializationMode="left",this.active=!1,this.blocked=!0,this.registerColumnOption("frozen")}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("column-add",this.reinitializeColumns.bind(this)),this.subscribe("column-deleted",this.reinitializeColumns.bind(this)),this.subscribe("column-hide",this.reinitializeColumns.bind(this)),this.subscribe("column-show",this.reinitializeColumns.bind(this)),this.subscribe("columns-loaded",this.reinitializeColumns.bind(this)),this.subscribe("table-redraw",this.layout.bind(this)),this.subscribe("layout-refreshing",this.blockLayout.bind(this)),this.subscribe("layout-refreshed",this.unblockLayout.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this))}blockLayout(){this.blocked=!0}unblockLayout(){this.blocked=!1}layoutCell(e){this.layoutElement(e.element,e.column)}reinitializeColumns(){this.reset(),this.table.columnManager.columnsByIndex.forEach((e=>{this.initializeColumn(e)})),this.layout()}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow),this.table.modExists("groupRows")&&this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()))}layoutGroupCalcs(e){e.forEach((e=>{e.calcs.top&&this.layoutRow(e.calcs.top),e.calcs.bottom&&this.layoutRow(e.calcs.bottom),e.groupList&&e.groupList.length&&this.layoutGroupCalcs(e.groupList)}))}layoutColumnPosition(e){var t=[],i=0,s=0;this.leftColumns.forEach(((s,o)=>{if(s.modules.frozen.marginValue=i,s.modules.frozen.margin=s.modules.frozen.marginValue+"px",s.visible&&(i+=s.getWidth()),o==this.leftColumns.length-1?s.modules.frozen.edge=!0:s.modules.frozen.edge=!1,s.parent.isGroup){var n=this.getColGroupParentElement(s);t.includes(n)||(this.layoutElement(n,s),t.push(n)),n.classList.toggle("tabulator-frozen-left",s.modules.frozen.edge&&"left"===s.modules.frozen.position),n.classList.toggle("tabulator-frozen-right",s.modules.frozen.edge&&"right"===s.modules.frozen.position)}else this.layoutElement(s.getElement(),s);e&&s.cells.forEach((e=>{this.layoutElement(e.getElement(!0),s)}))})),this.rightColumns.forEach(((t,i)=>{t.modules.frozen.marginValue=s,t.modules.frozen.margin=t.modules.frozen.marginValue+"px",t.visible&&(s+=t.getWidth()),i==this.rightColumns.length-1?t.modules.frozen.edge=!0:t.modules.frozen.edge=!1,t.parent.isGroup?this.layoutElement(this.getColGroupParentElement(t),t):this.layoutElement(t.getElement(),t),e&&t.cells.forEach((e=>{this.layoutElement(e.getElement(!0),t)}))}))}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&!this.blocked&&(this.layoutColumnPosition(),this.reinitializeRows(),this.layoutCalcRows())}reinitializeRows(){var e=this.table.rowManager.getVisibleRows(!0);this.table.rowManager.getRows().filter((t=>!e.includes(t))).forEach((e=>{e.deinitialize()})),e.forEach((e=>{"row"===e.type&&this.layoutRow(e)}))}layoutRow(e){"fitDataFill"===this.table.options.layout&&this.rightColumns.length&&(this.table.rowManager.getTableElement().style.minWidth="calc(100% - "+this.rightMargin+")"),this.leftColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})),this.rightColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}))}layoutElement(e,t){var i;t.modules.frozen&&e&&(e.style.position="sticky",i=this.table.rtl?"left"===t.modules.frozen.position?"right":"left":t.modules.frozen.position,e.style[i]=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),e.classList.toggle("tabulator-frozen-left",t.modules.frozen.edge&&"left"===t.modules.frozen.position),e.classList.toggle("tabulator-frozen-right",t.modules.frozen.edge&&"right"===t.modules.frozen.position))}adjustForScrollbar(e){this.rightColumns.length&&(this.table.columnManager.getContentsElement().style.width="calc(100% - "+e+"px)")}_calcSpace(e,t){var i=0;for(let s=0;s{this.initializeRow(e)}))}initializeRow(e){var t=this.table.options.frozenRows,i=typeof t;"number"===i?e.getPosition()&&e.getPosition()+this.rows.length<=t&&this.freezeRow(e):"function"===i?t.call(this.table,e.getComponent())&&this.freezeRow(e):Array.isArray(t)&&t.includes(e.data[this.options("frozenRowsField")])&&this.freezeRow(e)}isRowFrozen(e){return this.rows.indexOf(e)>-1}isFrozen(){return!!this.rows.length}visibleRows(e,t){return this.rows.forEach((e=>{t.push(e)})),t}getRows(e){var t=e.slice(0);return this.rows.forEach((function(e){var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.rows.push(e),this.refreshData(!1,"display"),this.table.rowManager.adjustTableSize(),this.styleRows())}unfreezeRow(e){e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.refreshData(!1,"display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode&&i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach(((e,t)=>{this.table.rowManager.styleRow(e,t)}))}}le.moduleName="frozenRows";class he{constructor(e){return this._group=e,this.type="GroupComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._group.groupManager.table.componentFunctionBinder.handle("group",e._group,t)}})}getKey(){return this._group.key}getField(){return this._group.field}getElement(){return this._group.element}getRows(){return this._group.getRows(!0)}getSubGroups(){return this._group.getSubGroups(!0)}getParentGroup(){return!!this._group.parent&&this._group.parent.getComponent()}isVisible(){return this._group.visible}show(){this._group.show()}hide(){this._group.hide()}toggle(){this._group.toggleVisibility()}scrollTo(e,t){return this._group.groupManager.table.rowManager.scrollToRow(this._group,e,t)}_getSelf(){return this._group}getTable(){return this._group.groupManager.table}}class de{constructor(e,t,i,s,o,n,r){this.groupManager=e,this.parent=t,this.key=s,this.level=i,this.field=o,this.hasSubGroups=i{e.modules&&delete e.modules.group}))),this.element=!1,this.arrowElement=!1,this.elementContents=!1}createElements(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)}createValueGroups(){var e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach((t=>{this._createGroup(t,e)}))}addBindings(){this.groupManager.table.options.groupToggleElement&&("arrow"==this.groupManager.table.options.groupToggleElement?this.arrowElement:this.element).addEventListener("click",(e=>{"arrow"===this.groupManager.table.options.groupToggleElement&&(e.stopPropagation(),e.stopImmediatePropagation()),setTimeout((()=>{this.toggleVisibility()}))}))}_createGroup(e,t){var i=t+"_"+e,s=new de(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[i]);this.groups[i]=s,this.groupList.push(s)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),s=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[s]&&this.groups[s].addRow(e):(this.groups[s]||this._createGroup(i,t),this.groups[s].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var s=this.conformRowData({});e.updateData(s);var o=this.rows.indexOf(t);o>-1?i?this.rows.splice(o+1,0,e):this.rows.splice(o,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement&&(this.arrowElement.style.marginLeft=e,this.groupList.forEach((function(t){t.scrollHeader(e)})))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(i.parentNode&&i.parentNode.removeChild(i),this.groupManager.blockRedraw||(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this))):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(){var e=[];return e.push(this),this._visSet(),this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.visible?this.groupList.length?this.groupList.forEach((function(t){e=e.concat(t.getHeadersAndRows())})):("table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))),e}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach((e=>{i.push(e.getData(t||"data"))})),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach((t=>{e+=t.getRowCount()})):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,"basic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination||(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((e=>{e.getHeadersAndRows().forEach((e=>{e.detachElement()}))})):this.rows.forEach((e=>{var t=e.getElement();t.parentNode.removeChild(t)}))),this.groupManager.updateGroupRows(!0),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}show(){if(this.visible=!0,"basic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=this.generateElement();this.groupList.length?this.groupList.forEach((t=>{t.getHeadersAndRows().forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}))})):this.rows.forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i})),this.groupManager.updateGroupRows(!0)}this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}_visSet(){var e=[];"function"==typeof this.visible&&(this.rows.forEach((function(t){e.push(t.getData())})),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach((function(i){var s=i.getRowGroup(e);s&&(t=s)})):this.rows.find((function(t){return t===e}))&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getRows(e,t){var i=[];return t&&this.groupList.length?this.groupList.forEach((s=>{i=i.concat(s.getRows(e,t))})):this.rows.forEach((function(t){i.push(e?t.getComponent():t)})),i}generateGroupHeaderContents(){var e=[];for(this.getRows(!1,!0).forEach((function(t){e.push(t.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){return this.elementContents?this.element:this.generateElement()}generateElement(){this.addBindings=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",((e,t)=>{this.headerGenerator[0]=(i,s,o)=>(void 0===i?"":i)+"("+s+" "+(1===s?e:t.groups.items)+")"})),this.groupIDLookups=[],e)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs)this.table.columnManager.getRealColumns().forEach((e=>{e.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(e)||(e=[e]),e.forEach(((e,t)=>{var i,s;i="function"==typeof e?e:(s=this.table.columnManager.getColumnByField(e))?function(e){return s.getFieldValue(e)}:function(t){return t[e]},this.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!this.allowedValues&&this.allowedValues[t]})})),t&&(Array.isArray(t)||(t=[t]),t.forEach((e=>{})),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i])}else this.groupList=[],this.groups={}}rowSample(e,t){if(this.table.options.groupBy){var i=this.getGroups(!1)[0];t.push(i.getRows(!1)[0])}return t}virtualRenderFill(){var e=this.table.rowManager.tableElement,t=this.table.rowManager.getVisibleRows();if(!this.table.options.groupBy)return t;t=t.filter((e=>"group"!==e.type)),e.style.minWidth=t.length?"":this.table.columnManager.getWidth()+"px"}rowAddingIndex(e,t,i){if(this.table.options.groupBy){this.assignRowToGroup(e);var s=e.modules.group.rows;return s.length>1&&(!t||t&&-1==s.indexOf(t)?i?s[0]!==e&&(t=s[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):s[s.length-1]!==e&&(t=s[s.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}}trackChanges(){this.dispatch("group-changed")}setGroupBy(e){this.table.options.groupBy=e,this.initialized||this.initialize(),this.configureGroupSetup(),!e&&this.table.modExists("columnCalcs")&&!0===this.table.options.columnCalcs&&this.table.modules.columnCalcs.reinitializeCalcs(),this.refreshData(),this.trackChanges()}setGroupValues(e){this.table.options.groupValues=e,this.configureGroupSetup(),this.refreshData(),this.trackChanges()}setGroupStartOpen(e){this.table.options.groupStartOpen=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){this.table.options.groupHeader=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}userGetGroups(e){return this.getGroups(!0)}userGetGroupedData(){return this.table.options.groupBy?this.getGroupedData():this.getData()}rowGetGroup(e){return!!e.modules.group&&e.modules.group.getComponent()}rowMoving(e,t,i){if(this.table.options.groupBy){!i&&t instanceof de&&(t=this.table.rowManager.prevDisplayRow(e)||t);var s=t instanceof de?t:t.modules.group,o=e instanceof de?e:e.modules.group;s===o?this.table.rowManager.moveRowInArray(s.rows,e,t,i):(o&&o.removeRow(e),s.insertRow(e,t,i))}}rowDeleting(e){this.table.options.groupBy&&e.modules.group&&e.modules.group.removeRow(e)}rowsUpdated(e){this.table.options.groupBy&&this.updateGroupRows(!0)}cellUpdated(e){this.table.options.groupBy&&this.reassignRowToGroup(e.row)}getRows(e){return this.table.options.groupBy&&this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach((e=>{e.groupList.length?t=t.concat(this.getChildGroups(e)):t.push(e)})),t}wipe(){this.table.options.groupBy&&(this.groupList.forEach((function(e){e.wipe()})),this.groupList=[],this.groups={})}pullGroupListData(e){var t=[];return e.forEach((e=>{var i={level:0,rowCount:0,headerContent:""},s=[];e.hasSubGroups?(s=this.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=s.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),t.push(i),t=t.concat(s)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,t.push(i),e.getRows().forEach((e=>{t.push(e.getData("data"))})))})),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.options("dataTree")&&(e=this.table.modules.dataTree.getTreeParentRoot(e)),this.groupList.forEach((i=>{var s=i.getRowGroup(e);s&&(t=s)})),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((e=>{this.createGroup(e,0,t)})),e.forEach((e=>{this.assignRowToExistingGroup(e,t)}))):e.forEach((e=>{this.assignRowToGroup(e,t)})),Object.values(t).forEach((e=>{e.wipe(!0)}))}createGroup(e,t,i){var s,o=t+"_"+e;i=i||[],s=new de(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[o]),this.groups[o]=s,this.groupList.push(s)}assignRowToExistingGroup(e,t){var i="0_"+this.groupIDLookups[0].func(e.getData());this.groups[i]&&this.groups[i].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s=!this.groups["0_"+i];return s&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!s}reassignRowToGroup(e){if("row"===e.type){var t=e.modules.group,i=t.getPath(),s=this.getExpectedPath(e);i.length==s.length&&i.every(((e,t)=>e===s[t]))||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach((e=>{t.push(e.func(i))})),t}updateGroupRows(e){var t=[];return this.blockRedraw||(this.groupList.forEach((e=>{t=t.concat(e.getHeadersAndRows())})),e&&this.refreshData(!0)),t}scrollHeaders(e){this.table.options.groupBy&&("virtual"===this.table.options.renderHorizontal&&(e-=this.table.columnManager.renderer.vDomPadLeft),e+="px",this.groupList.forEach((t=>{t.scrollHeader(e)})))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))}checkBasicModeGroupHeaderWidth(){var e=this.table.rowManager.tableElement,t=!0;this.table.rowManager.getDisplayRows().forEach(((i,s)=>{this.table.rowManager.styleRow(i,s),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(t=!1)})),e.style.minWidth=t?this.table.columnManager.getWidth()+"px":""}}ce.moduleName="groupRows";class ue extends k{constructor(e){super(e),this.history=[],this.index=-1,this.registerTableOption("history",!1)}initialize(){this.table.options.history&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.rowAdded.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}rowMoved(e,t,i){this.action("rowMove",e,{posFrom:e.getPosition(),posTo:t.getPosition(),to:t,after:i})}rowAdded(e,t,i,s){this.action("rowAdd",e,{data:t,pos:i,index:s})}rowDeleted(e){var t,i;this.table.options.groupBy?(t=(i=e.getComponent().getGroup()._getSelf().rows).indexOf(e))&&(t=i[t-1]):(t=e.table.rowManager.getRowIndex(e))&&(t=e.table.rowManager.rows[t-1]),this.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}cellUpdated(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex((function(t){return t.component===e}));t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return ue.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}return console.warn(this.options("history")?"History Undo Error - No more history to undo":"History module not enabled"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return ue.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}return console.warn(this.options("history")?"History Redo Error - No more history to redo":"History module not enabled"),!1}_rebindRow(e,t){this.history.forEach((function(i){if(i.component instanceof m)i.component===e&&(i.component=t);else if(i.component instanceof o&&i.component.row===e){var s=i.component.column.getField();s&&(i.component=t.getCell(s))}}))}}ue.moduleName="history",ue.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue),e.component.cellRendered()},rowAdd:function(e){e.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t),this.table.rowManager.checkPlaceholder()},rowMove:function(e){var t=e.data.posFrom-e.data.posTo>0;this.table.rowManager.moveRowActual(e.component,this.table.rowManager.getRowFromPosition(e.data.posFrom),t),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},ue.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue),e.component.cellRendered()},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t),this.table.rowManager.checkPlaceholder()},rowDelete:function(e){e.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.getRowFromPosition(e.data.posTo),e.data.after),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}};class me extends k{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}initialize(){this.tableElementCheck()}tableElementCheck(){this.table.originalElement&&"TABLE"===this.table.originalElement.tagName&&(this.table.originalElement.childNodes.length?this.parseTable():console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."))}parseTable(){var e=this.table.originalElement,t=this.table.options,i=e.getElementsByTagName("th"),s=e.getElementsByTagName("tbody")[0],o=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),s=s?s.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,s):this._generateBlankHeaders(i,s);for(var n=0;n{n[e.toLowerCase()]=e})),s){var a,l=s[r];l&&"object"==typeof l&&l.name&&0===l.name.indexOf("tabulator-")&&(a=l.name.replace("tabulator-",""),void 0!==n[a]&&(t[n[a]]=this._attribValue(l.value)))}}_attribValue(e){return"true"===e||"false"!==e&&e}_findCol(e){return this.table.options.columns.find((t=>t.title===e))||!1}_extractHeaders(e,t){for(var i=0;i(console.error("Import Error:",e||"Unable to import data"),Promise.reject(e))))}lookupImporter(e){var t;return e||(e=this.table.options.importFormat),(t="string"==typeof e?ge.importers[e]:e)||console.error("Import Error - Importer not found:",e),t}importFromFile(e,t){var i=this.lookupImporter(e);if(i)return this.pickFile(t).then(this.importData.bind(this,i)).then(this.structureData.bind(this)).then(this.setData.bind(this)).catch((e=>(console.error("Import Error:",e||"Unable to import file"),Promise.reject(e))))}pickFile(e){return new Promise(((t,i)=>{var s=document.createElement("input");s.type="file",s.accept=e,s.addEventListener("change",(e=>{var o=s.files[0],n=new FileReader;switch(this.table.options.importReader){case"buffer":n.readAsArrayBuffer(o);break;case"binary":n.readAsBinaryString(o);break;case"url":n.readAsDataURL(o);break;default:n.readAsText(o)}n.onload=e=>{t(n.result)},n.onerror=e=>{console.warn("File Load Error - Unable to read file"),i()}})),s.click()}))}importData(e,t){var i=e.call(this.table,t);return i instanceof Promise?i:i?Promise.resolve(i):Promise.reject()}structureData(e){return Array.isArray(e)&&e.length&&Array.isArray(e[0])?this.table.options.autoColumns?this.structureArrayToObject(e):this.structureArrayToColumns(e):e}structureArrayToObject(e){var t=e.shift();return e.map((e=>{var i={};return t.forEach(((t,s)=>{i[t]=e[s]})),i}))}structureArrayToColumns(e){var t=[],i=this.table.getColumns();return i[0]&&e[0][0]&&i[0].getDefinition().title===e[0][0]&&e.shift(),e.forEach((e=>{var s={};e.forEach(((e,t)=>{var o=i[t];o&&(s[o.getField()]=e)})),t.push(s)})),t}setData(e){return this.table.setData(e)}}ge.moduleName="import",ge.importers=pe;class be extends k{constructor(e){super(e),this.eventMap={rowClick:"row-click",rowDblClick:"row-dblclick",rowContext:"row-contextmenu",rowMouseEnter:"row-mouseenter",rowMouseLeave:"row-mouseleave",rowMouseOver:"row-mouseover",rowMouseOut:"row-mouseout",rowMouseMove:"row-mousemove",rowMouseDown:"row-mousedown",rowMouseUp:"row-mouseup",rowTap:"row",rowDblTap:"row",rowTapHold:"row",cellClick:"cell-click",cellDblClick:"cell-dblclick",cellContext:"cell-contextmenu",cellMouseEnter:"cell-mouseenter",cellMouseLeave:"cell-mouseleave",cellMouseOver:"cell-mouseover",cellMouseOut:"cell-mouseout",cellMouseMove:"cell-mousemove",cellMouseDown:"cell-mousedown",cellMouseUp:"cell-mouseup",cellTap:"cell",cellDblTap:"cell",cellTapHold:"cell",headerClick:"column-click",headerDblClick:"column-dblclick",headerContext:"column-contextmenu",headerMouseEnter:"column-mouseenter",headerMouseLeave:"column-mouseleave",headerMouseOver:"column-mouseover",headerMouseOut:"column-mouseout",headerMouseMove:"column-mousemove",headerMouseDown:"column-mousedown",headerMouseUp:"column-mouseup",headerTap:"column",headerDblTap:"column",headerTapHold:"column",groupClick:"group-click",groupDblClick:"group-dblclick",groupContext:"group-contextmenu",groupMouseEnter:"group-mouseenter",groupMouseLeave:"group-mouseleave",groupMouseOver:"group-mouseover",groupMouseOut:"group-mouseout",groupMouseMove:"group-mousemove",groupMouseDown:"group-mousedown",groupMouseUp:"group-mouseup",groupTap:"group",groupDblTap:"group",groupTapHold:"group"},this.subscribers={},this.touchSubscribers={},this.columnSubscribers={},this.touchWatchers={row:{tap:null,tapDbl:null,tapHold:null},cell:{tap:null,tapDbl:null,tapHold:null},column:{tap:null,tapDbl:null,tapHold:null},group:{tap:null,tapDbl:null,tapHold:null}},this.registerColumnOption("headerClick"),this.registerColumnOption("headerDblClick"),this.registerColumnOption("headerContext"),this.registerColumnOption("headerMouseEnter"),this.registerColumnOption("headerMouseLeave"),this.registerColumnOption("headerMouseOver"),this.registerColumnOption("headerMouseOut"),this.registerColumnOption("headerMouseMove"),this.registerColumnOption("headerMouseDown"),this.registerColumnOption("headerMouseUp"),this.registerColumnOption("headerTap"),this.registerColumnOption("headerDblTap"),this.registerColumnOption("headerTapHold"),this.registerColumnOption("cellClick"),this.registerColumnOption("cellDblClick"),this.registerColumnOption("cellContext"),this.registerColumnOption("cellMouseEnter"),this.registerColumnOption("cellMouseLeave"),this.registerColumnOption("cellMouseOver"),this.registerColumnOption("cellMouseOut"),this.registerColumnOption("cellMouseMove"),this.registerColumnOption("cellMouseDown"),this.registerColumnOption("cellMouseUp"),this.registerColumnOption("cellTap"),this.registerColumnOption("cellDblTap"),this.registerColumnOption("cellTapHold")}initialize(){this.initializeExternalEvents(),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("cell-dblclick",this.cellContentsSelectionFixer.bind(this)),this.subscribe("scroll-horizontal",this.clearTouchWatchers.bind(this)),this.subscribe("scroll-vertical",this.clearTouchWatchers.bind(this))}clearTouchWatchers(){Object.values(this.touchWatchers).forEach((e=>{for(let t in e)e[t]=null}))}cellContentsSelectionFixer(e,t){var i;if(!this.table.modExists("edit")||this.table.modules.edit.currentCell!==t){e.preventDefault();try{document.selection?((i=document.body.createTextRange()).moveToElementText(t.getElement()),i.select()):window.getSelection&&((i=document.createRange()).selectNode(t.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(i))}catch(e){}}}initializeExternalEvents(){for(let e in this.eventMap)this.subscriptionChangeExternal(e,this.subscriptionChanged.bind(this,e))}subscriptionChanged(e,t){t?this.subscribers[e]||(this.eventMap[e].includes("-")?(this.subscribers[e]=this.handle.bind(this,e),this.subscribe(this.eventMap[e],this.subscribers[e])):this.subscribeTouchEvents(e)):this.eventMap[e].includes("-")?!this.subscribers[e]||this.columnSubscribers[e]||this.subscribedExternal(e)||(this.unsubscribe(this.eventMap[e],this.subscribers[e]),delete this.subscribers[e]):this.unsubscribeTouchEvents(e)}subscribeTouchEvents(e){var t=this.eventMap[e];this.touchSubscribers[t+"-touchstart"]||(this.touchSubscribers[t+"-touchstart"]=this.handleTouch.bind(this,t,"start"),this.touchSubscribers[t+"-touchend"]=this.handleTouch.bind(this,t,"end"),this.subscribe(t+"-touchstart",this.touchSubscribers[t+"-touchstart"]),this.subscribe(t+"-touchend",this.touchSubscribers[t+"-touchend"])),this.subscribers[e]=!0}unsubscribeTouchEvents(e){var t=!0,i=this.eventMap[e];if(this.subscribers[e]&&!this.subscribedExternal(e)){delete this.subscribers[e];for(let e in this.eventMap)this.eventMap[e]===i&&this.subscribers[e]&&(t=!1);t&&(this.unsubscribe(i+"-touchstart",this.touchSubscribers[i+"-touchstart"]),this.unsubscribe(i+"-touchend",this.touchSubscribers[i+"-touchend"]),delete this.touchSubscribers[i+"-touchstart"],delete this.touchSubscribers[i+"-touchend"])}}initializeColumn(e){var t=e.definition;for(let i in this.eventMap)t[i]&&(this.subscriptionChanged(i,!0),this.columnSubscribers[i]||(this.columnSubscribers[i]=[]),this.columnSubscribers[i].push(e))}handle(e,t,i){this.dispatchEvent(e,t,i)}handleTouch(e,t,i,s){var o=this.touchWatchers[e];switch("column"===e&&(e="header"),t){case"start":o.tap=!0,clearTimeout(o.tapHold),o.tapHold=setTimeout((()=>{clearTimeout(o.tapHold),o.tapHold=null,o.tap=null,clearTimeout(o.tapDbl),o.tapDbl=null,this.dispatchEvent(e+"TapHold",i,s)}),1e3);break;case"end":o.tap&&(o.tap=null,this.dispatchEvent(e+"Tap",i,s)),o.tapDbl?(clearTimeout(o.tapDbl),o.tapDbl=null,this.dispatchEvent(e+"DblTap",i,s)):o.tapDbl=setTimeout((()=>{clearTimeout(o.tapDbl),o.tapDbl=null}),300),clearTimeout(o.tapHold),o.tapHold=null}}dispatchEvent(e,t,i){var s,r=i.getComponent();this.columnSubscribers[e]&&(i instanceof o?s=i.column.definition[e]:i instanceof n&&(s=i.definition[e]),s&&s(t,r)),this.dispatchExternal(e,t,r)}}be.moduleName="interaction";class fe extends k{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1,this.registerTableOption("keybindings",{}),this.registerTableOption("tabEndNewRow",!1)}initialize(){var e=this.table.options.keybindings,t={};this.watchKeys={},this.pressedKeys=[],!1!==e&&(Object.assign(t,fe.bindings),Object.assign(t,e),this.mapBindings(t),this.bindEvents()),this.subscribe("table-destroy",this.clearBindings.bind(this))}mapBindings(e){for(let t in e)fe.actions[t]?e[t]&&("object"!=typeof e[t]&&(e[t]=[e[t]]),e[t].forEach((e=>{(Array.isArray(e)?e:[e]).forEach((e=>{this.mapBinding(t,e)}))}))):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:fe.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach((e=>{switch(e){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:e=isNaN(e)?e.toUpperCase().charCodeAt(0):parseInt(e),i.keys.push(e),this.watchKeys[e]||(this.watchKeys[e]=[]),this.watchKeys[e].push(i)}}))}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];s&&(e.pressedKeys.push(i),s.forEach((function(i){e.checkBinding(t,i)})))},this.keydownBinding=function(t){var i=t.keyCode;if(e.watchKeys[i]){var s=e.pressedKeys.indexOf(i);s>-1&&e.pressedKeys.splice(s,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach((e=>{-1==this.pressedKeys.indexOf(e)&&(i=!1)})),i&&t.action.call(this,e),!0)}}fe.moduleName="keybindings",fe.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,navLeft:37,navRight:39,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:["ctrl + 90","meta + 90"],redo:["ctrl + 89","meta + 89"],copyToClipboard:["ctrl + 67","meta + 67"],rangeJumpUp:["ctrl + 38","meta + 38"],rangeJumpDown:["ctrl + 40","meta + 40"],rangeJumpLeft:["ctrl + 37","meta + 37"],rangeJumpRight:["ctrl + 39","meta + 39"],rangeExpandUp:"shift + 38",rangeExpandDown:"shift + 40",rangeExpandLeft:"shift + 37",rangeExpandRight:"shift + 39",rangeExpandJumpUp:["ctrl + shift + 38","meta + shift + 38"],rangeExpandJumpDown:["ctrl + shift + 40","meta + shift + 40"],rangeExpandJumpLeft:["ctrl + shift + 37","meta + shift + 37"],rangeExpandJumpRight:["ctrl + shift + 39","meta + shift + 39"]},fe.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,i=t.scrollTop-t.element.clientHeight;e.preventDefault(),t.displayRowsCount&&(i>=0?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,i=t.scrollTop+t.element.clientHeight,s=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i<=s?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){this.dispatch("keybinding-nav-prev",e)},navNext:function(e){this.dispatch("keybinding-nav-next",e)},navLeft:function(e){this.dispatch("keybinding-nav-left",e)},navRight:function(e){this.dispatch("keybinding-nav-right",e)},navUp:function(e){this.dispatch("keybinding-nav-up",e)},navDown:function(e){this.dispatch("keybinding-nav-down",e)},rangeJumpLeft:function(e){this.dispatch("keybinding-nav-range",e,"left",!0,!1)},rangeJumpRight:function(e){this.dispatch("keybinding-nav-range",e,"right",!0,!1)},rangeJumpUp:function(e){this.dispatch("keybinding-nav-range",e,"up",!0,!1)},rangeJumpDown:function(e){this.dispatch("keybinding-nav-range",e,"down",!0,!1)},rangeExpandLeft:function(e){this.dispatch("keybinding-nav-range",e,"left",!1,!0)},rangeExpandRight:function(e){this.dispatch("keybinding-nav-range",e,"right",!1,!0)},rangeExpandUp:function(e){this.dispatch("keybinding-nav-range",e,"up",!1,!0)},rangeExpandDown:function(e){this.dispatch("keybinding-nav-range",e,"down",!1,!0)},rangeExpandJumpLeft:function(e){this.dispatch("keybinding-nav-range",e,"left",!0,!0)},rangeExpandJumpRight:function(e){this.dispatch("keybinding-nav-range",e,"right",!0,!0)},rangeExpandJumpUp:function(e){this.dispatch("keybinding-nav-range",e,"up",!0,!0)},rangeExpandJumpDown:function(e){this.dispatch("keybinding-nav-range",e,"down",!0,!0)},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}};class ve extends k{constructor(e){super(e),this.menuContainer=null,this.nestedMenuBlock=!1,this.currentComponent=null,this.rootPopup=null,this.columnSubscribers={},this.registerTableOption("menuContainer",void 0),this.registerTableOption("rowContextMenu",!1),this.registerTableOption("rowClickMenu",!1),this.registerTableOption("rowDblClickMenu",!1),this.registerTableOption("groupContextMenu",!1),this.registerTableOption("groupClickMenu",!1),this.registerTableOption("groupDblClickMenu",!1),this.registerColumnOption("headerContextMenu"),this.registerColumnOption("headerClickMenu"),this.registerColumnOption("headerDblClickMenu"),this.registerColumnOption("headerMenu"),this.registerColumnOption("headerMenuIcon"),this.registerColumnOption("contextMenu"),this.registerColumnOption("clickMenu"),this.registerColumnOption("dblClickMenu")}initialize(){this.deprecatedOptionsCheck(),this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){this.deprecationCheck("menuContainer","popupContainer")||(this.table.options.popupContainer=this.table.options.menuContainer)}initializeRowWatchers(){this.table.options.rowContextMenu&&(this.subscribe("row-contextmenu",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu)),this.table.on("rowTapHold",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu))),this.table.options.rowClickMenu&&this.subscribe("row-click",this.loadMenuEvent.bind(this,this.table.options.rowClickMenu)),this.table.options.rowDblClickMenu&&this.subscribe("row-dblclick",this.loadMenuEvent.bind(this,this.table.options.rowDblClickMenu))}initializeGroupWatchers(){this.table.options.groupContextMenu&&(this.subscribe("group-contextmenu",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu)),this.table.on("groupTapHold",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu))),this.table.options.groupClickMenu&&this.subscribe("group-click",this.loadMenuEvent.bind(this,this.table.options.groupClickMenu)),this.table.options.groupDblClickMenu&&this.subscribe("group-dblclick",this.loadMenuEvent.bind(this,this.table.options.groupDblClickMenu))}initializeColumn(e){var t=e.definition;t.headerContextMenu&&!this.columnSubscribers.headerContextMenu&&(this.columnSubscribers.headerContextMenu=this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextMenu),this.table.on("headerTapHold",this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"))),t.headerClickMenu&&!this.columnSubscribers.headerClickMenu&&(this.columnSubscribers.headerClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerClickMenu"),this.subscribe("column-click",this.columnSubscribers.headerClickMenu)),t.headerDblClickMenu&&!this.columnSubscribers.headerDblClickMenu&&(this.columnSubscribers.headerDblClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerDblClickMenu"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickMenu)),t.headerMenu&&this.initializeColumnHeaderMenu(e),t.contextMenu&&!this.columnSubscribers.contextMenu&&(this.columnSubscribers.contextMenu=this.loadMenuTableCellEvent.bind(this,"contextMenu"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextMenu),this.table.on("cellTapHold",this.loadMenuTableCellEvent.bind(this,"contextMenu"))),t.clickMenu&&!this.columnSubscribers.clickMenu&&(this.columnSubscribers.clickMenu=this.loadMenuTableCellEvent.bind(this,"clickMenu"),this.subscribe("cell-click",this.columnSubscribers.clickMenu)),t.dblClickMenu&&!this.columnSubscribers.dblClickMenu&&(this.columnSubscribers.dblClickMenu=this.loadMenuTableCellEvent.bind(this,"dblClickMenu"),this.subscribe("cell-dblclick",this.columnSubscribers.dblClickMenu))}initializeColumnHeaderMenu(e){var t,i=e.definition.headerMenuIcon;(t=document.createElement("span")).classList.add("tabulator-header-popup-button"),i?("function"==typeof i&&(i=i(e.getComponent())),i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i):t.innerHTML="⋮",t.addEventListener("click",(t=>{t.stopPropagation(),t.preventDefault(),this.loadMenuEvent(e.definition.headerMenu,t,e)})),e.titleElement.insertBefore(t,e.titleElement.firstChild)}loadMenuTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadMenuEvent(i.column.definition[e],t,i)}loadMenuTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadMenuEvent(i.definition[e],t,i)}loadMenuEvent(e,t,i){i._group?i=i._group:i._row&&(i=i._row),e="function"==typeof e?e.call(this.table,t,i.getComponent()):e,this.loadMenu(t,i,e)}loadMenu(e,t,i,s,o){var n,r=!(e instanceof MouseEvent),a=document.createElement("div");if(a.classList.add("tabulator-menu"),r||e.preventDefault(),i&&i.length){if(s)n=o.child(a);else{if(this.nestedMenuBlock){if(this.rootPopup)return}else this.nestedMenuBlock=setTimeout((()=>{this.nestedMenuBlock=!1}),100);this.rootPopup&&this.rootPopup.hide(),this.rootPopup=n=this.popup(a)}i.forEach((e=>{var i=document.createElement("div"),s=e.label,o=e.disabled;e.separator?i.classList.add("tabulator-menu-separator"):(i.classList.add("tabulator-menu-item"),"function"==typeof s&&(s=s.call(this.table,t.getComponent())),s instanceof Node?i.appendChild(s):i.innerHTML=s,"function"==typeof o&&(o=o.call(this.table,t.getComponent())),o?(i.classList.add("tabulator-menu-item-disabled"),i.addEventListener("click",(e=>{e.stopPropagation()}))):e.menu&&e.menu.length?i.addEventListener("click",(s=>{s.stopPropagation(),this.loadMenu(s,t,e.menu,i,n)})):e.action&&i.addEventListener("click",(i=>{e.action(i,t.getComponent())})),e.menu&&e.menu.length&&i.classList.add("tabulator-menu-item-submenu")),a.appendChild(i)})),a.addEventListener("click",(e=>{this.rootPopup&&this.rootPopup.hide()})),n.show(s||e),n===this.rootPopup&&(this.rootPopup.hideOnBlur((()=>{this.rootPopup=null,this.currentComponent&&(this.dispatch("menu-closed",i,n),this.dispatchExternal("menuClosed",this.currentComponent.getComponent()),this.currentComponent=null)})),this.currentComponent=t,this.dispatch("menu-opened",i,n),this.dispatchExternal("menuOpened",t.getComponent()))}}}ve.moduleName="menu";class we extends k{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.registerTableOption("movableColumns",!1)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initialize(){this.table.options.movableColumns&&(this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("alert-show",this.abortMove.bind(this)))}abortMove(){clearTimeout(this.checkTimeout)}initializeColumn(e){var t,i=this,s={};e.modules.frozen||e.isGroup||(t=e.getElement(),s.mousemove=function(s){e.parent===i.moving.parent&&((i.touchMove?s.touches[0].pageX:s.pageX)-r.elOffset(t).left+i.table.columnManager.contentsElement.scrollLeft>e.getWidth()/2?i.toCol===e&&i.toColAfter||(t.parentNode.insertBefore(i.placeholderElement,t.nextSibling),i.moveColumn(e,!0)):(i.toCol!==e||i.toColAfter)&&(t.parentNode.insertBefore(i.placeholderElement,t),i.moveColumn(e,!1)))}.bind(i),t.addEventListener("mousedown",(function(t){i.touchMove=!1,1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),i.bindTouchEvents(e)),e.modules.moveColumn=s}bindTouchEvents(e){var t,i,s,o,n,r,a=e.getElement(),l=!1;a.addEventListener("touchstart",(a=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,t=e.nextColumn(),s=t?t.getWidth()/2:0,i=e.prevColumn(),o=i?i.getWidth()/2:0,n=0,r=0,l=!1,this.startMove(a,e)}),this.checkPeriod)}),{passive:!0}),a.addEventListener("touchmove",(a=>{var h,d;this.moving&&(this.moveHover(a),l||(l=a.touches[0].pageX),(h=a.touches[0].pageX-l)>0?t&&h-n>s&&(d=t)!==e&&(l=a.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveColumn(d,!0)):i&&-h-r>o&&(d=i)!==e&&(l=a.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveColumn(d,!1)),d&&(t=d.nextColumn(),n=s,s=t?t.getWidth()/2:0,i=d.prevColumn(),r=o,o=i?i.getWidth()/2:0))}),{passive:!0}),a.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(e)}))}startMove(e,t){var i=t.getElement(),s=this.table.columnManager.getContentsElement(),o=this.table.columnManager.getHeadersElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-r.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),s.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom=s.clientHeight-o.offsetHeight+"px",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)}))}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)}))}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach((function(e,t){var s=e.getElement(!0);s.parentNode&&i[t]&&s.parentNode.insertBefore(i[t].getElement(),s.nextSibling)})):e.getCells().forEach((function(e,t){var s=e.getElement(!0);s.parentNode&&i[t]&&s.parentNode.insertBefore(i[t].getElement(),s)}))}endMove(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var t,i=this.table.columnManager.getContentsElement(),s=i.scrollLeft,o=(this.touchMove?e.touches[0].pageX:e.pageX)-r.elOffset(i).left+s;this.hoverElement.style.left=o-this.startX+"px",o-s{t=Math.max(0,s-5),this.table.rowManager.getElement().scrollLeft=t,this.autoScrollTimeout=!1}),1))),s+i.clientWidth-o{t=Math.min(i.clientWidth,s+5),this.table.rowManager.getElement().scrollLeft=t,this.autoScrollTimeout=!1}),1)))}}we.moduleName="moveColumn";class Ce extends k{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1,this.registerTableOption("movableRows",!1),this.registerTableOption("movableRowsConnectedTables",!1),this.registerTableOption("movableRowsConnectedElements",!1),this.registerTableOption("movableRowsSender",!1),this.registerTableOption("movableRowsReceiver","insert"),this.registerColumnOption("rowHandle")}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(){this.table.options.movableRows&&(this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements,this.subscribe("cell-init",this.initializeCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)))}initializeGroupHeader(e){var t=this,i={};i.mouseup=function(i){t.tableRowDrop(i,e)}.bind(t),i.mousemove=function(i){var s;i.pageY-r.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?t.toRow===e&&t.toRowAfter||((s=e.getElement()).parentNode.insertBefore(t.placeholderElement,s.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(s=e.getElement()).previousSibling&&(s.parentNode.insertBefore(t.placeholderElement,s),t.moveRow(e,!1))}.bind(t),e.modules.moveRow=i}initializeRow(e){var t,i=this,s={};s.mouseup=function(t){i.tableRowDrop(t,e)}.bind(i),s.mousemove=function(t){var s=e.getElement();t.pageY-r.elOffset(s).top+i.table.rowManager.element.scrollTop>e.getHeight()/2?i.toRow===e&&i.toRowAfter||(s.parentNode.insertBefore(i.placeholderElement,s.nextSibling),i.moveRow(e,!0)):(i.toRow!==e||i.toRowAfter)&&(s.parentNode.insertBefore(i.placeholderElement,s),i.moveRow(e,!1))}.bind(i),this.hasHandle||((t=e.getElement()).addEventListener("mousedown",(function(t){1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=s}initializeColumn(e){e.definition.rowHandle&&!1!==this.table.options.movableRows&&(this.hasHandle=!0)}initializeCell(e){if(e.column.definition.rowHandle&&!1!==this.table.options.movableRows){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",(function(i){1===i.which&&(t.checkTimeout=setTimeout((function(){t.startMove(i,e.row)}),t.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)})),this.bindTouchEvents(e.row,i)}}bindTouchEvents(e,t){var i,s,o,n,r,a,l=!1;t.addEventListener("touchstart",(t=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,i=e.nextRow(),o=i?i.getHeight()/2:0,s=e.prevRow(),n=s?s.getHeight()/2:0,r=0,a=0,l=!1,this.startMove(t,e)}),this.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",(t=>{var h,d;this.moving&&(t.preventDefault(),this.moveHover(t),l||(l=t.touches[0].pageY),(h=t.touches[0].pageY-l)>0?i&&h-r>o&&(d=i)!==e&&(l=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveRow(d,!0)):s&&-h-a>n&&(d=s)!==e&&(l=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveRow(d,!1)),d&&(i=d.nextRow(),r=o,o=i?i.getHeight()/2:0,s=d.prevRow(),a=n,n=s?s.getHeight()/2:0))})),t.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(e),this.touchMove=!1)}))}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{("row"===e.type||"group"===e.type)&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)}))}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{("row"===e.type||"group"===e.type)&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)}))}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.dispatchExternal("rowMoving",t.getComponent()),this.moveHover(e)}setStartPosition(e,t){var i,s,o=this.touchMove?e.touches[0].pageX:e.pageX,n=this.touchMove?e.touches[0].pageY:e.pageY;i=t.getElement(),this.connection?(s=i.getBoundingClientRect(),this.startX=s.left-o+window.pageXOffset,this.startY=s.top-n+window.pageYOffset):this.startY=n-i.getBoundingClientRect().top}endMove(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow?this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter):this.dispatchExternal("rowMoveCancelled",this.moving.getComponent()),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,s=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=Math.min(s-this.startY,this.table.rowManager.element.scrollHeight-this.hoverElement.offsetHeight)+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.dispatchExternal("movableRowsElementDrop",e,t,!!i&&i.getComponent())}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((e=>{"string"==typeof e?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):this.connectionElements.push(e)})),this.connectionElements.forEach((e=>{var t=t=>{this.elementRowDrop(t,e,this.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")})))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((e=>{e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent}))}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var s=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":s=this.senders[this.table.options.movableRowsSender];break;case"function":s=this.table.options.movableRowsSender}s?s.call(this,this.moving?this.moving.getComponent():void 0,t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,s=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=this.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver}i?s=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),s?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:t,success:s})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}}Ce.prototype.receivers={insert:function(e,t,i){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,i){return this.table.addRow(e.getData()),!0},update:function(e,t,i){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,i){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},Ce.prototype.senders={delete:function(e,t,i){e.delete()}},Ce.moduleName="moveRow";class Ee extends k{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0,this.registerColumnOption("mutator"),this.registerColumnOption("mutatorParams"),this.registerColumnOption("mutatorData"),this.registerColumnOption("mutatorDataParams"),this.registerColumnOption("mutatorEdit"),this.registerColumnOption("mutatorEditParams"),this.registerColumnOption("mutatorClipboard"),this.registerColumnOption("mutatorClipboardParams"),this.registerColumnOption("mutateLink")}initialize(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("cell-value-changed",this.mutateLink.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}rowDataChanged(e,t,i){return this.transformRow(t,"data",i)}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((s=>{var o,n="mutator"+(s.charAt(0).toUpperCase()+s.slice(1));e.definition[n]&&(o=this.lookupMutator(e.definition[n]))&&(t=!0,i[n]={mutator:o,params:e.definition[n+"Params"]||{}})})),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":Ee.mutators[e]?t=Ee.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,t,i){var s,o="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&this.table.columnManager.traverse((n=>{var r,a,l;n.modules.mutate&&(r=n.modules.mutate[o]||n.modules.mutate.mutator||!1)&&(s=n.getFieldValue(void 0!==i?i:e),("data"==t&&!i||void 0!==s)&&(l=n.getComponent(),a="function"==typeof r.params?r.params(s,e,t,l):r.params,n.setFieldValue(e,r.mutator(s,e,t,a,l))))})),e}transformCell(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,s={};if(i)return s=Object.assign(s,e.row.getData()),e.column.setFieldValue(s,t),i.mutator(t,s,"edit",i.params,e.getComponent())}return t}mutateLink(e){var t=e.column.definition.mutateLink;t&&(Array.isArray(t)||(t=[t]),t.forEach((t=>{var i=e.row.getCell(t);i&&i.setValue(i.getValue(),!0,!0)})))}enable(){this.enabled=!0}disable(){this.enabled=!1}}Ee.moduleName="mutator",Ee.mutators={};var ye={rows:function(e,t,i,s,o){var n=document.createElement("span"),r=document.createElement("span"),a=document.createElement("span"),l=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",(e=>{r.innerHTML=e})),this.table.modules.localize.langBind("pagination|counter|of",(e=>{l.innerHTML=e})),this.table.modules.localize.langBind("pagination|counter|rows",(e=>{d.innerHTML=e})),s?(a.innerHTML=" "+t+"-"+Math.min(t+e-1,s)+" ",h.innerHTML=" "+s+" ",n.appendChild(r),n.appendChild(a),n.appendChild(l),n.appendChild(h),n.appendChild(d)):(a.innerHTML=" 0 ",n.appendChild(r),n.appendChild(a),n.appendChild(d)),n},pages:function(e,t,i,s,o){var n=document.createElement("span"),r=document.createElement("span"),a=document.createElement("span"),l=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",(e=>{r.innerHTML=e})),a.innerHTML=" "+i+" ",this.table.modules.localize.langBind("pagination|counter|of",(e=>{l.innerHTML=e})),h.innerHTML=" "+o+" ",this.table.modules.localize.langBind("pagination|counter|pages",(e=>{d.innerHTML=e})),n.appendChild(r),n.appendChild(a),n.appendChild(l),n.appendChild(h),n.appendChild(d),n}};class Re extends k{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.element=null,this.pageCounterElement=null,this.pageCounter=null,this.size=0,this.page=1,this.count=5,this.max=1,this.remoteRowCountEstimate=null,this.initialLoad=!0,this.dataChanging=!1,this.pageSizes=[],this.registerTableOption("pagination",!1),this.registerTableOption("paginationMode","local"),this.registerTableOption("paginationSize",!1),this.registerTableOption("paginationInitialPage",1),this.registerTableOption("paginationCounter",!1),this.registerTableOption("paginationCounterElement",!1),this.registerTableOption("paginationButtonCount",5),this.registerTableOption("paginationSizeSelector",!1),this.registerTableOption("paginationElement",!1),this.registerTableOption("paginationAddRow","page"),this.registerTableOption("progressiveLoad",!1),this.registerTableOption("progressiveLoadDelay",0),this.registerTableOption("progressiveLoadScrollMargin",0),this.registerTableFunction("setMaxPage",this.setMaxPage.bind(this)),this.registerTableFunction("setPage",this.setPage.bind(this)),this.registerTableFunction("setPageToRow",this.userSetPageToRow.bind(this)),this.registerTableFunction("setPageSize",this.userSetPageSize.bind(this)),this.registerTableFunction("getPageSize",this.getPageSize.bind(this)),this.registerTableFunction("previousPage",this.previousPage.bind(this)),this.registerTableFunction("nextPage",this.nextPage.bind(this)),this.registerTableFunction("getPage",this.getPage.bind(this)),this.registerTableFunction("getPageMax",this.getPageMax.bind(this)),this.registerComponentFunction("row","pageTo",this.setPageToRow.bind(this))}initialize(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("footer-redraw",this.footerRedraw.bind(this)),"page"==this.table.options.paginationAddRow&&this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),"remote"===this.table.options.paginationMode&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePageCounter(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),"scroll"===this.table.options.progressiveLoad&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}rowAddingPosition(e,t){var i,s=this.table.rowManager,o=s.getDisplayRows();return t?o.length?i=o[0]:s.activeRows.length&&(i=s.activeRows[s.activeRows.length-1],t=!1):o.length&&(i=o[o.length-1],t=!(o.length{}))}restOnRenderBefore(e,t){return t||"local"===this.mode&&this.reset(),e}rowsUpdated(){this.refreshData(!0,"all")}createElements(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(e=document.createElement("button")).classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}generatePageSizeSelectList(){var e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,-1==this.pageSizes.indexOf(this.size)&&e.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){e=[];for(let t=1;t<5;t++)e.push(this.size*t);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach((e=>{var t=document.createElement("option");t.value=e,!0===e?this.langBind("pagination|all",(function(e){t.innerHTML=e})):t.innerHTML=e,this.pageSizeSelect.appendChild(t)})),this.pageSizeSelect.value=this.size}}initializePageCounter(){var e=this.table.options.paginationCounter,t=null;e&&((t="function"==typeof e?e:Re.pageCounters[e])?(this.pageCounter=t,this.pageCounterElement=document.createElement("span"),this.pageCounterElement.classList.add("tabulator-page-counter")):console.warn("Pagination Error - No such page counter found: ",e))}initializePaginator(e){var t,i;e||(this.langBind("pagination|first",(e=>{this.firstBut.innerHTML=e})),this.langBind("pagination|first_title",(e=>{this.firstBut.setAttribute("aria-label",e),this.firstBut.setAttribute("title",e)})),this.langBind("pagination|prev",(e=>{this.prevBut.innerHTML=e})),this.langBind("pagination|prev_title",(e=>{this.prevBut.setAttribute("aria-label",e),this.prevBut.setAttribute("title",e)})),this.langBind("pagination|next",(e=>{this.nextBut.innerHTML=e})),this.langBind("pagination|next_title",(e=>{this.nextBut.setAttribute("aria-label",e),this.nextBut.setAttribute("title",e)})),this.langBind("pagination|last",(e=>{this.lastBut.innerHTML=e})),this.langBind("pagination|last_title",(e=>{this.lastBut.setAttribute("aria-label",e),this.lastBut.setAttribute("title",e)})),this.firstBut.addEventListener("click",(()=>{this.setPage(1)})),this.prevBut.addEventListener("click",(()=>{this.previousPage()})),this.nextBut.addEventListener("click",(()=>{this.nextPage()})),this.lastBut.addEventListener("click",(()=>{this.setPage(this.max)})),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.langBind("pagination|page_size",(e=>{this.pageSizeSelect.setAttribute("aria-label",e),this.pageSizeSelect.setAttribute("title",e),t.innerHTML=e})),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",(e=>{this.setPageSize("true"==this.pageSizeSelect.value||this.pageSizeSelect.value),this.setPage(1)}))),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||(this.table.options.paginationCounter&&(this.table.options.paginationCounterElement?this.table.options.paginationCounterElement instanceof HTMLElement?this.table.options.paginationCounterElement.appendChild(this.pageCounterElement):"string"==typeof this.table.options.paginationCounterElement&&((i=document.querySelector(this.table.options.paginationCounterElement))?i.appendChild(this.pageCounterElement):console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:",this.table.options.paginationCounterElement)):this.footerAppend(this.pageCounterElement)),this.footerAppend(this.element)),this.page=this.table.options.paginationInitialPage,this.count=this.table.options.paginationButtonCount),this.mode=this.table.options.paginationMode}initializeProgressive(e){this.initializePaginator(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}trackChanges(){this.dispatch("page-changed")}setMaxRows(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)}reset(e){this.initialLoad||("local"==this.mode||e)&&(this.page=1,this.trackChanges())}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return(e=parseInt(e))>0&&e<=this.max||"local"!==this.mode?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}setPageToRow(e){var t=this.displayRows(-1).indexOf(e);if(t>-1){var i=!0===this.size?1:Math.ceil((t+1)/this.size);return this.setPage(i)}return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}setPageSize(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e,this.dispatchExternal("pageSizeChanged",e)),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}_setPageCounter(e,t,i){var s;if(this.pageCounter)switch("remote"===this.mode&&(t=this.size,i=(this.page-1)*this.size+1,e=this.remoteRowCountEstimate),typeof(s=this.pageCounter.call(this,t,i,this.page,e,this.max))){case"object":if(s instanceof Node){for(;this.pageCounterElement.firstChild;)this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);this.pageCounterElement.appendChild(s)}else this.pageCounterElement.innerHTML="",null!=s&&console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:",s);break;case"undefined":this.pageCounterElement.innerHTML="";break;default:this.pageCounterElement.innerHTML=s}}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&e<=this.max&&this.pagesElement.appendChild(this._generatePageButton(e));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.langBind("pagination|page_title",(i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)})),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",(t=>{this.setPage(e)})),t}previousPage(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}nextPage(){return this.page"row"===e.type));if("local"==this.mode){t=[],this.setMaxRows(e.length),!0===this.size?(i=0,s=e.length):s=(i=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(let r=i;r{this.dataChanging=!1}));case"progressive_load":case"progressive_scroll":return this.reloadData(null,!0);default:return console.warn("Pagination Error - no such pagination mode:",this.mode),Promise.reject()}}_parseRemoteData(e){var t;if(void 0===e.last_page&&console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").last_page||"last_page")+"' property"),e.data){if(this.max=parseInt(e.last_page)||1,this.remoteRowCountEstimate=void 0!==e.last_row?e.last_row:e.last_page*this.size-(this.page==e.last_page?this.size-e.data.length:0),this.progressiveLoad){switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e.data,!1,1==this.page):this.table.rowManager.addRows(e.data),this.page{this.nextPage()}),this.table.options.progressiveLoadDelay);break;case"progressive_scroll":e=1===this.page?e.data:this.table.rowManager.getData().concat(e.data),this.table.rowManager.setData(e,1!==this.page,1==this.page),t=this.table.options.progressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+t&&this.page{this.nextPage()}))}return!1}this.dispatchExternal("pageLoaded",this.getPage())}else console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").data||"data")+"' property");return e.data}footerRedraw(){var e=this.table.footerManager.containerElement;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}}Re.moduleName="page",Re.pageCounters=ye;var xe={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,s,o=document.cookie,n=e+"-"+t,r=o.indexOf(n+"=");return r>-1&&((i=(o=o.slice(r)).indexOf(";"))>-1&&(o=o.slice(0,i)),s=o.replace(n+"=","")),!!s&&JSON.parse(s)}},Te={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var s=new Date;s.setDate(s.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+s.toUTCString()}};class ke extends k{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1,this.registerTableOption("persistence",!1),this.registerTableOption("persistenceID",""),this.registerTableOption("persistenceMode",!0),this.registerTableOption("persistenceReaderFunc",!1),this.registerTableOption("persistenceWriterFunc",!1)}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}initialize(){if(this.table.options.persistence){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:ke.readers[this.table.options.persistenceReaderFunc]?this.readFunc=ke.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):ke.readers[this.mode]?this.readFunc=ke.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:ke.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=ke.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):ke.writers[this.mode]?this.writeFunc=ke.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,headerFilter:!0===this.table.options.persistence||this.table.options.persistence.headerFilter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retrieveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retrieveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns"))),this.subscribe("table-built",this.tableBuilt.bind(this),0),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("filter-changed",this.eventSave.bind(this,"headerFilter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("column-width",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}eventSave(e){this.config[e]&&this.save(e)}tableBuilt(){var e,t,i;this.config.sort&&!1==!(e=this.load("sort"))&&(this.table.options.initialSort=e),this.config.filter&&!1==!(t=this.load("filter"))&&(this.table.options.initialFilter=t),this.config.headerFilter&&!1==!(i=this.load("headerFilter"))&&(this.table.options.initialHeaderFilter=i)}tableRedraw(e){e&&this.config.columns&&this.save("columns")}getColumnLayout(){return this.parseColumns(this.table.columnManager.getColumns())}setColumnLayout(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e,!0)),!0}initializeColumn(e){var t;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),(!0===this.config.columns?Object.keys(t):this.config.columns).forEach((e=>{var i=Object.getOwnPropertyDescriptor(t,e),s=t[e];i&&Object.defineProperty(t,e,{set:e=>{s=e,this.defWatcherBlock||this.save("columns"),i.set&&i.set(e)},get:()=>(i.get&&i.get(),s)})})),this.defWatcherBlock=!1)}load(e,t){var i=this.retrieveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retrieveData(e){return!!this.readFunc&&this.readFunc(this.id,e)}mergeDefinition(e,t,i){var s=[];return(t=t||[]).forEach(((t,o)=>{var n,r=this._findColumn(e,t);r&&(i?n=Object.keys(t):!0===this.config.columns||null==this.config.columns?(n=Object.keys(r)).push("width"):n=this.config.columns,n.forEach((e=>{"columns"!==e&&void 0!==t[e]&&(r[e]=t[e])})),r.columns&&(r.columns=this.mergeDefinition(r.columns,t.columns)),s.push(r))})),e.forEach(((e,i)=>{this._findColumn(t,e)||(s.length>i?s.splice(i,0,e):s.push(e))})),s}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find((function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}}))}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"headerFilter":t=this.table.modules.filter.getHeaderFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach((function(e){e.column=e.field,delete e.field})),e}getGroupConfig(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach((e=>{var s,o={},n=e.getDefinition();e.isGroup?(o.title=n.title,o.columns=this.parseColumns(e.getColumns())):(o.field=e.getField(),!0===this.config.columns||null==this.config.columns?((s=Object.keys(n)).push("width"),s.push("visible")):s=this.config.columns,s.forEach((t=>{switch(t){case"width":o.width=e.getWidth();break;case"visible":o.visible=e.visible;break;default:"function"!=typeof n[t]&&-1===i.indexOf(t)&&(o[t]=n[t])}}))),t.push(o)})),t}}ke.moduleName="persistence",ke.moduleInitOrder=-10,ke.readers=xe,ke.writers=Te;class Me extends k{constructor(e){super(e),this.columnSubscribers={},this.registerTableOption("rowContextPopup",!1),this.registerTableOption("rowClickPopup",!1),this.registerTableOption("rowDblClickPopup",!1),this.registerTableOption("groupContextPopup",!1),this.registerTableOption("groupClickPopup",!1),this.registerTableOption("groupDblClickPopup",!1),this.registerColumnOption("headerContextPopup"),this.registerColumnOption("headerClickPopup"),this.registerColumnOption("headerDblClickPopup"),this.registerColumnOption("headerPopup"),this.registerColumnOption("headerPopupIcon"),this.registerColumnOption("contextPopup"),this.registerColumnOption("clickPopup"),this.registerColumnOption("dblClickPopup"),this.registerComponentFunction("cell","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("column","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("row","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("group","popup",this._componentPopupCall.bind(this))}initialize(){this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}_componentPopupCall(e,t,i){this.loadPopupEvent(t,null,e,i)}initializeRowWatchers(){this.table.options.rowContextPopup&&(this.subscribe("row-contextmenu",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup)),this.table.on("rowTapHold",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup))),this.table.options.rowClickPopup&&this.subscribe("row-click",this.loadPopupEvent.bind(this,this.table.options.rowClickPopup)),this.table.options.rowDblClickPopup&&this.subscribe("row-dblclick",this.loadPopupEvent.bind(this,this.table.options.rowDblClickPopup))}initializeGroupWatchers(){this.table.options.groupContextPopup&&(this.subscribe("group-contextmenu",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup)),this.table.on("groupTapHold",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup))),this.table.options.groupClickPopup&&this.subscribe("group-click",this.loadPopupEvent.bind(this,this.table.options.groupClickPopup)),this.table.options.groupDblClickPopup&&this.subscribe("group-dblclick",this.loadPopupEvent.bind(this,this.table.options.groupDblClickPopup))}initializeColumn(e){var t=e.definition;t.headerContextPopup&&!this.columnSubscribers.headerContextPopup&&(this.columnSubscribers.headerContextPopup=this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextPopup),this.table.on("headerTapHold",this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"))),t.headerClickPopup&&!this.columnSubscribers.headerClickPopup&&(this.columnSubscribers.headerClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerClickPopup"),this.subscribe("column-click",this.columnSubscribers.headerClickPopup)),t.headerDblClickPopup&&!this.columnSubscribers.headerDblClickPopup&&(this.columnSubscribers.headerDblClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerDblClickPopup"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickPopup)),t.headerPopup&&this.initializeColumnHeaderPopup(e),t.contextPopup&&!this.columnSubscribers.contextPopup&&(this.columnSubscribers.contextPopup=this.loadPopupTableCellEvent.bind(this,"contextPopup"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextPopup),this.table.on("cellTapHold",this.loadPopupTableCellEvent.bind(this,"contextPopup"))),t.clickPopup&&!this.columnSubscribers.clickPopup&&(this.columnSubscribers.clickPopup=this.loadPopupTableCellEvent.bind(this,"clickPopup"),this.subscribe("cell-click",this.columnSubscribers.clickPopup)),t.dblClickPopup&&!this.columnSubscribers.dblClickPopup&&(this.columnSubscribers.dblClickPopup=this.loadPopupTableCellEvent.bind(this,"dblClickPopup"),this.subscribe("cell-click",this.columnSubscribers.dblClickPopup))}initializeColumnHeaderPopup(e){var t,i=e.definition.headerPopupIcon;(t=document.createElement("span")).classList.add("tabulator-header-popup-button"),i?("function"==typeof i&&(i=i(e.getComponent())),i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i):t.innerHTML="⋮",t.addEventListener("click",(t=>{t.stopPropagation(),t.preventDefault(),this.loadPopupEvent(e.definition.headerPopup,t,e)})),e.titleElement.insertBefore(t,e.titleElement.firstChild)}loadPopupTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadPopupEvent(i.column.definition[e],t,i)}loadPopupTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadPopupEvent(i.definition[e],t,i)}loadPopupEvent(e,t,i,s){var o;i._group?i=i._group:i._row&&(i=i._row),e="function"==typeof e?e.call(this.table,t,i.getComponent(),(function(e){o=e})):e,this.loadPopup(t,i,e,o,s)}loadPopup(e,t,i,s,o){var n,r,a=!(e instanceof MouseEvent);i instanceof HTMLElement?n=i:(n=document.createElement("div")).innerHTML=i,n.classList.add("tabulator-popup"),n.addEventListener("click",(e=>{e.stopPropagation()})),a||e.preventDefault(),r=this.popup(n),"function"==typeof s&&r.renderCallback(s),e?r.show(e):r.show(t.getElement(),o||"center"),r.hideOnBlur((()=>{this.dispatchExternal("popupClosed",t.getComponent())})),this.dispatchExternal("popupOpened",t.getComponent())}}Me.moduleName="popup";class Le extends k{constructor(e){super(e),this.element=!1,this.manualBlock=!1,this.beforeprintEventHandler=null,this.afterprintEventHandler=null,this.registerTableOption("printAsHtml",!1),this.registerTableOption("printFormatter",!1),this.registerTableOption("printHeader",!1),this.registerTableOption("printFooter",!1),this.registerTableOption("printStyled",!0),this.registerTableOption("printRowRange","visible"),this.registerTableOption("printConfig",{}),this.registerColumnOption("print"),this.registerColumnOption("titlePrint")}initialize(){this.table.options.printAsHtml&&(this.beforeprintEventHandler=this.replaceTable.bind(this),this.afterprintEventHandler=this.cleanup.bind(this),window.addEventListener("beforeprint",this.beforeprintEventHandler),window.addEventListener("afterprint",this.afterprintEventHandler),this.subscribe("table-destroy",this.destroy.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}destroy(){this.table.options.printAsHtml&&(window.removeEventListener("beforeprint",this.beforeprintEventHandler),window.removeEventListener("afterprint",this.afterprintEventHandler))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var s,o,n=window.scrollX,r=window.scrollY,a=document.createElement("div"),l=document.createElement("div"),h=this.table.modules.export.generateTable(void 0!==i?i:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(a.classList.add("tabulator-print-header"),"string"==typeof(s="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?a.innerHTML=s:a.appendChild(s),this.element.appendChild(a)),this.element.appendChild(h),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),"string"==typeof(o="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?l.innerHTML=o:l.appendChild(o),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,h),window.print(),this.cleanup(),window.scrollTo(n,r),this.manualBlock=!1}}Le.moduleName="print";class Se extends k{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0,this.registerTableOption("reactiveData",!1)}initialize(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this,"cellsave")),this.subscribe("cell-value-save-after",this.unblock.bind(this,"cellsave")),this.subscribe("row-data-save-before",this.block.bind(this,"rowsave")),this.subscribe("row-data-save-after",this.unblock.bind(this,"rowsave")),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}watchData(e){var t,i=this;this.currentVersion++,t=this.currentVersion,this.unwatchData(),this.data=e,this.origFuncs.push=e.push,Object.defineProperty(this.data,"push",{enumerable:!1,configurable:!0,value:function(){var s,o=Array.from(arguments);return i.blocked||t!==i.currentVersion||(i.block("data-push"),o.forEach((e=>{i.table.rowManager.addRowActual(e,!1)})),s=i.origFuncs.push.apply(e,arguments),i.unblock("data-push")),s}}),this.origFuncs.unshift=e.unshift,Object.defineProperty(this.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var s,o=Array.from(arguments);return i.blocked||t!==i.currentVersion||(i.block("data-unshift"),o.forEach((e=>{i.table.rowManager.addRowActual(e,!0)})),s=i.origFuncs.unshift.apply(e,arguments),i.unblock("data-unshift")),s}}),this.origFuncs.shift=e.shift,Object.defineProperty(this.data,"shift",{enumerable:!1,configurable:!0,value:function(){var s,o;return i.blocked||t!==i.currentVersion||(i.block("data-shift"),i.data.length&&(s=i.table.rowManager.getRowFromDataObject(i.data[0]))&&s.deleteActual(),o=i.origFuncs.shift.call(e),i.unblock("data-shift")),o}}),this.origFuncs.pop=e.pop,Object.defineProperty(this.data,"pop",{enumerable:!1,configurable:!0,value:function(){var s,o;return i.blocked||t!==i.currentVersion||(i.block("data-pop"),i.data.length&&(s=i.table.rowManager.getRowFromDataObject(i.data[i.data.length-1]))&&s.deleteActual(),o=i.origFuncs.pop.call(e),i.unblock("data-pop")),o}}),this.origFuncs.splice=e.splice,Object.defineProperty(this.data,"splice",{enumerable:!1,configurable:!0,value:function(){var s,o,n=Array.from(arguments),r=n[0]<0?e.length+n[0]:n[0],a=n[1],l=!!n[2]&&n.slice(2);if(!i.blocked&&t===i.currentVersion){if(i.block("data-splice"),l&&((s=!!e[r]&&i.table.rowManager.getRowFromDataObject(e[r]))?l.forEach((e=>{i.table.rowManager.addRowActual(e,!0,s,!0)})):(l=l.slice().reverse()).forEach((e=>{i.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==a){var h=e.slice(r,void 0===n[1]?n[1]:r+a);h.forEach(((e,t)=>{var s=i.table.rowManager.getRowFromDataObject(e);s&&s.deleteActual(t!==h.length-1)}))}(l||0!==a)&&i.table.rowManager.reRenderInPosition(),o=i.origFuncs.splice.apply(e,arguments),i.unblock("data-splice")}return o}})}unwatchData(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e)}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],s={};i&&(s.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-push");var o=s.push.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-push")}return o}}),s.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-unshift");var o=s.unshift.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-unshift")}return o}}),s.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-shift");var o=s.shift.call(i);this.rebuildTree(e),t.unblock("tree-shift")}return o}}),s.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-pop");var o=s.pop.call(i);this.rebuildTree(e),t.unblock("tree-pop")}return o}}),s.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-splice");var o=s.splice.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-splice")}return o}}))}rebuildTree(e){this.table.modules.dataTree.initializeRow(e),this.table.modules.dataTree.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}watchKey(e,t,i){var s=this,o=Object.getOwnPropertyDescriptor(t,i),n=t[i],r=this.currentVersion;Object.defineProperty(t,i,{set:t=>{if(n=t,!s.blocked&&r===s.currentVersion){s.block("key");var a={};a[i]=t,e.updateData(a),s.unblock("key")}o.set&&o.set(t)},get:()=>(o.get&&o.get(),n)})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(e){this.blocked||(this.blocked=e)}unblock(e){this.blocked===e&&(this.blocked=!1)}}Se.moduleName="reactiveData";class De extends k{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.latestX=!1,this.handle=null,this.initialNextColumn=null,this.nextColumn=null,this.initialized=!1,this.registerColumnOption("resizable",!0),this.registerTableOption("resizableColumnFit",!1)}initialize(){this.subscribe("column-rendered",this.layoutColumnHeader.bind(this))}initializeEventWatchers(){this.initialized||(this.subscribe("cell-rendered",this.layoutCellHandles.bind(this)),this.subscribe("cell-delete",this.deInitializeComponent.bind(this)),this.subscribe("cell-height",this.resizeHandle.bind(this)),this.subscribe("column-moved",this.columnLayoutUpdated.bind(this)),this.subscribe("column-hide",this.deInitializeColumn.bind(this)),this.subscribe("column-show",this.columnLayoutUpdated.bind(this)),this.subscribe("column-width",this.columnWidthUpdated.bind(this)),this.subscribe("column-delete",this.deInitializeComponent.bind(this)),this.subscribe("column-height",this.resizeHandle.bind(this)),this.initialized=!0)}layoutCellHandles(e){"row"===e.row.type&&(this.deInitializeComponent(e),this.initializeColumn("cell",e,e.column,e.element))}layoutColumnHeader(e){e.definition.resizable&&(this.initializeEventWatchers(),this.deInitializeComponent(e),this.initializeColumn("header",e,e,e.element))}columnLayoutUpdated(e){var t=e.prevColumn();this.reinitializeColumn(e),t&&this.reinitializeColumn(t)}columnWidthUpdated(e){e.modules.frozen&&(this.table.modules.frozenColumns.leftColumns.includes(e)?this.table.modules.frozenColumns.leftColumns.forEach((e=>{this.reinitializeColumn(e)})):this.table.modules.frozenColumns.rightColumns.includes(e)&&this.table.modules.frozenColumns.rightColumns.forEach((e=>{this.reinitializeColumn(e)})))}frozenColumnOffset(e){var t=!1;return e.modules.frozen&&(t=e.modules.frozen.marginValue,"left"===e.modules.frozen.position?t+=e.getWidth()-3:t&&(t-=3)),!1!==t&&t+"px"}reinitializeColumn(e){var t=this.frozenColumnOffset(e);e.cells.forEach((i=>{i.modules.resize&&i.modules.resize.handleEl&&(t&&(i.modules.resize.handleEl.style[e.modules.frozen.position]=t,i.modules.resize.handleEl.style["z-index"]=11),i.element.after(i.modules.resize.handleEl))})),e.modules.resize&&e.modules.resize.handleEl&&(t&&(e.modules.resize.handleEl.style[e.modules.frozen.position]=t),e.element.after(e.modules.resize.handleEl))}initializeColumn(e,t,i,s){var o=this,n=i.definition.resizable,r={},a=i.getLastColumn();if("header"===e&&(r={variableHeight:"textarea"==i.definition.formatter||i.definition.variableHeight}),(!0===n||n==e)&&this._checkResizability(a)){var l=document.createElement("span");l.className="tabulator-col-resize-handle",l.addEventListener("click",(function(e){e.stopPropagation()}));var h=function(e){o.startColumn=i,o.initialNextColumn=o.nextColumn=a.nextColumn(),o._mouseDown(e,a,l)};l.addEventListener("mousedown",h),l.addEventListener("touchstart",h,{passive:!0}),l.addEventListener("dblclick",(e=>{var t=a.getWidth();e.stopPropagation(),a.reinitializeWidth(!0),t!==a.getWidth()&&(o.dispatch("column-resized",a),o.table.externalEvents.dispatch("columnResized",a.getComponent()))})),i.modules.frozen&&(l.style.position="sticky",l.style[i.modules.frozen.position]=this.frozenColumnOffset(i)),r.handleEl=l,s.parentNode&&i.visible&&s.after(l)}t.modules.resize=r}deInitializeColumn(e){this.deInitializeComponent(e),e.cells.forEach((e=>{this.deInitializeComponent(e)}))}deInitializeComponent(e){var t;e.modules.resize&&(t=e.modules.resize.handleEl)&&t.parentElement&&t.parentElement.removeChild(t)}resizeHandle(e,t){e.modules.resize&&e.modules.resize.handleEl&&(e.modules.resize.handleEl.style.height=t)}_checkResizability(e){return e.definition.resizable}_mouseDown(e,t,i){var s=this;function o(e){var i,o,n=void 0===e.screenX?e.touches[0].screenX:e.screenX,r=n-s.startX,a=n-s.latestX;if(s.latestX=n,s.table.rtl&&(r=-r,a=-a),i=t.width==t.minWidth||t.width==t.maxWidth,t.setWidth(s.startWidth+r),o=t.width==t.minWidth||t.width==t.maxWidth,a<0&&(s.nextColumn=s.initialNextColumn),s.table.options.resizableColumnFit&&s.nextColumn&&(!i||!o)){let e=s.nextColumn.getWidth();a>0&&e<=s.nextColumn.minWidth&&(s.nextColumn=s.nextColumn.nextColumn()),s.nextColumn&&s.nextColumn.setWidth(s.nextColumn.getWidth()-a)}s.table.columnManager.rerenderColumns(!0),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.startWidth!==t.getWidth()&&(s.table.columnManager.verticalAlignHeaders(),s.dispatch("column-resized",t),s.table.externalEvents.dispatch("columnResized",t.getComponent()))}s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.latestX=s.startX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)}}De.moduleName="resizeColumns";class Pe extends k{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null,this.registerTableOption("resizableRows",!1)}initialize(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}initializeRow(e){var t=this,i=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var o=document.createElement("div");o.className="tabulator-row-resize-handle prev",s.addEventListener("click",(function(e){e.stopPropagation()}));var n=function(i){t.startRow=e,t._mouseDown(i,e,s)};s.addEventListener("mousedown",n),s.addEventListener("touchstart",n,{passive:!0}),o.addEventListener("click",(function(e){e.stopPropagation()}));var r=function(i){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(i,s,o))};o.addEventListener("mousedown",r),o.addEventListener("touchstart",r,{passive:!0}),i.appendChild(s),i.appendChild(o)}_mouseDown(e,t,i){var s=this;function o(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.dispatchExternal("rowResized",t.getComponent())}s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)}}Pe.moduleName="resizeRows";class ze extends k{constructor(e){super(e),this.binding=!1,this.visibilityObserver=!1,this.resizeObserver=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1,this.visible=!1,this.initialized=!1,this.initialRedraw=!1,this.registerTableOption("autoResize",!0)}initialize(){if(this.table.options.autoResize){var e,t=this.table;this.tableHeight=t.element.clientHeight,this.tableWidth=t.element.clientWidth,t.element.parentNode&&(this.containerHeight=t.element.parentNode.clientHeight,this.containerWidth=t.element.parentNode.clientWidth),"undefined"!=typeof IntersectionObserver&&"undefined"!=typeof ResizeObserver&&"virtual"===t.rowManager.getRenderMode()?(this.initializeVisibilityObserver(),this.autoResize=!0,this.resizeObserver=new ResizeObserver((e=>{if(!t.browserMobile||t.browserMobile&&(!t.modules.edit||t.modules.edit&&!t.modules.edit.currentCell)){var i=Math.floor(e[0].contentRect.height),s=Math.floor(e[0].contentRect.width);this.tableHeight==i&&this.tableWidth==s||(this.tableHeight=i,this.tableWidth=s,t.element.parentNode&&(this.containerHeight=t.element.parentNode.clientHeight,this.containerWidth=t.element.parentNode.clientWidth),this.redrawTable())}})),this.resizeObserver.observe(t.element),e=window.getComputedStyle(t.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(e.getPropertyValue("max-height")||e.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((e=>{if(!t.browserMobile||t.browserMobile&&(!t.modules.edit||t.modules.edit&&!t.modules.edit.currentCell)){var i=Math.floor(e[0].contentRect.height),s=Math.floor(e[0].contentRect.width);this.containerHeight==i&&this.containerWidth==s||(this.containerHeight=i,this.containerWidth=s,this.tableHeight=t.element.clientHeight,this.tableWidth=t.element.clientWidth),this.redrawTable()}})),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!t.browserMobile||t.browserMobile&&(!t.modules.edit||t.modules.edit&&!t.modules.edit.currentCell))&&(t.columnManager.rerenderColumns(!0),t.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver((e=>{this.visible=e[0].isIntersecting,this.initialized?this.visible&&(this.redrawTable(this.initialRedraw),this.initialRedraw=!1):(this.initialized=!0,this.initialRedraw=!this.visible)})),this.visibilityObserver.observe(this.table.element)}redrawTable(e){this.initialized&&this.visible&&(this.table.columnManager.rerenderColumns(!0),this.table.redraw(e))}tableResized(){this.table.rowManager.redraw()}clearBindings(){this.binding&&window.removeEventListener("resize",this.binding),this.resizeObserver&&this.resizeObserver.unobserve(this.table.element),this.visibilityObserver&&this.visibilityObserver.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}ze.moduleName="resizeTable";class He extends k{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1,this.registerTableOption("responsiveLayout",!1),this.registerTableOption("responsiveLayoutCollapseStartOpen",!0),this.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),this.registerTableOption("responsiveLayoutCollapseFormatter",!1),this.registerColumnOption("responsive")}initialize(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),"collapse"===this.table.options.responsiveLayout&&(this.subscribe("row-data-changed",this.generateCollapsedRowContent.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}tableRedraw(e){-1===["fitColumns","fitDataStretch"].indexOf(this.layoutMode())&&(e||this.update())}initializeResponsivity(){var e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(((t,i)=>{t.modules.responsive&&t.modules.responsive.order&&t.modules.responsive.visible&&(t.modules.responsive.index=i,e.push(t),t.visible||"collapse"!==this.mode||this.hiddenColumns.push(t))})),e=(e=e.reverse()).sort(((e,t)=>t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index)),this.columns=e,"collapse"===this.mode&&this.generateCollapsedContent();for(let e of this.table.columnManager.columnsByIndex)if("responsiveCollapse"==e.definition.formatter){this.collapseHandleColumn=e;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}}initializeRow(e){var t;"calc"!==e.type&&((t=document.createElement("div")).classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initializeResponsivity())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&((t=this.hiddenColumns.indexOf(e))>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=!0;e;){let t="fitColumns"==this.table.modules.layout.getMode()?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),i=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-t;if(i<0){let t=this.columns[this.index];t?(this.hideColumn(t),this.index++):e=!1}else{let t=this.columns[this.index-1];t&&i>0&&i>=t.getWidth()?(this.showColumn(t),this.index--):e=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){this.table.rowManager.getDisplayRows().forEach((e=>{this.generateCollapsedRowContent(e)}))}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);(i=this.collapseFormatter(this.generateCollapsedRowData(e)))&&t.appendChild(i)}}generateCollapsedRowData(e){var t,i=e.getData(),s=[];return this.hiddenColumns.forEach((o=>{var n=o.getFieldValue(i);if(o.definition.title&&o.field)if(o.modules.format&&this.table.options.responsiveLayoutCollapseUseFormatters){function r(e){e()}t={value:!1,data:{},getValue:function(){return n},getData:function(){return i},getType:function(){return"cell"},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return o.getComponent()},getTable:()=>this.table},s.push({field:o.field,title:o.definition.title,value:o.modules.format.formatter.call(this.table.modules.format,t,o.modules.format.params,r)})}else s.push({field:o.field,title:o.definition.title,value:n})})),s}formatCollapsedData(e){var t=document.createElement("table");return e.forEach((function(e){var i,s=document.createElement("tr"),o=document.createElement("td"),n=document.createElement("td"),r=document.createElement("strong");o.appendChild(r),this.langBind("columns|"+e.field,(function(t){r.innerHTML=t||e.title})),e.value instanceof Node?((i=document.createElement("div")).appendChild(e.value),n.appendChild(i)):n.innerHTML=e.value,s.appendChild(o),s.appendChild(n),t.appendChild(s)}),this),Object.keys(e).length?t:""}}He.moduleName="responsiveLayout";class Fe extends k{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null,this.registerTableOption("selectableRows","highlight"),this.registerTableOption("selectableRowsRangeMode","drag"),this.registerTableOption("selectableRowsRollingSelection",!0),this.registerTableOption("selectableRowsPersistence",!0),this.registerTableOption("selectableRowsCheck",(function(e,t){return!0})),this.registerTableFunction("selectRow",this.selectRows.bind(this)),this.registerTableFunction("deselectRow",this.deselectRows.bind(this)),this.registerTableFunction("toggleSelectRow",this.toggleRow.bind(this)),this.registerTableFunction("getSelectedRows",this.getSelectedRows.bind(this)),this.registerTableFunction("getSelectedData",this.getSelectedData.bind(this)),this.registerComponentFunction("row","select",this.selectRows.bind(this)),this.registerComponentFunction("row","deselect",this.deselectRows.bind(this)),this.registerComponentFunction("row","toggleSelect",this.toggleRow.bind(this)),this.registerComponentFunction("row","isSelected",this.isRowSelected.bind(this))}initialize(){this.deprecatedOptionsCheck(),"highlight"===this.table.options.selectableRows&&this.table.options.selectableRange&&(this.table.options.selectableRows=!1),!1!==this.table.options.selectableRows&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.rowRetrieve.bind(this)),this.table.options.selectableRows&&!this.table.options.selectableRowsPersistence&&this.subscribe("data-refreshing",this.deselectRows.bind(this)))}deprecatedOptionsCheck(){this.deprecationCheck("selectable","selectableRows",!0),this.deprecationCheck("selectableRollingSelection","selectableRowsRollingSelection",!0),this.deprecationCheck("selectableRangeMode","selectableRowsRangeMode",!0),this.deprecationCheck("selectablePersistence","selectableRowsPersistence",!0),this.deprecationCheck("selectableCheck","selectableRowsCheck",!0)}rowRetrieve(e,t){return"selected"===e?this.selectedRows:t}rowDeleted(e){this._deselectRow(e,!0)}clearSelectionData(e){var t=this.selectedRows.length;this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t&&!0!==e&&this._rowSelectionChanged()}initializeRow(e){var t=this,i=t.checkRowSelectability(e),s=e.getElement(),o=function(){setTimeout((function(){t.selecting=!1}),50),document.body.removeEventListener("mouseup",o)};e.modules.select={selected:!1},s.classList.toggle("tabulator-selectable",i),s.classList.toggle("tabulator-unselectable",!i),t.checkRowSelectability(e)&&t.table.options.selectableRows&&"highlight"!=t.table.options.selectableRows&&("click"===t.table.options.selectableRowsRangeMode?s.addEventListener("click",this.handleComplexRowClick.bind(this,e)):(s.addEventListener("click",(function(i){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)})),s.addEventListener("mousedown",(function(i){if(i.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",o),document.body.addEventListener("keyup",o),t.toggleRow(e),!1})),s.addEventListener("mouseenter",(function(i){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))})),s.addEventListener("mouseout",(function(i){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))}))))}handleComplexRowClick(e,t){if(t.shiftKey){this.table._clearSelection(),this.lastClickedRow=this.lastClickedRow||e;var i=this.table.rowManager.getDisplayRowIndex(this.lastClickedRow),s=this.table.rowManager.getDisplayRowIndex(e),o=i<=s?i:s,n=i>=s?i:s,r=this.table.rowManager.getDisplayRows().slice(0).splice(o,n-o+1);t.ctrlKey||t.metaKey?(r.forEach((t=>{t!==this.lastClickedRow&&(!0===this.table.options.selectableRows||this.isRowSelected(e)||this.selectedRows.lengththis.table.options.selectableRows&&(r=r.slice(0,this.table.options.selectableRows)),this.selectRows(r)),this.table._clearSelection()}else t.ctrlKey||t.metaKey?(this.toggleRow(e),this.lastClickedRow=e):(this.deselectRows(void 0,!0),this.selectRows(e),this.lastClickedRow=e)}checkRowSelectability(e){return!(!e||"row"!==e.type)&&this.table.options.selectableRowsCheck.call(this.table,e.getComponent())}toggleRow(e){this.checkRowSelectability(e)&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t,i,s=[];switch(typeof e){case"undefined":t=this.table.rowManager.rows;break;case"number":t=this.table.rowManager.findRow(e);break;case"string":(t=this.table.rowManager.findRow(e))||(t=this.table.rowManager.getRows(e));break;default:t=e}Array.isArray(t)?t.length&&(t.forEach((e=>{(i=this._selectRow(e,!0,!0))&&s.push(i)})),this._rowSelectionChanged(!1,s)):t&&this._selectRow(t,!1,!0)}_selectRow(e,t,i){if(!isNaN(this.table.options.selectableRows)&&!0!==this.table.options.selectableRows&&!i&&this.selectedRows.length>=this.table.options.selectableRows){if(!this.table.options.selectableRowsRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var s=this.table.rowManager.findRow(e);if(s){if(-1==this.selectedRows.indexOf(s))return s.getElement().classList.add("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!0,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!0),this.selectedRows.push(s),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!0),this.dispatchExternal("rowSelected",s.getComponent()),this._rowSelectionChanged(t,s),s}else t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return-1!==this.selectedRows.indexOf(e)}deselectRows(e,t){var i,s,o=[];switch(typeof e){case"undefined":i=Object.assign([],this.selectedRows);break;case"number":i=this.table.rowManager.findRow(e);break;case"string":(i=this.table.rowManager.findRow(e))||(i=this.table.rowManager.getRows(e));break;default:i=e}Array.isArray(i)?i.length&&(i.forEach((e=>{(s=this._deselectRow(e,!0,!0))&&o.push(s)})),this._rowSelectionChanged(t,[],o)):i&&this._deselectRow(i,t,!0)}_deselectRow(e,t){var i,s,o=this,n=o.table.rowManager.findRow(e);if(n){if((i=o.selectedRows.findIndex((function(e){return e==n})))>-1)return(s=n.getElement())&&s.classList.remove("tabulator-selected"),n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),o.selectedRows.splice(i,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),this.dispatchExternal("rowDeselected",n.getComponent()),o._rowSelectionChanged(t,void 0,n),n}else t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getData())})),e}getSelectedRows(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getComponent())})),e}_rowSelectionChanged(e,t=[],i=[]){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||(Array.isArray(t)||(t=[t]),t=t.map((e=>e.getComponent())),Array.isArray(i)||(i=[i]),i=i.map((e=>e.getComponent())),this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows(),t,i))}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0);if(t)for(let e of i)this._selectRow(e,!0);else for(let e of i)this._deselectRow(e,!0)}}function _e(e,t,i,s,o,n,r){var a=window.DateTime||luxon.DateTime,l=r.format||"dd/MM/yyyy HH:mm:ss",h=r.alignEmptyValues,d=0;if(void 0!==a){if(a.isDateTime(e)||(e="iso"===l?a.fromISO(String(e)):a.fromFormat(String(e),l)),a.isDateTime(t)||(t="iso"===l?a.fromISO(String(t)):a.fromFormat(String(t),l)),e.isValid){if(t.isValid)return e-t;d=1}else d=t.isValid?-1:0;return("top"===h&&"desc"===n||"bottom"===h&&"asc"===n)&&(d*=-1),d}console.error("Sort Error - 'datetime' sorter is dependant on luxon.js")}Fe.moduleName="selectRow";var Oe={number:function(e,t,i,s,o,n,r){var a=r.alignEmptyValues,l=r.decimalSeparator,h=r.thousandSeparator,d=0;if(e=String(e),t=String(t),h&&(e=e.split(h).join(""),t=t.split(h).join("")),l&&(e=e.split(l).join("."),t=t.split(l).join(".")),e=parseFloat(e),t=parseFloat(t),isNaN(e))d=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;d=1}return("top"===a&&"desc"===n||"bottom"===a&&"asc"===n)&&(d*=-1),d},string:function(e,t,i,s,o,n,r){var a,l=r.alignEmptyValues,h=0;if(e){if(t){switch(typeof r.locale){case"boolean":r.locale&&(a=this.langLocale());break;case"string":a=r.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),a)}h=1}else h=t?-1:0;return("top"===l&&"desc"===n||"bottom"===l&&"asc"===n)&&(h*=-1),h},date:function(e,t,i,s,o,n,r){return r.format||(r.format="dd/MM/yyyy"),_e.call(this,e,t,i,s,o,n,r)},time:function(e,t,i,s,o,n,r){return r.format||(r.format="HH:mm"),_e.call(this,e,t,i,s,o,n,r)},datetime:_e,boolean:function(e,t,i,s,o,n,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,i,s,o,n,r){var a=r.type||"length",l=r.alignEmptyValues,h=0;function d(e){var t;switch(a){case"length":t=e.length;break;case"sum":t=e.reduce((function(e,t){return e+t}));break;case"max":t=Math.max.apply(null,e);break;case"min":t=Math.min.apply(null,e);break;case"avg":t=e.reduce((function(e,t){return e+t}))/e.length}return t}if(Array.isArray(e)){if(Array.isArray(t))return d(t)-d(e);h=1}else h=Array.isArray(t)?-1:0;return("top"===l&&"desc"===n||"bottom"===l&&"asc"===n)&&(h*=-1),h},exists:function(e,t,i,s,o,n,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,i,s,o,n,r){var a,l,h,d,c,u=0,m=/(\d+)|(\D+)/g,p=/\d/,g=r.alignEmptyValues,b=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((a=String(e).toLowerCase())===(l=String(t).toLowerCase()))return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(m),l=l.match(m),c=a.length>l.length?l.length:a.length;ud?1:-1;return a.length>l.length}b=1}else b=t||0===t?-1:0;return("top"===g&&"desc"===n||"bottom"===g&&"asc"===n)&&(b*=-1),b}};class Ae extends k{constructor(e){super(e),this.sortList=[],this.changed=!1,this.registerTableOption("sortMode","local"),this.registerTableOption("initialSort",!1),this.registerTableOption("columnHeaderSortMulti",!0),this.registerTableOption("sortOrderReverse",!1),this.registerTableOption("headerSortElement","
    "),this.registerTableOption("headerSortClickElement","header"),this.registerColumnOption("sorter"),this.registerColumnOption("sorterParams"),this.registerColumnOption("headerSort",!0),this.registerColumnOption("headerSortStartingDir"),this.registerColumnOption("headerSortTristate")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),"remote"===this.table.options.sortMode&&this.subscribe("data-params",this.remoteSortParams.bind(this))}tableBuilt(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}remoteSortParams(e,t,i,s){var o=this.getSort();return o.forEach((e=>{delete e.column})),s.sort=o,s}userSetSort(e,t){this.setSort(e,t),this.refreshSort()}clearSort(){this.clear(),this.refreshSort()}initializeColumn(e){var t,i,s=!1;switch(typeof e.definition.sorter){case"string":Ae.sorters[e.definition.sorter]?s=Ae.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}if(e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:e.definition.headerSortTristate},!1!==e.definition.headerSort){if((t=e.getElement()).classList.add("tabulator-sortable"),(i=document.createElement("div")).classList.add("tabulator-col-sorter"),"icon"===this.table.options.headerSortClickElement)i.classList.add("tabulator-col-sorter-element");else t.classList.add("tabulator-col-sorter-element");switch(this.table.options.headerSortElement){case"function":break;case"object":i.appendChild(this.table.options.headerSortElement);break;default:i.innerHTML=this.table.options.headerSortElement}e.titleHolderElement.appendChild(i),e.modules.sort.element=i,this.setColumnHeaderSortIcon(e,"none"),"icon"===this.table.options.headerSortClickElement&&i.addEventListener("mousedown",(e=>{e.stopPropagation()})),("icon"===this.table.options.headerSortClickElement?i:t).addEventListener("click",(t=>{var i="",s=[],o=!1;if(e.modules.sort){if(e.modules.sort.tristate)i="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":i="desc";break;case"desc":i="asc";break;default:i=e.modules.sort.startingDir}this.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(o=(s=this.getSort()).findIndex((t=>t.field===e.getField())),o>-1?(s[o].dir=i,o=s.splice(o,1)[0],"none"!=i&&s.push(o)):"none"!=i&&s.push({column:e,dir:i}),this.setSort(s)):"none"==i?this.clear():this.setSort(e,i),this.refreshSort()}}))}}refreshSort(){"remote"===this.table.options.sortMode?this.reloadData(null,!1,!1):this.refreshData(!0)}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=[];return this.sortList.forEach((function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})})),e}setSort(e,t){var i=this,s=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach((function(e){var t;(t=i.table.columnManager.findColumn(e.column))?(e.column=t,s.push(e),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)})),i.sortList=s,this.dispatch("sort-changed")}clear(){this.setSort([])}findSorter(e){var t,i=this.table.rowManager.activeRows[0],s="string";if(i&&(i=i.getData(),e.getField()))switch(typeof(t=e.getFieldValue(i))){case"undefined":s="string";break;case"boolean":s="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(s="alphanum"):s="number"}return Ae.sorters[s]}sort(e){var t=this,i=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,s=[],o=[];return this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",t.getSort()),t.clearColumnHeaders(),"remote"!==this.table.options.sortMode?(i.forEach((function(e,i){var o;e.column&&((o=e.column.modules.sort)&&(o.sorter||(o.sorter=t.findSorter(e.column)),e.params="function"==typeof o.params?o.params(e.column.getComponent(),e.dir):o.params,s.push(e)),t.setColumnHeader(e.column,e.dir))})),s.length&&t._sortItems(e,s)):i.forEach((function(e,i){t.setColumnHeader(e.column,e.dir)})),this.subscribedExternal("dataSorted")&&(e.forEach((e=>{o.push(e.getComponent())})),this.dispatchExternal("dataSorted",t.getSort(),o)),e}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach((e=>{e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"),this.setColumnHeaderSortIcon(e,"none"))}))}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort","asc"===t?"ascending":"descending"),this.setColumnHeaderSortIcon(e,t)}setColumnHeaderSortIcon(e,t){var i,s=e.modules.sort.element;if(e.definition.headerSort&&"function"==typeof this.table.options.headerSortElement){for(;s.firstChild;)s.removeChild(s.firstChild);"object"==typeof(i=this.table.options.headerSortElement.call(this.table,e.getComponent(),t))?s.appendChild(i):s.innerHTML=i}}_sortItems(e,t){var i=t.length-1;e.sort(((e,s)=>{for(var o,n=i;n>=0;n--){let i=t[n];if(0!==(o=this._sortRow(e,s,i.column,i.dir,i.params)))break}return o}))}_sortRow(e,t,i,s,o){var n,r,a="asc"==s?e:t,l="asc"==s?t:e;return e=void 0!==(e=i.getFieldValue(a.getData()))?e:"",t=void 0!==(t=i.getFieldValue(l.getData()))?t:"",n=a.getComponent(),r=l.getComponent(),i.modules.sort.sorter.call(this,e,t,n,r,i.getComponent(),s,o)}}Ae.moduleName="sort",Ae.sorters=Oe;class Be{constructor(e){return this._range=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._range.table.componentFunctionBinder.handle("range",e._range,t)}})}getElement(){return this._range.element}getData(){return this._range.getData()}getCells(){return this._range.getCells(!0)}getStructuredCells(){return this._range.getStructuredCells()}getRows(){return this._range.getRows().map((e=>e.getComponent()))}getColumns(){return this._range.getColumns().map((e=>e.getComponent()))}getBounds(){return this._range.getBounds()}getTopEdge(){return this._range.top}getBottomEdge(){return this._range.bottom}getLeftEdge(){return this._range.left}getRightEdge(){return this._range.right}setBounds(e,t){this._range.destroyedGuard("setBounds")&&this._range.setBounds(e?e._cell:e,t?t._cell:t)}setStartBound(e){this._range.destroyedGuard("setStartBound")&&(this._range.setEndBound(e?e._cell:e),this._range.rangeManager.layoutElement())}setEndBound(e){this._range.destroyedGuard("setEndBound")&&(this._range.setEndBound(e?e._cell:e),this._range.rangeManager.layoutElement())}clearValues(){this._range.destroyedGuard("clearValues")&&this._range.clearValues()}remove(){this._range.destroyedGuard("remove")&&this._range.destroy(!0)}}class Ve extends e{constructor(e,t,i,s){super(e),this.rangeManager=t,this.element=null,this.initialized=!1,this.initializing={start:!1,end:!1},this.destroyed=!1,this.top=0,this.bottom=0,this.left=0,this.right=0,this.table=e,this.start={row:0,col:0},this.end={row:0,col:0},this.rangeManager.rowHeader&&(this.left=1,this.right=1,this.start.col=1,this.end.col=1),this.initElement(),setTimeout((()=>{this.initBounds(i,s)}))}initElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-range")}initBounds(e,t){this._updateMinMax(),e&&this.setBounds(e,t||e)}setStart(e,t){this.start.row===e&&this.start.col===t||(this.start.row=e,this.start.col=t,this.initializing.start=!0,this._updateMinMax())}setEnd(e,t){this.end.row===e&&this.end.col===t||(this.end.row=e,this.end.col=t,this.initializing.end=!0,this._updateMinMax())}setBounds(e,t,i){e&&this.setStartBound(e),this.setEndBound(t||e),this.rangeManager.layoutElement(i)}setStartBound(e){var t,i;"column"===e.type?this.rangeManager.columnSelection&&this.setStart(0,e.getPosition()-1):(t=e.row.position-1,i=e.column.getPosition()-1,e.column===this.rangeManager.rowHeader?this.setStart(t,1):this.setStart(t,i))}setEndBound(e){var t,i,s,o=this._getTableRows().length;"column"===e.type?this.rangeManager.columnSelection&&("column"===this.rangeManager.selecting?this.setEnd(o-1,e.getPosition()-1):"cell"===this.rangeManager.selecting&&this.setEnd(0,e.getPosition()-1)):(t=e.row.position-1,i=e.column.getPosition()-1,s=e.column===this.rangeManager.rowHeader,"row"===this.rangeManager.selecting?this.setEnd(t,this._getTableColumns().length-1):"row"!==this.rangeManager.selecting&&s?this.setEnd(t,0):"column"===this.rangeManager.selecting?this.setEnd(o-1,i):this.setEnd(t,i))}_updateMinMax(){this.top=Math.min(this.start.row,this.end.row),this.bottom=Math.max(this.start.row,this.end.row),this.left=Math.min(this.start.col,this.end.col),this.right=Math.max(this.start.col,this.end.col),this.initialized?this.dispatchExternal("rangeChanged",this.getComponent()):this.initializing.start&&this.initializing.end&&(this.initialized=!0,this.dispatchExternal("rangeAdded",this.getComponent()))}_getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}_getTableRows(){return this.table.rowManager.getDisplayRows()}layout(){var e,t,i,s,o,n,r=this.table.rowManager.renderer.vDomTop,a=this.table.rowManager.renderer.vDomBottom,l=this.table.columnManager.renderer.leftCol,h=this.table.columnManager.renderer.rightCol;null==r&&(r=0),null==a&&(a=1/0),null==l&&(l=0),null==h&&(h=1/0),this.overlaps(l,r,h,a)&&(e=Math.max(this.top,r),t=Math.min(this.bottom,a),i=Math.max(this.left,l),s=Math.min(this.right,h),o=this.rangeManager.getCell(e,i),n=this.rangeManager.getCell(t,s),this.element.classList.add("tabulator-range-active"),this.element.style.left=o.row.getElement().offsetLeft+o.getElement().offsetLeft+"px",this.element.style.top=o.row.getElement().offsetTop+"px",this.element.style.width=n.getElement().offsetLeft+n.getElement().offsetWidth-o.getElement().offsetLeft+"px",this.element.style.height=n.row.getElement().offsetTop+n.row.getElement().offsetHeight-o.row.getElement().offsetTop+"px")}atTopLeft(e){return e.row.position-1===this.top&&e.column.getPosition()-1===this.left}atBottomRight(e){return e.row.position-1===this.bottom&&e.column.getPosition()-1===this.right}occupies(e){return this.occupiesRow(e.row)&&this.occupiesColumn(e.column)}occupiesRow(e){return this.top<=e.position-1&&e.position-1<=this.bottom}occupiesColumn(e){return this.left<=e.getPosition()-1&&e.getPosition()-1<=this.right}overlaps(e,t,i,s){return!(this.left>i||e>this.right||this.top>s||t>this.bottom)}getData(){var e=[],t=this.getRows(),i=this.getColumns();return t.forEach((t=>{var s=t.getData(),o={};i.forEach((e=>{o[e.field]=s[e.field]})),e.push(o)})),e}getCells(e,t){var i=[],s=this.getRows(),o=this.getColumns();return e?i=s.map((e=>{var i=[];return e.getCells().forEach((e=>{o.includes(e.column)&&i.push(t?e.getComponent():e)})),i})):s.forEach((e=>{e.getCells().forEach((e=>{o.includes(e.column)&&i.push(t?e.getComponent():e)}))})),i}getStructuredCells(){return this.getCells(!0,!0)}getRows(){return this._getTableRows().slice(this.top,this.bottom+1)}getColumns(){return this._getTableColumns().slice(this.left,this.right+1)}clearValues(){var e=this.getCells(),t=this.table.options.selectableRangeClearCellsValue;this.table.blockRedraw(),e.forEach((e=>{e.setValue(t)})),this.table.restoreRedraw()}getBounds(e){var t=this.getCells(!1,e),i={start:null,end:null};return t.length?(i.start=t[0],i.end=t[t.length-1]):console.warn("No bounds defined on range"),i}getComponent(){return this.component||(this.component=new Be(this)),this.component}destroy(e){this.destroyed=!0,this.element.remove(),e&&this.rangeManager.rangeRemoved(this),this.initialized&&this.dispatchExternal("rangeRemoved",this.getComponent())}destroyedGuard(e){return this.destroyed&&console.warn("You cannot call the "+e+" function on a destroyed range"),!this.destroyed}}class Ie extends k{constructor(e){super(e),this.selecting="cell",this.mousedown=!1,this.ranges=[],this.overlay=null,this.rowHeader=null,this.layoutChangeTimeout=null,this.columnSelection=!1,this.rowSelection=!1,this.maxRanges=0,this.activeRange=!1,this.blockKeydown=!1,this.keyDownEvent=this._handleKeyDown.bind(this),this.mouseUpEvent=this._handleMouseUp.bind(this),this.registerTableOption("selectableRange",!1),this.registerTableOption("selectableRangeColumns",!1),this.registerTableOption("selectableRangeRows",!1),this.registerTableOption("selectableRangeClearCells",!1),this.registerTableOption("selectableRangeClearCellsValue",void 0),this.registerTableFunction("getRangesData",this.getRangesData.bind(this)),this.registerTableFunction("getRanges",this.getRanges.bind(this)),this.registerTableFunction("addRange",this.addRangeFromComponent.bind(this)),this.registerComponentFunction("cell","getRanges",this.cellGetRanges.bind(this)),this.registerComponentFunction("row","getRanges",this.rowGetRanges.bind(this)),this.registerComponentFunction("column","getRanges",this.colGetRanges.bind(this))}initialize(){this.options("selectableRange")&&(this.options("selectableRows")?console.warn("SelectRange functionality cannot be used in conjunction with row selection"):(this.maxRanges=this.options("selectableRange"),this.initializeTable(),this.initializeWatchers()))}initializeTable(){this.overlay=document.createElement("div"),this.overlay.classList.add("tabulator-range-overlay"),this.rangeContainer=document.createElement("div"),this.rangeContainer.classList.add("tabulator-range-container"),this.activeRangeCellElement=document.createElement("div"),this.activeRangeCellElement.classList.add("tabulator-range-cell-active"),this.overlay.appendChild(this.rangeContainer),this.overlay.appendChild(this.activeRangeCellElement),this.table.rowManager.element.addEventListener("keydown",this.keyDownEvent),this.resetRanges(),this.table.rowManager.element.appendChild(this.overlay),this.table.columnManager.element.setAttribute("tabindex",0),this.table.element.classList.add("tabulator-ranges")}initializeWatchers(){this.columnSelection=this.options("selectableRangeColumns"),this.rowSelection=this.options("selectableRangeRows"),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-mousedown",this.handleColumnMouseDown.bind(this)),this.subscribe("column-mousemove",this.handleColumnMouseMove.bind(this)),this.subscribe("column-resized",this.handleColumnResized.bind(this)),this.subscribe("column-width",this.layoutChange.bind(this)),this.subscribe("column-height",this.layoutChange.bind(this)),this.subscribe("column-resized",this.layoutChange.bind(this)),this.subscribe("columns-loaded",this.updateHeaderColumn.bind(this)),this.subscribe("cell-height",this.layoutChange.bind(this)),this.subscribe("cell-rendered",this.renderCell.bind(this)),this.subscribe("cell-mousedown",this.handleCellMouseDown.bind(this)),this.subscribe("cell-mousemove",this.handleCellMouseMove.bind(this)),this.subscribe("cell-click",this.handleCellClick.bind(this)),this.subscribe("cell-editing",this.handleEditingCell.bind(this)),this.subscribe("page-changed",this.redraw.bind(this)),this.subscribe("scroll-vertical",this.layoutChange.bind(this)),this.subscribe("scroll-horizontal",this.layoutChange.bind(this)),this.subscribe("data-destroy",this.tableDestroyed.bind(this)),this.subscribe("data-processed",this.resetRanges.bind(this)),this.subscribe("table-layout",this.layoutElement.bind(this)),this.subscribe("table-redraw",this.redraw.bind(this)),this.subscribe("table-destroy",this.tableDestroyed.bind(this)),this.subscribe("edit-editor-clear",this.finishEditingCell.bind(this)),this.subscribe("edit-blur",this.restoreFocus.bind(this)),this.subscribe("keybinding-nav-prev",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-next",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-left",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-right",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-up",this.keyNavigate.bind(this,"up")),this.subscribe("keybinding-nav-down",this.keyNavigate.bind(this,"down")),this.subscribe("keybinding-nav-range",this.keyNavigateRange.bind(this))}initializeColumn(e){this.columnSelection&&e.definition.headerSort&&"icon"!==this.options("headerSortClickElement")&&console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."),e.modules.edit}updateHeaderColumn(){this.rowSelection&&(this.rowHeader=this.table.columnManager.getVisibleColumnsByIndex()[0],this.rowHeader&&(this.rowHeader.definition.cssClass=this.rowHeader.definition.cssClass+" tabulator-range-row-header",this.rowHeader.definition.headerSort&&console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"),this.rowHeader.definition.editor&&console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior")))}getRanges(){return this.ranges.map((e=>e.getComponent()))}getRangesData(){return this.ranges.map((e=>e.getData()))}addRangeFromComponent(e,t){return e=e?e._cell:null,t=t?t._cell:null,this.addRange(e,t)}cellGetRanges(e){var t=[];return t=e.column===this.rowHeader?this.ranges.filter((t=>t.occupiesRow(e.row))):this.ranges.filter((t=>t.occupies(e))),t.map((e=>e.getComponent()))}rowGetRanges(e){var t=this.ranges.filter((t=>t.occupiesRow(e)));return t.map((e=>e.getComponent()))}colGetRanges(e){var t=this.ranges.filter((t=>t.occupiesColumn(e)));return t.map((e=>e.getComponent()))}_handleMouseUp(e){this.mousedown=!1,document.removeEventListener("mouseup",this.mouseUpEvent)}_handleKeyDown(e){if(!this.blockKeydown&&(!this.table.modules.edit||this.table.modules.edit&&!this.table.modules.edit.currentCell)){if("Enter"===e.key){if(this.table.modules.edit&&this.table.modules.edit.currentCell)return;this.table.modules.edit.editCell(this.getActiveCell()),e.preventDefault()}"Backspace"!==e.key&&"Delete"!==e.key||!this.options("selectableRangeClearCells")||this.activeRange&&this.activeRange.clearValues()}}initializeFocus(e){var t;try{document.selection?((t=document.body.createTextRange()).moveToElementText(e.getElement()),t.select()):window.getSelection&&((t=document.createRange()).selectNode(e.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(t))}catch(e){}}restoreFocus(e){return this.table.rowManager.element.focus(),!0}handleColumnResized(e){var t;"column"!==this.selecting&&"all"!==this.selecting||(t=this.ranges.some((t=>t.occupiesColumn(e))),t&&this.ranges.forEach((t=>{t.getColumns(!0).forEach((t=>{t!==e&&t.setWidth(e.width)}))})))}handleColumnMouseDown(e,t){(2!==e.button||"column"!==this.selecting&&"all"!==this.selecting||!this.activeRange.occupiesColumn(t))&&(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleColumnMouseMove(e,t){t!==this.rowHeader&&this.mousedown&&"all"!==this.selecting&&this.activeRange.setBounds(!1,t,!0)}renderCell(e){var t=e.getElement(),i=this.ranges.findIndex((t=>t.occupies(e)));t.classList.toggle("tabulator-range-selected",-1!==i),t.classList.toggle("tabulator-range-only-cell-selected",1===this.ranges.length&&this.ranges[0].atTopLeft(e)&&this.ranges[0].atBottomRight(e)),t.dataset.range=i}handleCellMouseDown(e,t){2===e.button&&(this.activeRange.occupies(t)||("row"===this.selecting||"all"===this.selecting)&&this.activeRange.occupiesRow(t.row))||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleCellMouseMove(e,t){this.mousedown&&"all"!==this.selecting&&this.activeRange.setBounds(!1,t,!0)}handleCellClick(e,t){this.initializeFocus(t)}handleEditingCell(e){this.activeRange&&this.activeRange.setBounds(e)}finishEditingCell(){this.blockKeydown=!0,this.table.rowManager.element.focus(),setTimeout((()=>{this.blockKeydown=!1}),10)}keyNavigate(e,t){this.navigate(!1,!1,e)&&t.preventDefault()}keyNavigateRange(e,t,i,s){this.navigate(i,s,t)&&e.preventDefault()}navigate(e,t,i){var s,o,n,r,a,l,h;if(this.table.modules.edit&&this.table.modules.edit.currentCell)return!1;if(this.ranges.length>1&&(this.ranges=this.ranges.filter((e=>e===this.activeRange?(e.setEnd(e.start.row,e.start.col),!0):(e.destroy(),!1)))),o=this.activeRange,r=(n=t?o.end:o.start).row,a=n.col,e)switch(i){case"left":a=this.findJumpCellLeft(o.start.row,n.col);break;case"right":a=this.findJumpCellRight(o.start.row,n.col);break;case"up":r=this.findJumpCellUp(n.row,o.start.col);break;case"down":r=this.findJumpCellDown(n.row,o.start.col)}else{if(t&&("row"===this.selecting&&("left"===i||"right"===i)||"column"===this.selecting&&("up"===i||"down"===i)))return;switch(i){case"left":a=Math.max(a-1,0);break;case"right":a=Math.min(a+1,this.getTableColumns().length-1);break;case"up":r=Math.max(r-1,0);break;case"down":r=Math.min(r+1,this.getTableRows().length-1)}}return s=a!==n.col||r!==n.row,t||o.setStart(r,a),o.setEnd(r,a),t||(this.selecting="cell"),s?(l=this.getRowByRangePos(o.end.row),h=this.getColumnByRangePos(o.end.col),"left"!==i&&"right"!==i||null!==h.getElement().parentNode?"up"!==i&&"down"!==i||null!==l.getElement().parentNode?this.autoScroll(o,l.getElement(),h.getElement()):l.getComponent().scrollTo(void 0,!1):h.getComponent().scrollTo(void 0,!1),this.layoutElement(),!0):void 0}rangeRemoved(e){this.ranges=this.ranges.filter((t=>t!==e)),this.activeRange===e&&(this.ranges.length?this.activeRange=this.ranges[this.ranges.length-1]:this.addRange()),this.layoutElement()}findJumpCell(e,t,i,s){var o;t&&(e=e.reverse());for(let t of e){let e=t.getValue();if(i){if(o=t,e)break}else if(s){if(o=t,e)break}else{if(!e)break;o=t}}return o}findJumpCellLeft(e,t){var i=this.getRowByRangePos(e).cells.filter((e=>e.column.visible)),s=!i[t].getValue(),o=!!i[t]&&!i[t].getValue(),n=t,r=this.rowHeader?i.slice(1,t):i.slice(0,t),a=this.findJumpCell(r,!0,s,o);return a&&(n=a.column.getPosition()-1),n}findJumpCellRight(e,t){var i=this.getRowByRangePos(e).cells.filter((e=>e.column.visible)),s=!i[t].getValue(),o=!!i[t+1]&&!i[t+1].getValue(),n=t,r=this.findJumpCell(i.slice(t+1,i.length),!1,s,o);return r&&(n=r.column.getPosition()-1),n}findJumpCellUp(e,t){var i=this.getColumnByRangePos(t).cells.filter((e=>this.table.rowManager.activeRows.includes(e.row))),s=!i[e].getValue(),o=!!i[e-1]&&!i[e-1].getValue(),n=e,r=this.findJumpCell(i.slice(0,n),!0,s,o);return r&&(n=r.row.position-1),n}findJumpCellDown(e,t){var i=this.getColumnByRangePos(t).cells.filter((e=>this.table.rowManager.activeRows.includes(e.row))),s=!i[e].getValue(),o=!!i[e+1]&&!i[e+1].getValue(),n=e,r=this.findJumpCell(i.slice(n+1,i.length),!1,s,o);return r&&(n=r.row.position-1),n}newSelection(e,t){var i;if("column"===t.type){if(!this.columnSelection)return;if(t===this.rowHeader){i=this.resetRanges(),this.selecting="all";var s,o=this.getCell(-1,-1);return s=this.rowHeader?this.getCell(0,1):this.getCell(0,0),void i.setBounds(s,o)}this.selecting="column"}else t.column===this.rowHeader?this.selecting="row":this.selecting="cell";e.shiftKey?this.activeRange.setBounds(!1,t):e.ctrlKey?this.addRange().setBounds(t):this.resetRanges().setBounds(t)}autoScroll(e,t,i){var s,o,n,r,a,l=this.table.rowManager.element;void 0===t&&(t=this.getRowByRangePos(e.end.row).getElement()),void 0===i&&(i=this.getColumnByRangePos(e.end.col).getElement()),this.rowHeader&&(s=this.rowHeader.getElement()),o={left:i.offsetLeft,right:i.offsetLeft+i.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight},n={left:l.scrollLeft,right:Math.ceil(l.scrollLeft+l.clientWidth),top:l.scrollTop,bottom:l.scrollTop+l.offsetHeight-this.table.rowManager.scrollbarWidth},s&&(n.left+=s.offsetWidth),r=n.leftn.right&&(l.scrollLeft=o.right-l.clientWidth)),a||(o.topn.bottom&&(l.scrollTop=o.bottom-l.clientHeight))}layoutChange(){this.overlay.style.visibility="hidden",clearTimeout(this.layoutChangeTimeout),this.layoutChangeTimeout=setTimeout(this.layoutRanges.bind(this),200)}redraw(e){e&&(this.selecting="cell",this.resetRanges(),this.layoutElement())}layoutElement(e){(e?this.table.rowManager.getVisibleRows(!0):this.table.rowManager.getRows()).forEach((e=>{"row"===e.type&&(this.layoutRow(e),e.cells.forEach((e=>this.renderCell(e))))})),this.getTableColumns().forEach((e=>{this.layoutColumn(e)})),this.layoutRanges()}layoutRow(e){var t=e.getElement(),i=!1,s=this.ranges.some((t=>t.occupiesRow(e)));"row"===this.selecting?i=s:"all"===this.selecting&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutColumn(e){var t=e.getElement(),i=!1,s=this.ranges.some((t=>t.occupiesColumn(e)));"column"===this.selecting?i=s:"all"===this.selecting&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutRanges(){var e;this.table.initialized&&(e=this.getActiveCell())&&(this.activeRangeCellElement.style.left=e.row.getElement().offsetLeft+e.getElement().offsetLeft+"px",this.activeRangeCellElement.style.top=e.row.getElement().offsetTop+"px",this.activeRangeCellElement.style.width=e.getElement().offsetLeft+e.getElement().offsetWidth-e.getElement().offsetLeft+"px",this.activeRangeCellElement.style.height=e.row.getElement().offsetTop+e.row.getElement().offsetHeight-e.row.getElement().offsetTop+"px",this.ranges.forEach((e=>e.layout())),this.overlay.style.visibility="visible")}getCell(e,t){var i;return t<0&&(t=this.getTableColumns().length+t)<0?null:(e<0&&(e=this.getTableRows().length+e),(i=this.table.rowManager.getRowFromPosition(e+1))?i.getCells(!1,!0).filter((e=>e.column.visible))[t]:null)}getActiveCell(){return this.getCell(this.activeRange.start.row,this.activeRange.start.col)}getRowByRangePos(e){return this.getTableRows()[e]}getColumnByRangePos(e){return this.getTableColumns()[e]}getTableRows(){return this.table.rowManager.getDisplayRows()}getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}addRange(e,t){var i;return!0!==this.maxRanges&&this.ranges.length>=this.maxRanges&&this.ranges.shift().destroy(),i=new Ve(this.table,this,e,t),this.activeRange=i,this.ranges.push(i),this.rangeContainer.appendChild(i.element),i}resetRanges(){var e,t;return this.ranges.forEach((e=>e.destroy())),this.ranges=[],e=this.addRange(),this.table.rowManager.activeRows.length&&(t=this.table.rowManager.activeRows[0].cells[this.rowHeader?1:0])&&(e.setBounds(t),this.initializeFocus(t)),e}tableDestroyed(){document.removeEventListener("mouseup",this.mouseUpEvent),this.table.rowManager.element.removeEventListener("keydown",this.keyDownEvent)}selectedRows(e){return e?this.activeRange.getRows().map((e=>e.getComponent())):this.activeRange.getRows()}selectedColumns(e){return e?this.activeRange.getColumns().map((e=>e.getComponent())):this.activeRange.getColumns()}}Ie.moduleName="selectRange";class Ne extends k{constructor(e){super(e),this.tooltipSubscriber=null,this.headerSubscriber=null,this.timeout=null,this.popupInstance=null,this.registerTableOption("tooltipGenerationMode",void 0),this.registerTableOption("tooltipDelay",300),this.registerColumnOption("tooltip"),this.registerColumnOption("headerTooltip")}initialize(){this.deprecatedOptionsCheck(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){this.deprecationCheckMsg("tooltipGenerationMode","This option is no longer needed as tooltips are always generated on hover now")}initializeColumn(e){e.definition.headerTooltip&&!this.headerSubscriber&&(this.headerSubscriber=!0,this.subscribe("column-mousemove",this.mousemoveCheck.bind(this,"headerTooltip")),this.subscribe("column-mouseout",this.mouseoutCheck.bind(this,"headerTooltip"))),e.definition.tooltip&&!this.tooltipSubscriber&&(this.tooltipSubscriber=!0,this.subscribe("cell-mousemove",this.mousemoveCheck.bind(this,"tooltip")),this.subscribe("cell-mouseout",this.mouseoutCheck.bind(this,"tooltip")))}mousemoveCheck(e,t,i){var s="tooltip"===e?i.column.definition.tooltip:i.definition.headerTooltip;s&&(this.clearPopup(),this.timeout=setTimeout(this.loadTooltip.bind(this,t,i,s),this.table.options.tooltipDelay))}mouseoutCheck(e,t,i){this.popupInstance||this.clearPopup()}clearPopup(e,t,i){clearTimeout(this.timeout),this.timeout=null,this.popupInstance&&this.popupInstance.hide()}loadTooltip(e,t,i){var s,n,r;"function"==typeof i&&(i=i(e,t.getComponent(),(function(e){n=e}))),i instanceof HTMLElement?s=i:(s=document.createElement("div"),!0===i&&(t instanceof o?i=t.value:t.definition.field?this.langBind("columns|"+t.definition.field,(e=>{s.innerHTML=i=e||t.definition.title})):i=t.definition.title),s.innerHTML=i),(i||0===i||!1===i)&&(s.classList.add("tabulator-tooltip"),s.addEventListener("mousemove",(e=>e.preventDefault())),this.popupInstance=this.popup(s),"function"==typeof n&&this.popupInstance.renderCallback(n),r=this.popupInstance.containerEventCoords(e),this.popupInstance.show(r.x+15,r.y+15).hideOnBlur((()=>{this.dispatchExternal("TooltipClosed",t.getComponent()),this.popupInstance=null})),this.dispatchExternal("TooltipOpened",t.getComponent()))}}Ne.moduleName="tooltip";var We={integer:function(e,t,i){return""===t||null==t||(t=Number(t),!isNaN(t)&&isFinite(t)&&Math.floor(t)===t)},float:function(e,t,i){return""===t||null==t||(t=Number(t),!isNaN(t)&&isFinite(t)&&t%1!=0)},numeric:function(e,t,i){return""===t||null==t||!isNaN(t)},string:function(e,t,i){return""===t||null==t||isNaN(t)},alphanumeric:function(e,t,i){return""===t||null==t||new RegExp(/^[a-z0-9]+$/i).test(t)},max:function(e,t,i){return""===t||null==t||parseFloat(t)<=i},min:function(e,t,i){return""===t||null==t||parseFloat(t)>=i},starts:function(e,t,i){return""===t||null==t||String(t).toLowerCase().startsWith(String(i).toLowerCase())},ends:function(e,t,i){return""===t||null==t||String(t).toLowerCase().endsWith(String(i).toLowerCase())},minLength:function(e,t,i){return""===t||null==t||String(t).length>=i},maxLength:function(e,t,i){return""===t||null==t||String(t).length<=i},in:function(e,t,i){return""===t||null==t||("string"==typeof i&&(i=i.split("|")),i.indexOf(t)>-1)},regex:function(e,t,i){return""===t||null==t||new RegExp(i).test(t)},unique:function(e,t,i){if(""===t||null==t)return!0;var s=!0,o=e.getData(),n=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(e){var i=e.getData();i!==o&&t==n.getFieldValue(i)&&(s=!1)})),s},required:function(e,t,i){return""!==t&&null!=t}};class je extends k{constructor(e){super(e),this.invalidCells=[],this.registerTableOption("validationMode","blocking"),this.registerColumnOption("validator"),this.registerTableFunction("getInvalidCells",this.getInvalidCells.bind(this)),this.registerTableFunction("clearCellValidation",this.userClearCellValidation.bind(this)),this.registerTableFunction("validate",this.userValidate.bind(this)),this.registerComponentFunction("cell","isValid",this.cellIsValid.bind(this)),this.registerComponentFunction("cell","clearValidation",this.clearValidation.bind(this)),this.registerComponentFunction("cell","validate",this.cellValidate.bind(this)),this.registerComponentFunction("column","validate",this.columnValidate.bind(this)),this.registerComponentFunction("row","validate",this.rowValidate.bind(this))}initialize(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("edit-success",this.editValidate.bind(this)),this.subscribe("edit-editor-clear",this.editorClear.bind(this)),this.subscribe("edit-edited-clear",this.editedClear.bind(this))}editValidate(e,t,i){var s="manual"===this.table.options.validationMode||this.validate(e.column.modules.validate,e,t);return!0!==s&&setTimeout((()=>{e.getElement().classList.add("tabulator-validation-fail"),this.dispatchExternal("validationFailed",e.getComponent(),t,s)})),s}editorClear(e,t){t&&e.column.modules.validate&&this.cellValidate(e),e.getElement().classList.remove("tabulator-validation-fail")}editedClear(e){e.modules.validate&&(e.modules.validate.invalid=!1)}cellIsValid(e){return e.modules.validate&&e.modules.validate.invalid||!0}cellValidate(e){return this.validate(e.column.modules.validate,e,e.getValue())}columnValidate(e){var t=[];return e.cells.forEach((e=>{!0!==this.cellValidate(e)&&t.push(e.getComponent())})),!t.length||t}rowValidate(e){var t=[];return e.cells.forEach((e=>{!0!==this.cellValidate(e)&&t.push(e.getComponent())})),!t.length||t}userClearCellValidation(e){e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.clearValidation(e._getSelf())}))}userValidate(e){var t=[];return this.table.rowManager.rows.forEach((e=>{var i=(e=e.getComponent()).validate();!0!==i&&(t=t.concat(i))})),!t.length||t}initializeColumnCheck(e){void 0!==e.definition.validator&&this.initializeColumn(e)}initializeColumn(e){var t,i=this,s=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach((e=>{(t=i._extractValidator(e))&&s.push(t)})):(t=this._extractValidator(e.definition.validator))&&s.push(t),e.modules.validate=!!s.length&&s)}_extractValidator(e){var t,i,s;switch(typeof e){case"string":return(s=e.indexOf(":"))>-1?(t=e.substring(0,s),i=e.substring(s+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i="function"==typeof e?e:je.validators[e];return i?{type:"function"==typeof e?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var s=this,o=[],n=this.invalidCells.indexOf(t);return e&&e.forEach((e=>{e.func.call(s,t.getComponent(),i,e.params)||o.push({type:e.type,parameters:e.params})})),t.modules.validate||(t.modules.validate={}),o.length?(t.modules.validate.invalid=o,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==n&&this.invalidCells.push(t)):(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),n>-1&&this.invalidCells.splice(n,1)),!o.length||o}getInvalidCells(){var e=[];return this.invalidCells.forEach((t=>{e.push(t.getComponent())})),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))}}je.moduleName="validate",je.validators=We;var Ge=Object.freeze({__proto__:null,AccessorModule:O,AjaxModule:W,ClipboardModule:j,ColumnCalcsModule:J,DataTreeModule:X,DownloadModule:K,EditModule:Q,ExportModule:ie,FilterModule:oe,FormatModule:re,FrozenColumnsModule:ae,FrozenRowsModule:le,GroupRowsModule:ce,HistoryModule:ue,HtmlTableImportModule:me,ImportModule:ge,InteractionModule:be,KeybindingsModule:fe,MenuModule:ve,MoveColumnsModule:we,MoveRowsModule:Ce,MutatorModule:Ee,PageModule:Re,PersistenceModule:ke,PopupModule:Me,PrintModule:Le,ReactiveDataModule:Se,ResizeColumnsModule:De,ResizeRowsModule:Pe,ResizeTableModule:ze,ResponsiveLayoutModule:He,SelectRowModule:Fe,SortModule:Ae,SelectRangeModule:Ie,TooltipModule:Ne,ValidateModule:je});class Ue extends _{}return new H(Ue,Ge),Ue})); -//# sourceMappingURL=tabulator.min.js.map diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator.min.js.map b/tmp/tabulator-5.6.1/dist/js/tabulator.min.js.map deleted file mode 100644 index c4cf20f..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tabulator.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/DeprecationAdvisor.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/tools/Popup.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/tools/Alert.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/List.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/date.js","../../src/js/modules/Edit/defaults/editors/time.js","../../src/js/modules/Edit/defaults/editors/datetime.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/defaults/importers/array.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Popup/Popup.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/SelectRange/RangeComponent.js","../../src/js/modules/SelectRange/Range.js","../../src/js/modules/SelectRange/SelectRange.js","../../src/js/modules/Tooltip/Tooltip.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default class CoreFeature{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\t}\n\n\t//////////////////////////////////////////\n\t/////////////// DataLoad /////////////////\n\t//////////////////////////////////////////\n\n\treloadData(data, silent, columnsChanged){\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\n\t}\n\n\t//////////////////////////////////////////\n\t///////////// Localization ///////////////\n\t//////////////////////////////////////////\n\n\tlangText(){\n\t\treturn this.table.modules.localize.getText(...arguments);\n\t}\n\n\tlangBind(){\n\t\treturn this.table.modules.localize.bind(...arguments);\n\t}\n\n\tlangLocale(){\n\t\treturn this.table.modules.localize.getLocale(...arguments);\n\t}\n\n\n\t//////////////////////////////////////////\n\t////////// Inter Table Comms /////////////\n\t//////////////////////////////////////////\n\n\tcommsConnections(){\n\t\treturn this.table.modules.comms.getConnections(...arguments);\n\t}\n\n\tcommsSend(){\n\t\treturn this.table.modules.comms.send(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Layout /////////////////\n\t//////////////////////////////////////////\n\n\tlayoutMode(){\n\t\treturn this.table.modules.layout.getMode();\n\t}\n\n\tlayoutRefresh(force){\n\t\treturn this.table.modules.layout.layout(force);\n\t}\n\n\n\t//////////////////////////////////////////\n\t/////////////// Event Bus ////////////////\n\t//////////////////////////////////////////\n\n\tsubscribe(){\n\t\treturn this.table.eventBus.subscribe(...arguments);\n\t}\n\n\tunsubscribe(){\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.table.eventBus.subscribed(key);\n\t}\n\n\tsubscriptionChange(){\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\n\t}\n\n\tdispatch(){\n\t\treturn this.table.eventBus.dispatch(...arguments);\n\t}\n\n\tchain(){\n\t\treturn this.table.eventBus.chain(...arguments);\n\t}\n\n\tconfirm(){\n\t\treturn this.table.eventBus.confirm(...arguments);\n\t}\n\n\tdispatchExternal(){\n\t\treturn this.table.externalEvents.dispatch(...arguments);\n\t}\n\n\tsubscribedExternal(key){\n\t\treturn this.table.externalEvents.subscribed(key);\n\t}\n\n\tsubscriptionChangeExternal(){\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Options /////////////////\n\t//////////////////////////////////////////\n\n\toptions(key){\n\t\treturn this.table.options[key];\n\t}\n\n\tsetOption(key, value){\n\t\tif(typeof value !== \"undefined\"){\n\t\t\tthis.table.options[key] = value;\n\t\t}\n\n\t\treturn this.table.options[key];\n\t}\n\n\t//////////////////////////////////////////\n\t/////////// Deprecation Checks ///////////\n\t//////////////////////////////////////////\n\n\tdeprecationCheck(oldOption, newOption, convert){\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption, convert);\n\t}\n\n\tdeprecationCheckMsg(oldOption, msg){\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\n\t}\n\n\tdeprecationMsg(msg){\n\t\treturn this.table.deprecationAdvisor.msg(msg);\n\t}\n\t//////////////////////////////////////////\n\t//////////////// Modules /////////////////\n\t//////////////////////////////////////////\n\n\tmodule(key){\n\t\treturn this.table.module(key);\n\t}\n}","import Column from './Column.js';\n\n//public column object\nexport default class ColumnComponent {\n\tconstructor (column){\n\t\tthis._column = column;\n\t\tthis.type = \"ColumnComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetElement(){\n\t\treturn this._column.getElement();\n\t}\n\n\tgetDefinition(){\n\t\treturn this._column.getDefinition();\n\t}\n\n\tgetField(){\n\t\treturn this._column.getField();\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this._column.getTitleDownload();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._column.cells.forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tisVisible(){\n\t\treturn this._column.visible;\n\t}\n\n\tshow(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.show();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.show();\n\t\t}\n\t}\n\n\thide(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.hide();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.hide();\n\t\t}\n\t}\n\n\ttoggle(){\n\t\tif(this._column.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tdelete(){\n\t\treturn this._column.delete();\n\t}\n\n\tgetSubColumns(){\n\t\tvar output = [];\n\n\t\tif(this._column.columns.length){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\toutput.push(column.getComponent());\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetParentColumn(){\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._column;\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible);\n\t}\n\n\tgetTable(){\n\t\treturn this._column.table;\n\t}\n\n\tmove(to, after){\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\t\tif(toColumn){\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t}\n\n\tgetNextColumn(){\n\t\tvar nextCol = this._column.nextColumn();\n\n\t\treturn nextCol ? nextCol.getComponent() : false;\n\t}\n\n\tgetPrevColumn(){\n\t\tvar prevCol = this._column.prevColumn();\n\n\t\treturn prevCol ? prevCol.getComponent() : false;\n\t}\n\n\tupdateDefinition(updates){\n\t\treturn this._column.updateDefinition(updates);\n\t}\n\n\tgetWidth(){\n\t\treturn this._column.getWidth();\n\t}\n\n\tsetWidth(width){\n\t\tvar result;\n\n\t\tif(width === true){\n\t\t\tresult = this._column.reinitializeWidth(true);\n\t\t}else{\n\t\t\tresult = this._column.setWidth(width);\n\t\t}\n\n\t\tthis._column.table.columnManager.rerenderColumns(true);\n\n\t\treturn result;\n\t}\n}","export default {\n\t\"title\": undefined,\n\t\"field\": undefined,\n\t\"columns\": undefined,\n\t\"visible\": undefined,\n\t\"hozAlign\": undefined,\n\t\"vertAlign\": undefined,\n\t\"width\": undefined,\n\t\"minWidth\": 40,\n\t\"maxWidth\": undefined,\n\t\"maxInitialWidth\": undefined,\n\t\"cssClass\": undefined,\n\t\"variableHeight\": undefined,\n\t\"headerVertical\": undefined,\n\t\"headerHozAlign\": undefined,\n\t\"headerWordWrap\": false,\n\t\"editableTitle\": undefined,\n};","//public cell object\nexport default class CellComponent {\n\n\tconstructor (cell){\n\t\tthis._cell = cell;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetValue(){\n\t\treturn this._cell.getValue();\n\t}\n\n\tgetOldValue(){\n\t\treturn this._cell.getOldValue();\n\t}\n\n\tgetInitialValue(){\n\t\treturn this._cell.initialValue;\n\t}\n\n\tgetElement(){\n\t\treturn this._cell.getElement();\n\t}\n\n\tgetRow(){\n\t\treturn this._cell.row.getComponent();\n\t}\n\n\tgetData(transform){\n\t\treturn this._cell.row.getData(transform);\n\t}\n\tgetType(){\n\t\treturn \"cell\";\n\t}\n\tgetField(){\n\t\treturn this._cell.column.getField();\n\t}\n\n\tgetColumn(){\n\t\treturn this._cell.column.getComponent();\n\t}\n\n\tsetValue(value, mutate){\n\t\tif(typeof mutate == \"undefined\"){\n\t\t\tmutate = true;\n\t\t}\n\n\t\tthis._cell.setValue(value, mutate);\n\t}\n\n\trestoreOldValue(){\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\n\t}\n\n\trestoreInitialValue(){\n\t\tthis._cell.setValueActual(this._cell.initialValue);\n\t}\n\n\tcheckHeight(){\n\t\tthis._cell.checkHeight();\n\t}\n\n\tgetTable(){\n\t\treturn this._cell.table;\n\t}\n\n\t_getSelf(){\n\t\treturn this._cell;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport CellComponent from './CellComponent.js';\n\nexport default class Cell extends CoreFeature{\n\tconstructor(column, row){\n\t\tsuper(column.table);\n\n\t\tthis.table = column.table;\n\t\tthis.column = column;\n\t\tthis.row = row;\n\t\tthis.element = null;\n\t\tthis.value = null;\n\t\tthis.initialValue;\n\t\tthis.oldValue = null;\n\t\tthis.modules = {};\n\n\t\tthis.height = null;\n\t\tthis.width = null;\n\t\tthis.minWidth = null;\n\n\t\tthis.component = null;\n\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\t\tthis.build();\n\t}\n\n\t//////////////// Setup Functions /////////////////\n\t//generate element\n\tbuild(){\n\t\tthis.generateElement();\n\n\t\tthis.setWidth();\n\n\t\tthis._configureCell();\n\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\t\tthis.initialValue = this.value;\n\t}\n\n\tgenerateElement(){\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = \"tabulator-cell\";\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\n\t}\n\n\t_configureCell(){\n\t\tvar element = this.element,\n\t\tfield = this.column.getField(),\n\t\tvertAligns = {\n\t\t\ttop:\"flex-start\",\n\t\t\tbottom:\"flex-end\",\n\t\t\tmiddle:\"center\",\n\t\t},\n\t\thozAligns = {\n\t\t\tleft:\"flex-start\",\n\t\t\tright:\"flex-end\",\n\t\t\tcenter:\"center\",\n\t\t};\n\n\t\t//set text alignment\n\t\telement.style.textAlign = this.column.hozAlign;\n\n\t\tif(this.column.vertAlign){\n\t\t\telement.style.display = \"inline-flex\";\n\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\n\n\t\t\tif(this.column.hozAlign){\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\n\t\t\t}\n\t\t}\n\n\t\tif(field){\n\t\t\telement.setAttribute(\"tabulator-field\", field);\n\t\t}\n\n\t\t//add class to cell if needed\n\t\tif(this.column.definition.cssClass){\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\telement.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.dispatch(\"cell-init\", this);\n\n\t\t//hide cell if not visible\n\t\tif(!this.column.visible){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//generate cell contents\n\t_generateContents(){\n\t\tvar val;\n\n\t\tval = this.chain(\"cell-format\", this, null, () => {\n\t\t\treturn this.element.innerHTML = this.value;\n\t\t});\n\n\t\tswitch(typeof val){\n\t\t\tcase \"object\":\n\t\t\t\tif(val instanceof Node){\n\n\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\t\t\t\tthis.element.appendChild(val);\n\t\t\t\t}else{\n\t\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\t\tif(val != null){\n\t\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tthis.element.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element.innerHTML = val;\n\t\t}\n\t}\n\n\tcellRendered(){\n\t\tthis.dispatch(\"cell-rendered\", this);\n\t}\n\n\t//////////////////// Getters ////////////////////\n\tgetElement(containerOnly){\n\t\tif(!this.loaded){\n\t\t\tthis.loaded = true;\n\t\t\tif(!containerOnly){\n\t\t\t\tthis.layoutElement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.element;\n\t}\n\n\tgetValue(){\n\t\treturn this.value;\n\t}\n\n\tgetOldValue(){\n\t\treturn this.oldValue;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tsetValue(value, mutate, force){\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\n\n\t\t\tthis.cellRendered();\n\n\t\t\tif(this.column.definition.cellEdited){\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\n\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t}\n\t}\n\n\tsetValueProcessData(value, mutate, force){\n\t\tvar changed = false;\n\n\t\tif(this.value !== value || force){\n\n\t\t\tchanged = true;\n\n\t\t\tif(mutate){\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\n\t\t\t}\n\t\t}\n\n\t\tthis.setValueActual(value);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\n\t\t}\n\n\t\treturn changed;\n\t}\n\n\tsetValueActual(value){\n\t\tthis.oldValue = this.value;\n\n\t\tthis.value = value;\n\n\t\tthis.dispatch(\"cell-value-save-before\", this);\n\n\t\tthis.column.setFieldValue(this.row.data, value);\n\n\t\tthis.dispatch(\"cell-value-save-after\", this);\n\n\t\tif(this.loaded){\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\tlayoutElement(){\n\t\tthis._generateContents();\n\n\t\tthis.dispatch(\"cell-layout\", this);\n\t}\n\n\tsetWidth(){\n\t\tthis.width = this.column.width;\n\t\tthis.element.style.width = this.column.widthStyled;\n\t}\n\n\tclearWidth(){\n\t\tthis.width = \"\";\n\t\tthis.element.style.width = \"\";\n\t}\n\n\tgetWidth(){\n\t\treturn this.width || this.element.offsetWidth;\n\t}\n\n\tsetMinWidth(){\n\t\tthis.minWidth = this.column.minWidth;\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\n\t}\n\n\tsetMaxWidth(){\n\t\tthis.maxWidth = this.column.maxWidth;\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n\t}\n\n\tcheckHeight(){\n\t\t// var height = this.element.css(\"height\");\n\t\tthis.row.reinitializeHeight();\n\t}\n\n\tclearHeight(){\n\t\tthis.element.style.height = \"\";\n\t\tthis.height = null;\n\n\t\tthis.dispatch(\"cell-height\", this, \"\");\n\t}\n\n\tsetHeight(){\n\t\tthis.height = this.row.height;\n\t\tthis.element.style.height = this.row.heightStyled;\n\n\t\tthis.dispatch(\"cell-height\", this, this.row.heightStyled);\n\t}\n\n\tgetHeight(){\n\t\treturn this.height || this.element.offsetHeight;\n\t}\n\n\tshow(){\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n\t}\n\n\thide(){\n\t\tthis.element.style.display = \"none\";\n\t}\n\n\tdelete(){\n\t\tthis.dispatch(\"cell-delete\", this);\n\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.element = false;\n\t\tthis.column.deleteCell(this);\n\t\tthis.row.deleteCell(this);\n\t\tthis.calcs = {};\n\t}\n\n\tgetIndex(){\n\t\treturn this.row.getCellIndex(this);\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new CellComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\nimport ColumnComponent from './ColumnComponent.js';\nimport defaultOptions from './defaults/options.js';\n\nimport Cell from '../cell/Cell.js';\n\nclass Column extends CoreFeature{\n\n\tconstructor(def, parent){\n\t\tsuper(parent.table);\n\n\t\tthis.definition = def; //column definition\n\t\tthis.parent = parent; //hold parent object\n\t\tthis.type = \"column\"; //type of element\n\t\tthis.columns = []; //child columns\n\t\tthis.cells = []; //cells bound to this column\n\t\tthis.element = this.createElement(); //column header element\n\t\tthis.contentElement = false;\n\t\tthis.titleHolderElement = false;\n\t\tthis.titleElement = false;\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\n\t\tthis.isGroup = false;\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\n\t\tthis.vertAlign = \"\"; //vert text alignment\n\n\t\t//multi dimensional filed handling\n\t\tthis.field =\"\";\n\t\tthis.fieldStructure = \"\";\n\t\tthis.getFieldValue = \"\";\n\t\tthis.setFieldValue = \"\";\n\n\t\tthis.titleDownload = null;\n\t\tthis.titleFormatterRendered = false;\n\n\t\tthis.mapDefinitions();\n\n\t\tthis.setField(this.definition.field);\n\n\t\tthis.modules = {}; //hold module variables;\n\n\t\tthis.width = null; //column width\n\t\tthis.widthStyled = \"\"; //column width pre-styled to improve render efficiency\n\t\tthis.maxWidth = null; //column maximum width\n\t\tthis.maxWidthStyled = \"\"; //column maximum pre-styled to improve render efficiency\n\t\tthis.maxInitialWidth = null;\n\t\tthis.minWidth = null; //column minimum width\n\t\tthis.minWidthStyled = \"\"; //column minimum pre-styled to improve render efficiency\n\t\tthis.widthFixed = false; //user has specified a width for this column\n\n\t\tthis.visible = true; //default visible state\n\n\t\tthis.component = null;\n\n\t\t//initialize column\n\t\tif(this.definition.columns){\n\n\t\t\tthis.isGroup = true;\n\n\t\t\tthis.definition.columns.forEach((def, i) => {\n\t\t\t\tvar newCol = new Column(def, this);\n\t\t\t\tthis.attachColumn(newCol);\n\t\t\t});\n\n\t\t\tthis.checkColumnVisibility();\n\t\t}else{\n\t\t\tparent.registerColumnField(this);\n\t\t}\n\n\t\tthis._initialize();\n\t}\n\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.setAttribute(\"role\", \"columnheader\");\n\t\tel.setAttribute(\"aria-sort\", \"none\");\n\n\t\tswitch(this.table.options.columnHeaderVertAlign){\n\t\t\tcase \"middle\":\n\t\t\t\tel.style.justifyContent = \"center\";\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tel.style.justifyContent = \"flex-end\";\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn el;\n\t}\n\n\tcreateGroupElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col-group-cols\");\n\n\t\treturn el;\n\t}\n\n\tmapDefinitions(){\n\t\tvar defaults = this.table.options.columnDefaults;\n\n\t\t//map columnDefaults onto column definitions\n\t\tif(defaults){\n\t\t\tfor(let key in defaults){\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\n\t\t\t\t\tthis.definition[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition);\n\t}\n\n\tcheckDefinition(){\n\t\tObject.keys(this.definition).forEach((key) => {\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetField(field){\n\t\tthis.field = field;\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n\t}\n\n\t//register column position with column manager\n\tregisterColumnPosition(column){\n\t\tthis.parent.registerColumnPosition(column);\n\t}\n\n\t//register column position with column manager\n\tregisterColumnField(column){\n\t\tthis.parent.registerColumnField(column);\n\t}\n\n\t//trigger position registration\n\treRegisterPosition(){\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolumn.reRegisterPosition();\n\t\t\t});\n\t\t}else{\n\t\t\tthis.registerColumnPosition(this);\n\t\t}\n\t}\n\n\t//build header element\n\t_initialize(){\n\t\tvar def = this.definition;\n\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\tif(def.headerVertical){\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\n\n\t\t\tif(def.headerVertical === \"flip\"){\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t\t}\n\t\t}\n\n\t\tthis.contentElement = this._buildColumnHeaderContent();\n\n\t\tthis.element.appendChild(this.contentElement);\n\n\t\tif(this.isGroup){\n\t\t\tthis._buildGroupHeader();\n\t\t}else{\n\t\t\tthis._buildColumnHeader();\n\t\t}\n\n\t\tthis.dispatch(\"column-init\", this);\n\t}\n\n\t//build header element for header\n\t_buildColumnHeader(){\n\t\tvar def = this.definition;\n\n\t\tthis.dispatch(\"column-layout\", this);\n\n\t\t//set column visibility\n\t\tif(typeof def.visible != \"undefined\"){\n\t\t\tif(def.visible){\n\t\t\t\tthis.show(true);\n\t\t\t}else{\n\t\t\t\tthis.hide(true);\n\t\t\t}\n\t\t}\n\n\t\t//assign additional css classes to column header\n\t\tif(def.cssClass){\n\t\t\tvar classNames = def.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tif(def.field){\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t\t}\n\n\t\t//set min width if present\n\t\tthis.setMinWidth(parseInt(def.minWidth));\n\n\t\tif (def.maxInitialWidth) {\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\n\t\t}\n\t\t\n\t\tif(def.maxWidth){\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\n\t\t}\n\n\t\tthis.reinitializeWidth();\n\n\t\t//set horizontal text alignment\n\t\tthis.hozAlign = this.definition.hozAlign;\n\t\tthis.vertAlign = this.definition.vertAlign;\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\t}\n\n\t_buildColumnHeaderContent(){\n\t\tvar contentElement = document.createElement(\"div\");\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\t\tthis.titleHolderElement = document.createElement(\"div\");\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\t\tcontentElement.appendChild(this.titleHolderElement);\n\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\t\treturn contentElement;\n\t}\n\n\t//build title element of column\n\t_buildColumnHeaderTitle(){\n\t\tvar def = this.definition;\n\n\t\tvar titleHolderElement = document.createElement(\"div\");\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\t\t\n\t\tif(def.headerWordWrap){\n\t\t\ttitleHolderElement.classList.add(\"tabulator-col-title-wrap\");\n\t\t}\n\n\t\tif(def.editableTitle){\n\t\t\tvar titleElement = document.createElement(\"input\");\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttitleElement.focus();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"change\", () => {\n\t\t\t\tdef.title = titleElement.value;\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\n\t\t\t});\n\n\t\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\ttitleElement.value = def.title || \" \";\n\t\t\t}\n\n\t\t}else{\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t\t}\n\t\t}\n\n\t\treturn titleHolderElement;\n\t}\n\n\t_formatColumnHeaderTitle(el, title){\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\n\t\t\treturn title;\n\t\t});\n\n\t\tswitch(typeof contents){\n\t\t\tcase \"object\":\n\t\t\t\tif(contents instanceof Node){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = \"\";\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t}\n\n\t//build header element for column group\n\t_buildGroupHeader(){\n\t\tthis.element.classList.add(\"tabulator-col-group\");\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t\t//asign additional css classes to column header\n\t\tif(this.definition.cssClass){\n\t\t\tvar classNames = this.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\n\t\tthis.element.appendChild(this.groupElement);\n\t}\n\n\t//flat field lookup\n\t_getFlatData(data){\n\t\treturn data[this.field];\n\t}\n\n\t//nested field lookup\n\t_getNestedData(data){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdataObj = dataObj[structure[i]];\n\n\t\t\toutput = dataObj;\n\n\t\t\tif(!dataObj){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//flat field set\n\t_setFlatData(data, value){\n\t\tif(this.field){\n\t\t\tdata[this.field] = value;\n\t\t}\n\t}\n\n\t//nested field set\n\t_setNestedData(data, value){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tif(i == length -1){\n\t\t\t\tdataObj[structure[i]] = value;\n\t\t\t}else{\n\t\t\t\tif(!dataObj[structure[i]]){\n\t\t\t\t\tif(typeof value !== \"undefined\"){\n\t\t\t\t\t\tdataObj[structure[i]] = {};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t}\n\t\t}\n\t}\n\n\t//attach column to this group\n\tattachColumn(column){\n\t\tif(this.groupElement){\n\t\t\tthis.columns.push(column);\n\t\t\tthis.groupElement.appendChild(column.getElement());\n\n\t\t\tcolumn.columnRendered();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t\t}\n\t}\n\n\t//vertically align header in column\n\tverticalAlign(alignment, height){\n\n\t\t//calculate height of column header and group holder element\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\t\tthis.element.style.height = parentHeight + \"px\";\n\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\n\n\t\tif(this.isGroup){\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t}\n\n\t\t//vertically align cell contents\n\t\t// if(!this.isGroup && alignment !== \"top\"){\n\t\t// \tif(alignment === \"bottom\"){\n\t\t// \t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t// \t}else{\n\t\t// \t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\n\t\t// \t}\n\t\t// }\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.verticalAlign(alignment);\n\t\t});\n\t}\n\n\t//clear vertical alignment\n\tclearVerticalAlign(){\n\t\tthis.element.style.paddingTop = \"\";\n\t\tthis.element.style.height = \"\";\n\t\tthis.element.style.minHeight = \"\";\n\t\tthis.groupElement.style.minHeight = \"\";\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.clearVerticalAlign();\n\t\t});\n\n\t\tthis.dispatch(\"column-height\", this, \"\");\n\t}\n\n\t//// Retrieve Column Information ////\n\t//return column header element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return column group element\n\tgetGroupElement(){\n\t\treturn this.groupElement;\n\t}\n\n\t//return field name\n\tgetField(){\n\t\treturn this.field;\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this.titleDownload;\n\t}\n\n\t//return the first column in a group\n\tgetFirstColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[0].getFirstColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return the last column in a group\n\tgetLastColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return all columns in a group\n\tgetColumns(traverse){\n\t\tvar columns = [];\n\n\t\tif(traverse){\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumns.push(column);\n\t\t\t\t\t\n\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t});\n\t\t}else{\n\t\t\tcolumns = this.columns;\n\t\t}\n\t\t\n\t\treturn columns;\n\t}\n\n\t//return all columns in a group\n\tgetCells(){\n\t\treturn this.cells;\n\t}\n\n\t//retrieve the top column in a group of columns\n\tgetTopColumn(){\n\t\tif(this.parent.isGroup){\n\t\t\treturn this.parent.getTopColumn();\n\t\t}else{\n\t\t\treturn this;\n\t\t}\n\t}\n\n\t//return column definition object\n\tgetDefinition(updateBranches){\n\t\tvar colDefs = [];\n\n\t\tif(this.isGroup && updateBranches){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t\t});\n\n\t\t\tthis.definition.columns = colDefs;\n\t\t}\n\n\t\treturn this.definition;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tcheckColumnVisibility(){\n\t\tvar visible = false;\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tif(column.visible){\n\t\t\t\tvisible = true;\n\t\t\t}\n\t\t});\n\n\t\tif(visible){\n\t\t\tthis.show();\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t}else{\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//show column\n\tshow(silent, responsiveToggle){\n\t\tif(!this.visible){\n\t\t\tthis.visible = true;\n\n\t\t\tthis.element.style.display = \"\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.show();\n\t\t\t});\n\n\t\t\tif(!this.isGroup && this.width === null){\n\t\t\t\tthis.reinitializeWidth();\n\t\t\t}\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\t//hide column\n\thide(silent, responsiveToggle){\n\t\tif(this.visible){\n\t\t\tthis.visible = false;\n\n\t\t\tthis.element.style.display = \"none\";\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.hide();\n\t\t\t});\n\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\tmatchChildWidths(){\n\t\tvar childWidth = 0;\n\n\t\tif(this.contentElement && this.columns.length){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\tchildWidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveChild(child){\n\t\tvar index = this.columns.indexOf(child);\n\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\n\t\tif(!this.columns.length){\n\t\t\tthis.delete();\n\t\t}\n\t}\n\n\tsetWidth(width){\n\t\tthis.widthFixed = true;\n\t\tthis.setWidthActual(width);\n\t}\n\n\tsetWidthActual(width){\n\t\tif(isNaN(width)){\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\n\t\t}\n\n\t\twidth = Math.max(this.minWidth, width);\n\n\t\tif(this.maxWidth){\n\t\t\twidth = Math.min(this.maxWidth, width);\n\t\t}\n\n\t\tthis.width = width;\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\t\tthis.element.style.width = this.widthStyled;\n\n\t\tif(!this.isGroup){\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.setWidth();\n\t\t\t});\n\t\t}\n\n\t\tif(this.parent.isGroup){\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tthis.dispatch(\"column-width\", this);\n\t}\n\n\tcheckCellHeights(){\n\t\tvar rows = [];\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tif(cell.row.heightInitialized){\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\n\t\t\t\t\trows.push(cell.row);\n\t\t\t\t\tcell.row.clearCellHeight();\n\t\t\t\t}else{\n\t\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.calcHeight();\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.setCellHeight();\n\t\t});\n\t}\n\n\tgetWidth(){\n\t\tvar width = 0;\n\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\twidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\twidth = this.width;\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tgetLeftOffset(){\n\t\tvar offset = this.element.offsetLeft;\n\n\t\tif(this.parent.isGroup){\n\t\t\toffset += this.parent.getLeftOffset();\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tgetHeight(){\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\n\t}\n\n\tsetMinWidth(minWidth){\n\t\tif(this.maxWidth && minWidth > this.maxWidth){\n\t\t\tminWidth = this.maxWidth;\n\n\t\t\tconsole.warn(\"the minWidth (\"+ minWidth + \"px) for column '\" + this.field + \"' cannot be bigger that its maxWidth (\"+ this.maxWidthStyled + \")\");\n\t\t}\n\n\t\tthis.minWidth = minWidth;\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\t\tthis.element.style.minWidth = this.minWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMinWidth();\n\t\t});\n\t}\n\n\tsetMaxWidth(maxWidth){\n\t\tif(this.minWidth && maxWidth < this.minWidth){\n\t\t\tmaxWidth = this.minWidth;\n\n\t\t\tconsole.warn(\"the maxWidth (\"+ maxWidth + \"px) for column '\" + this.field + \"' cannot be smaller that its minWidth (\"+ this.minWidthStyled + \")\");\n\t\t}\n\n\t\tthis.maxWidth = maxWidth;\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMaxWidth();\n\t\t});\n\t}\n\n\tdelete(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(this.isGroup){\n\t\t\t\tthis.columns.forEach(function(column){\n\t\t\t\t\tcolumn.delete();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dispatch(\"column-delete\", this);\n\n\t\t\tvar cellCount = this.cells.length;\n\n\t\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\t\tthis.cells[0].delete();\n\t\t\t}\n\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\n\t\t\tthis.element = false;\n\t\t\tthis.contentElement = false;\n\t\t\tthis.titleElement = false;\n\t\t\tthis.groupElement = false;\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.removeChild(this);\n\t\t\t}\n\n\t\t\tthis.table.columnManager.deregisterColumn(this);\n\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\n\t\t\tthis.dispatch(\"column-deleted\", this);\n\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tcolumnRendered(){\n\t\tif(this.titleFormatterRendered){\n\t\t\tthis.titleFormatterRendered();\n\t\t}\n\n\t\tthis.dispatch(\"column-rendered\", this);\n\t}\n\n\t//////////////// Cell Management /////////////////\n\t//generate cell for this column\n\tgenerateCell(row){\n\t\tvar cell = new Cell(this, row);\n\n\t\tthis.cells.push(cell);\n\n\t\treturn cell;\n\t}\n\n\tnextColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n\t}\n\n\t_nextVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n\t}\n\n\tprevColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n\t}\n\n\t_prevVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n\t}\n\n\treinitializeWidth(force){\n\t\tthis.widthFixed = false;\n\n\t\t//set width if present\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\n\t\t\t// maxInitialWidth ignored here as width specified\n\t\t\tthis.setWidth(this.definition.width);\n\t\t}\n\n\t\tthis.dispatch(\"column-width-fit-before\", this);\n\n\t\tthis.fitToData(force);\n\n\t\tthis.dispatch(\"column-width-fit-after\", this);\n\t}\n\n\t//set column width to maximum cell width for non group columns\n\tfitToData(force){\n\t\tif(this.isGroup){\n\t\t\treturn;\n\t\t}\n\n\t\tif(!this.widthFixed){\n\t\t\tthis.element.style.width = \"\";\n\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tcell.clearWidth();\n\t\t\t});\n\t\t}\n\n\t\tvar maxWidth = this.element.offsetWidth;\n\n\t\tif(!this.width || !this.widthFixed){\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tvar width = cell.getWidth();\n\n\t\t\t\tif(width > maxWidth){\n\t\t\t\t\tmaxWidth = width;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(maxWidth){\n\t\t\t\tvar setTo = maxWidth + 1;\n\t\t\t\tif (this.maxInitialWidth && !force) {\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\n\t\t\t\t}\n\t\t\t\tthis.setWidthActual(setTo);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateDefinition(updates){\n\t\tvar definition;\n\n\t\tif(!this.isGroup){\n\t\t\tif(!this.parent.isGroup){\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\n\t\t\t\t\t.then((column) => {\n\n\t\t\t\t\t\tif(definition.field == this.field){\n\t\t\t\t\t\t\tthis.field = false; //clear field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this.delete()\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t}\n\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new ColumnComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n\n\tgetPosition(){\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1;\n\t}\n}\n\nColumn.defaultOptionList = defaultOptions;\n\nexport default Column;\n","export default class Helpers{\n\n\tstatic elVisible(el){\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t}\n\n\tstatic elOffset(el){\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t}\n\n\tstatic retrieveNestedData(separator, field, data){\n\t\tvar structure = separator ? field.split(separator) : [field],\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdata = data[structure[i]];\n\n\t\t\toutput = data;\n\n\t\t\tif(!data){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tstatic deepClone(obj, clone, list = []){\n\t\tvar objectProto = {}.__proto__,\n\t\tarrayProto = [].__proto__;\n\n\t\tif (!clone){\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\t\t}\n\n\t\tfor(var i in obj) {\n\t\t\tlet subject = obj[i],\n\t\t\tmatch, copy;\n\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\n\t\t\t\tmatch = list.findIndex((item) => {\n\t\t\t\t\treturn item.subject === subject;\n\t\t\t\t});\n\n\t\t\t\tif(match > -1){\n\t\t\t\t\tclone[i] = list[match].copy;\n\t\t\t\t}else{\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\n\n\t\t\t\t\tlist.unshift({subject, copy});\n\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn clone;\n\t}\n}\n","export default class OptionsList {\n\tconstructor(table, msgType, defaults = {}){\n\t\tthis.table = table;\n\t\tthis.msgType = msgType;\n\t\tthis.registeredDefaults = Object.assign({}, defaults);\n\t}\n\t\n\tregister(option, value){\n\t\tthis.registeredDefaults[option] = value;\n\t}\n\t\n\tgenerate(defaultOptions, userOptions = {}){\n\t\tvar output = Object.assign({}, this.registeredDefaults),\n\t\twarn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true;\n\t\t\n\t\tObject.assign(output, defaultOptions);\n\t\t\n\t\tfor (let key in userOptions){\n\t\t\tif(!output.hasOwnProperty(key)){\n\t\t\t\tif(warn){\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key);\n\t\t\t\t}\n\n\t\t\t\toutput[key] = userOptions.key;\n\t\t\t}\n\t\t}\n\t\n\t\t\n\t\tfor (let key in output){\n\t\t\tif(key in userOptions){\n\t\t\t\toutput[key] = userOptions[key];\n\t\t\t}else{\n\t\t\t\tif(Array.isArray(output[key])){\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\n\t\t\t\t\tdelete output[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Renderer extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.elementVertical = table.rowManager.element;\n\t\tthis.elementHorizontal = table.columnManager.element;\n\t\tthis.tableElement = table.rowManager.tableElement;\n\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determine how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the container without resizing it)\n\t}\n\n\n\t///////////////////////////////////\n\t/////// Internal Bindings /////////\n\t///////////////////////////////////\n\n\tinitialize(){\n\t\t//initialize core functionality\n\t}\n\n\tclearRows(){\n\t\t//clear down existing rows layout\n\t}\n\n\tclearColumns(){\n\t\t//clear down existing columns layout\n\t}\n\n\n\treinitializeColumnWidths(columns){\n\t\t//resize columns to fit data\n\t}\n\n\n\trenderRows(){\n\t\t//render rows from a clean slate\n\t}\n\n\trenderColumns(){\n\t\t//render columns from a clean slate\n\t}\n\n\trerenderRows(callback){\n\t\t// rerender rows and keep position\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t}\n\n\trerenderColumns(update, blockRedraw){\n\t\t//rerender columns\n\t}\n\n\trenderRowCells(row){\n\t\t//render the cells in a row\n\t}\n\n\trerenderRowCells(row, force){\n\t\t//rerender the cells in a row\n\t}\n\n\tscrollColumns(left, dir){\n\t\t//handle horizontal scrolling\n\t}\n\n\tscrollRows(top, dir){\n\t\t//handle vertical scrolling\n\t}\n\n\tresize(){\n\t\t//container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\n\t}\n\n\tscrollToRow(row){\n\t\t//scroll to a specific row\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\t//determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\t//return the visible rows\n\t\treturn [];\n\t}\n\n\t///////////////////////////////////\n\t//////// Helper Functions /////////\n\t///////////////////////////////////\n\n\trows(){\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t/////// External Triggers /////////\n\t/////// (DO NOT OVERRIDE) /////////\n\t///////////////////////////////////\n\n\tclear(){\n\t\t//clear down existing layout\n\t\tthis.clearRows();\n\t\tthis.clearColumns();\n\t}\n\n\trender(){\n\t\t//render from a clean slate\n\t\tthis.renderRows();\n\t\tthis.renderColumns();\n\t}\n\n\trerender(callback){\n\t\t// rerender and keep position\n\t\tthis.rerenderRows();\n\t\tthis.rerenderColumns();\n\t}\n\n\tscrollToRowPosition(row, position, ifVisible){\n\t\tvar rowIndex = this.rows().indexOf(row),\n\t\trowEl = row.getElement(),\n\t\toffset = 0;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(rowIndex > -1){\n\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\n\t\t\t\t}\n\n\t\t\t\t//check row visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\n\t\t\t\t}\n\n\t\t\t\tif(position === \"nearest\"){\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\";\n\t\t\t\t}\n\n\t\t\t\t//scroll to row\n\t\t\t\tthis.scrollToRow(row);\n\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"top\":\n\t\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t\t}\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class BasicHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\trenderRowCells(row, inFragment) {\n\t\tconst rowFrag = document.createDocumentFragment();\n\t\trow.cells.forEach((cell) => {\n\t\t\trowFrag.appendChild(cell.getElement());\n\t\t});\n\t\trow.element.appendChild(rowFrag);\n\t\t\n\t\tif(!inFragment){\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tcolumns.forEach(function(column){\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class VirtualDomHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftCol = 0;\n\t\tthis.rightCol = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\t\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t\t\n\t\tthis.fitDataColAvg = 0;\n\t\t\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\n\t\t\n\t\tthis.visibleRows = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.isFitData = false;\n\t\t\n\t\tthis.columns = [];\n\t}\n\t\n\tinitialize(){\n\t\tthis.compatibilityCheck();\n\t\tthis.layoutCheck();\n\t\tthis.vertScrollListen();\n\t}\n\t\n\tcompatibilityCheck(){\t\t\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\n\t\t}\n\t\t\n\t\tif(this.options(\"responsiveLayout\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\n\t\t}\n\t\t\n\t\tif(this.options(\"rtl\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\n\t\t}\n\t}\n\t\n\tlayoutCheck(){\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\n\t}\n\t\n\tvertScrollListen(){\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\n\t}\n\t\n\tclearVisRowCache(){\n\t\tthis.visibleRows = null;\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\t\n\trenderColumns(row, force){\n\t\tthis.dataChange();\n\t}\n\t\n\t\n\tscrollColumns(left, dir){\n\t\tif(this.scrollLeft != left){\n\t\t\tthis.scrollLeft = left;\n\t\t\t\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\n\t\t}\n\t}\n\t\n\tcalcWindowBuffer(){\n\t\tvar buffer = this.elementVertical.clientWidth;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\tvar width = column.getWidth();\n\t\t\t\t\n\t\t\t\tif(width > buffer){\n\t\t\t\t\tbuffer = width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.windowBuffer = buffer * 2;\n\t}\n\t\n\trerenderColumns(update, blockRedraw){\t\t\n\t\tvar old = {\n\t\t\tcols:this.columns,\n\t\t\tleftCol:this.leftCol,\n\t\t\trightCol:this.rightCol,\n\t\t},\n\t\tcolPos = 0;\n\t\t\n\t\tif(update && !this.initialized){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.clear();\n\t\t\n\t\tthis.calcWindowBuffer();\n\t\t\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\n\t\t\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tvar config = {},\n\t\t\twidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tif(!column.modules.frozen){\t\t\t\n\t\t\t\t\twidth = column.getWidth();\n\n\t\t\t\t\tconfig.leftPos = colPos;\n\t\t\t\t\tconfig.rightPos = colPos + width;\n\t\t\t\t\t\n\t\t\t\t\tconfig.width = width;\n\t\t\t\t\t\n\t\t\t\t\tif (this.isFitData) {\n\t\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\n\t\t\t\t\t\t//column is visible\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.leftCol == -1){\n\t\t\t\t\t\t\tthis.leftCol = this.columns.length;\n\t\t\t\t\t\t\tthis.vDomPadLeft = colPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.rightCol = this.columns.length;\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// column is hidden\n\t\t\t\t\t\tif(this.leftCol !== -1){\n\t\t\t\t\t\t\tthis.vDomPadRight += width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.columns.push(column);\n\t\t\t\t\t\n\t\t\t\t\tcolumn.modules.vdomHoz = config;\n\t\t\t\t\t\n\t\t\t\t\tcolPos += width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tif(!update || this.reinitChanged(old)){\n\t\t\t\tthis.reinitializeRows();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\n\t}\n\t\n\trenderRowCells(row){\n\t\tif(this.initialized){\n\t\t\tthis.initializeRow(row);\n\t\t}else{\n\t\t\tconst rowFrag = document.createDocumentFragment();\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\trowFrag.appendChild(cell.getElement());\n\t\t\t});\n\t\t\trow.element.appendChild(rowFrag);\n\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\trerenderRowCells(row, force){\n\t\tthis.reinitializeRow(row, force);\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\tthis.columns[i].reinitializeWidth();\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\t\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tclear(){\n\t\tthis.columns = [];\n\t\t\n\t\tthis.leftCol = -1;\n\t\tthis.rightCol = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t}\n\t\n\tdataChange(){\n\t\tvar change = false,\n\t\trow, rowEl;\n\t\t\n\t\tif(this.isFitData){\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif(!column.definition.width && column.visible){\n\t\t\t\t\tchange = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\t\t\n\t\t\t\trow = this.chain(\"rows-sample\", [1], [], () => {\n\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\n\t\t\t\t})[0];\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trowEl = row.getElement();\n\t\t\t\t\t\n\t\t\t\t\trow.generateCells();\n\t\t\t\t\t\n\t\t\t\t\tthis.tableElement.appendChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tfor(let colEnd = 0; colEnd < row.cells.length; colEnd++){\n\t\t\t\t\t\tlet cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\t\t\t\t\t\t\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\n\t\t\t\tthis.layoutRefresh();\n\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treinitChanged(old){\n\t\tvar match = true;\n\t\t\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\told.cols.forEach((col, i) => {\n\t\t\tif(col !== this.columns[i]){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn !match;\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.getVisibleRows(),\n\t\totherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\n\t\tvisibleRows.forEach((row) => {\n\t\t\tthis.reinitializeRow(row, true);\n\t\t});\n\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t}\n\t\n\tgetVisibleRows(){\n\t\tif (!this.visibleRows){\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\n\t\t}\n\t\t\n\t\treturn this.visibleRows;\t\n\t}\n\t\n\tscroll(diff){\n\t\tthis.vDomScrollPosLeft += diff;\n\t\tthis.vDomScrollPosRight += diff;\n\t\t\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\n\t\t\tthis.rerenderColumns();\n\t\t}else{\n\t\t\tif(diff > 0){\n\t\t\t\t//scroll right\n\t\t\t\tthis.addColRight();\n\t\t\t\tthis.removeColLeft();\n\t\t\t}else{\n\t\t\t\t//scroll left\n\t\t\t\tthis.addColLeft();\n\t\t\t\tthis.removeColRight();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcolPositionAdjust (start, end, diff){\n\t\tfor(let i = start; i < end; i++){\n\t\t\tlet column = this.columns[i];\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\n\t\t}\n\t}\n\t\n\taddColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\n\t\t\tlet column = this.columns[this.rightCol + 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling);\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\n\t\t\t\t\t\tthis.vDomPadRight = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\t\t\t\t}\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\taddColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol - 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement());\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tif(diff){\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.rightCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\n\t\t\t\t\tthis.rightCol --;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\n\t\t\t\t\tthis.leftCol ++;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tfitDataColActualWidthCheck(column){\n\t\tvar newWidth, widthDiff;\n\t\t\n\t\tif(column.modules.vdomHoz.fitDataCheck){\n\t\t\tcolumn.reinitializeWidth();\n\t\t\t\n\t\t\tnewWidth = column.getWidth();\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\n\t\t\t\n\t\t\tif(widthDiff){\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\n\t\t}\n\t\t\n\t\treturn widthDiff;\n\t}\n\t\n\tinitializeRow(row){\n\t\tif(row.type !== \"group\"){\n\t\t\trow.modules.vdomHoz = {\n\t\t\t\tleftCol:this.leftCol,\n\t\t\t\trightCol:this.rightCol,\n\t\t\t};\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\t\tthis.appendCell(row, this.columns[i]);\n\t\t\t}\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tappendCell(row, column){\n\t\tif(column && column.visible){\n\t\t\tlet cell = row.getCell(column);\n\t\t\t\n\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\tcell.cellRendered();\n\t\t}\n\t}\n\t\n\treinitializeRow(row, force){\n\t\tif(row.type !== \"group\"){\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\n\t\t\t\t\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\n\n\t\t\t\tthis.initializeRow(row);\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Column from './column/Column.js';\nimport ColumnComponent from './column/ColumnComponent.js';\nimport Helpers from './tools/Helpers.js';\nimport OptionsList from './tools/OptionsList.js';\n\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\n\nimport defaultColumnOptions from './column/defaults/options.js';\n\nexport default class ColumnManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.blockHozScrollEvent = false;\n\t\tthis.headersElement = null;\n\t\tthis.contentsElement = null;\n\t\tthis.element = null ; //containing element\n\t\tthis.columns = []; // column definition object\n\t\tthis.columnsByIndex = []; //columns by index\n\t\tthis.columnsByField = {}; //columns by field\n\t\tthis.scrollLeft = 0;\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockUpdate = null; //store latest redraw update only status\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t////////////// Setup Functions /////////////////\n\t\n\tinitialize(){\n\t\tthis.initializeRenderer();\n\t\t\n\t\tthis.headersElement = this.createHeadersElement();\n\t\tthis.contentsElement = this.createHeaderContentsElement();\n\t\tthis.element = this.createHeaderElement();\n\t\t\n\t\tthis.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild);\n\t\tthis.element.insertBefore(this.contentsElement, this.element.firstChild);\n\n\t\tthis.initializeScrollWheelWatcher();\n\t\t\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.padVerticalScrollbar.bind(this));\n\t}\n\n\tpadVerticalScrollbar(width){\n\t\tif(this.table.rtl){\n\t\t\tthis.headersElement.style.marginLeft = width + \"px\";\n\t\t}else{\n\t\t\tthis.headersElement.style.marginRight = width + \"px\";\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\n\t\t\t\"basic\": RendererBasicHorizontal,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderHorizontal;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderHorizontal);\n\t\t}\n\t}\n\t\n\t\n\tcreateHeadersElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-headers\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\treturn el;\n\t}\n\n\tcreateHeaderContentsElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header-contents\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateHeaderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tif(!this.table.options.headerVisible){\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\n\t\t}\n\t\t\n\t\treturn el;\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return containing contents element\n\tgetContentsElement(){\n\t\treturn this.contentsElement;\n\t}\n\t\n\t\n\t//return header containing element\n\tgetHeadersElement(){\n\t\treturn this.headersElement;\n\t}\n\t\n\t//scroll horizontally to match table body\n\tscrollHorizontal(left){\n\t\tthis.contentsElement.scrollLeft = left;\n\n\t\tthis.scrollLeft = left;\n\t\t\n\t\tthis.renderer.scrollColumns(left);\n\t}\n\n\tinitializeScrollWheelWatcher(){\n\t\tthis.contentsElement.addEventListener(\"wheel\", (e) => {\n\t\t\tvar left;\n\n\t\t\tif(e.deltaX){\n\t\t\t\tleft = this.contentsElement.scrollLeft + e.deltaX;\n\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t///////////// Column Setup Functions /////////////\n\tgenerateColumnsFromRowData(data){\n\t\tvar cols = [],\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\n\t\trow, sorter;\n\t\t\n\t\tif(data && data.length){\n\t\t\t\n\t\t\trow = data[0];\n\t\t\t\n\t\t\tfor(var key in row){\n\t\t\t\tlet col = {\n\t\t\t\t\tfield:key,\n\t\t\t\t\ttitle:key,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet value = row[key];\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(value)){\n\t\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcol.sorter = sorter;\n\t\t\t\t\n\t\t\t\tcols.push(col);\n\t\t\t}\n\t\t\t\n\t\t\tif(definitions){\n\t\t\t\t\n\t\t\t\tswitch(typeof definitions){\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(definitions)){\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(match){\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.table.options.columns = cols;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.table.options.columns = cols;\n\t\t\t}\n\t\t\t\n\t\t\tthis.setColumns(this.table.options.columns);\n\t\t}\n\t}\n\t\n\tsetColumns(cols, row){\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\n\t\t\n\t\tthis.columns = [];\n\t\tthis.columnsByIndex = [];\n\t\tthis.columnsByField = {};\n\t\t\n\t\tthis.dispatch(\"columns-loading\");\n\t\t\n\t\tcols.forEach((def, i) => {\n\t\t\tthis._addColumn(def);\n\t\t});\n\t\t\n\t\tthis._reIndexColumns();\n\t\t\n\t\tthis.dispatch(\"columns-loaded\");\n\t\t\n\t\tthis.rerenderColumns(false, true);\n\t\t\n\t\tthis.redraw(true);\n\t}\n\t\n\t_addColumn(definition, before, nextToColumn){\n\t\tvar column = new Column(definition, this),\n\t\tcolEl = column.getElement(),\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\t\t\n\t\tif(nextToColumn && index > -1){\n\t\t\tvar topColumn = nextToColumn.getTopColumn();\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\n\t\t\tvar nextEl = topColumn.getElement();\n\t\t\t\n\t\t\tif(before){\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t\t}else{\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t\t}\n\t\t}else{\n\t\t\tif(before){\n\t\t\t\tthis.columns.unshift(column);\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t\t}else{\n\t\t\t\tthis.columns.push(column);\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t\t}\n\t\t}\n\t\t\n\t\tcolumn.columnRendered();\n\t\t\n\t\treturn column;\n\t}\n\t\n\tregisterColumnField(col){\n\t\tif(col.definition.field){\n\t\t\tthis.columnsByField[col.definition.field] = col;\n\t\t}\n\t}\n\t\n\tregisterColumnPosition(col){\n\t\tthis.columnsByIndex.push(col);\n\t}\n\t\n\t_reIndexColumns(){\n\t\tthis.columnsByIndex = [];\n\t\t\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t}\n\t\n\t//ensure column headers take up the correct amount of space in column groups\n\tverticalAlignHeaders(){\n\t\tvar minHeight = 0;\n\t\t\n\t\tif(!this.redrawBlock){\n\n\t\t\tthis.headersElement.style.height=\"\";\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.clearVerticalAlign();\n\t\t\t});\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tvar height = column.getHeight();\n\t\t\t\t\n\t\t\t\tif(height > minHeight){\n\t\t\t\t\tminHeight = height;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.headersElement.style.height = minHeight + \"px\";\n\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\n\t\t\t});\n\t\t\t\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\t//////////////// Column Details /////////////////\n\tfindColumn(subject){\n\t\tvar columns;\n\n\t\tif(typeof subject == \"object\"){\n\t\t\t\n\t\t\tif(subject instanceof Column){\n\t\t\t\t//subject is column element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof ColumnComponent){\n\t\t\t\t//subject is public column component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\n\t\t\t\tcolumns = [];\n\n\t\t\t\tthis.columns.forEach((column) => {\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t\t});\n\n\t\t\t\t//subject is a HTML element of the column header\n\t\t\t\tlet match = columns.find((column) => {\n\t\t\t\t\treturn column.element === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\t//subject should be treated as the field name of the column\n\t\t\treturn this.columnsByField[subject] || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetColumnByField(field){\n\t\treturn this.columnsByField[field];\n\t}\n\t\n\tgetColumnsByFieldRoot(root){\n\t\tvar matches = [];\n\t\t\n\t\tObject.keys(this.columnsByField).forEach((field) => {\n\t\t\tvar fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field;\n\t\t\tif(fieldRoot === root){\n\t\t\t\tmatches.push(this.columnsByField[field]);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn matches;\n\t}\n\t\n\tgetColumnByIndex(index){\n\t\treturn this.columnsByIndex[index];\n\t}\n\t\n\tgetFirstVisibleColumn(){\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\n\t\t\treturn col.visible;\n\t\t});\n\t\t\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\n\t}\n\n\tgetVisibleColumnsByIndex() {\n\t\treturn this.columnsByIndex.filter((col) => col.visible);\n\t}\n\t\n\tgetColumns(){\n\t\treturn this.columns;\n\t}\n\t\n\tfindColumnIndex(column){\n\t\treturn this.columnsByIndex.findIndex((col) => {\n\t\t\treturn column === col;\n\t\t});\n\t}\n\t\n\t//return all columns that are not groups\n\tgetRealColumns(){\n\t\treturn this.columnsByIndex;\n\t}\n\t\n\t//traverse across columns and call action\n\ttraverse(callback){\n\t\tthis.columnsByIndex.forEach((column,i) =>{\n\t\t\tcallback(column, i);\n\t\t});\n\t}\n\t\n\t//get definitions of actual columns\n\tgetDefinitions(active){\n\t\tvar output = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(!active || (active && column.visible)){\n\t\t\t\toutput.push(column.getDefinition());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\t//get full nested definition tree\n\tgetDefinitionTree(){\n\t\tvar output = [];\n\t\t\n\t\tthis.columns.forEach((column) => {\n\t\t\toutput.push(column.getDefinition(true));\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(structured){\n\t\tvar output = [],\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetWidth(){\n\t\tvar width = 0;\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn width;\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\n\t\t\n\t\tif(after){\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t\t}\n\t\t\n\t\tthis.moveColumnActual(from, to, after);\n\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\t\n\tmoveColumnActual(from, to, after){\n\t\tif(from.parent.isGroup){\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t\t}else{\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t\t}\n\t\t\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\t\t\n\t\tthis.rerenderColumns(true);\n\t\t\n\t\tthis.dispatch(\"column-moved\", from, to, after);\n\t\t\n\t\tif(this.subscribedExternal(\"columnMoved\")){\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\n\t\t}\n\t}\n\t\n\t_moveColumnInArray(columns, from, to, after, updateRows){\n\t\tvar\tfromIndex = columns.indexOf(from),\n\t\ttoIndex, rows = [];\n\t\t\n\t\tif (fromIndex > -1) {\n\t\t\t\n\t\t\tcolumns.splice(fromIndex, 1);\n\t\t\t\n\t\t\ttoIndex = columns.indexOf(to);\n\t\t\t\n\t\t\tif (toIndex > -1) {\n\t\t\t\t\n\t\t\t\tif(after){\n\t\t\t\t\ttoIndex = toIndex+1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\ttoIndex = fromIndex;\n\t\t\t}\n\t\t\t\n\t\t\tcolumns.splice(toIndex, 0, from);\n\t\t\t\n\t\t\tif(updateRows){\n\t\t\t\t\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\n\t\t\t\t\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\n\t\t\t\t\n\t\t\t\trows.forEach(function(row){\n\t\t\t\t\tif(row.cells.length){\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n\t\n\tscrollToColumn(column, position, ifVisible){\n\t\tvar left = 0,\n\t\toffset = column.getLeftOffset(),\n\t\tadjust = 0,\n\t\tcolEl = column.getElement();\n\t\t\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\tadjust = -this.element.clientWidth / 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//check column visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//calculate scroll position\n\t\t\t\tleft = offset + adjust;\n\t\t\t\t\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.scrollHorizontal(left);\n\t\t\t\t\n\t\t\t\tresolve();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\t\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tgenerateCells(row){\n\t\tvar cells = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tcells.push(column.generateCell(row));\n\t\t});\n\t\t\n\t\treturn cells;\n\t}\n\t\n\t//////////////// Column Management /////////////////\n\tgetFlexBaseWidth(){\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\n\t\tfixedWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar if present\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\t\t\n\t\tthis.columnsByIndex.forEach(function(column){\n\t\t\tvar width, minWidth, colWidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\twidth = column.definition.width || 0;\n\t\t\t\t\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\t\t\t\t\n\t\t\t\tif(typeof(width) == \"string\"){\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tcolWidth = width;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn fixedWidth;\n\t}\n\t\n\taddColumn(definition, before, nextToColumn){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\n\t\t\t\n\t\t\tthis._reIndexColumns();\n\t\t\t\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\n\t\t\t\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\t\t\t\n\t\t\tthis.redraw(true);\n\t\t\t\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t\t\n\t\t\tthis.rerenderColumns();\n\t\t\t\n\t\t\tresolve(column);\n\t\t});\n\t}\n\t\n\t//remove column from system\n\tderegisterColumn(column){\n\t\tvar field = column.getField(),\n\t\tindex;\n\t\t\n\t\t//remove from field list\n\t\tif(field){\n\t\t\tdelete this.columnsByField[field];\n\t\t}\n\t\t\n\t\t//remove from index list\n\t\tindex = this.columnsByIndex.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columnsByIndex.splice(index, 1);\n\t\t}\n\t\t\n\t\t//remove from column list\n\t\tindex = this.columns.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\t\t\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.redraw();\n\t}\n\t\n\trerenderColumns(update, silent){\n\t\tif(!this.redrawBlock){\n\t\t\tthis.renderer.rerenderColumns(update, silent);\n\t\t}else{\n\t\t\tif(update === false || (update === true && this.redrawBlockUpdate === null)){\n\t\t\t\tthis.redrawBlockUpdate = update;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockUpdate = null;\n\t}\n\t\n\trestoreRedraw(){\n\t\tthis.redrawBlock = false;\n\t\tthis.verticalAlignHeaders();\n\t\tthis.renderer.rerenderColumns(this.redrawBlockUpdate);\n\t\t\n\t}\n\t\n\t//redraw columns\n\tredraw(force){\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.verticalAlignHeaders();\n\t\t}\n\t\t\n\t\tif(force){\n\t\t\tthis.table.rowManager.resetScroll();\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t}\n\t\t\n\t\tif(!this.confirm(\"table-redrawing\", force)){\n\t\t\tthis.layoutRefresh(force);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-redraw\", force);\n\t\t\n\t\tthis.table.footerManager.redraw();\n\t}\n}","//public row object\nexport default class RowComponent {\n\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\tgetIndex(){\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\n\t}\n\n\tgetPosition(){\n\t\treturn this._row.getPosition();\n\t}\n\n\twatchPosition(callback){\n\t\treturn this._row.watchPosition(callback);\n\t}\n\n\tdelete(){\n\t\treturn this._row.delete();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._row.table.rowManager.scrollToRow(this._row, position, ifVisible);\n\t}\n\n\tmove(to, after){\n\t\tthis._row.moveToRow(to, after);\n\t}\n\n\tupdate(data){\n\t\treturn this._row.updateData(data);\n\t}\n\n\tnormalizeHeight(){\n\t\tthis._row.normalizeHeight(true);\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n\n\treformat(){\n\t\treturn this._row.reinitialize();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetNextRow(){\n\t\tvar row = this._row.nextRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n\n\tgetPrevRow(){\n\t\tvar row = this._row.prevRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport RowComponent from './RowComponent.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Row extends CoreFeature{\n\tconstructor (data, parent, type = \"row\"){\n\t\tsuper(parent.table);\n\t\t\n\t\tthis.parent = parent;\n\t\tthis.data = {};\n\t\tthis.type = type; //type of element\n\t\tthis.element = false;\n\t\tthis.modules = {}; //hold module variables;\n\t\tthis.cells = [];\n\t\tthis.height = 0; //hold element height\n\t\tthis.heightStyled = \"\"; //hold element height pre-styled to improve render efficiency\n\t\tthis.manualHeight = false; //user has manually set row height\n\t\tthis.outerHeight = 0; //hold elements outer height\n\t\tthis.initialized = false; //element has been rendered\n\t\tthis.heightInitialized = false; //element has resized cells to fit\n\t\tthis.position = 0; //store position of element in row list\n\t\tthis.positionWatchers = [];\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.created = false;\n\t\t\n\t\tthis.setData(data);\n\t}\n\t\n\tcreate(){\n\t\tif(!this.created){\n\t\t\tthis.created = true;\n\t\t\tthis.generateElement();\n\t\t}\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\tthis.element = el;\n\t}\n\t\n\tgetElement(){\n\t\tthis.create();\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.createElement();\n\t\tthis.dispatch(\"row-init\", this);\n\t}\n\t\n\tgenerateCells(){\n\t\tthis.cells = this.table.columnManager.generateCells(this);\n\t}\n\t\n\t//functions to setup on first render\n\tinitialize(force, inFragment){\n\t\tthis.create();\n\t\t\n\t\tif(!this.initialized || force){\n\t\t\t\n\t\t\tthis.deleteCells();\n\t\t\t\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-before\", this);\n\t\t\t\n\t\t\tthis.generateCells();\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t\t\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this, inFragment);\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.normalizeHeight();\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout\", this);\n\t\t\t\n\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-after\", this);\n\t\t}else{\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this, inFragment);\n\t\t}\n\t}\n\n\trendered(){\n\t\tthis.cells.forEach((cell) => {\n\t\t\tcell.cellRendered();\n\t\t});\n\t}\n\t\n\treinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.normalizeHeight(true);\n\t\t}\n\t}\n\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tdeinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t}\n\t\n\treinitialize(children){\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(!this.manualHeight){\n\t\t\tthis.height = 0;\n\t\t\tthis.heightStyled = \"\";\n\t\t}\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.initialize(true);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"row-relayout\", this);\n\t}\n\t\n\t//get heights when doing bulk row style calcs in virtual DOM\n\tcalcHeight(force){\n\t\tvar maxHeight = 0,\n\t\tminHeight;\n\t\t\n\t\tif(this.table.options.rowHeight){\n\t\t\tthis.height = this.table.options.rowHeight;\n\t\t}else{\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\t\t\t\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tvar height = cell.getHeight();\n\t\t\t\tif(height > maxHeight){\n\t\t\t\t\tmaxHeight = height;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\n\t\t\t}else{\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n\t\n\t//set of cells\n\tsetCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setHeight();\n\t\t});\n\t\t\n\t\tthis.heightInitialized = true;\n\t}\n\t\n\tclearCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.clearHeight();\n\t\t});\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(force){\n\t\tif(force && !this.table.options.rowHeight){\n\t\t\tthis.clearCellHeight();\n\t\t}\n\t\t\n\t\tthis.calcHeight(force);\n\t\t\n\t\tthis.setCellHeight();\n\t}\n\t\n\t//set height of rows\n\tsetHeight(height, force){\n\t\tif(this.height != height || force){\n\t\t\t\n\t\t\tthis.manualHeight = true;\n\t\t\t\n\t\t\tthis.height = height;\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\t\t\t\n\t\t\tthis.setCellHeight();\n\t\t\t\n\t\t\t// this.outerHeight = this.element.outerHeight();\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\t//return rows outer Width\n\tgetWidth(){\n\t\treturn this.element.offsetWidth;\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\t\n\t//////////////// Data Management /////////////////\n\tsetData(data){\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\n\t\t\n\t\tthis.dispatch(\"row-data-init-after\", this);\n\t}\n\t\n\t//update the rows data\n\tupdateData(updatedData){\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\n\t\ttempData = {},\n\t\tnewRowData;\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof updatedData === \"string\"){\n\t\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\n\t\t\t\n\t\t\tif(this.subscribed(\"row-data-changing\")){\n\t\t\t\ttempData = Object.assign(tempData, this.data);\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\n\t\t\t\n\t\t\t//set data\n\t\t\tfor (let attrname in newRowData) {\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\n\t\t\t\n\t\t\t//update affected cells only\n\t\t\tfor (let attrname in updatedData) {\n\t\t\t\t\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\n\t\t\t\t\n\t\t\t\tcolumns.forEach((column) => {\n\t\t\t\t\tlet cell = this.getCell(column.getField());\n\t\t\t\t\t\n\t\t\t\t\tif(cell){\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\n\t\t\t\t\t\tif(cell.getValue() !== value){\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(visible){\n\t\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//Partial reinitialization if visible\n\t\t\tif(visible){\n\t\t\t\tthis.normalizeHeight(true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.initialized = false;\n\t\t\t\tthis.height = 0;\n\t\t\t\tthis.heightStyled = \"\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\n\t\t\t\n\t\t\t//this.reinitialize();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\tgetData(transform){\n\t\tif(transform){\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\tgetCell(column){\n\t\tvar match = false;\n\t\t\n\t\tcolumn = this.table.columnManager.findColumn(column);\n\t\t\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\tmatch = this.cells.find(function(cell){\n\t\t\treturn cell.column === column;\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetCellIndex(findCell){\n\t\treturn this.cells.findIndex(function(cell){\n\t\t\treturn cell === findCell;\n\t\t});\n\t}\n\t\n\tfindCell(subject){\n\t\treturn this.cells.find((cell) => {\n\t\t\treturn cell.element === subject;\n\t\t});\n\t}\n\t\n\tgetCells(){\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\treturn this.cells;\n\t}\n\t\n\tnextRow(){\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tprevRow(){\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tmoveToRow(to, before){\n\t\tvar toRow = this.table.rowManager.findRow(to);\n\t\t\n\t\tif(toRow){\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t\t}\n\t}\n\t\n\t///////////////////// Actions /////////////////////\n\tdelete(){\n\t\tthis.dispatch(\"row-delete\", this);\n\t\t\n\t\tthis.deleteActual();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\tdeleteActual(blockRedraw){\n\t\tthis.detachModules();\n\t\t\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\t\t\n\t\tthis.deleteCells();\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\tthis.element = false;\n\t\t\n\t\tthis.dispatch(\"row-deleted\", this);\n\t}\n\t\n\tdetachModules(){\n\t\tthis.dispatch(\"row-deleting\", this);\n\t}\n\t\n\tdeleteCells(){\n\t\tvar cellCount = this.cells.length;\n\t\t\n\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\tthis.cells[0].delete();\n\t\t}\n\t}\n\t\n\twipe(){\n\t\tthis.detachModules();\n\t\tthis.deleteCells();\n\t\t\n\t\tif(this.element){\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.modules = {};\n\t}\n\n\tisDisplayed(){\n\t\treturn this.table.rowManager.getDisplayRows().includes(this);\n\t}\n\n\tgetPosition(){\n\t\treturn this.isDisplayed() ? this.position : false;\n\t}\n\n\tsetPosition(position){\n\t\tif(position != this.position){\n\t\t\tthis.position = position;\n\n\t\t\tthis.positionWatchers.forEach((callback) => {\n\t\t\t\tcallback(this.position);\n\t\t\t});\n\t\t}\n\t}\n\n\twatchPosition(callback){\n\t\tthis.positionWatchers.push(callback);\n\n\t\tcallback(this.position);\n\t}\n\t\n\tgetGroup(){\n\t\treturn this.modules.group || false;\n\t}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new RowComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class BasicVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.verticalFillMode = \"fill\";\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t}\n\t\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\t\t\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\telement.scrollTop = 0;\n\t\telement.scrollLeft = 0;\n\t\t\n\t\telement.style.minWidth = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\t}\n\t\n\trenderRows() {\n\t\tvar element = this.tableElement,\n\t\tonlyGroupHeaders = true,\n\t\ttableFrag = document.createDocumentFragment(),\n\t\trows = this.rows();\n\t\t\n\t\trows.forEach((row, index) => {\n\t\t\tthis.styleRow(row, index);\n\t\t\trow.initialize(false, true);\n\t\t\t\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t\t\n\t\t\ttableFrag.appendChild(row.getElement());\n\t\t});\n\t\t\n\t\telement.appendChild(tableFrag);\n\t\t\n\t\trows.forEach((row) => {\n\t\t\trow.rendered();\n\t\t\t\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.calcHeight(true);\n\t\t\t}\n\t\t});\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.setCellHeight();\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n\t\n\trerenderRows(callback){\t\n\t\tthis.clearRows();\n\t\t\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t\t\n\t\tthis.renderRows();\n\n\t\tif(!this.rows().length){\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\t}\n\t\n\tscrollToRowNearestTop(row){\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\n\t\t\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\n\t}\n\t\n\tscrollToRow(row){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\n\t}\n\t\n\tvisibleRows(includingBuffer){\n\t\treturn this.rows();\n\t}\n\t\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class VirtualDomVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.verticalFillMode = \"fill\";\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\t\tthis.vDomBottom = 0; //hold position for last rendered row in the virtual DOM\n\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\t}\n\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\telement.style.paddingTop = \"\";\n\t\telement.style.paddingBottom = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\n\t\tthis.elementVertical.scrollTop = 0;\n\t\tthis.elementVertical.scrollLeft = 0;\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomTop = 0;\n\t\tthis.vDomBottom = 0;\n\t\tthis.vDomTopPad = 0;\n\t\tthis.vDomBottomPad = 0;\n\t\tthis.vDomScrollPosTop = 0;\n\t\tthis.vDomScrollPosBottom = 0;\n\t}\n\n\trenderRows(){\n\t\tthis._virtualRenderFill();\n\t}\n\n\trerenderRows(callback){\n\t\tvar scrollTop = this.elementVertical.scrollTop;\n\t\tvar topRow = false;\n\t\tvar topOffset = false;\n\n\t\tvar left = this.table.rowManager.scrollLeft;\n\n\t\tvar rows = this.rows();\n\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\n\t\t\tif(rows[i]){\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\n\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\ttopRow = i;\n\t\t\t\t}else{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trows.forEach((row) => {\n\t\t\trow.deinitializeHeight();\n\t\t});\n\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\n\t\tif(this.rows().length){\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\n\t\t}else{\n\t\t\tthis.clear();\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\n\t\tthis.scrollColumns(left);\n\t}\n\n\tscrollColumns(left){\n\t\tthis.table.rowManager.scrollHorizontal(left);\n\t}\n\n\tscrollRows(top, dir){\n\t\tvar topDiff = top - this.vDomScrollPosTop;\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\n\t\tvar margin = this.vDomWindowBuffer * 2;\n\t\tvar rows = this.rows();\n\n\t\tthis.scrollTop = top;\n\n\t\tif(-topDiff > margin || bottomDiff > margin){\n\t\t\t//if big scroll redraw table;\n\t\t\tvar left = this.table.rowManager.scrollLeft;\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\n\t\t\tthis.scrollColumns(left);\n\t\t}else{\n\n\t\t\tif(dir){\n\t\t\t\t//scrolling up\n\t\t\t\tif(topDiff < 0){\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\n\t\t\t\t}\n\n\t\t\t\tif(bottomDiff < 0){\n\t\t\t\t\t//hide bottom row if needed\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(bottomDiff >= 0){\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\n\t\t\t\t}\n\n\t\t\t\t//scrolling down\n\t\t\t\tif(topDiff >= 0){\n\t\t\t\t\t//hide top row if needed\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresize(){\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\tvar rowIndex = this.rows().indexOf(row);\n\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\n\t}\n\n\tscrollToRow(row){\n\t\tvar index = this.rows().indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tthis._virtualRenderFill(index, true);\n\t\t}\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\tvar topEdge = this.elementVertical.scrollTop,\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\n\t\ttopFound = false,\n\t\ttopRow = 0,\n\t\tbottomRow = 0,\n\t\trows = this.rows();\n\n\t\tif(includingBuffer){\n\t\t\ttopRow = this.vDomTop;\n\t\t\tbottomRow = this.vDomBottom;\n\t\t}else{\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\t\t\t\tif(rows[i]){\n\t\t\t\t\tif(!topFound){\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows.slice(topRow, bottomRow + 1);\n\t}\n\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\n\t//full virtual render\n\t_virtualRenderFill(position, forceMove, offset) {\n\t\tvar\telement = this.tableElement,\n\t\tholder = this.elementVertical,\n\t\ttopPad = 0,\n\t\trowsHeight = 0,\n\t\trowHeight = 0,\n\t\theightOccupied = 0,\n\t\ttopPadHeight = 0,\n\t\ti = 0,\n\t\trows = this.rows(),\n\t\trowsCount = rows.length,\n\t\tindex = 0,\n\t\trow,\n\t\trowFragment,\n\t\trenderedRows = [],\n\t\ttotalRowsRendered = 0,\n\t\trowsToRender = 0,\n\t\tfixedHeight = this.table.rowManager.fixedHeight,\n\t\tcontainerHeight = this.elementVertical.clientHeight, \n\t\tavgRowHeight = this.table.options.rowHeight, \n\t\tresized = true;\n\n\t\tposition = position || 0;\n\n\t\toffset = offset || 0;\n\n\t\tif(!position){\n\t\t\tthis.clear();\n\t\t}else {\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\t\t//check if position is too close to bottom of table\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\n\n\t\t\tif(heightOccupied < containerHeight){\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\n\t\t\t\tif(position < 0){\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate initial pad\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\n\t\t\tposition -= topPad;\n\t\t}\n\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\n\t\t\tthis.vDomTop = position;\n\t\t\tthis.vDomBottom = position -1;\n\n\t\t\tif(fixedHeight || this.table.options.maxHeight) {\n\t\t\t\tif(avgRowHeight) {\n\t\t\t\t\trowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight);\n\t\t\t\t}\n\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender));\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowsToRender = rowsCount;\n\t\t\t}\n\n\t\t\twhile(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) {\n\t\t\t\trenderedRows = [];\n\t\t\t\trowFragment = document.createDocumentFragment();\n\n\t\t\t\ti = 0;\n\n\t\t\t\twhile ((i < rowsToRender) && this.vDomBottom < rowsCount -1) {\t\n\t\t\t\t\tindex = this.vDomBottom + 1,\n\t\t\t\t\trow = rows[index];\n\n\t\t\t\t\tthis.styleRow(row, index);\n\n\t\t\t\t\trow.initialize(false, true);\n\t\t\t\t\tif(!row.heightInitialized && !this.table.options.rowHeight){\n\t\t\t\t\t\trow.clearCellHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\trowFragment.appendChild(row.getElement());\n\t\t\t\t\trenderedRows.push(row);\n\t\t\t\t\tthis.vDomBottom ++;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tif(!renderedRows.length){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telement.appendChild(rowFragment);\n\t\t\t\t\n\t\t\t\t// NOTE: The next 3 loops are separate on purpose\n\t\t\t\t// This is to batch up the dom writes and reads which drastically improves performance \n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trow.rendered();\n\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.calcHeight(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.setCellHeight();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trowHeight = row.getHeight();\n\t\t\t\t\t\n\t\t\t\t\tif(totalRowsRendered < topPad){\n\t\t\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t\t\t}else {\n\t\t\t\t\t\trowsHeight += rowHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t}\n\t\t\t\t\ttotalRowsRendered++;\n\t\t\t\t});\n\n\t\t\t\tresized = this.table.rowManager.adjustTableSize();\n\t\t\t\tcontainerHeight = this.elementVertical.clientHeight;\n\t\t\t\tif(resized && (fixedHeight || this.table.options.maxHeight))\n\t\t\t\t{\n\t\t\t\t\tavgRowHeight = rowsHeight / totalRowsRendered;\n\t\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!position){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t\t//adjust row height to match average of rendered elements\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered);\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\n\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\n\t\t\t}else {\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t\t}\n\t\t\t\n\t\t\telement.style.paddingTop = this.vDomTopPad+\"px\";\n\t\t\telement.style.paddingBottom = this.vDomBottomPad+\"px\";\n\n\t\t\tif(forceMove){\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\n\t\t\t}\n\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\n\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\n\t\t\t}\n\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\t\tholder.scrollTop = this.scrollTop;\n\n\t\t\tthis.dispatch(\"render-virtual-fill\");\n\t\t}\n\t}\n\n\t_addTopRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomTop -1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tif(this.vDomTop){\n\t\t\t\tlet row = rows[index],\n\t\t\t\trowHeight, initialized;\n\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\n\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trow.initialize();\n\n\t\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\t\tthis.vDomTop--;\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\ti++;\n\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad -= paddingAdjust;\n\n\t\t\tif(this.vDomTopPad < 0){\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif(index < 1){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\n\t\t}\n\t}\n\n\t_removeTopRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomTop],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomTop++;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad += paddingAdjust;\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\n\t\t}\n\t}\n\n\t_addBottomRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomBottom + 1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[index],\n\t\t\trowHeight, initialized;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\ttable.appendChild(row.getElement());\n\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t}\n\n\t\t\t\t\trow.initialize();\n\n\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tthis.vDomBottom++;\n\t\t\t\t\tindex++;\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\n\t\t}\n\t}\n\n\t_removeBottomRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomBottom],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomBottom --;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad += paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\n\t\t}\n\t}\n\n\t_quickNormalizeRowHeight(rows){\n\t\tfor(let row of rows){\n\t\t\trow.calcHeight();\n\t\t}\n\n\t\tfor(let row of rows){\n\t\t\trow.setCellHeight();\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Row from './row/Row.js';\nimport RowComponent from './row/RowComponent.js';\nimport Helpers from './tools/Helpers.js';\n\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\n\nexport default class RowManager extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = this.createHolderElement(); //containing element\n\t\tthis.tableElement = this.createTableElement(); //table element\n\t\tthis.heightFixer = this.createTableElement(); //table element\n\t\tthis.placeholder = null; //placeholder element\n\t\tthis.placeholderContents = null; //placeholder element\n\t\t\n\t\tthis.firstRender = false; //handle first render\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\n\t\tthis.fixedHeight = false; //current rendering mode\n\t\t\n\t\tthis.rows = []; //hold row data objects\n\t\tthis.activeRowsPipeline = []; //hold calculation of active rows\n\t\tthis.activeRows = []; //rows currently available to on display in the table\n\t\tthis.activeRowsCount = 0; //count of active rows\n\t\t\n\t\tthis.displayRows = []; //rows currently on display in the table\n\t\tthis.displayRowsCount = 0; //count of display rows\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\n\t\t\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\n\t\t\n\t\tthis.scrollbarWidth = 0;\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t//////////////// Setup Functions /////////////////\n\t\n\tcreateHolderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-tableholder\");\n\t\tel.setAttribute(\"tabindex\", 0);\n\t\t// el.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateTableElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-table\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitializePlaceholder(){\n\t\tvar placeholder = this.table.options.placeholder;\n\t\t\n\t\tif(typeof placeholder === \"function\"){\n\t\t\tplaceholder = placeholder.call(this.table);\n\t\t}\n\t\t\n\t\tplaceholder = this.chain(\"placeholder\", [placeholder], placeholder, placeholder) || placeholder;\n\t\t\n\t\t//configure placeholder element\n\t\tif(placeholder){\t\n\t\t\tlet el = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-placeholder\");\n\t\t\t\n\t\t\tif(typeof placeholder == \"string\"){\n\t\t\t\tlet contents = document.createElement(\"div\");\n\t\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\n\t\t\t\tcontents.innerHTML = placeholder;\n\t\t\t\t\n\t\t\t\tel.appendChild(contents);\n\t\t\t\t\n\t\t\t\tthis.placeholderContents = contents;\n\t\t\t\t\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && placeholder instanceof HTMLElement){\n\t\t\t\t\n\t\t\t\tel.appendChild(placeholder);\n\t\t\t\tthis.placeholderContents = placeholder;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Invalid placeholder provided, must be string or HTML Element\", placeholder);\n\t\t\t\t\n\t\t\t\tthis.el = null;\n\t\t\t}\n\t\t\t\n\t\t\tthis.placeholder = el;\n\t\t}\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\t\n\t//return table element\n\tgetTableElement(){\n\t\treturn this.tableElement;\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializePlaceholder();\n\t\tthis.initializeRenderer();\n\t\t\n\t\t//initialize manager\n\t\tthis.element.appendChild(this.tableElement);\n\t\t\n\t\tthis.firstRender = true;\n\t\t\n\t\t//scroll header along with table body\n\t\tthis.element.addEventListener(\"scroll\", () => {\n\t\t\tvar left = this.element.scrollLeft,\n\t\t\tleftDir = this.scrollLeft > left,\n\t\t\ttop = this.element.scrollTop,\n\t\t\ttopDir = this.scrollTop > top;\n\t\t\t\n\t\t\t//handle horizontal scrolling\n\t\t\tif(this.scrollLeft != left){\n\t\t\t\tthis.scrollLeft = left;\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\n\t\t\t\t\n\t\t\t\tthis._positionPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\t//handle vertical scrolling\n\t\t\tif(this.scrollTop != top){\n\t\t\t\tthis.scrollTop = top;\n\t\t\t\t\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t////////////////// Row Manipulation //////////////////\n\tfindRow(subject){\n\t\tif(typeof subject == \"object\"){\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\t//subject is a HTML element of the row\n\t\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\t\treturn row.getElement() === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}else if(subject === null){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\treturn false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t\t\n\t\t\treturn match || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetRowFromDataObject(data){\n\t\tvar match = this.rows.find((row) => {\n\t\t\treturn row.data === data;\n\t\t});\n\t\t\n\t\treturn match || false;\n\t}\n\t\n\tgetRowFromPosition(position){\n\t\treturn this.getDisplayRows().find((row) => {\n\t\t\treturn row.getPosition() === position && row.isDisplayed();\n\t\t});\n\t}\n\t\n\tscrollToRow(row, position, ifVisible){\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\tsetData(data, renderInPosition, columnsChanged){\n\t\treturn new Promise((resolve, reject)=>{\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\n\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\tthis._setDataActual(data, true);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reRenderInPosition(() => {\n\t\t\t\t\t\tthis._setDataActual(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t\t}\n\t\t\t\tthis.resetScroll();\n\t\t\t\t\n\t\t\t\tthis._setDataActual(data);\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\t_setDataActual(data, renderInPosition){\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\n\t\t\n\t\tthis._wipeElements();\n\t\t\n\t\tif(Array.isArray(data)){\n\t\t\tthis.dispatch(\"data-processing\", data);\n\t\t\t\n\t\t\tdata.forEach((def, i) => {\n\t\t\t\tif(def && typeof def === \"object\"){\n\t\t\t\t\tvar row = new Row(def, this);\n\t\t\t\t\tthis.rows.push(row);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\n\t\t\t\n\t\t\tthis.dispatch(\"data-processed\", data);\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\n\t\t}else{\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\n\t\t}\n\t}\n\t\n\t_wipeElements(){\n\t\tthis.dispatch(\"rows-wipe\");\n\t\t\n\t\tthis.destroy();\n\t\t\n\t\tthis.adjustTableSize();\n\t\t\n\t\tthis.dispatch(\"rows-wiped\");\n\t}\n\t\n\tdestroy(){\n\t\tthis.rows.forEach((row) => {\n\t\t\trow.wipe();\n\t\t});\n\t\t\n\t\tthis.rows = [];\n\t\tthis.activeRows = [];\n\t\tthis.activeRowsPipeline = [];\n\t\tthis.activeRowsCount = 0;\n\t\tthis.displayRows = [];\n\t\tthis.displayRowsCount = 0;\n\t}\n\t\n\tdeleteRow(row, blockRedraw){\n\t\tvar allIndex = this.rows.indexOf(row),\n\t\tactiveIndex = this.activeRows.indexOf(row);\n\t\t\n\t\tif(activeIndex > -1){\n\t\t\tthis.activeRows.splice(activeIndex, 1);\n\t\t}\n\t\t\n\t\tif(allIndex > -1){\n\t\t\tthis.rows.splice(allIndex, 1);\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tvar displayIndex = rows.indexOf(row);\n\t\t\t\n\t\t\tif(displayIndex > -1){\n\t\t\t\trows.splice(displayIndex, 1);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis.tableEmpty();\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\n\t\t}\n\t}\n\t\n\taddRow(data, pos, index, blockRedraw){\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\t\treturn row;\n\t}\n\t\n\t//add multiple rows\n\taddRows(data, pos, index, refreshDisplayOnly){\n\t\tvar rows = [];\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tpos = this.findAddRowPos(pos);\n\t\t\t\n\t\t\tif(!Array.isArray(data)){\n\t\t\t\tdata = [data];\n\t\t\t}\n\t\t\t\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\n\t\t\t\tdata.reverse();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach((item, i) => {\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\n\t\t\t\trows.push(row);\n\t\t\t\tthis.dispatch(\"row-added\", row, item, pos, index);\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(refreshDisplayOnly ? \"displayPipeline\" : false, false, true);\n\t\t\t\n\t\t\tthis.regenerateRowPositions();\n\t\t\t\n\t\t\tif(this.displayRowsCount){\n\t\t\t\tthis._clearPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\tresolve(rows);\n\t\t});\n\t}\n\t\n\tfindAddRowPos(pos){\n\t\tif(typeof pos === \"undefined\"){\n\t\t\tpos = this.table.options.addRowPos;\n\t\t}\n\t\t\n\t\tif(pos === \"pos\"){\n\t\t\tpos = true;\n\t\t}\n\t\t\n\t\tif(pos === \"bottom\"){\n\t\t\tpos = false;\n\t\t}\n\t\t\n\t\treturn pos;\n\t}\n\t\n\taddRowActual(data, pos, index, blockRedraw){\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t\ttop = this.findAddRowPos(pos),\n\t\tallIndex = -1,\n\t\tactiveIndex, chainResult;\n\t\t\n\t\tif(!index){\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\n\t\t\t\n\t\t\tindex = chainResult.index;\n\t\t\ttop = chainResult.top;\n\t\t}\n\t\t\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tindex = this.findRow(index);\n\t\t}\n\t\t\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\n\t\t\n\t\tif(index){\n\t\t\tallIndex = this.rows.indexOf(index);\n\t\t}\n\t\t\n\t\tif(index && allIndex > -1){\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\n\t\t\t\n\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\tvar displayIndex = rows.indexOf(index);\n\t\t\t\t\n\t\t\t\tif(displayIndex > -1){\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(activeIndex > -1){\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\n\t\t\t}\n\t\t\t\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(top){\n\t\t\t\t\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.unshift(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.unshift(row);\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}else{\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.push(row);\n\t\t\t\tthis.rows.push(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t}\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\treturn row;\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tthis.dispatch(\"row-move\", from, to, after);\n\t\t\n\t\tthis.moveRowActual(from, to, after);\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatch(\"row-moved\", from, to, after);\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\n\t}\n\t\n\tmoveRowActual(from, to, after){\n\t\tthis.moveRowInArray(this.rows, from, to, after);\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tthis.moveRowInArray(rows, from, to, after);\n\t\t});\n\t\t\n\t\tthis.dispatch(\"row-moving\", from, to, after);\n\t}\n\t\n\tmoveRowInArray(rows, from, to, after){\n\t\tvar\tfromIndex, toIndex, start, end;\n\t\t\n\t\tif(from !== to){\n\t\t\t\n\t\t\tfromIndex = rows.indexOf(from);\n\t\t\t\n\t\t\tif (fromIndex > -1) {\n\t\t\t\t\n\t\t\t\trows.splice(fromIndex, 1);\n\t\t\t\t\n\t\t\t\ttoIndex = rows.indexOf(to);\n\t\t\t\t\n\t\t\t\tif (toIndex > -1) {\n\t\t\t\t\t\n\t\t\t\t\tif(after){\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//restyle rows\n\t\t\tif(rows === this.getDisplayRows()){\n\t\t\t\t\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\n\t\t\t\t\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tif(rows[i]){\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearData(){\n\t\tthis.setData([]);\n\t}\n\t\n\tgetRowIndex(row){\n\t\treturn this.findRowIndex(row, this.rows);\n\t}\n\t\n\tgetDisplayRowIndex(row){\n\t\tvar index = this.getDisplayRows().indexOf(row);\n\t\treturn index > -1 ? index : false;\n\t}\n\t\n\tnextDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tnextRow = false;\n\t\t\n\t\t\n\t\tif(index !== false && index < this.displayRowsCount -1){\n\t\t\tnextRow = this.getDisplayRows()[index+1];\n\t\t}\n\t\t\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn nextRow;\n\t}\n\t\n\tprevDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tprevRow = false;\n\t\t\n\t\tif(index){\n\t\t\tprevRow = this.getDisplayRows()[index-1];\n\t\t}\n\t\t\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn prevRow;\n\t}\n\t\n\tfindRowIndex(row, list){\n\t\tvar rowIndex;\n\t\t\n\t\trow = this.findRow(row);\n\t\t\n\t\tif(row){\n\t\t\trowIndex = list.indexOf(row);\n\t\t\t\n\t\t\tif(rowIndex > -1){\n\t\t\t\treturn rowIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tgetData(active, transform){\n\t\tvar output = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tif(row.type == \"row\"){\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(active){\n\t\tvar\toutput = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\toutput.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetDataCount(active){\n\t\tvar rows = this.getRows(active);\n\t\t\n\t\treturn rows.length;\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tthis.scrollLeft = left;\n\t\tthis.element.scrollLeft = left;\n\t\t\n\t\tthis.dispatch(\"scroll-horizontal\", left);\n\t}\n\t\n\tregisterDataPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.dataPipeline.push({handler, priority});\n\t\t\tthis.dataPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\tregisterDisplayPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.displayPipeline.push({handler, priority});\n\t\t\tthis.displayPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\t//set active data set\n\trefreshActiveData(handler, skipStage, renderInPosition){\n\t\tvar table = this.table,\n\t\tstage = \"\",\n\t\tindex = 0,\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"];\n\t\t\n\t\tif(!this.table.destroyed){\n\t\t\tif(typeof handler === \"function\"){\n\t\t\t\tindex = this.dataPipeline.findIndex((item) => {\n\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(index > -1){\n\t\t\t\t\tstage = \"dataPipeline\";\n\t\t\t\t\t\n\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\tif(index == this.dataPipeline.length - 1){\n\t\t\t\t\t\t\tstage = \"display\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\n\t\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(index > -1){\n\t\t\t\t\t\tstage = \"displayPipeline\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\n\t\t\t\t\t\t\t\tstage = \"end\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tstage = handler || \"all\";\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.redrawBlock){\n\t\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\n\t\t\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\tskipStage: skipStage,\n\t\t\t\t\t\trenderInPosition: renderInPosition,\n\t\t\t\t\t\tstage:stage,\n\t\t\t\t\t\tindex:index,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\tif(Helpers.elVisible(this.element)){\n\t\t\t\t\tif(renderInPosition){\n\t\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!handler){\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.renderTable();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\n\t\t\t\t\t\t\tthis.table.columnManager.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"data-refreshed\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\trefreshPipelines(handler, stage, index, renderInPosition){\n\t\tthis.dispatch(\"data-refreshing\");\n\t\t\n\t\tif(!handler || !this.activeRowsPipeline[0]){\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\n\t\t}\n\t\t\n\t\t//cascade through data refresh stages\n\t\tswitch(stage){\n\t\t\tcase \"all\":\n\t\t\t//handle case where all data needs refreshing\n\t\t\t\n\t\t\tcase \"dataPipeline\":\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\n\t\t\t\t\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\tindex = 0;\n\t\t\t\tthis.resetDisplayRows();\n\t\t\t\n\t\t\tcase \"displayPipeline\":\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\n\t\t\t\t\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"end\":\n\t\t\t//case to handle scenario when trying to skip past end stage\n\t\t\t\tthis.regenerateRowPositions();\n\t\t}\n\t\t\n\t\tif(this.getDisplayRows().length){\n\t\t\tthis._clearPlaceholder();\n\t\t}\n\t}\n\t\n\t//regenerate row positions\n\tregenerateRowPositions(){\n\t\tvar rows = this.getDisplayRows();\n\t\tvar index = 1;\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\"){\n\t\t\t\trow.setPosition(index);\n\t\t\t\tindex++;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tsetActiveRows(activeRows){\n\t\tthis.activeRows = this.activeRows = Object.assign([], activeRows);\n\t\tthis.activeRowsCount = this.activeRows.length;\n\t}\n\t\n\t//reset display rows array\n\tresetDisplayRows(){\n\t\tthis.displayRows = [];\n\t\t\n\t\tthis.displayRows.push(this.activeRows.slice(0));\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[0].length;\n\t}\n\t\n\t//set display row pipeline data\n\tsetDisplayRows(displayRows, index){\n\t\tthis.displayRows[index] = displayRows;\n\t\t\n\t\tif(index == this.displayRows.length -1){\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t\t}\n\t}\n\t\n\tgetDisplayRows(index){\n\t\tif(typeof index == \"undefined\"){\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\n\t\t}else{\n\t\t\treturn this.displayRows[index] || [];\n\t\t}\n\t}\n\t\n\tgetVisibleRows(chain, viewable){\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\n\t\t\n\t\tif(chain){\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t//repeat action across display rows\n\tdisplayRowIterator(callback){\n\t\tthis.activeRowsPipeline.forEach(callback);\n\t\tthis.displayRows.forEach(callback);\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t}\n\t\n\t//return only actual rows (not group headers etc)\n\tgetRows(type){\n\t\tvar rows = [];\n\t\t\n\t\tswitch(type){\n\t\t\tcase \"active\":\n\t\t\t\trows = this.activeRows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.getVisibleRows(false, true);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t///////////////// Table Rendering /////////////////\n\t//trigger rerender of table in current position\n\treRenderInPosition(callback){\n\t\tif(this.redrawBlock){\n\t\t\tif(callback){\n\t\t\t\tcallback();\n\t\t\t}else{\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\t\n\t\t\tthis.renderer.rerenderRows(callback);\n\t\t\t\n\t\t\tif(!this.fixedHeight){\n\t\t\t\tthis.adjustTableSize();\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"renderComplete\");\n\t\t}\n\t}\n\t\n\tscrollBarCheck(){\n\t\tvar scrollbarWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar moving table when present\n\t\tif(this.element.scrollHeight > this.element.clientHeight){\n\t\t\tscrollbarWidth = this.element.offsetWidth - this.element.clientWidth;\n\t\t}\n\t\t\n\t\tif(scrollbarWidth !== this.scrollbarWidth){\n\t\t\tthis.scrollbarWidth = scrollbarWidth;\n\t\t\tthis.dispatch(\"scrollbar-vertical\", scrollbarWidth);\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomVertical,\n\t\t\t\"basic\": RendererBasicVertical,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderVertical;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderMode = this.table.options.renderVertical;\n\t\t\t\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t\t\n\t\t\tif((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){\n\t\t\t\tthis.fixedHeight = true;\n\t\t\t}else{\n\t\t\t\tthis.fixedHeight = false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderVertical);\n\t\t}\n\t}\n\t\n\tgetRenderMode(){\n\t\treturn this.renderMode;\n\t}\n\t\n\trenderTable(){\n\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tthis._clearTable();\n\t\t\n\t\tif(this.displayRowsCount){\n\t\t\tthis.renderer.renderRows();\n\t\t\t\n\t\t\tif(this.firstRender){\n\t\t\t\tthis.firstRender = false;\n\t\t\t\t\n\t\t\t\tif(!this.fixedHeight){\n\t\t\t\t\tthis.adjustTableSize();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.layoutRefresh(true);\n\t\t\t}\n\t\t}else{\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t\t\n\t\tif(!this.fixedHeight){\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-layout\");\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis._showPlaceholder();\n\t\t}\n\t\t\n\t\tthis.scrollBarCheck();\n\t\t\n\t\tthis.dispatchExternal(\"renderComplete\");\n\t}\n\t\n\t//show scrollbars on empty table div\n\trenderEmptyScroll(){\n\t\tif(this.placeholder){\n\t\t\tthis.tableElement.style.display = \"none\";\n\t\t}else{\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\n\t\t}\n\t}\n\t\n\t_clearTable(){\t\n\t\tthis._clearPlaceholder();\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.renderer.clearRows();\n\t}\n\t\n\ttableEmpty(){\n\t\tthis.renderEmptyScroll();\n\t\tthis._showPlaceholder();\n\t}\n\n\tcheckPlaceholder(){\n\t\tif(this.displayRowsCount){\n\t\t\tthis._clearPlaceholder();\n\t\t}else{\n\t\t\tthis.tableEmpty();\n\t\t}\n\t}\n\t\n\t_showPlaceholder(){\n\t\tif(this.placeholder){\n\t\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t\t}\n\t\t\t\n\t\t\tthis.initializePlaceholder();\n\t\t\t\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\t\t\t\n\t\t\tthis.getElement().appendChild(this.placeholder);\n\t\t\tthis._positionPlaceholder();\n\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t}\n\t\n\t_clearPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t}\n\t\t\n\t\t// clear empty table placeholder min\n\t\tthis.tableElement.style.minWidth = \"\";\n\t\tthis.tableElement.style.display = \"\";\n\t}\n\t\n\t_positionPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\n\t\t}\n\t}\n\t\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\t\n\t//normalize height of active rows\n\tnormalizeHeight(){\n\t\tthis.activeRows.forEach(function(row){\n\t\t\trow.normalizeHeight();\n\t\t});\n\t}\n\t\n\t//adjust the height of the table holder to fit in the Tabulator element\n\tadjustTableSize(){\n\t\tlet initialHeight = this.element.clientHeight, minHeight;\n\t\tlet resized = false;\n\t\t\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\t\t\t\n\t\t\tif(this.fixedHeight){\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\n\t\t\t\t\n\t\t\t\tconst height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.minHeight = minHeight || \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.height = height;\n\t\t\t\tthis.element.style.maxHeight = height;\n\t\t\t} else {\n\t\t\t\tthis.element.style.height = \"\";\n\t\t\t\tthis.element.style.height =\n\t\t\t\tthis.table.element.clientHeight - otherHeight + \"px\";\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderer.resize();\n\t\t\t\n\t\t\t//check if the table has changed size when dealing with variable height tables\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\n\t\t\t\tresized = true;\n\t\t\t\tif(this.subscribed(\"table-resize\")){\n\t\t\t\t\tthis.dispatch(\"table-resize\");\n\t\t\t\t}else{\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t}\n\t\t\n\t\tthis._positionPlaceholder();\n\t\treturn resized;\n\t}\n\t\n\t//reinitialize all rows\n\treinitialize(){\n\t\tthis.rows.forEach(function(row){\n\t\t\trow.reinitialize(true);\n\t\t});\n\t}\n\t\n\t//prevent table from being redrawn\n\tblockRedraw (){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockRestoreConfig = false;\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw (){\n\t\tthis.redrawBlock = false;\n\t\t\n\t\tif(this.redrawBlockRestoreConfig){\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\t\t\t\n\t\t\tthis.redrawBlockRestoreConfig = false;\n\t\t}else{\n\t\t\tif(this.redrawBlockRenderInPosition){\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.redrawBlockRenderInPosition = false;\n\t}\n\t\n\t//redraw table\n\tredraw (force){\n\t\tthis.adjustTableSize();\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\t\t\n\t\tif(!force){\t\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(this.scrollLeft);\n\t\t}else{\n\t\t\tthis.renderTable();\n\t\t}\n\t}\n\t\n\tresetScroll(){\n\t\tthis.element.scrollLeft = 0;\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tif(this.table.browser === \"ie\"){\n\t\t\tvar event = document.createEvent(\"Event\");\n\t\t\tevent.initEvent(\"scroll\", false, true);\n\t\t\tthis.element.dispatchEvent(event);\n\t\t}else{\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\n\nexport default class FooterManager extends CoreFeature{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.active = false;\n\t\tthis.element = this.createElement(); //containing element\n\t\tthis.containerElement = this.createContainerElement(); //containing element\n\t\tthis.external = false;\n\t}\n\n\tinitialize(){\n\t\tthis.initializeElement();\n\t}\n\n\tcreateElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer\");\n\n\t\treturn el;\n\t}\n\n\t\n\tcreateContainerElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer-contents\");\n\n\t\tthis.element.appendChild(el);\n\n\t\treturn el;\n\t}\n\n\tinitializeElement(){\n\t\tif(this.table.options.footerElement){\n\n\t\t\tswitch(typeof this.table.options.footerElement){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\n\t\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.external = true;\n\t\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tappend(element){\n\t\tthis.activate();\n\n\t\tthis.containerElement.appendChild(element);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tprepend(element){\n\t\tthis.activate();\n\n\t\tthis.element.insertBefore(element, this.element.firstChild);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tremove(element){\n\t\telement.parentNode.removeChild(element);\n\t\tthis.deactivate();\n\t}\n\n\tdeactivate(force){\n\t\tif(!this.element.firstChild || force){\n\t\t\tif(!this.external){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\tthis.active = false;\n\t\t}\n\t}\n\n\tactivate(){\n\t\tif(!this.active){\n\t\t\tthis.active = true;\n\t\t\tif(!this.external){\n\t\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\t\tthis.table.element.style.display = '';\n\t\t\t}\n\t\t}\n\t}\n\n\tredraw(){\n\t\tthis.dispatch(\"footer-redraw\");\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Row from '../row/Row.js';\n\nexport default class InteractionManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.el = null;\n\t\t\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\n\t\t\n\t\tthis.previousTargets = {};\n\t\t\n\t\tthis.listeners = [\n\t\t\t\"click\",\n\t\t\t\"dblclick\",\n\t\t\t\"contextmenu\",\n\t\t\t\"mouseenter\",\n\t\t\t\"mouseleave\",\n\t\t\t\"mouseover\",\n\t\t\t\"mouseout\",\n\t\t\t\"mousemove\",\n\t\t\t\"mouseup\",\n\t\t\t\"mousedown\",\n\t\t\t\"touchstart\",\n\t\t\t\"touchend\",\n\t\t];\n\t\t\n\t\tthis.componentMap = {\n\t\t\t\"tabulator-cell\":\"cell\",\n\t\t\t\"tabulator-row\":\"row\",\n\t\t\t\"tabulator-group\":\"group\",\n\t\t\t\"tabulator-col\":\"column\",\n\t\t};\n\t\t\n\t\tthis.pseudoTrackers = {\n\t\t\t\"row\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"cell\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"group\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"column\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t};\n\t\t\n\t\tthis.pseudoTracking = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.el = this.table.element;\n\t\t\n\t\tthis.buildListenerMap();\n\t\tthis.bindSubscriptionWatchers();\n\t}\n\t\n\tbuildListenerMap(){\n\t\tvar listenerMap = {};\n\t\t\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistenerMap[listener] = {\n\t\t\t\thandler:null,\n\t\t\t\tcomponents:[],\n\t\t\t};\n\t\t});\n\t\t\n\t\tthis.listeners = listenerMap;\n\t}\n\t\n\tbindPseudoEvents(){\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\n\t\t});\n\t\t\n\t\tthis.pseudoTracking = true;\n\t}\n\t\n\tpseudoMouseEnter(key, e, target){\n\t\tif(this.pseudoTrackers[key].target !== target){\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\n\t\t\t}\n\t\t\t\n\t\t\tthis.pseudoMouseLeave(key, e);\n\t\t\t\n\t\t\tthis.pseudoTrackers[key].target = target;\n\t\t\t\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\n\t\t}\n\t}\n\t\n\tpseudoMouseLeave(key, e){\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\n\t\tlinkedKeys = {\n\t\t\t\"row\":[\"cell\"],\n\t\t\t\"cell\":[\"row\"],\n\t\t};\n\t\t\n\t\tleaveList = leaveList.filter((item) => {\n\t\t\tvar links = linkedKeys[key];\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\n\t\t});\n\t\t\n\t\t\n\t\tleaveList.forEach((key) => {\n\t\t\tvar target = this.pseudoTrackers[key].target;\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\n\t\t\t\t\n\t\t\t\tthis.pseudoTrackers[key].target = null;\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\tbindSubscriptionWatchers(){\n\t\tvar listeners = Object.keys(this.listeners),\n\t\tcomponents = Object.values(this.componentMap);\n\t\t\n\t\tfor(let comp of components){\n\t\t\tfor(let listener of listeners){\n\t\t\t\tlet key = comp + \"-\" + listener;\n\t\t\t\t\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\n\t}\n\t\n\tsubscriptionChanged(component, key, added){\n\t\tvar listener = this.listeners[key].components,\n\t\tindex = listener.indexOf(component),\n\t\tchanged = false;\n\t\t\n\t\tif(added){\n\t\t\tif(index === -1){\n\t\t\t\tlistener.push(component);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\n\t\t\t\tif(index > -1){\n\t\t\t\t\tlistener.splice(index, 1);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\n\t\t\tthis.bindPseudoEvents();\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.updateEventListeners();\n\t\t}\n\t}\n\t\n\tupdateEventListeners(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.components.length){\n\t\t\t\tif(!listener.handler){\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler);\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(listener.handler){\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\t\tlistener.handler = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\ttrack(type, e){\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\n\t\t\n\t\tvar targets = this.findTargets(path);\n\t\ttargets = this.bindComponents(type, targets);\n\t\t\n\t\tthis.triggerEvents(type, e, targets);\n\t\t\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\n\t\t}\n\t}\n\t\n\tfindTargets(path){\n\t\tvar targets = {};\n\t\t\n\t\tlet componentMap = Object.keys(this.componentMap);\n\t\t\n\t\tfor (let el of path) {\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\n\t\t\t\n\t\t\tlet abort = classList.filter((item) => {\n\t\t\t\treturn this.abortClasses.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tif(abort.length){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tlet elTargets = classList.filter((item) => {\n\t\t\t\treturn componentMap.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tfor (let target of elTargets) {\n\t\t\t\tif(!targets[this.componentMap[target]]){\n\t\t\t\t\ttargets[this.componentMap[target]] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(targets.group && targets.group === targets.row){\n\t\t\tdelete targets.row;\n\t\t}\n\n\t\treturn targets;\n\t}\n\t\n\tbindComponents(type, targets){\n\t\t//ensure row component is looked up before cell\n\t\tvar keys = Object.keys(targets).reverse(),\n\t\tlistener = this.listeners[type],\n\t\tmatches = {},\n\t\ttargetMatches = {};\n\t\t\n\t\tfor(let key of keys){\n\t\t\tlet component,\n\t\t\ttarget = targets[key],\n\t\t\tpreviousTarget = this.previousTargets[key];\n\t\t\t\n\t\t\tif(previousTarget && previousTarget.target === target){\n\t\t\t\tcomponent = previousTarget.component;\n\t\t\t}else{\n\t\t\t\tswitch(key){\n\t\t\t\t\tcase \"row\":\n\t\t\t\t\tcase \"group\":\n\t\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\n\t\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tcomponent = rows.find((row) => {\n\t\t\t\t\t\t\t\treturn row.getElement() === target;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\n\t\t\t\t\t\t\t\ttargets[key] = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"column\":\n\t\t\t\t\t\tif(listener.components.includes(\"column\")){\n\t\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"cell\":\n\t\t\t\t\t\tif(listener.components.includes(\"cell\")){\n\t\t\t\t\t\t\tif(matches[\"row\"] instanceof Row){\n\t\t\t\t\t\t\t\tcomponent = matches[\"row\"].findCell(target);\n\t\t\t\t\t\t\t}else{\t\n\t\t\t\t\t\t\t\tif(targets[\"row\"]){\n\t\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(component){\n\t\t\t\tmatches[key] = component;\n\t\t\t\ttargetMatches[key] = {\n\t\t\t\t\ttarget:target,\n\t\t\t\t\tcomponent:component,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.previousTargets = targetMatches;\n\t\t\n\t\treturn matches;\n\t}\n\t\n\ttriggerEvents(type, e, targets){\n\t\tvar listener = this.listeners[type];\n\n\t\tfor(let key in targets){\n\t\t\tif(targets[key] && listener.components.includes(key)){\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearWatchers(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.handler){\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\tlistener.handler = null;\n\t\t\t}\n\t\t}\n\t}\n}\n","export default class ComponentFunctionBinder{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\n\t\tthis.bindings = {};\n\t}\n\n\tbind(type, funcName, handler){\n\t\tif(!this.bindings[type]){\n\t\t\tthis.bindings[type] = {};\n\t\t}\n\n\t\tif(this.bindings[type][funcName]){\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, handler);\n\t\t}else{\n\t\t\tthis.bindings[type][funcName] = handler;\n\t\t}\n\t}\n\n\thandle(type, component, name){\n\t\tif(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){\n\t\t\treturn this.bindings[type][name].bind(null, component);\n\t\t}else{\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\n\t\t\t\tif(this.table.options.debugInvalidComponentFuncs){\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\n\nexport default class DataLoader extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\n\t\tthis.loading = false;\n\t}\n\t\n\tinitialize(){}\n\t\n\tload(data, params, config, replace, silent, columnsChanged){\n\t\tvar requestNo = ++this.requestOrder;\n\n\t\tif(this.table.destroyed){\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\t\n\t\tthis.dispatchExternal(\"dataLoading\", data);\n\t\t\n\t\t//parse json data to array\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\n\t\t\tthis.loading = true;\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.alertLoader();\n\t\t\t}\n\t\t\t\n\t\t\t//get params for request\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\n\t\t\t\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\n\t\t\t\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\n\t\t\t\n\t\t\treturn result.then((response) => {\n\t\t\t\tif(!this.table.destroyed){\n\t\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\n\t\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\n\t\t\t\t\t\n\t\t\t\t\tif(requestNo == this.requestOrder){\n\t\t\t\t\t\tthis.clearAlert();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(rowData !== false){\n\t\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\n\t\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - Table has been destroyed\");\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\n\t\t\t\t\n\t\t\t\tif(!silent){\n\t\t\t\t\tthis.alertError();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.clearAlert();\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\n\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t});\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\n\t\t\t\n\t\t\tif(!data){\n\t\t\t\tdata = [];\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\t\n\tmapParams(params, map){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in params){\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tobjectInvert(obj){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in obj){\n\t\t\toutput[obj[key]] = key;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tblockActiveLoad(){\n\t\tthis.requestOrder++;\n\t}\n\t\n\talertLoader(){\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\n\t\t\n\t\tif(shouldLoad){\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\n\t\t}\n\t}\n\t\n\talertError(){\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\n\t}\n\t\n\tclearAlert(){\n\t\tthis.table.alertManager.clear();\n\t}\n}","export default class ExternalEventBus {\n\n\tconstructor(table, optionsList, debug){\n\t\tthis.table = table;\n\t\tthis.events = {};\n\t\tthis.optionsList = optionsList || {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push(callback);\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tdelete this.events[key];\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift(),\n\t\tresult;\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((callback, i) => {\n\t\t\t\tlet callResult = callback.apply(this.table, args);\n\n\t\t\t\tif(!i){\n\t\t\t\t\tresult = callResult;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"ExternalEvent:\" + args[0];\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n}","export default class InternalEventBus {\n\n\tconstructor(debug){\n\t\tthis.events = {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback, priority = 10000){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push({callback, priority});\n\n\t\tthis.events[key].sort((a, b) => {\n\t\t\treturn a.priority - b.priority;\n\t\t});\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item.callback === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_chain(key, args, initialValue, fallback){\n\t\tvar value = initialValue;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\n\t\t\t});\n\n\t\t\treturn value;\n\t\t}else{\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\n\t\t}\n\t}\n\n\t_confirm(key, args){\n\t\tvar confirmed = false;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tif(subscriber.callback.apply(this, args)){\n\t\t\t\t\tconfirmed = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn confirmed;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift();\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((subscriber) => {\n\t\t\t\tsubscriber.callback.apply(this, args);\n\t\t\t});\n\t\t}\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n\n\t_debugChain(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._chain(...arguments);\n\t}\n\n\t_debugConfirm(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._confirm(...arguments);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class DeprecationAdvisor extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\t_warnUser(){\n\t\tif(this.options(\"debugDeprecation\")){\n\t\t\tconsole.warn(...arguments);\n\t\t}\n\t}\n\t\n\tcheck(oldOption, newOption, convert){\n\t\tvar msg = \"\";\n\t\t\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\n\t\t\t\n\t\t\tif(newOption){\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\n\t\t\t\tif(convert){\n\t\t\t\t\tthis.table.options[newOption] = this.table.options[oldOption];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tcheckMsg(oldOption, msg){\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tmsg(msg){\n\t\tthis._warnUser(msg);\n\t}\n}","import Tabulator from '../Tabulator.js';\n\nclass TableRegistry {\n\n\tstatic register(table){\n\t\tTableRegistry.tables.push(table);\n\t}\n\n\tstatic deregister(table){\n\t\tvar index = TableRegistry.tables.indexOf(table);\n\n\t\tif(index > -1){\n\t\t\tTableRegistry.tables.splice(index, 1);\n\t\t}\n\t}\n\n\tstatic lookupTable(query, silent){\n\t\tvar results = [],\n\t\tmatches, match;\n\n\t\tif(typeof query === \"string\"){\n\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\tif(matches.length){\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\n\t\t\tmatch = TableRegistry.matchElement(query);\n\n\t\t\tif(match){\n\t\t\t\tresults.push(match);\n\t\t\t}\n\t\t}else if(Array.isArray(query)){\n\t\t\tquery.forEach(function(item){\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\n\t\t\t});\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tstatic matchElement(element){\n\t\treturn TableRegistry.tables.find(function(table){\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n}\n\nTableRegistry.tables = [];\n\nexport default TableRegistry;","import CoreFeature from '../CoreFeature.js';\nimport Helpers from './Helpers.js';\n\nexport default class Popup extends CoreFeature{\n\tconstructor(table, element, parent){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = element;\n\t\tthis.container = this._lookupContainer();\n\t\t\n\t\tthis.parent = parent;\n\t\t\n\t\tthis.reversedX = false;\n\t\tthis.childPopup = null;\n\t\tthis.blurable = false;\n\t\tthis.blurCallback = null;\n\t\tthis.blurEventsBound = false;\n\t\tthis.renderedCallback = null;\n\t\t\n\t\tthis.visible = false;\n\t\tthis.hideable = true;\n\t\t\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\n\t\t\n\t\tthis.blurEvent = this.hide.bind(this, false);\n\t\tthis.escEvent = this._escapeCheck.bind(this);\n\t\t\n\t\tthis.destroyBinding = this.tableDestroyed.bind(this);\n\t\tthis.destroyed = false;\n\t}\n\t\n\ttableDestroyed(){\n\t\tthis.destroyed = true;\n\t\tthis.hide(true);\n\t}\n\t\n\t_lookupContainer(){\n\t\tvar container = this.table.options.popupContainer;\n\t\t\n\t\tif(typeof container === \"string\"){\n\t\t\tcontainer = document.querySelector(container);\n\t\t\t\n\t\t\tif(!container){\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t\t}\n\t\t}else if (container === true){\n\t\t\tcontainer = this.table.element;\n\t\t}\n\t\t\n\t\tif(container && !this._checkContainerIsParent(container)){\n\t\t\tcontainer = false;\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t}\n\t\t\n\t\tif(!container){\n\t\t\tcontainer = document.body;\n\t\t}\n\t\t\n\t\treturn container;\n\t}\n\t\n\t_checkContainerIsParent(container, element = this.table.element){\n\t\tif(container === element){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\n\t\t}\n\t}\n\t\n\trenderCallback(callback){\n\t\tthis.renderedCallback = callback;\n\t}\n\t\n\tcontainerEventCoords(e){\n\t\tvar touch = !(e instanceof MouseEvent);\n\t\t\n\t\tvar x = touch ? e.touches[0].pageX : e.pageX;\n\t\tvar y = touch ? e.touches[0].pageY : e.pageY;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\tx -= parentOffset.left;\n\t\t\ty -= parentOffset.top;\n\t\t}\n\t\t\n\t\treturn {x, y};\n\t}\n\t\n\telementPositionCoords(element, position = \"right\"){\n\t\tvar offset = Helpers.elOffset(element),\n\t\tcontainerOffset, x, y;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\toffset.left -= containerOffset.left;\n\t\t\toffset.top -= containerOffset.top;\n\t\t}\n\t\t\n\t\tswitch(position){\n\t\t\tcase \"right\":\n\t\t\t\tx = offset.left + element.offsetWidth;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"bottom\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top + element.offsetHeight;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"left\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"top\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"center\":\n\t\t\t\tx = offset.left + (element.offsetWidth / 2);\n\t\t\t\ty = offset.top + (element.offsetHeight / 2);\n\t\t\t\tbreak;\n\t\t\t\n\t\t}\n\t\t\n\t\treturn {x, y, offset};\n\t}\n\t\n\tshow(origin, position){\n\t\tvar x, y, parentEl, parentOffset, coords;\n\t\t\n\t\tif(this.destroyed || this.table.destroyed){\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tif(origin instanceof HTMLElement){\n\t\t\tparentEl = origin;\n\t\t\tcoords = this.elementPositionCoords(origin, position);\n\t\t\t\n\t\t\tparentOffset = coords.offset;\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t}else if(typeof origin === \"number\"){\n\t\t\tparentOffset = {top:0, left:0};\n\t\t\tx = origin;\n\t\t\ty = position;\n\t\t}else{\n\t\t\tcoords = this.containerEventCoords(origin);\n\t\t\t\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t\tthis.reversedX = false;\n\t\t}\n\t\t\n\t\tthis.element.style.top = y + \"px\";\n\t\tthis.element.style.left = x + \"px\";\n\t\t\n\t\tthis.container.appendChild(this.element);\n\t\t\n\t\tif(typeof this.renderedCallback === \"function\"){\n\t\t\tthis.renderedCallback();\n\t\t}\n\t\t\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\n\t\t\n\t\tthis.visible = true;\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\n\t\t\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_fitToScreen(x, y, parentEl, parentOffset, position){\n\t\tvar scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\n\t\t\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\n\t\tif((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\n\t\t\tthis.element.style.left = \"\";\n\t\t\t\n\t\t\tif(parentEl){\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - x) + \"px\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.reversedX = true;\n\t\t}\n\t\t\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\t\tif((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\n\t\t\tif(parentEl){\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"bottom\":\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisVisible(){\n\t\treturn this.visible;\n\t}\n\t\n\thideOnBlur(callback){\n\t\tthis.blurable = true;\n\t\t\n\t\tif(this.visible){\n\t\t\tsetTimeout(() => {\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\n\t\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\n\n\t\t\t\t\tthis.blurEventsBound = true;\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t\t\n\t\t\tthis.blurCallback = callback;\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_escapeCheck(e){\n\t\tif(e.keyCode == 27){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\t\n\tblockHide(){\n\t\tthis.hideable = false;\n\t}\n\t\n\trestoreHide(){\n\t\tthis.hideable = true;\n\t}\n\t\n\thide(silent = false){\n\t\tif(this.visible && this.hideable){\n\t\t\tif(this.blurable && this.blurEventsBound){\n\t\t\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\t\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\twindow.removeEventListener(\"resize\", this.blurEvent);\n\t\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n\t\t\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\n\n\t\t\t\tthis.blurEventsBound = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.childPopup){\n\t\t\t\tthis.childPopup.hide();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.childPopup = null;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.visible = false;\n\t\t\t\n\t\t\tif(this.blurCallback && !silent){\n\t\t\t\tthis.blurCallback();\n\t\t\t}\n\t\t\t\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\tchild(element){\n\t\tif(this.childPopup){\n\t\t\tthis.childPopup.hide();\n\t\t}\n\t\t\n\t\tthis.childPopup = new Popup(this.table, element, this);\n\t\t\n\t\treturn this.childPopup;\n\t}\n}","import CoreFeature from './CoreFeature.js';\nimport Popup from './tools/Popup.js';\n\nclass Module extends CoreFeature{\n\t\n\tconstructor(table, name){\n\t\tsuper(table);\n\t\t\n\t\tthis._handler = null;\n\t}\n\t\n\tinitialize(){\n\t\t// setup module when table is initialized, to be overridden in module\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Options Registration ///////\n\t///////////////////////////////////\n\t\n\tregisterTableOption(key, value){\n\t\tthis.table.optionsList.register(key, value);\n\t}\n\t\n\tregisterColumnOption(key, value){\n\t\tthis.table.columnManager.optionsList.register(key, value);\n\t}\n\t\n\t///////////////////////////////////\n\t/// Public Function Registration ///\n\t///////////////////////////////////\n\t\n\tregisterTableFunction(name, func){\n\t\tif(typeof this.table[name] === \"undefined\"){\n\t\t\tthis.table[name] = (...args) => {\n\t\t\t\tthis.table.initGuard(name);\n\t\t\t\t\n\t\t\t\treturn func(...args);\n\t\t\t};\n\t\t}else{\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name);\n\t\t}\n\t}\n\t\n\tregisterComponentFunction(component, func, handler){\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Data Pipeline //////////\n\t///////////////////////////////////\n\t\n\tregisterDataHandler(handler, priority){\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tregisterDisplayHandler(handler, priority){\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tdisplayRows(adjust){\n\t\tvar index = this.table.rowManager.displayRows.length - 1, \n\t\tlookupIndex;\n\t\t\n\t\tif(this._handler){\n\t\t\tlookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => {\n\t\t\t\treturn item.handler === this._handler;\n\t\t\t});\n\n\t\t\tif(lookupIndex > -1){\n\t\t\t\tindex = lookupIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(adjust){\n\t\t\tindex = index + adjust;\n\t\t}\n\n\t\tif(this._handler){\n\t\t\tif(index > -1){\n\t\t\t\treturn this.table.rowManager.getDisplayRows(index);\n\t\t\t}else{\n\t\t\t\treturn this.activeRows();\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\tactiveRows(){\n\t\treturn this.table.rowManager.activeRows;\n\t}\n\t\n\trefreshData(renderInPosition, handler){\n\t\tif(!handler){\n\t\t\thandler = this._handler;\n\t\t}\n\t\t\n\t\tif(handler){\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Footer Management ////////\n\t///////////////////////////////////\n\t\n\tfooterAppend(element){\n\t\treturn this.table.footerManager.append(element);\n\t}\n\t\n\tfooterPrepend(element){\n\t\treturn this.table.footerManager.prepend(element);\n\t}\n\t\n\tfooterRemove(element){\n\t\treturn this.table.footerManager.remove(element);\n\t} \n\t\n\t///////////////////////////////////\n\t//////// Popups Management ////////\n\t///////////////////////////////////\n\t\n\tpopup(menuEl, menuContainer){\n\t\treturn new Popup(this.table, menuEl, menuContainer);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Alert Management ////////\n\t///////////////////////////////////\n\t\n\talert(content, type){\n\t\treturn this.table.alertManager.alert(content, type);\n\t}\n\t\n\tclearAlert(){\n\t\treturn this.table.alertManager.clear();\n\t}\n\t\n}\n\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\nexport default function(columns, forced){\n\tcolumns.forEach(function(column){\n\t\tcolumn.reinitializeWidth();\n\t});\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","import fitData from './modes/fitData.js';\nimport fitDataGeneral from './modes/fitDataGeneral.js';\nimport fitDataStretch from './modes/fitDataStretch.js';\nimport fitColumns from './modes/fitColumns.js';\n\nexport default {\n\tfitData:fitData,\n\tfitDataFill:fitDataGeneral,\n\tfitDataTable:fitDataGeneral,\n\tfitDataStretch:fitDataStretch,\n\tfitColumns:fitColumns ,\n};","//resize columns to fit data they contain\nexport default function(columns, forced){\n\tif(forced){\n\t\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\n\t}\n\t\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","//resize columns to fit data the contain and stretch last column to fill table\nexport default function(columns, forced){\n\tvar colsWidth = 0,\n\ttableWidth = this.table.rowManager.element.clientWidth,\n\tgap = 0,\n\tlastCol = false;\n\n\tcolumns.forEach((column, i) => {\n\t\tif(!column.widthFixed){\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\n\t\t\tlastCol = column;\n\t\t}\n\n\t\tif(column.visible){\n\t\t\tcolsWidth += column.getWidth();\n\t\t}\n\t});\n\n\tif(lastCol){\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tlastCol.setWidth(0);\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\tif(gap > 0){\n\t\t\tlastCol.setWidth(gap);\n\t\t}else{\n\t\t\tlastCol.reinitializeWidth();\n\t\t}\n\t}else{\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t}\n}","//resize columns to fit\nexport default function(columns, forced){\n\tvar totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width\n\tvar fixedWidth = 0; //total width of columns with a defined width\n\tvar flexWidth = 0; //total width available to flexible columns\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks across all columns\n\tvar flexColWidth = 0; //desired width of flexible columns\n\tvar flexColumns = []; //array of flexible width columns\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks across all columns\n\tvar overflowWidth = 0; //horizontal overflow width\n\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\tfunction calcWidth(width){\n\t\tvar colWidth;\n\n\t\tif(typeof(width) == \"string\"){\n\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\n\t\t\t}else{\n\t\t\t\tcolWidth = parseInt(width);\n\t\t\t}\n\t\t}else{\n\t\t\tcolWidth = width;\n\t\t}\n\n\t\treturn colWidth;\n\t}\n\n\t//ensure columns resize to take up the correct amount of space\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\n\t\tvar oversizeCols = [],\n\t\toversizeSpace = 0,\n\t\tremainingSpace = 0,\n\t\tnextColWidth = 0,\n\t\tremainingFlexGrowUnits = flexGrowUnits,\n\t\tgap = 0,\n\t\tchangeUnits = 0,\n\t\tundersizeCols = [];\n\n\t\tfunction calcGrow(col){\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\n\t\t}\n\n\t\tfunction calcShrink(col){\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)));\n\t\t}\n\n\t\tcolumns.forEach(function(col, i){\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\t\t\tif(col.column.minWidth >= width){\n\t\t\t\toversizeCols.push(col);\n\t\t\t}else{\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\n\t\t\t\t\tcol.width = col.column.maxWidth;\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\n\t\t\t\t\tif(remainingFlexGrowUnits){\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tundersizeCols.push(col);\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(oversizeCols.length){\n\t\t\toversizeCols.forEach(function(col){\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t});\n\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\n\n\t\t\tgap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t}else{\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\n\n\t\t\tundersizeCols.forEach(function(column){\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t});\n\t\t}\n\n\t\treturn gap;\n\t}\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n\n\t//adjust for vertical scrollbar if present\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t}\n\n\tcolumns.forEach(function(column){\n\t\tvar width, minWidth, colWidth;\n\n\t\tif(column.visible){\n\n\t\t\twidth = column.definition.width;\n\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\tif(width){\n\n\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\tif(column.definition.widthShrink){\n\t\t\t\t\tfixedShrinkColumns.push({\n\t\t\t\t\t\tcolumn:column,\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\n\t\t\t\t\t});\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tflexColumns.push({\n\t\t\t\t\tcolumn:column,\n\t\t\t\t\twidth:0,\n\t\t\t\t});\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t}\n\t\t}\n\t});\n\n\t//calculate available space\n\tflexWidth = totalWidth - fixedWidth;\n\n\t//calculate correct column size\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t//generate column widths\n\tgapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t//increase width of last column to account for rounding errors\n\tif(flexColumns.length && gapFill > 0){\n\t\tflexColumns[flexColumns.length-1].width += gapFill;\n\t}\n\n\t//calculate space for columns to be shrunk into\n\tflexColumns.forEach(function(col){\n\t\tflexWidth -= col.width;\n\t});\n\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t//shrink oversize columns if there is no available space\n\tif(overflowWidth > 0 && flexShrinkUnits){\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t}\n\n\t//decrease width of last column to account for rounding errors\n\tif(gapFill && fixedShrinkColumns.length){\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\n\t}\n\n\tflexColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n\n\tfixedShrinkColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n}\n","import Module from '../../core/Module.js';\n\nimport defaultModes from './defaults/modes.js';\n\nclass Layout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table, \"layout\");\n\n\t\tthis.mode = null;\n\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\n\n\t\tthis.registerColumnOption(\"widthGrow\");\n\t\tthis.registerColumnOption(\"widthShrink\");\n\t}\n\n\t//initialize layout system\n\tinitialize(){\n\t\tvar layout = this.table.options.layout;\n\n\t\tif(Layout.modes[layout]){\n\t\t\tthis.mode = layout;\n\t\t}else{\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\t\t\tthis.mode = 'fitData';\n\t\t}\n\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.widthGrow){\n\t\t\tcolumn.definition.widthGrow = Number(column.definition.widthGrow);\n\t\t}\n\t\tif(column.definition.widthShrink){\n\t\t\tcolumn.definition.widthShrink = Number(column.definition.widthShrink);\n\t\t}\n\t}\n\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\n\t//trigger table layout\n\tlayout(dataChanged){\n\t\tthis.dispatch(\"layout-refreshing\");\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\n\t\tthis.dispatch(\"layout-refreshed\");\n\t}\n}\n\nLayout.moduleName = \"layout\";\n\n//load defaults\nLayout.modes = defaultModes;\n\nexport default Layout;","import Module from '../../core/Module.js';\n\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultLangs from './defaults/langs.js';\n\nclass Localize extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.locale = \"default\"; //current locale\n\t\tthis.lang = false; //current language\n\t\tthis.bindings = {}; //update events to call when locale is changed\n\t\tthis.langList = {};\n\n\t\tthis.registerTableOption(\"locale\", false); //current system language\n\t\tthis.registerTableOption(\"langs\", {});\n\t}\n\n\tinitialize(){\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\n\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\n\t\t}\n\n\t\tfor(let locale in this.table.options.langs){\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\n\t\t}\n\n\t\tthis.setLocale(this.table.options.locale);\n\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\n\t}\n\n\t//set header placeholder\n\tsetHeaderFilterPlaceholder(placeholder){\n\t\tthis.langList.default.headerFilters.default = placeholder;\n\t}\n\n\t//setup a lang description object\n\tinstallLang(locale, lang){\n\t\tif(this.langList[locale]){\n\t\t\tthis._setLangProp(this.langList[locale], lang);\n\t\t}else{\n\t\t\tthis.langList[locale] = lang;\n\t\t}\n\t}\n\n\t_setLangProp(lang, values){\n\t\tfor(let key in values){\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\n\t\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t\t}else{\n\t\t\t\tlang[key] = values[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t//set current locale\n\tsetLocale(desiredLocale){\n\t\tdesiredLocale = desiredLocale || \"default\";\n\n\t\t//fill in any matching language values\n\t\tfunction traverseLang(trans, path){\n\t\t\tfor(var prop in trans){\n\t\t\t\tif(typeof trans[prop] == \"object\"){\n\t\t\t\t\tif(!path[prop]){\n\t\t\t\t\t\tpath[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t\t}else{\n\t\t\t\t\tpath[prop] = trans[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//determining correct locale to load\n\t\tif(desiredLocale === true && navigator.language){\n\t\t\t//get local from system\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\n\t\t}\n\n\t\tif(desiredLocale){\n\t\t\t//if locale is not set, check for matching top level locale else use default\n\t\t\tif(!this.langList[desiredLocale]){\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\t\tif(this.langList[prefix]){\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\t\tdesiredLocale = prefix;\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\t\tdesiredLocale = \"default\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.locale = desiredLocale;\n\n\t\t//load default lang template\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\n\n\t\tif(desiredLocale != \"default\"){\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\n\t\t}\n\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\n\n\t\tthis._executeBindings();\n\t}\n\n\t//get current locale\n\tgetLocale(locale){\n\t\treturn this.locale;\n\t}\n\n\t//get lang object for given local or current if none provided\n\tgetLang(locale){\n\t\treturn locale ? this.langList[locale] : this.lang;\n\t}\n\n\t//get text for current locale\n\tgetText(path, value){\n\t\tvar fillPath = value ? path + \"|\" + value : path,\n\t\tpathArray = fillPath.split(\"|\"),\n\t\ttext = this._getLangElement(pathArray, this.locale);\n\n\t\t// if(text === false){\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t\t// }\n\n\t\treturn text || \"\";\n\t}\n\n\t//traverse langs object and find localized copy\n\t_getLangElement(path, locale){\n\t\tvar root = this.lang;\n\n\t\tpath.forEach(function(level){\n\t\t\tvar rootPath;\n\n\t\t\tif(root){\n\t\t\t\trootPath = root[level];\n\n\t\t\t\tif(typeof rootPath != \"undefined\"){\n\t\t\t\t\troot = rootPath;\n\t\t\t\t}else{\n\t\t\t\t\troot = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn root;\n\t}\n\n\t//set update binding\n\tbind(path, callback){\n\t\tif(!this.bindings[path]){\n\t\t\tthis.bindings[path] = [];\n\t\t}\n\n\t\tthis.bindings[path].push(callback);\n\n\t\tcallback(this.getText(path), this.lang);\n\t}\n\n\t//iterate through bindings and trigger updates\n\t_executeBindings(){\n\t\tfor(let path in this.bindings){\n\t\t\tthis.bindings[path].forEach((binding) => {\n\t\t\t\tbinding(this.getText(path), this.lang);\n\t\t\t});\n\t\t}\n\t}\n}\n\nLocalize.moduleName = \"localize\";\n\n//load defaults\nLocalize.langs = defaultLangs;\n\nexport default Localize;","export default {\n\t\"default\":{ //hold default locale text\n\t\t\"groups\":{\n\t\t\t\"item\":\"item\",\n\t\t\t\"items\":\"items\",\n\t\t},\n\t\t\"columns\":{\n\t\t},\n\t\t\"data\":{\n\t\t\t\"loading\":\"Loading\",\n\t\t\t\"error\":\"Error\",\n\t\t},\n\t\t\"pagination\":{\n\t\t\t\"page_size\":\"Page Size\",\n\t\t\t\"page_title\":\"Show Page\",\n\t\t\t\"first\":\"First\",\n\t\t\t\"first_title\":\"First Page\",\n\t\t\t\"last\":\"Last\",\n\t\t\t\"last_title\":\"Last Page\",\n\t\t\t\"prev\":\"Prev\",\n\t\t\t\"prev_title\":\"Prev Page\",\n\t\t\t\"next\":\"Next\",\n\t\t\t\"next_title\":\"Next Page\",\n\t\t\t\"all\":\"All\",\n\t\t\t\"counter\":{\n\t\t\t\t\"showing\": \"Showing\",\n\t\t\t\t\"of\": \"of\",\n\t\t\t\t\"rows\": \"rows\",\n\t\t\t\t\"pages\": \"pages\",\n\t\t\t}\n\t\t},\n\t\t\"headerFilters\":{\n\t\t\t\"default\":\"filter column...\",\n\t\t\t\"columns\":{}\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\nimport TableRegistry from '../../core/tools/TableRegistry.js';\n\nclass Comms extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\n\tinitialize(){\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\n\t}\n\n\tgetConnections(selectors){\n\t\tvar connections = [],\n\t\tconnection;\n\n\t\tconnection = TableRegistry.lookupTable(selectors);\n\n\t\tconnection.forEach((con) =>{\n\t\t\tif(this.table !== con){\n\t\t\t\tconnections.push(con);\n\t\t\t}\n\t\t});\n\n\t\treturn connections;\n\t}\n\n\tsend(selectors, module, action, data){\n\t\tvar connections = this.getConnections(selectors);\n\n\t\tconnections.forEach((connection) => {\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\n\t\t});\n\n\t\tif(!connections.length && selectors){\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t\t}\n\t}\n\n\treceive(table, module, action, data){\n\t\tif(this.table.modExists(module)){\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t\t}else{\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t\t}\n\t}\n}\n\nComms.moduleName = \"comms\";\n\nexport default Comms;","import * as coreModules from '../modules/core.js';\nimport TableRegistry from './TableRegistry.js';\n\nexport default class ModuleBinder {\n\t\n\tconstructor(tabulator, modules){\n\t\tthis.bindStaticFunctionality(tabulator);\n\t\tthis.bindModules(tabulator, coreModules, true);\n\t\t\n\t\tif(modules){\n\t\t\tthis.bindModules(tabulator, modules);\n\t\t}\n\t}\n\t\n\tbindStaticFunctionality(tabulator){\n\t\ttabulator.moduleBindings = {};\n\t\t\n\t\ttabulator.extendModule = function(name, property, values){\n\t\t\tif(tabulator.moduleBindings[name]){\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\n\t\t\t\t\n\t\t\t\tif(source){\n\t\t\t\t\tif(typeof values == \"object\"){\n\t\t\t\t\t\tfor(let key in values){\n\t\t\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t\t\t}\n\t\t};\n\t\t\n\t\ttabulator.registerModule = function(modules){\n\t\t\tif(!Array.isArray(modules)){\n\t\t\t\tmodules = [modules];\n\t\t\t}\n\t\t\t\n\t\t\tmodules.forEach((mod) => {\n\t\t\t\ttabulator.registerModuleBinding(mod);\n\t\t\t});\n\t\t};\n\t\t\n\t\ttabulator.registerModuleBinding = function(mod){\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\n\t\t};\n\t\t\n\t\ttabulator.findTable = function(query){\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\n\t\t};\n\t\t\n\t\t//ensure that module are bound to instantiated function\n\t\ttabulator.prototype.bindModules = function(){\n\t\t\tvar orderedStartMods = [],\n\t\t\torderedEndMods = [],\n\t\t\tunOrderedMods = [];\n\t\t\t\n\t\t\tthis.modules = {};\n\t\t\t\n\t\t\tfor(var name in tabulator.moduleBindings){\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\n\t\t\t\tlet module = new mod(this);\n\t\t\t\t\n\t\t\t\tthis.modules[name] = module;\n\t\t\t\t\n\t\t\t\tif(mod.prototype.moduleCore){\n\t\t\t\t\tthis.modulesCore.push(module);\n\t\t\t\t}else{\n\t\t\t\t\tif(mod.moduleInitOrder){\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\n\t\t\t\t\t\t\torderedStartMods.push(module);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\torderedEndMods.push(module);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}else{\n\t\t\t\t\t\tunOrderedMods.push(module);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\t\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\n\t\t};\n\t}\n\t\n\tbindModules(tabulator, modules, core){\n\t\tvar mods = Object.values(modules);\n\t\t\n\t\tif(core){\n\t\t\tmods.forEach((mod) => {\n\t\t\t\tmod.prototype.moduleCore = true;\n\t\t\t});\n\t\t}\n\t\t\n\t\ttabulator.registerModule(mods);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class Alert extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.element = this._createAlertElement();\n\t\tthis.msgElement = this._createMsgElement();\n\t\tthis.type = null;\n \n\t\tthis.element.appendChild(this.msgElement);\n\t}\n \n\t_createAlertElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert\");\n\t\treturn el;\n\t}\n \n\t_createMsgElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert-msg\");\n\t\tel.setAttribute(\"role\", \"alert\");\n\t\treturn el;\n\t}\n \n\t_typeClass(){\n\t\treturn \"tabulator-alert-state-\" + this.type;\n\t}\n \n\talert(content, type = \"msg\"){\n\t\tif(content){\n\t\t\tthis.clear();\n\n\t\t\tthis.dispatch(\"alert-show\", type);\n \n\t\t\tthis.type = type;\n \n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\n \n\t\t\tthis.msgElement.classList.add(this._typeClass());\n \n\t\t\tif(typeof content === \"function\"){\n\t\t\t\tcontent = content();\n\t\t\t}\n \n\t\t\tif(content instanceof HTMLElement){\n\t\t\t\tthis.msgElement.appendChild(content);\n\t\t\t}else{\n\t\t\t\tthis.msgElement.innerHTML = content;\n\t\t\t}\n \n\t\t\tthis.table.element.appendChild(this.element);\n\t\t}\n\t}\n \n\tclear(){\n\t\tthis.dispatch(\"alert-hide\", this.type);\n\n\t\tif(this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n \n\t\tthis.msgElement.classList.remove(this._typeClass());\n\t}\n}","'use strict';\n\nimport defaultOptions from './defaults/options.js';\n\nimport ColumnManager from './ColumnManager.js';\nimport RowManager from './RowManager.js';\nimport FooterManager from './FooterManager.js';\n\nimport InteractionMonitor from './tools/InteractionMonitor.js';\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\nimport DataLoader from './tools/DataLoader.js';\n\nimport ExternalEventBus from './tools/ExternalEventBus.js';\nimport InternalEventBus from './tools/InternalEventBus.js';\n\nimport DeprecationAdvisor from './tools/DeprecationAdvisor.js';\n\nimport TableRegistry from './tools/TableRegistry.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nimport OptionsList from './tools/OptionsList.js';\n\nimport Alert from './tools/Alert.js';\n\nclass Tabulator {\n\t\n\tconstructor(element, options){\n\t\t\n\t\tthis.options = {};\n\t\t\n\t\tthis.columnManager = null; // hold Column Manager\n\t\tthis.rowManager = null; //hold Row Manager\n\t\tthis.footerManager = null; //holder Footer Manager\n\t\tthis.alertManager = null; //hold Alert Manager\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\n\t\tthis.externalEvents = null; //handle external event messaging\n\t\tthis.eventBus = null; //handle internal event messaging\n\t\tthis.interactionMonitor = false; //track user interaction\n\t\tthis.browser = \"\"; //hold current browser type\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\n\t\tthis.rtl = false; //check if the table is in RTL mode\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\n\t\t\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\n\t\tthis.dataLoader = false; //bind component functions\n\t\t\n\t\tthis.modules = {}; //hold all modules bound to this table\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\n\t\t\n\t\tthis.deprecationAdvisor = new DeprecationAdvisor(this);\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.destroyed = false;\n\t\t\n\t\tif(this.initializeElement(element)){\n\t\t\t\n\t\t\tthis.initializeCoreSystems(options);\n\t\t\t\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._create();\n\t\t\t});\n\t\t}\n\t\t\n\t\tTableRegistry.register(this); //register table for inter-device communication\n\t}\n\t\n\tinitializeElement(element){\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\n\t\t\tthis.element = element;\n\t\t\treturn true;\n\t\t}else if(typeof element === \"string\"){\n\t\t\tthis.element = document.querySelector(element);\n\t\t\t\n\t\t\tif(this.element){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tinitializeCoreSystems(options){\n\t\tthis.columnManager = new ColumnManager(this);\n\t\tthis.rowManager = new RowManager(this);\n\t\tthis.footerManager = new FooterManager(this);\n\t\tthis.dataLoader = new DataLoader(this);\n\t\tthis.alertManager = new Alert(this);\n\t\t\n\t\tthis.bindModules();\n\t\t\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options);\n\t\t\n\t\tthis._clearObjectPointers();\n\t\t\n\t\tthis._mapDeprecatedFunctionality();\n\t\t\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\n\t\t\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\n\t\t\n\t\tthis.dataLoader.initialize();\n\t\t// this.columnManager.initialize();\n\t\t// this.rowManager.initialize();\n\t\tthis.footerManager.initialize();\n\t}\n\t\n\t//convert deprecated functionality to new functions\n\t_mapDeprecatedFunctionality(){\n\t\t//all previously deprecated functionality removed in the 5.0 release\n\t}\n\t\n\t_clearSelection(){\n\t\t\n\t\tthis.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tif (window.getSelection) {\n\t\t\tif (window.getSelection().empty) { // Chrome\n\t\t\t\twindow.getSelection().empty();\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t} else if (document.selection) { // IE?\n\t\t\tdocument.selection.empty();\n\t\t}\n\t\t\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\n\t}\n\t\n\t//create table\n\t_create(){\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\n\t\tthis.eventBus.dispatch(\"table-building\");\n\t\t\n\t\tthis._rtlCheck();\n\t\t\n\t\tthis._buildElement();\n\t\t\n\t\tthis._initializeTable();\n\t\t\n\t\tthis._loadInitialData();\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\n\t}\n\t\n\t_rtlCheck(){\n\t\tvar style = window.getComputedStyle(this.element);\n\t\t\n\t\tswitch(this.options.textDirection){\n\t\t\tcase\"auto\":\n\t\t\t\tif(style.direction !== \"rtl\"){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"rtl\":\n\t\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\t\tthis.rtl = true;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"ltr\":\n\t\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis.rtl = false;\n\t\t}\n\t}\n\t\n\t//clear pointers to objects in default config object\n\t_clearObjectPointers(){\n\t\tthis.options.columns = this.options.columns.slice(0);\n\t\t\n\t\tif(Array.isArray(this.options.data) && !this.options.reactiveData){\n\t\t\tthis.options.data = this.options.data.slice(0);\n\t\t}\n\t}\n\t\n\t//build tabulator element\n\t_buildElement(){\n\t\tvar element = this.element,\n\t\toptions = this.options,\n\t\tnewElement;\n\t\t\n\t\tif(element.tagName === \"TABLE\"){\n\t\t\tthis.originalElement = this.element;\n\t\t\tnewElement = document.createElement(\"div\");\n\t\t\t\n\t\t\t//transfer attributes to new element\n\t\t\tvar attributes = element.attributes;\n\t\t\t\n\t\t\t// loop through attributes and apply them on div\n\t\t\tfor(var i in attributes){\n\t\t\t\tif(typeof attributes[i] == \"object\"){\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// replace table with div element\n\t\t\telement.parentNode.replaceChild(newElement, element);\n\t\t\t\n\t\t\tthis.element = element = newElement;\n\t\t}\n\t\t\n\t\telement.classList.add(\"tabulator\");\n\t\telement.setAttribute(\"role\", \"grid\");\n\t\t\n\t\t//empty element\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\t//set table height\n\t\tif(options.height){\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\t\telement.style.height = options.height;\n\t\t}\n\t\t\n\t\t//set table min height\n\t\tif(options.minHeight !== false){\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\t\telement.style.minHeight = options.minHeight;\n\t\t}\n\t\t\n\t\t//set table maxHeight\n\t\tif(options.maxHeight !== false){\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\t\telement.style.maxHeight = options.maxHeight;\n\t\t}\n\t}\n\t\n\t//initialize core systems and modules\n\t_initializeTable(){\n\t\tvar element = this.element,\n\t\toptions = this.options;\n\t\t\n\t\tthis.interactionMonitor.initialize();\n\t\t\n\t\tthis.columnManager.initialize();\n\t\tthis.rowManager.initialize();\n\t\t\n\t\tthis._detectBrowser();\n\t\t\n\t\t//initialize core modules\n\t\tthis.modulesCore.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\t//build table elements\n\t\telement.appendChild(this.columnManager.getElement());\n\t\telement.appendChild(this.rowManager.getElement());\n\t\t\n\t\tif(options.footerElement){\n\t\t\tthis.footerManager.activate();\n\t\t}\n\t\t\n\t\tif(options.autoColumns && options.data){\n\t\t\t\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t\t}\n\t\t\n\t\t//initialize regular modules\n\t\tthis.modulesRegular.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\tthis.columnManager.setColumns(options.columns);\n\t\t\n\t\tthis.eventBus.dispatch(\"table-built\");\n\t}\n\t\n\t_loadInitialData(){\n\t\tthis.dataLoader.load(this.options.data);\n\t\tthis.columnManager.verticalAlignHeaders();\n\t}\n\t\n\t//deconstructor\n\tdestroy(){\n\t\tvar element = this.element;\n\t\t\n\t\tthis.destroyed = true;\n\t\t\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\n\t\t\n\t\tthis.eventBus.dispatch(\"table-destroy\");\n\t\t\n\t\t//clear row data\n\t\tthis.rowManager.destroy();\n\t\t\n\t\t//clear DOM\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\telement.classList.remove(\"tabulator\");\n\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\n\t}\n\t\n\t_detectBrowser(){\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\n\t\t\n\t\tif(ua.indexOf(\"Trident\") > -1){\n\t\t\tthis.browser = \"ie\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\n\t\t\tthis.browser = \"edge\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\n\t\t\tthis.browser = \"firefox\";\n\t\t\tthis.browserSlow = false;\n\t\t}else if(ua.indexOf(\"Mac OS\") > -1){\n\t\t\tthis.browser = \"safari\";\n\t\t\tthis.browserSlow = false;\n\t\t}else{\n\t\t\tthis.browser = \"other\";\n\t\t\tthis.browserSlow = false;\n\t\t}\n\t\t\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4));\n\t}\n\t\n\tinitGuard(func, msg){\n\t\tvar stack, line;\n\t\t\n\t\tif(this.options.debugInitialization && !this.initialized){\n\t\t\tif(!func){\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\n\t\t\t\t\n\t\t\t\tif(line[0] == \" \"){\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\n\t\t\t\t}else{\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\n\t\t}\n\t\t\n\t\treturn this.initialized;\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\t//block table redrawing\n\tblockRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\n\t\t\n\t\tthis.rowManager.blockRedraw();\n\t\tthis.columnManager.blockRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\n\n\t\tthis.rowManager.restoreRedraw();\n\t\tthis.columnManager.restoreRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\n\t}\n\t\n\t//load data\n\tsetData(data, params, config){\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, false);\n\t}\n\t\n\t//clear data\n\tclearData(){\n\t\tthis.initGuard();\n\t\t\n\t\tthis.dataLoader.blockActiveLoad();\n\t\tthis.rowManager.clearData();\n\t}\n\t\n\t//get table data array\n\tgetData(active){\n\t\treturn this.rowManager.getData(active);\n\t}\n\t\n\t//get table data array count\n\tgetDataCount(active){\n\t\treturn this.rowManager.getDataCount(active);\n\t}\n\t\n\t//replace data, keeping table in position with same sort\n\treplaceData(data, params, config){\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, true, true);\n\t}\n\t\n\t//update table data\n\tupdateData(data){\n\t\tvar responses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\tresponses++;\n\t\t\t\t\t\t\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\t\treject(\"Update Error - Unable to update row\", item, e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\treject(\"Update Error - Unable to find row\", item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\taddData(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data){\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\n\t\t\t\t\t.then((rows) => {\n\t\t\t\t\t\tvar output = [];\n\t\t\t\t\t\n\t\t\t\t\t\trows.forEach(function(row){\n\t\t\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\tresolve(output);\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//update table data\n\tupdateOrAddData(data){\n\t\tvar rows = [],\n\t\tresponses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tresponses++;\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.rowManager.addRows(item)\n\t\t\t\t\t\t\t.then((newRows)=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//get row object\n\tgetRow(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//get row object\n\tgetRowFromPosition(position){\n\t\tvar row = this.rowManager.getRowFromPosition(position);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//delete row from table\n\tdeleteRow(index){\n\t\tvar foundRows = [];\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(!Array.isArray(index)){\n\t\t\tindex = [index];\n\t\t}\n\t\t\n\t\t//find matching rows\n\t\tfor(let item of index){\n\t\t\tlet row = this.rowManager.findRow(item, true);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\tfoundRows.push(row);\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort((a, b) => {\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\t\t\n\t\t//delete rows\n\t\tfoundRows.forEach((row) =>{\n\t\t\trow.delete();\n\t\t});\n\t\t\n\t\tthis.rowManager.reRenderInPosition();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\t//add row to table\n\taddRow(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\treturn this.rowManager.addRows(data, pos, index, true)\n\t\t\t.then((rows)=>{\n\t\t\t\treturn rows[0].getComponent();\n\t\t\t});\n\t}\n\t\n\t//update a row if it exists otherwise create it\n\tupdateOrAddRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn row.getComponent();\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn this.rowManager.addRows(data)\n\t\t\t\t.then((rows)=>{\n\t\t\t\t\treturn rows[0].getComponent();\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\t//update row data\n\tupdateRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\n\t\t}\n\t}\n\t\n\t//scroll to row in DOM\n\tscrollToRow(index, position, ifVisible){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible);\n\t\t}else{\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\n\t\t}\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tvar fromRow = this.rowManager.findRow(from);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromRow){\n\t\t\tfromRow.moveToRow(to, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t\t}\n\t}\n\t\n\tgetRows(active){\n\t\treturn this.rowManager.getComponents(active);\t\n\t}\n\t\n\t//get position of row in table\n\tgetRowPosition(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getPosition();\n\t\t}else{\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t/////////////// Column Functions ///////////////\n\tsetColumns(definition){\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\n\t\t\n\t\tthis.columnManager.setColumns(definition);\n\t}\n\t\n\tgetColumns(structured){\n\t\treturn this.columnManager.getComponents(structured);\n\t}\n\t\n\tgetColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tif(column){\n\t\t\treturn column.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tgetColumnDefinitions(){\n\t\treturn this.columnManager.getDefinitionTree();\n\t}\n\t\n\tshowColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.show();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\thideColumn(field){\n\t\tvar column = this.columnManager.findColumn(field); \n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.hide();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\ttoggleColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tif(column.visible){\n\t\t\t\tcolumn.hide();\n\t\t\t}else{\n\t\t\t\tcolumn.show();\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\taddColumn(definition, before, field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.columnManager.addColumn(definition, before, column)\n\t\t\t.then((column) => {\n\t\t\t\treturn column.getComponent();\n\t\t\t});\n\t}\n\t\n\tdeleteColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.delete();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tupdateColumnDefinition(field, definition){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.updateDefinition(definition);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tvar fromColumn = this.columnManager.findColumn(from),\n\t\ttoColumn = this.columnManager.findColumn(to);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromColumn){\n\t\t\tif(toColumn){\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t\t}\n\t}\n\t\n\t//scroll to column in DOM\n\tscrollToColumn(field, position, ifVisible){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this.columnManager.findColumn(field);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//////////// General Public Functions ////////////\n\t//redraw list without updating data\n\tredraw(force){\n\t\tthis.initGuard();\n\n\t\tthis.columnManager.redraw(force);\n\t\tthis.rowManager.redraw(force);\n\t}\n\t\n\tsetHeight(height){\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.initializeRenderer();\n\t\tthis.rowManager.redraw(true);\n\t}\n\t\n\t//////////////////// Event Bus ///////////////////\n\t\n\ton(key, callback){\n\t\tthis.externalEvents.subscribe(key, callback);\n\t}\n\t\n\toff(key, callback){\n\t\tthis.externalEvents.unsubscribe(key, callback);\n\t}\n\t\n\tdispatchEvent(){\n\t\tvar args = Array.from(arguments);\n\t\targs.shift();\n\t\t\n\t\tthis.externalEvents.dispatch(...arguments);\n\t}\n\n\t//////////////////// Alerts ///////////////////\n\n\talert(contents, type){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.alert(contents, type);\n\t}\n\n\tclearAlert(){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.clear();\n\t}\n\t\n\t////////////// Extension Management //////////////\n\tmodExists(plugin, required){\n\t\tif(this.modules[plugin]){\n\t\t\treturn true;\n\t\t}else{\n\t\t\tif(required){\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule(key){\n\t\tvar mod = this.modules[key];\n\t\t\n\t\tif(!mod){\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\n\t\t}\n\t\t\n\t\treturn mod;\n\t}\n}\n\n//default setup options\nTabulator.defaultOptions = defaultOptions;\n\n//bind modules and static functionality\nnew ModuleBinder(Tabulator);\n\nexport default Tabulator;\n","export default {\n\n\tdebugEventsExternal:false, //flag to console log events\n\tdebugEventsInternal:false, //flag to console log events\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\n\tdebugInvalidComponentFuncs:true, //allow toggling of invalid component warnings\n\tdebugInitialization:true, //allow toggling of pre initialization function call warnings\n\tdebugDeprecation:true, //allow toggling of deprecation warnings\n\n\theight:false, //height of tabulator\n\tminHeight:false, //minimum height of tabulator\n\tmaxHeight:false, //maximum height of tabulator\n\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\n\n\tpopupContainer:false,\n\n\tcolumns:[],//store for colum header info\n\tcolumnDefaults:{}, //store column default props\n\n\tdata:false, //default starting data\n\n\tautoColumns:false, //build columns from data row structure\n\tautoColumnsDefinitions:false,\n\n\tnestedFieldSeparator:\".\", //separator for nested data\n\n\tfooterElement:false, //hold footer element\n\n\tindex:\"id\", //filed for row index\n\n\ttextDirection:\"auto\",\n\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\n\n\theaderVisible:true, //hide header\n\n\trenderVertical:\"virtual\",\n\trenderHorizontal:\"basic\",\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\n\n\tscrollToRowPosition:\"top\",\n\tscrollToRowIfVisible:true,\n\n\tscrollToColumnPosition:\"left\",\n\tscrollToColumnIfVisible:true,\n\n\trowFormatter:false,\n\trowFormatterPrint:null,\n\trowFormatterClipboard:null,\n\trowFormatterHtmlOutput:null,\n\n\trowHeight:null,\n\n\tplaceholder:false,\n\n\tdataLoader:true,\n\tdataLoaderLoading:false,\n\tdataLoaderError:false,\n\tdataLoaderErrorTimeout:3000,\n\n\tdataSendParams:{},\n\n\tdataReceiveParams:{},\n};\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultAccessors from './defaults/accessors.js';\n\nclass Accessor extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n\n\t\tthis.registerColumnOption(\"accessor\");\n\t\tthis.registerColumnOption(\"accessorParams\");\n\t\tthis.registerColumnOption(\"accessorData\");\n\t\tthis.registerColumnOption(\"accessorDataParams\");\n\t\tthis.registerColumnOption(\"accessorDownload\");\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\n\t\tthis.registerColumnOption(\"accessorClipboard\");\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\n\t\tthis.registerColumnOption(\"accessorPrint\");\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\n\t}\n\n\t//initialize column accessor\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\taccessor;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\taccessor:accessor,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.accessor = config;\n\t\t}\n\t}\n\n\tlookupAccessor(value){\n\t\tvar accessor = false;\n\n\t\t//set column accessor\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Accessor.accessors[value]){\n\t\t\t\t\taccessor = Accessor.accessors[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\taccessor = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn accessor;\n\t}\n\n\t//apply accessor to row\n\ttransformRow(row, type){\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\trowComponent = row.getComponent();\n\n\t\t//clone data object with deep copy to isolate internal data from returned result\n\t\tvar data = Helpers.deepClone(row.data || {});\n\n\t\tthis.table.columnManager.traverse(function(column){\n\t\t\tvar value, accessor, params, colComponent;\n\n\t\t\tif(column.modules.accessor){\n\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\t\tif(value != \"undefined\"){\n\t\t\t\t\t\tcolComponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n}\n\n//load defaults\nAccessor.moduleName = \"accessor\";\nAccessor.accessors = defaultAccessors;\n\nexport default Accessor;","export default {};","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nfunction serializeParams(params){\n\tvar output = generateParamsList(params),\n\tencoded = [];\n\n\toutput.forEach(function(item){\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t});\n\n\treturn encoded.join(\"&\");\n}\n\nexport default function(url, config, params){\n\tif(url){\n\t\tif(params && Object.keys(params).length){\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\n\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n}","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nexport default {\n\t\"json\":{\n\t\theaders:{\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tbody:function(url, config, params){\n\t\t\treturn JSON.stringify(params);\n\t\t},\n\t},\n\t\"form\":{\n\t\theaders:{\n\t\t},\n\t\tbody:function(url, config, params){\n\n\t\t\tvar output = generateParamsList(params),\n\t\t\tform = new FormData();\n\n\t\t\toutput.forEach(function(item){\n\t\t\t\tform.append(item.key, item.value);\n\t\t\t});\n\n\t\t\treturn form;\n\t\t},\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultConfig from './defaults/config.js';\nimport defaultURLGenerator from './defaults/urlGenerator.js';\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\n\nclass Ajax extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {}; //hold config object for ajax request\n\t\tthis.url = \"\"; //request URL\n\t\tthis.urlGenerator = false;\n\t\tthis.params = false; //request parameters\n\t\t\n\t\tthis.loaderPromise = false;\n\t\t\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\n\t\t\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\n\t\t\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\n\t}\n\t\n\t//initialize setup options\n\tinitialize(){\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\n\t\t\n\t\tif(this.table.options.ajaxURL){\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\n\t\t}\n\n\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\n\t\t\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\n\t}\n\t\n\trequestParams(data, config, silent, params){\n\t\tvar ajaxParams = this.table.options.ajaxParams;\n\t\t\n\t\tif(ajaxParams){\n\t\t\tif(typeof ajaxParams === \"function\"){\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\n\t\t\t}\n\t\t\t\n\t\t\tparams = Object.assign(Object.assign({}, ajaxParams), params);\n\t\t}\t\t\n\t\t\n\t\treturn params;\n\t}\n\t\n\trequestDataCheck(data, params, config, silent){\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\n\t}\n\t\n\trequestData(url, params, config, silent, previousData){\n\t\tvar ajaxConfig;\n\t\t\n\t\tif(!previousData && this.requestDataCheck(url)){\n\t\t\tif(url){\n\t\t\t\tthis.setUrl(url);\n\t\t\t}\n\t\t\t\n\t\t\tajaxConfig = this.generateConfig(config);\n\t\t\t\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\n\t\t}else{\n\t\t\treturn previousData;\n\t\t}\n\t}\n\t\n\tsetDefaultConfig(config = {}){\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\n\n\t\tif(typeof config == \"string\"){\n\t\t\tthis.config.method = config;\n\t\t}else{\n\t\t\tObject.assign(this.config, config);\n\t\t}\n\t}\n\t\n\t//load config object\n\tgenerateConfig(config = {}){\n\t\tvar ajaxConfig = Object.assign({}, this.config);\n\t\t\n\t\tif(typeof config == \"string\"){\n\t\t\tajaxConfig.method = config;\n\t\t}else{\n\t\t\tObject.assign(ajaxConfig, config);\n\t\t}\n\t\t\n\t\treturn ajaxConfig;\n\t}\n\t\n\t//set request url\n\tsetUrl(url){\n\t\tthis.url = url;\n\t}\n\t\n\t//get request url\n\tgetUrl(){\n\t\treturn this.url;\n\t}\n\t\n\t//send ajax request\n\tsendRequest(url, params, config){\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\n\t\t\treturn this.loaderPromise(url, config, params)\n\t\t\t\t.then((data)=>{\n\t\t\t\t\tif(this.table.options.ajaxResponse){\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n}\n\nAjax.moduleName = \"ajax\";\n\n//load defaults\nAjax.defaultConfig = defaultConfig;\nAjax.defaultURLGenerator = defaultURLGenerator;\nAjax.defaultLoaderPromise = defaultLoaderPromise;\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\n\nexport default Ajax;","export default {\n\tmethod: \"GET\",\n};","export default function(url, config, params){\n\tvar contentType;\n\n\treturn new Promise((resolve, reject) => {\n\t\t//set url\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\n\n\t\t//set body content if not GET request\n\t\tif(config.method.toUpperCase() != \"GET\"){\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\n\t\t\tif(contentType){\n\n\t\t\t\tfor(var key in contentType.headers){\n\t\t\t\t\tif(!config.headers){\n\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif(url){\n\t\t\t//configure headers\n\t\t\tif(typeof config.headers === \"undefined\"){\n\t\t\t\tconfig.headers = {};\n\t\t\t}\n\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\n\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t}\n\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\tif(typeof config.mode === \"undefined\"){\n\t\t\t\tconfig.mode = \"cors\";\n\t\t\t}\n\n\t\t\tif(config.mode == \"cors\"){\n\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\n\t\t\t\t\tconfig.headers[\"Origin\"] = window.location.origin;\n\t\t\t\t}\n \n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//send request\n\t\t\tfetch(url, config)\n\t\t\t\t.then((response)=>{\n\t\t\t\t\tif(response.ok) {\n\t\t\t\t\t\tresponse.json()\n\t\t\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\t}).catch((error)=>{\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error)=>{\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\tresolve([]);\n\t\t}\n\t});\n}","import Module from '../../core/Module.js';\n\nimport defaultPasteActions from './defaults/pasteActions.js';\nimport defaultPasteParsers from './defaults/pasteParsers.js';\n\nclass Clipboard extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = true;\n\t\tthis.pasteParser = function(){};\n\t\tthis.pasteAction = function(){};\n\t\tthis.customSelection = false;\n\t\tthis.rowRange = false;\n\t\tthis.blocked = true; //block copy actions not originating from this command\n\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRECATED - REMOVE in 5.0\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\n\n\t\tthis.registerColumnOption(\"clipboard\");\n\t\tthis.registerColumnOption(\"titleClipboard\");\n\t}\n\n\tinitialize(){\n\t\tthis.mode = this.table.options.clipboard;\n\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\t\tif(this.mode === true || this.mode === \"copy\"){\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\n\t\t\t\tvar plain, html, list;\n\n\t\t\t\tif(!this.blocked){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif(this.customSelection){\n\t\t\t\t\t\tplain = this.customSelection;\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\n\t\t\t\t\t\tlist = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\n\n\t\t\t\t\t\thtml = this.table.modules.export.generateHTMLTable(list);\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\n\n\t\t\t\t\tthis.reset();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(this.mode === true || this.mode === \"paste\"){\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\n\t\t\t\tthis.paste(e);\n\t\t\t});\n\t\t}\n\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\n\t}\n\n\treset(){\n\t\tthis.blocked = true;\n\t\tthis.customSelection = false;\n\t}\n\n\tgeneratePlainContent (list) {\n\t\tvar output = [];\n\n\t\tlist.forEach((row) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach((col) => {\n\t\t\t\tvar value = \"\";\n\n\t\t\t\tif(col){\n\n\t\t\t\t\tif(row.type === \"group\"){\n\t\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t\t}\n\n\t\t\t\t\tif(col.value === null){\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowData.push(value);\n\t\t\t});\n\n\t\t\toutput.push(rowData.join(\"\\t\"));\n\t\t});\n\n\t\treturn output.join(\"\\n\");\n\t}\n\n\tcopy (range, internal) {\n\t\tvar sel, textRange;\n\t\tthis.blocked = false;\n\t\tthis.customSelection = false;\n\t\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents(this.table.element);\n\t\t\t\tsel = window.getSelection();\n\n\t\t\t\tif (sel.toString() && internal) {\n\t\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t\t}\n\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(range);\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\t\ttextRange = document.body.createTextRange();\n\t\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\t\ttextRange.select();\n\t\t\t}\n\n\t\t\tdocument.execCommand('copy');\n\n\t\t\tif (sel) {\n\t\t\t\tsel.removeAllRanges();\n\t\t\t}\n\t\t}\n\t}\n\n\t//PASTE EVENT HANDLING\n\tsetPasteAction(action){\n\n\t\tswitch(typeof action){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\n\n\t\t\t\tif(!this.pasteAction){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteAction = action;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetPasteParser(parser){\n\t\tswitch(typeof parser){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\n\n\t\t\t\tif(!this.pasteParser){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteParser = parser;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpaste(e){\n\t\tvar data, rowData, rows;\n\n\t\tif(this.checkPasteOrigin(e)){\n\n\t\t\tdata = this.getPasteData(e);\n\n\t\t\trowData = this.pasteParser.call(this, data);\n\n\t\t\tif(rowData){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif(this.table.modExists(\"mutator\")){\n\t\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t\t}\n\n\t\t\t\trows = this.pasteAction.call(this, rowData);\n\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\n\t\t\t}\n\t\t}\n\t}\n\n\tmutateData(data){\n\t\tvar output = [];\n\n\t\tif(Array.isArray(data)){\n\t\t\tdata.forEach((row) => {\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t\t});\n\t\t}else{\n\t\t\toutput = data;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\n\tcheckPasteOrigin(e){\n\t\tvar valid = true;\n\t\tvar blocked = this.confirm(\"clipboard-paste\", [e]);\n\n\t\tif(blocked || ![\"DIV\", \"SPAN\"].includes(e.target.tagName)){\n\t\t\tvalid = false;\n\t\t}\n\n\t\treturn valid;\n\t}\n\n\tgetPasteData(e){\n\t\tvar data;\n\n\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\tdata = window.clipboardData.getData('Text');\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\t\tdata = e.clipboardData.getData('text/plain');\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t\t}\n\n\t\treturn data;\n\t}\n}\n\nClipboard.moduleName = \"clipboard\";\n\n//load defaults\nClipboard.pasteActions = defaultPasteActions;\nClipboard.pasteParsers = defaultPasteParsers;\n\nexport default Clipboard;","export default {\n\treplace:function(data){\n\t\treturn this.table.setData(data);\n\t},\n\tupdate:function(data){\n\t\treturn this.table.updateOrAddData(data);\n\t},\n\tinsert:function(data){\n\t\treturn this.table.addData(data);\n\t},\n\trange:function(data){\n\t\tvar rows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, startRow, rowWidth, dataLength;\n\n\t\tdataLength = data.length;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\t\t\t\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\trows = this.table.rowManager.activeRows.slice();\n\t\t\t\tstartRow = rows.indexOf(startCell.row);\n\n\t\t\t\tif(singleCell){\n\t\t\t\t\trowWidth = data.length;\n\t\t\t\t}else{\n\t\t\t\t\trowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(startRow >-1){\n\t\t\t\t\tthis.table.blockRedraw();\n\t\t\t\t\t\n\t\t\t\t\trows = rows.slice(startRow, startRow + rowWidth);\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row, i) => {\n\t\t\t\t\t\trow.updateData(data[i % dataLength]);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.table.restoreRedraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n};","export default {\n\ttable:function(clipboard){\n\t\tvar data = [],\n\t\theaderFindSuccess = true,\n\t\tcolumns = this.table.columnManager.columns,\n\t\tcolumnMap = [],\n\t\trows = [];\n\t\t\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\n\t\tclipboard.forEach(function(row){\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\t\t\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\n\t\t\t\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function(value){\n\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(column){\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t}else{\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//check if column headers are present by field\n\t\t\tif(!headerFindSuccess){\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\t\t\t\t\n\t\t\t\tdata[0].forEach(function(value){\n\t\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t}else{\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(!headerFindSuccess){\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//remove header row if found\n\t\t\tif(headerFindSuccess){\n\t\t\t\tdata.shift();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach(function(item){\n\t\t\t\tvar row = {};\n\t\t\t\t\n\t\t\t\titem.forEach(function(value, i){\n\t\t\t\t\tif(columnMap[i]){\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\trows.push(row);\n\t\t\t});\n\t\t\t\n\t\t\treturn rows;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t},\n\trange:function(clipboard){\n\t\tvar data = [],\n\t\trows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, colWidth, columnMap, startCol;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\t//get data from clipboard into array of columns and rows.\n\t\t\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tclipboard.forEach(function(row){\n\t\t\t\t\tdata.push(row.split(\"\\t\"));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(data.length){\n\t\t\t\t\tcolumnMap = this.table.columnManager.getVisibleColumnsByIndex();\n\t\t\t\t\tstartCol = columnMap.indexOf(startCell.column);\n\n\t\t\t\t\tif(startCol > -1){\n\t\t\t\t\t\tif(singleCell){\n\t\t\t\t\t\t\tcolWidth = data[0].length;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcolWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcolumnMap = columnMap.slice(startCol, startCol + colWidth);\n\n\t\t\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\t\t\tvar row = {};\n\t\t\t\t\t\t\tvar itemLength = item.length;\n\n\t\t\t\t\t\t\tcolumnMap.forEach(function(col, i){\n\t\t\t\t\t\t\t\trow[col.field] = item[i % itemLength];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trows.push(row);\t\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn rows;\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n};","class CalcComponent{\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n}\n\nexport default CalcComponent;","export default {\n\t\"avg\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn Number(sum) + Number(value);\n\t\t\t});\n\n\t\t\toutput = output / values.length;\n\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t}\n\n\t\treturn parseFloat(output).toString();\n\t},\n\t\"max\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value > output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"min\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value < output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"sum\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t});\n\t\t}\n\n\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t},\n\t\"concat\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn String(sum) + String(value);\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"count\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tif(value){\n\t\t\t\t\toutput ++;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"unique\":function(values, data, calcParams){\n\t\tvar unique = values.filter((value, index) => {\n\t\t\treturn (values || value === 0) && values.indexOf(value) === index;\n\t\t});\n\n\t\treturn unique.length;\n\t},\n};","import Module from '../../core/Module.js';\n\nimport CalcComponent from './CalcComponent.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\nimport Row from '../../core/row/Row.js';\n\nimport defaultCalculations from './defaults/calculations.js';\n\nclass ColumnCalcs extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.topCalcs = [];\n\t\tthis.botCalcs = [];\n\t\tthis.genColumn = false;\n\t\tthis.topElement = this.createElement();\n\t\tthis.botElement = this.createElement();\n\t\tthis.topRow = false;\n\t\tthis.botRow = false;\n\t\tthis.topInitialized = false;\n\t\tthis.botInitialized = false;\n\t\t\n\t\tthis.blocked = false;\n\t\tthis.recalcAfterBlock = false;\n\t\t\n\t\tthis.registerTableOption(\"columnCalcs\", true);\n\t\t\n\t\tthis.registerColumnOption(\"topCalc\");\n\t\tthis.registerColumnOption(\"topCalcParams\");\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\n\t\tthis.registerColumnOption(\"bottomCalc\");\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-calcs-holder\");\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\n\t\t\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t\t\n\t\tthis.subscribe(\"redraw-blocked\", this.blockRedraw.bind(this));\n\t\tthis.subscribe(\"redraw-restored\", this.restoreRedraw.bind(this));\n\n\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\n\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\t\n\ttableRedraw(force){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t\n\t\tif(force){\n\t\t\tthis.redraw();\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.blocked = true;\n\t\tthis.recalcAfterBlock = false;\n\t}\n\t\n\t\n\trestoreRedraw(){\n\t\tthis.blocked = false;\n\t\t\n\t\tif(this.recalcAfterBlock){\n\t\t\tthis.recalcAfterBlock = false;\n\t\t\tthis.recalcActiveRowsRefresh();\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tuserRecalc(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tblockCheck(){\n\t\tif(this.blocked){\n\t\t\tthis.recalcAfterBlock = true;\n\t\t}\n\t\t\n\t\treturn this.blocked;\n\t}\n\t\n\tvisibleRows(viewable, rows){\n\t\tif(this.topRow){\n\t\t\trows.unshift(this.topRow);\n\t\t}\n\t\t\n\t\tif(this.botRow){\n\t\t\trows.push(this.botRow);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.recalcRowGroup(row);\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRowsRefresh(){\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\n\t\t\tthis.recalcAll();\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRows(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\tcellValueChanged(cell){\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\n\t\t\tif(this.table.options.groupBy){\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\n\t\t\t\t\tthis.recalcActiveRows();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeColumnCheck(column){\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//initialize column calcs\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\tvar config = {\n\t\t\ttopCalcParams:def.topCalcParams || {},\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\n\t\t};\n\t\t\n\t\tif(def.topCalc){\n\t\t\t\n\t\t\tswitch(typeof def.topCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.topCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.topCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeTopRow();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tif(def.bottomCalc){\n\t\t\tswitch(typeof def.bottomCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.botCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.botCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeBottomRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t//dummy functions to handle being mock column manager\n\tregisterColumnField(){}\n\t\n\tremoveCalcs(){\n\t\tvar changed = false;\n\t\t\n\t\tif(this.topInitialized){\n\t\t\tthis.topInitialized = false;\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(this.botInitialized){\n\t\t\tthis.botInitialized = false;\n\t\t\tthis.footerRemove(this.botElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\treinitializeCalcs(){\n\t\tif(this.topCalcs.length){\n\t\t\tthis.initializeTopRow();\n\t\t}\n\n\t\tif(this.botCalcs.length){\n\t\t\tthis.initializeBottomRow();\n\t\t}\n\t}\n\t\n\tinitializeTopRow(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tif(!this.topInitialized){\n\n\t\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\t\tfragment.appendChild(this.topElement);\n\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\t\t\tthis.topInitialized = true;\n\t\t}\n\t}\n\t\n\tinitializeBottomRow(){\n\t\tif(!this.botInitialized){\n\t\t\tthis.footerPrepend(this.botElement);\n\t\t\tthis.botInitialized = true;\n\t\t}\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tif(this.botInitialized && this.botRow){\n\t\t\tthis.botElement.scrollLeft = left;\n\t\t}\n\t}\n\t\n\trecalc(rows){\n\t\tvar data, row;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(this.topInitialized || this.botInitialized){\n\t\t\t\tdata = this.rowsToData(rows);\n\t\t\t\t\n\t\t\t\tif(this.topInitialized){\n\t\t\t\t\tif(this.topRow){\n\t\t\t\t\t\tthis.topRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"top\", data);\n\t\t\t\t\tthis.topRow = row;\n\t\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\n\t\t\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.botInitialized){\n\t\t\t\t\tif(this.botRow){\n\t\t\t\t\t\tthis.botRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"bottom\", data);\n\t\t\t\t\tthis.botRow = row;\n\t\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\n\t\t\t\t\tthis.botElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t\t\t\n\t\t\t\t//set resizable handles\n\t\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcRowGroup(row){\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n\t}\n\t\n\trecalcAll(){\n\t\tif(this.topCalcs.length || this.botCalcs.length){\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\n\t\t\t\t\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\n\t\t\t\t\n\t\t\t\tgroups.forEach((group) => {\n\t\t\t\t\tthis.recalcGroup(group);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcGroup(group){\n\t\tvar data, rowData;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(group){\n\t\t\t\tif(group.calcs){\n\t\t\t\t\tif(group.calcs.bottom){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(group.calcs.top){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"top\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//generate top stats row\n\tgenerateTopRow(rows){\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\n\t}\n\t//generate bottom stats row\n\tgenerateBottomRow(rows){\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n\t}\n\t\n\trowsToData(rows){\n\t\tvar data = [];\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tdata.push(row.getData());\n\t\t\t\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\t\tdata = data.concat(children);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//generate stats row\n\tgenerateRow(pos, data){\n\t\tvar rowData = this.generateRowData(pos, data),\n\t\trow;\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.disable();\n\t\t}\n\t\t\n\t\trow = new Row(rowData, this, \"calc\");\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.enable();\n\t\t}\n\t\t\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\t\t\n\t\trow.component = false;\n\t\t\n\t\trow.getComponent = () => {\n\t\t\tif(!row.component){\n\t\t\t\trow.component = new CalcComponent(row);\n\t\t\t}\n\t\t\t\n\t\t\treturn row.component;\n\t\t};\n\t\t\n\t\trow.generateCells = () => {\n\t\t\t\n\t\t\tvar cells = [];\n\t\t\t\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\t\n\t\t\t\t//set field name of mock column\n\t\t\t\tthis.genColumn.setField(column.getField());\n\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\n\t\t\t\t\n\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\t\tparams:{}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//ensure css class definition is replicated to calculation cell\n\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\n\t\t\t\t\n\t\t\t\t//generate cell and assign to correct column\n\t\t\t\tvar cell = new Cell(this.genColumn, row);\n\t\t\t\tcell.getElement();\n\t\t\t\tcell.column = column;\n\t\t\t\tcell.setWidth();\n\t\t\t\t\n\t\t\t\tcolumn.cells.push(cell);\n\t\t\t\tcells.push(cell);\n\t\t\t\t\n\t\t\t\tif(!column.visible){\n\t\t\t\t\tcell.hide();\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\trow.cells = cells;\n\t\t};\n\t\t\n\t\treturn row;\n\t}\n\t\n\t//generate stats row\n\tgenerateRowData(pos, data){\n\t\tvar rowData = {},\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t\tparams, paramKey;\n\t\t\n\t\tcalcs.forEach(function(column){\n\t\t\tvar values = [];\n\t\t\t\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\n\t\t\t\tdata.forEach(function(item){\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tparamKey = type + \"Params\";\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\t\t\t\t\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowData;\n\t}\n\t\n\thasTopCalcs(){\n\t\treturn\t!!(this.topCalcs.length);\n\t}\n\t\n\thasBottomCalcs(){\n\t\treturn\t!!(this.botCalcs.length);\n\t}\n\t\n\t//handle table redraw\n\tredraw(){\n\t\tif(this.topRow){\n\t\t\tthis.topRow.normalizeHeight(true);\n\t\t}\n\t\tif(this.botRow){\n\t\t\tthis.botRow.normalizeHeight(true);\n\t\t}\n\t}\n\t\n\t//return the calculated\n\tgetResults(){\n\t\tvar results = {},\n\t\tgroups;\n\t\t\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\t\t\t\n\t\t\tgroups.forEach((group) => {\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\n\t\t\t});\n\t\t}else{\n\t\t\tresults = {\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\n\t\t\t};\n\t\t}\n\t\t\n\t\treturn results;\n\t}\n\t\n\t//get results from a group\n\tgetGroupResults(group){\n\t\tvar groupObj = group._getSelf(),\n\t\tsubGroups = group.getSubGroups(),\n\t\tsubGroupResults = {},\n\t\tresults = {};\n\t\t\n\t\tsubGroups.forEach((subgroup) => {\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\n\t\t});\n\t\t\n\t\tresults = {\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\t\tgroups: subGroupResults,\n\t\t};\n\t\t\n\t\treturn results;\n\t}\n\t\n\tadjustForScrollbar(width){\n\t\tif(this.botRow){\n\t\t\tif(this.table.rtl){\n\t\t\t\tthis.botElement.style.paddingLeft = width + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.botElement.style.paddingRight = width + \"px\";\n\t\t\t}\n\t\t}\n\t}\n}\n\nColumnCalcs.moduleName = \"columnCalcs\";\n\n//load defaults\nColumnCalcs.calculations = defaultCalculations;\n\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\n\nimport Row from '../../core/row/Row.js';\n\nimport RowComponent from '../../core/row/RowComponent.js';\n\nclass DataTree extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.indent = 10;\n\t\tthis.field = \"\";\n\t\tthis.collapseEl = null;\n\t\tthis.expandEl = null;\n\t\tthis.branchEl = null;\n\t\tthis.elementField = false;\n\n\t\tthis.startOpen = function(){};\n\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//selecting a parent row selects its children\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.dataTree){\n\t\t\tvar dummyEl = null,\n\t\t\toptions = this.table.options;\n\n\t\t\tthis.field = options.dataTreeChildField;\n\t\t\tthis.indent = options.dataTreeChildIndent;\n\n\t\t\tif(this.options(\"movableRows\")){\n\t\t\t\tconsole.warn(\"The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeBranchElement){\n\n\t\t\t\tif(options.dataTreeBranchElement === true){\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t\t\t}else{\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch-empty\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeCollapseElement){\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.collapseEl.tabIndex = 0;\n\t\t\t\tthis.collapseEl.innerHTML = \"
    \";\n\t\t\t}\n\n\t\t\tif(options.dataTreeExpandElement){\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.expandEl.tabIndex = 0;\n\t\t\t\tthis.expandEl.innerHTML = \"
    \";\n\t\t\t}\n\n\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.bind(this));\n\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\n\t\t}\n\t}\n\n\ttableRedrawing(force){\n\t\tvar rows;\n\n\t\tif(force){\n\t\t\trows = this.table.rowManager.getRows();\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.reinitializeRowChildren(row);\n\t\t\t});\n\t\t}\n\t}\n\n\tinitializeElementField(){\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\n\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\t}\n\t\n\tgetRowChildren(row){\n\t\treturn this.getTreeChildren(row, true);\n\t}\n\n\tcolumnMoving(){\n\t\tvar rows = [];\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\trowDataChanged(row, visible, updatedData){\n\t\tif(this.redrawNeeded(updatedData)){\n\t\t\tthis.initializeRow(row);\n\n\t\t\tif(visible){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tcellValueChanged(cell){\n\t\tvar field = cell.column.getField();\n\n\t\tif(field === this.elementField){\n\t\t\tthis.layoutRow(cell.row);\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar childArray = row.getData()[this.field];\n\t\tvar isArray = Array.isArray(childArray);\n\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t\t}\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t\t}\n\n\t\trow.modules.dataTree = {\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\t\tchildren:children,\n\t\t};\n\t}\n\n\treinitializeRowChildren(row){\n\t\tvar children = this.getTreeChildren(row, false, true);\n\n\t\tchildren.forEach(function(child){\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n\n\tlayoutRow(row){\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t\tel = cell.getElement(),\n\t\tconfig = row.modules.dataTree;\n\n\t\tif(config.branchEl){\n\t\t\tif(config.branchEl.parentNode){\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t\t}\n\t\t\tconfig.branchEl = false;\n\t\t}\n\n\t\tif(config.controlEl){\n\t\t\tif(config.controlEl.parentNode){\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t\t}\n\t\t\tconfig.controlEl = false;\n\t\t}\n\n\t\tthis.generateControlElement(row, el);\n\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\t\tif(config.index){\n\t\t\tif(this.branchEl){\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateControlElement(row, el){\n\t\tvar config = row.modules.dataTree,\n\t\toldControl = config.controlEl;\n\n\t\tel = el || row.getCells()[0].getElement();\n\n\t\tif(config.children !== false){\n\n\t\t\tif(config.open){\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.collapseRow(row);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.expandRow(row);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif(oldControl && oldControl.parentNode === el){\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\n\t\t\t}else{\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetRows(rows){\n\t\tvar output = [];\n\n\t\trows.forEach((row, i) => {\n\t\t\tvar config, children;\n\n\t\t\toutput.push(row);\n\n\t\t\tif(row instanceof Row){\n\n\t\t\t\trow.create();\n\n\t\t\t\tconfig = row.modules.dataTree;\n\n\t\t\t\tif(!config.index && config.children !== false){\n\t\t\t\t\tchildren = this.getChildren(row);\n\n\t\t\t\t\tchildren.forEach((child) => {\n\t\t\t\t\t\tchild.create();\n\t\t\t\t\t\toutput.push(child);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tgetChildren(row, allChildren){\n\t\tvar config = row.modules.dataTree,\n\t\tchildren = [],\n\t\toutput = [];\n\n\t\tif(config.children !== false && (config.open || allChildren)){\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\n\t\t\t\tthis.table.modules.sort.sort(children);\n\t\t\t}\n\n\t\t\tchildren.forEach((child) => {\n\t\t\t\toutput.push(child);\n\n\t\t\t\tvar subChildren = this.getChildren(child);\n\n\t\t\t\tsubChildren.forEach((sub) => {\n\t\t\t\t\toutput.push(sub);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgenerateChildren(row){\n\t\tvar children = [];\n\n\t\tvar childArray = row.getData()[this.field];\n\n\t\tif(!Array.isArray(childArray)){\n\t\t\tchildArray = [childArray];\n\t\t}\n\n\t\tchildArray.forEach((childData) => {\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\n\n\t\t\tchildRow.create();\n\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\t\tchildRow.modules.dataTree.parent = row;\n\n\t\t\tif(childRow.modules.dataTree.children){\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t\t}\n\t\t\tchildren.push(childRow);\n\t\t});\n\n\t\treturn children;\n\t}\n\n\texpandRow(row, silent){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = true;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\tcollapseRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = false;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\ttoggleRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tif(config.open){\n\t\t\t\tthis.collapseRow(row);\n\t\t\t}else{\n\t\t\t\tthis.expandRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowExpanded(row){\n\t\treturn row.modules.dataTree.open;\n\t}\n\n\tgetTreeParent(row){\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n\t}\n\n\tgetTreeParentRoot(row){\n\t\treturn row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\n\t}\n\n\tgetFilteredTreeChildren(row){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [], children;\n\n\t\tif(config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tchildren.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(childRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\trowDelete(row){\n\t\tvar parent = row.modules.dataTree.parent,\n\t\tchildIndex;\n\n\t\tif(parent){\n\t\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t\t}\n\n\t\t\tif(!parent.data[this.field].length){\n\t\t\t\tdelete parent.data[this.field];\n\t\t\t}\n\n\t\t\tthis.initializeRow(parent);\n\t\t\tthis.layoutRow(parent);\n\t\t}\n\n\t\tthis.refreshData(true);\n\t}\n\n\taddTreeChildRow(row, data, top, index){\n\t\tvar childIndex = false;\n\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif(!Array.isArray(row.data[this.field])){\n\t\t\trow.data[this.field] = [];\n\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\n\t\t\t}\n\t\t}\n\n\t\tif(childIndex === false){\n\t\t\tif(top){\n\t\t\t\trow.data[this.field].unshift(data);\n\t\t\t}else{\n\t\t\t\trow.data[this.field].push(data);\n\t\t\t}\n\t\t}\n\n\t\tthis.initializeRow(row);\n\t\tthis.layoutRow(row);\n\n\t\tthis.refreshData(true);\n\t}\n\n\tfindChildIndex(subject, parent){\n\t\tvar match = false;\n\n\t\tif(typeof subject == \"object\"){\n\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\tmatch = subject.data;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\tmatch = subject._getSelf().data;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\tif(parent.modules.dataTree){\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t\t});\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tmatch = match.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else if(subject === null){\n\t\t\t\tmatch = false;\n\t\t\t}\n\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\tmatch = false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tmatch = parent.data[this.field].find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t}\n\n\t\tif(match){\n\n\t\t\tif(Array.isArray(parent.data[this.field])){\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t\t}\n\n\t\t\tif(match == -1){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\t\treturn match;\n\t}\n\n\tgetTreeChildren(row, component, recurse){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [];\n\n\t\tif(config && config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tconfig.children.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\t\tif(recurse){\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetChildField(){\n\t\treturn this.field;\n\t}\n\n\tredrawNeeded(data){\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n\t}\n}\n\nDataTree.moduleName = \"dataTree\";\n\nexport default DataTree;","import csv from './downloaders/csv.js';\nimport json from './downloaders/json.js';\nimport pdf from './downloaders/pdf.js';\nimport xlsx from './downloaders/xlsx.js';\nimport html from './downloaders/html.js';\nimport jsonLines from './downloaders/jsonLines.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tjsonLines:jsonLines,\n\tpdf:pdf,\n\txlsx:xlsx,\n\thtml:html,\n};","export default function(list, options = {}, setFileContents){\n\tvar delimiter = options.delimiter ? options.delimiter : \",\",\n\tfileContents = [],\n\theaders = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = [];\n\n\t\tswitch(row.type){\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"header\":\n\t\t\t\trow.columns.forEach((col, i) => {\n\t\t\t\t\tif(col && col.depth === 1){\n\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\n\t\t\t\t\tif(col){\n\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(headers.length){\n\t\tfileContents.unshift(headers.join(delimiter));\n\t}\n\n\tfileContents = fileContents.join(\"\\n\");\n\n\tif(options.bom){\n\t\tfileContents = \"\\ufeff\" + fileContents;\n\t}\n\n\tsetFileContents(fileContents, \"text/csv\");\n}\n","export default function(list, options, setFileContents){\n\tvar fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = {};\n\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif(col){\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\tsetFileContents(fileContents, \"application/json\");\n}","export default function (list, options, setFileContents) {\n\tconst fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tconst item = {};\n\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(JSON.stringify(item));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\n}","export default function(list, options = {}, setFileContents){\n\tvar header = [],\n\tbody = [],\n\tautoTableParams = {},\n\trowGroupStyles = options.rowGroupStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 12,\n\t\tcellPadding: 6,\n\t\tfillColor: 220,\n\t},\n\trowCalcStyles = options.rowCalcStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 10,\n\t\tcellPadding: 4,\n\t\tfillColor: 232,\n\t},\n\tjsPDFParams = options.jsPDF || {},\n\ttitle = options.title ? options.title : \"\";\n\n\tif(!jsPDFParams.orientation){\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t}\n\n\tif(!jsPDFParams.unit){\n\t\tjsPDFParams.unit = \"pt\";\n\t}\n\n\t//parse row list\n\tlist.forEach((row) => {\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\theader.push(parseRow(row));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tbody.push(parseRow(row));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfunction parseRow(row, styles){\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach((col) =>{\n\t\t\tvar cell;\n\n\t\t\tif(col){\n\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcell = {\n\t\t\t\t\tcontent:col.value,\n\t\t\t\t\tcolSpan:col.width,\n\t\t\t\t\trowSpan:col.height,\n\t\t\t\t};\n\n\t\t\t\tif(styles){\n\t\t\t\t\tcell.styles = styles;\n\t\t\t\t}\n\n\t\t\t\trowData.push(cell);\n\t\t\t}\n\t\t});\n\n\t\treturn rowData;\n\t}\n\n\n\t//configure PDF\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\tif(options.autoTable){\n\t\tif(typeof options.autoTable === \"function\"){\n\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t}else{\n\t\t\tautoTableParams = options.autoTable;\n\t\t}\n\t}\n\n\tif(title){\n\t\tautoTableParams.didDrawPage = function(data) {\n\t\t\tdoc.text(title, 40, 30);\n\t\t};\n\t}\n\n\tautoTableParams.head = header;\n\tautoTableParams.body = body;\n\n\tdoc.autoTable(autoTableParams);\n\n\tif(options.documentProcessing){\n\t\toptions.documentProcessing(doc);\n\t}\n\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n}\n","import CoreFeature from '../../../../core/CoreFeature.js';\n\nexport default function(list, options, setFileContents){\n\tvar self = this,\n\tsheetName = options.sheetName || \"Sheet1\",\n\tworkbook = XLSX.utils.book_new(),\n\ttableFeatures = new CoreFeature(this),\n\tcompression = 'compress' in options ? options.compress : true,\n\twriteOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression},\n\toutput;\n\n\twriteOptions.type = 'binary';\n\n\tworkbook.SheetNames = [];\n\tworkbook.Sheets = {};\n\n\tfunction generateSheet(){\n\t\tvar rows = [],\n\t\tmerges = [],\n\t\tworksheet = {},\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\n\n\t\t//parse row list\n\t\tlist.forEach((row, i) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function(col, j){\n\n\t\t\t\tif(col){\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\n\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\n\t\t\t\t\t\tif(col.height > 1 || col.width > 1){\n\t\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\trowData.push(\"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trows.push(rowData);\n\t\t});\n\n\t\t//convert rows to worksheet\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\tif(merges.length){\n\t\t\tworksheet[\"!merges\"] = merges;\n\t\t}\n\n\t\treturn worksheet;\n\t}\n\n\tif(options.sheetOnly){\n\t\tsetFileContents(generateSheet());\n\t\treturn;\n\t}\n\n\tif(options.sheets){\n\t\tfor(var sheet in options.sheets){\n\n\t\t\tif(options.sheets[sheet] === true){\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t}else{\n\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\n\t\t\t\t\ttype:\"xlsx\",\n\t\t\t\t\toptions:{sheetOnly:true},\n\t\t\t\t\tactive:self.active,\n\t\t\t\t\tintercept:function(data){\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}else{\n\t\tworkbook.SheetNames.push(sheetName);\n\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t}\n\n\tif(options.documentProcessing){\n\t\tworkbook = options.documentProcessing(workbook);\n\t}\n\n\t//convert workbook to binary array\n\tfunction s2ab(s) {\n\t\tvar buf = new ArrayBuffer(s.length);\n\t\tvar view = new Uint8Array(buf);\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\t\treturn buf;\n\t}\n\n\toutput = XLSX.write(workbook, writeOptions);\n\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\n}\n","export default function(list, options, setFileContents){\n\tif(this.modExists(\"export\", true)){\n\t\tsetFileContents(this.modules.export.generateHTMLTable(list), \"text/html\");\n\t}\n}","import Module from '../../core/Module.js';\n\nimport defaultDownloaders from './defaults/downloaders.js';\n\nclass Download extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.registerTableOption(\"downloadEncoder\", function(data, mimeType){\n\t\t\treturn new Blob([data],{type:mimeType});\n\t\t}); //function to manipulate download data\n\t\tthis.registerTableOption(\"downloadReady\", undefined); //warn of function deprecation\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\n\n\t\tthis.registerColumnOption(\"download\");\n\t\tthis.registerColumnOption(\"titleDownload\");\n\t}\n\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"downloadReady\", \"downloadEncoder\");\n\t}\t\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tdownloadToTab(type, filename, options, active){\n\t\tthis.download(type, filename, options, active, true);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\t//trigger file download\n\tdownload(type, filename, options, range, interceptCallback){\n\t\tvar downloadFunc = false;\n\n\t\tfunction buildLink(data, mime){\n\t\t\tif(interceptCallback){\n\t\t\t\tif(interceptCallback === true){\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\n\t\t\t\t}else{\n\t\t\t\t\tinterceptCallback(data);\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\n\t\t\t}\n\t\t}\n\n\t\tif(typeof type == \"function\"){\n\t\t\tdownloadFunc = type;\n\t\t}else{\n\t\t\tif(Download.downloaders[type]){\n\t\t\t\tdownloadFunc = Download.downloaders[type];\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t\t}\n\t\t}\n\n\t\tif(downloadFunc){\n\t\t\tvar list = this.generateExportList(range);\n\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\n\t\t}\n\t}\n\n\tgenerateExportList(range){\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t\t//assign group header formatter\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\n\t\t\tgroupHeader = [groupHeader];\n\t\t}\n\n\t\tlist.forEach((row) => {\n\t\t\tvar group;\n\n\t\t\tif(row.type === \"group\"){\n\t\t\t\tgroup = row.columns[0];\n\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn list;\n\t}\n\n\ttriggerDownload(data, mime, type, filename, newTab){\n\t\tvar element = document.createElement('a'),\n\t\tblob = this.table.options.downloadEncoder(data, mime);\n\n\t\tif(blob){\n\t\t\tif(newTab){\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t\t}else{\n\t\t\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\t\t\t\t\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t\t}else{\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t\t//set file title\n\t\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t\t//trigger download\n\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\telement.click();\n\n\t\t\t\t\t//remove temporary link element\n\t\t\t\t\tdocument.body.removeChild(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\n\t\t}\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"intercept\":\n\t\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDownload.moduleName = \"download\";\n\n//load defaults\nDownload.downloaders = defaultDownloaders;\n\nexport default Download;","export default function maskInput(el, options){\n\tvar mask = options.mask,\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\";\n\n\tfunction fillSymbols(index){\n\t\tvar symbol = mask[index];\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\n\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\tfillSymbols(index+1);\n\t\t}\n\t}\n\n\tel.addEventListener(\"keydown\", (e) => {\n\t\tvar index = el.value.length,\n\t\tchar = e.key;\n\n\t\tif(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){\n\t\t\tif(index >= mask.length){\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\tswitch(mask[index]){\n\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\tif(isNaN(char)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(char !== mask[index]){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", (e) => {\n\t\tif(e.keyCode > 46){\n\t\t\tif(options.maskAutoFill){\n\t\t\t\tfillSymbols(el.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tif(!el.placeholder){\n\t\tel.placeholder = mask;\n\t}\n\n\tif(options.maskAutoFill){\n\t\tfillSymbols(el.value.length);\n\t}\n}","import maskInput from './inputMask.js';\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\n\nexport default class Edit{\n\tconstructor(editor, cell, onRendered, success, cancel, editorParams){\n\t\tthis.edit = editor;\n\t\tthis.table = editor.table;\n\t\tthis.cell = cell;\n\t\tthis.params = this._initializeParams(editorParams);\n\t\t\n\t\tthis.data = [];\n\t\tthis.displayItems = [];\n\t\tthis.currentItems = [];\n\t\tthis.focusedItem = null;\n\t\t\n\t\tthis.input = this._createInputElement();\n\t\tthis.listEl = this._createListElement();\n\t\t\n\t\tthis.initialValues = null; \n\t\t\n\t\tthis.isFilter = cell.getType() === \"header\";\n\t\t\n\t\tthis.filterTimeout = null;\n\t\tthis.filtered = false;\n\t\tthis.typing = false;\n\t\t\n\t\tthis.values = []; \n\t\tthis.popup = null; \n\t\t\n\t\tthis.listIteration = 0;\n\t\t\n\t\tthis.lastAction=\"\";\n\t\tthis.filterTerm=\"\";\n\t\t\n\t\tthis.blurable = true;\n\t\t\n\t\tthis.actions = {\n\t\t\tsuccess:success,\n\t\t\tcancel:cancel\n\t\t};\n\t\t\n\t\tthis._deprecatedOptionsCheck();\n\t\tthis._initializeValue();\n\t\t\n\t\tonRendered(this._onRendered.bind(this));\n\t}\n\t\n\t_deprecatedOptionsCheck(){\n\t\tif(this.params.listItemFormatter){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.sortValuesList){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchFunc){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchingPlaceholder){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t}\n\t\n\t_initializeValue(){\n\t\tvar initialValue = this.cell.getValue();\n\t\t\n\t\tif(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\n\t\t\tinitialValue = this.params.defaultValue;\n\t\t}\n\t\t\n\t\tthis.initialValues = this.params.multiselect ? initialValue : [initialValue];\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.input.value = this.initialValues ? this.initialValues.join(\",\") : \"\";\n\t\t\tthis.headerFilterInitialListGen(); \n\t\t}\n\t}\n\t\n\t_onRendered(){\n\t\tvar cellEl = this.cell.getElement();\n\t\t\n\t\tfunction clickStop(e){\n\t\t\te.stopPropagation();\n\t\t}\t\n\t\t\n\t\tif(!this.isFilter){\n\t\t\tthis.input.style.height = \"100%\";\n\t\t\tthis.input.focus({preventScroll: true});\n\t\t}\n\t\t\n\t\t\n\t\tcellEl.addEventListener(\"click\", clickStop);\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tcellEl.removeEventListener(\"click\", clickStop);\n\t\t}, 1000);\n\t\t\n\t\tthis.input.addEventListener(\"mousedown\", this._preventPopupBlur.bind(this));\n\t}\n\t\n\t_createListElement(){\n\t\tvar listEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-list\");\n\t\t\n\t\tlistEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\tlistEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\t\n\t\treturn listEl;\n\t}\n\t\n\t_setListWidth(){\n\t\tvar element = this.isFilter ? this.input : this.cell.getElement();\n\t\t\n\t\tthis.listEl.style.minWidth = element.offsetWidth + \"px\";\n\t\t\n\t\tif(this.params.maxWidth){\n\t\t\tif(this.params.maxWidth === true){\n\t\t\t\tthis.listEl.style.maxWidth = element.offsetWidth + \"px\";\n\t\t\t}else if(typeof this.params.maxWidth === \"number\"){\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t_createInputElement(){\n\t\tvar attribs = this.params.elementAttributes;\n\t\tvar input = document.createElement(\"input\");\n\t\t\n\t\tinput.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\n\t\t\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\t\n\t\tif(!this.params.autocomplete){\n\t\t\tinput.style.cursor = \"default\";\n\t\t\tinput.style.caretColor = \"transparent\";\n\t\t\t// input.readOnly = (this.edit.currentCell != false);\n\t\t}\n\t\t\n\t\tif(attribs && typeof attribs == \"object\"){\n\t\t\tfor (let key in attribs){\n\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + attribs[\"+\" + key]);\n\t\t\t\t}else{\n\t\t\t\t\tinput.setAttribute(key, attribs[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(this.params.mask){\n\t\t\tmaskInput(input, this.params);\n\t\t}\n\t\t\n\t\tthis._bindInputEvents(input);\n\t\t\n\t\treturn input;\n\t}\n\t\n\t_initializeParams(params){\n\t\tvar valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\n\t\tvalueCheck;\n\t\t\n\t\tparams = Object.assign({}, params);\n\t\t\n\t\tparams.verticalNavigation = params.verticalNavigation || \"editor\";\n\t\tparams.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\n\t\tparams.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\n\t\tparams.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\n\t\t\n\t\tparams.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\n\t\t\n\t\tvalueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\n\t\t\n\t\tif(!valueCheck){\n\t\t\tconsole.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\");\n\t\t}else if(valueCheck > 1){\n\t\t\tconsole.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\");\n\t\t}\n\t\t\n\t\tif(params.autocomplete){\n\t\t\tif(params.multiselect){\n\t\t\t\tparams.multiselect = false;\n\t\t\t\tconsole.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\");\n\t\t\t}\n\t\t}else{\n\t\t\tif(params.freetext){\n\t\t\t\tparams.freetext = false;\n\t\t\t\tconsole.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterFunc){\n\t\t\t\tparams.filterFunc = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterRemote){\n\t\t\t\tparams.filterRemote = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.mask){\n\t\t\t\tparams.mask = false;\n\t\t\t\tconsole.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.allowEmpty){\n\t\t\t\tparams.allowEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.listOnEmpty){\n\t\t\t\tparams.listOnEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(params.filterRemote && !(typeof params.valuesLookup === \"function\" || params.valuesURL)){\n\t\t\tparams.filterRemote = false;\n\t\t\tconsole.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\n\t\t}\n\t\treturn params;\n\t}\n\t//////////////////////////////////////\n\t////////// Event Handling ////////////\n\t//////////////////////////////////////\n\t\n\t_bindInputEvents(input){\n\t\tinput.addEventListener(\"focus\", this._inputFocus.bind(this));\n\t\tinput.addEventListener(\"click\", this._inputClick.bind(this));\n\t\tinput.addEventListener(\"blur\", this._inputBlur.bind(this));\n\t\tinput.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\tinput.addEventListener(\"search\", this._inputSearch.bind(this));\n\t\t\n\t\tif(this.params.autocomplete){\n\t\t\tinput.addEventListener(\"keyup\", this._inputKeyUp.bind(this));\n\t\t}\n\t}\n\t\n\t\n\t_inputFocus(e){\n\t\tthis.rebuildOptionsList();\n\t}\n\t\n\t_filter(){\n\t\tif(this.params.filterRemote){\n\t\t\tclearTimeout(this.filterTimeout);\n\t\t\t\n\t\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\t\tthis.rebuildOptionsList();\n\t\t\t}, this.params.filterDelay);\n\t\t}else{\n\t\t\tthis._filterList();\n\t\t}\n\t}\n\t\n\t_inputClick(e){\n\t\te.stopPropagation();\n\t}\n\t\n\t_inputBlur(e){\n\t\tif(this.blurable){\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.hide();\n\t\t\t}else{\n\t\t\t\tthis._resolveValue(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_inputSearch(){\n\t\tthis._clearChoices();\n\t}\n\t\n\t_inputKeyDown(e){\n\t\tswitch(e.keyCode){\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\t\tthis._keyUp(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 40: //down arrow\n\t\t\t\tthis._keyDown(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //right arrow\n\t\t\t\tthis._keySide(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 13: //enter\n\t\t\t\tthis._keyEnter();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27: //escape\n\t\t\t\tthis._keyEsc();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 36: //home\n\t\t\tcase 35: //end\n\t\t\t\tthis._keyHomeEnd(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 9: //tab\n\t\t\t\tthis._keyTab(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keySelectLetter(e);\n\t\t}\n\t}\n\t\n\t_inputKeyUp(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 38: //up arrow\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //up arrow\n\t\t\tcase 40: //right arrow\n\t\t\tcase 13: //enter\n\t\t\tcase 27: //escape\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keyAutoCompLetter(e);\n\t\t}\n\t}\n\t\n\t_preventPopupBlur(){\n\t\tif(this.popup){\n\t\t\tthis.popup.blockHide();\n\t\t}\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.restoreHide();\n\t\t\t}\n\t\t}, 10);\n\t}\n\t\n\t_preventBlur(){\n\t\tthis.blurable = false;\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tthis.blurable = true;\n\t\t}, 10);\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Keyboard Navigation /////////\n\t//////////////////////////////////////\n\t\n\t_keyTab(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyUp(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index > 0){\n\t\t\t\tthis._focusItem(this.displayItems[index - 1]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyDown(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index < this.displayItems.length - 1){\n\t\t\t\tif(index == -1){\n\t\t\t\t\tthis._focusItem(this.displayItems[0]);\n\t\t\t\t}else{\n\t\t\t\t\tthis._focusItem(this.displayItems[index + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keySide(e){\n\t\tif(!this.params.autocomplete){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\t_keyEnter(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyEsc(e){\n\t\tthis._cancel();\n\t}\n\t\n\t_keyHomeEnd(e){\n\t\tif(this.params.autocomplete){\n\t\t\t//prevent table navigation while using input element\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t}\n\t\n\t_keySelectLetter(e){\n\t\tif(!this.params.autocomplete){\n\t\t\t// if(this.edit.currentCell === false){\n\t\t\te.preventDefault();\n\t\t\t// }\n\t\t\t\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\n\t\t\t\tthis._scrollToValue(e.keyCode);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyAutoCompLetter(e){\n\t\tthis._filter();\n\t\tthis.lastAction = \"typing\";\n\t\tthis.typing = true;\n\t}\n\t\n\t\n\t_scrollToValue(char){\n\t\tclearTimeout(this.filterTimeout);\n\t\t\n\t\tvar character = String.fromCharCode(char).toLowerCase();\n\t\tthis.filterTerm += character.toLowerCase();\n\t\t\n\t\tvar match = this.displayItems.find((item) => {\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\n\t\t});\n\t\t\n\t\tif(match){\n\t\t\tthis._focusItem(match);\n\t\t}\n\t\t\n\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\tthis.filterTerm = \"\";\n\t\t}, 800);\n\t}\n\t\n\t_focusItem(item){\n\t\tthis.lastAction = \"focus\";\n\t\t\n\t\tif(this.focusedItem && this.focusedItem.element){\n\t\t\tthis.focusedItem.element.classList.remove(\"focused\");\n\t\t}\n\t\t\n\t\tthis.focusedItem = item;\n\t\t\n\t\tif(item && item.element){\n\t\t\titem.element.classList.add(\"focused\");\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\n\t\t}\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t/////// Data List Generation /////////\n\t//////////////////////////////////////\n\theaderFilterInitialListGen(){\n\t\tthis._generateOptions(true);\n\t}\n\t\n\trebuildOptionsList(){\n\t\tthis._generateOptions()\n\t\t\t.then(this._sortOptions.bind(this))\n\t\t\t.then(this._buildList.bind(this))\n\t\t\t.then(this._showList.bind(this))\n\t\t\t.catch((e) => {\n\t\t\t\tif(!Number.isInteger(e)){\n\t\t\t\t\tconsole.error(\"List generation error\", e);\n\t\t\t\t}\n\t\t\t});\n\t}\n\t\n\t_filterList(){\n\t\tthis._buildList(this._filterOptions());\n\t\tthis._showList();\n\t}\n\t\n\t_generateOptions(silent){\n\t\tvar values = [];\n\t\tvar iteration = ++ this.listIteration;\n\t\t\n\t\tthis.filtered = false;\n\t\t\n\t\tif(this.params.values){\n\t\t\tvalues = this.params.values;\n\t\t}else if (this.params.valuesURL){\n\t\t\tvalues = this._ajaxRequest(this.params.valuesURL, this.input.value);\n\t\t}else{\n\t\t\tif(typeof this.params.valuesLookup === \"function\"){\n\t\t\t\tvalues = this.params.valuesLookup(this.cell, this.input.value);\n\t\t\t}else if(this.params.valuesLookup){\n\t\t\t\tvalues = this._uniqueColumnValues(this.params.valuesLookupField);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(values instanceof Promise){\n\t\t\tif(!silent){\n\t\t\t\tthis._addPlaceholder(this.params.placeholderLoading);\n\t\t\t}\n\t\t\t\n\t\t\treturn values.then()\n\t\t\t\t.then((responseValues) => {\n\t\t\t\t\tif(this.listIteration === iteration){\n\t\t\t\t\t\treturn this._parseList(responseValues);\n\t\t\t\t\t}else{\n\t\t\t\t\t\treturn Promise.reject(iteration);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.resolve(this._parseList(values));\n\t\t}\n\t}\n\t\n\t_addPlaceholder(contents){\n\t\tvar placeholder = document.createElement(\"div\");\n\t\t\n\t\tif(typeof contents === \"function\"){\n\t\t\tcontents = contents(this.cell.getComponent(), this.listEl);\n\t\t}\n\t\t\n\t\tif(contents){\n\t\t\tthis._clearList();\n\t\t\t\n\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\tplaceholder = contents;\n\t\t\t}else{\n\t\t\t\tplaceholder.classList.add(\"tabulator-edit-list-placeholder\");\n\t\t\t\tplaceholder.innerHTML = contents;\n\t\t\t}\n\t\t\t\n\t\t\tthis.listEl.appendChild(placeholder);\n\t\t\t\n\t\t\tthis._showList();\n\t\t}\n\t}\n\t\n\t_ajaxRequest(url, term){\n\t\tvar params = this.params.filterRemote ? {term:term} : {};\n\t\turl = urlBuilder(url, {}, params);\n\t\t\n\t\treturn fetch(url)\n\t\t\t.then((response)=>{\n\t\t\t\tif(response.ok) {\n\t\t\t\t\treturn response.json()\n\t\t\t\t\t\t.catch((error)=>{\n\t\t\t\t\t\t\tconsole.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treturn Promise.reject(response);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error)=>{\n\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \", error);\n\t\t\t\treturn Promise.reject(error);\n\t\t\t});\n\t}\n\t\n\t_uniqueColumnValues(field){\n\t\tvar output = {},\n\t\tdata = this.table.getData(this.params.valuesLookup),\n\t\tcolumn;\n\t\t\n\t\tif(field){\n\t\t\tcolumn = this.table.columnManager.getColumnByField(field);\n\t\t}else{\n\t\t\tcolumn = this.cell.getColumn()._getSelf();\n\t\t}\n\t\t\n\t\tif(column){\n\t\t\tdata.forEach((row) => {\n\t\t\t\tvar val = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\n\t\t\t\t\toutput[val] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\toutput = [];\n\t\t}\n\t\t\n\t\treturn Object.keys(output);\n\t}\n\t\n\t\n\t_parseList(inputValues){\n\t\tvar data = [];\n\t\t\n\t\tif(!Array.isArray(inputValues)){\n\t\t\tinputValues = Object.entries(inputValues).map(([key, value]) => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:key,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\t\n\t\tinputValues.forEach((value) => {\n\t\t\tif(typeof value !== \"object\"){\n\t\t\t\tvalue = {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:value,\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tthis._parseListItem(value, data, 0);\n\t\t});\n\t\t\n\t\tif(!this.currentItems.length && this.params.freetext){\n\t\t\tthis.input.value = this.initialValues;\n\t\t\tthis.typing = true;\n\t\t\tthis.lastAction = \"typing\";\n\t\t}\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\treturn data; \n\t}\n\t\n\t_parseListItem(option, data, level){\n\t\tvar item = {};\n\t\t\n\t\tif(option.options){\n\t\t\titem = this._parseListGroup(option, level + 1);\n\t\t}else{\n\t\t\titem = {\n\t\t\t\tlabel:option.label,\n\t\t\t\tvalue:option.value,\n\t\t\t\titemParams:option.itemParams,\n\t\t\t\telementAttributes: option.elementAttributes,\n\t\t\t\telement:false,\n\t\t\t\tselected:false,\n\t\t\t\tvisible:true,\n\t\t\t\tlevel:level,\n\t\t\t\toriginal:option,\n\t\t\t};\n\t\t\t\n\t\t\tif(this.initialValues && this.initialValues.indexOf(option.value) > -1){\n\t\t\t\tthis._chooseItem(item, true);\n\t\t\t}\n\t\t}\n\t\t\n\t\tdata.push(item);\n\t}\n\t\n\t_parseListGroup(option, level){\n\t\tvar item = {\n\t\t\tlabel:option.label,\n\t\t\tgroup:true,\n\t\t\titemParams:option.itemParams,\n\t\t\telementAttributes:option.elementAttributes,\n\t\t\telement:false,\n\t\t\tvisible:true,\n\t\t\tlevel:level,\n\t\t\toptions:[],\n\t\t\toriginal:option,\n\t\t};\n\t\t\n\t\toption.options.forEach((child) => {\n\t\t\tthis._parseListItem(child, item.options, level);\n\t\t});\n\t\t\n\t\treturn item;\n\t}\n\t\n\t_sortOptions(options){\n\t\tvar sorter;\n\t\t\n\t\tif(this.params.sort){\n\t\t\tsorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\n\t\t\t\n\t\t\tthis._sortGroup(sorter, options);\n\t\t}\n\t\t\n\t\treturn options;\n\t}\n\t\n\t_sortGroup(sorter, options){\n\t\toptions.sort((a,b) => {\n\t\t\treturn sorter(a.label, b.label, a.value, b.value, a.original, b.original);\n\t\t});\n\t\t\n\t\toptions.forEach((option) => {\n\t\t\tif(option.group){\n\t\t\t\tthis._sortGroup(sorter, option.options);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_defaultSortFunction(as, bs){\n\t\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\t\tvar emptyAlign = 0;\n\t\t\n\t\tif(this.params.sort === \"desc\"){\n\t\t\t[as, bs] = [bs, as];\n\t\t}\n\t\t\n\t\t//handle empty values\n\t\tif(!as && as!== 0){\n\t\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t\t}else if(!bs && bs!== 0){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\ta = String(as).toLowerCase();\n\t\t\tb = String(bs).toLowerCase();\n\t\t\tif(a === b) return 0;\n\t\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\ta = a.match(rx);\n\t\t\tb = b.match(rx);\n\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\twhile(i < L){\n\t\t\t\ta1= a[i];\n\t\t\t\tb1= b[i++];\n\t\t\t\tif(a1 !== b1){\n\t\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t}\n\t\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn a.length > b.length;\n\t\t}\n\t\t\n\t\treturn emptyAlign;\n\t}\n\t\n\t_filterOptions(){\n\t\tvar filterFunc = this.params.filterFunc || this._defaultFilterFunc,\n\t\tterm = this.input.value;\n\t\t\n\t\tif(term){\n\t\t\tthis.filtered = true;\n\t\t\t\n\t\t\tthis.data.forEach((item) => {\n\t\t\t\tthis._filterItem(filterFunc, term, item);\n\t\t\t});\n\t\t}else{\n\t\t\tthis.filtered = false;\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\t_filterItem(func, term, item){\n\t\tvar matches = false;\n\t\t\n\t\tif(!item.group){\n\t\t\titem.visible = func(term, item.label, item.value, item.original);\n\t\t}else{\n\t\t\titem.options.forEach((option) => {\n\t\t\t\tif(this._filterItem(func, term, option)){\n\t\t\t\t\tmatches = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\titem.visible = matches;\n\t\t}\n\t\t\n\t\treturn item.visible;\n\t}\n\t\n\t_defaultFilterFunc(term, label, value, item){\n\t\tterm = String(term).toLowerCase();\n\t\t\n\t\tif(label !== null && typeof label !== \"undefined\"){\n\t\t\tif(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\t//////////////////////////////////////\n\t/////////// Display List /////////////\n\t//////////////////////////////////////\n\t\n\t_clearList(){\n\t\twhile(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\n\t\t\n\t\tthis.displayItems = [];\n\t}\n\t\n\t_buildList(data){\n\t\tthis._clearList();\n\t\t\n\t\tdata.forEach((option) => {\n\t\t\tthis._buildItem(option);\n\t\t});\n\t\t\n\t\tif(!this.displayItems.length){\n\t\t\tthis._addPlaceholder(this.params.placeholderEmpty);\n\t\t} \n\t}\n\t\n\t_buildItem(item){\n\t\tvar el = item.element,\n\t\tcontents;\n\t\t\n\t\tif(!this.filtered || item.visible){\n\t\t\t\n\t\t\tif(!el){\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\n\t\t\t\tcontents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\n\t\t\t\t\n\t\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = contents;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-group\");\n\t\t\t\t}else{\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-item\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\n\t\t\t\t\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\n\t\t\t\t\tfor (let key in item.elementAttributes){\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\tel.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.addEventListener(\"click\", this._groupClick.bind(this, item));\n\t\t\t\t}else{\n\t\t\t\t\tel.addEventListener(\"click\", this._itemClick.bind(this, item));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\t\t\t\n\t\t\t\titem.element = el;\n\t\t\t}\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tthis.listEl.appendChild(el);\n\t\t\t\n\t\t\tif(item.group){\n\t\t\t\titem.options.forEach((option) => {\n\t\t\t\t\tthis._buildItem(option);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.displayItems.push(item);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_showList(){\n\t\tvar startVis = this.popup && this.popup.isVisible();\n\t\t\n\t\tif(this.input.parentNode){\n\t\t\tif(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\n\t\t\t\tif(this.popup){\n\t\t\t\t\tthis.popup.hide(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis._setListWidth();\n\t\t\t\n\t\t\tif(!this.popup){\n\t\t\t\tthis.popup = this.edit.popup(this.listEl);\n\t\t\t}\n\t\t\t\n\t\t\tthis.popup.show(this.cell.getElement(), \"bottom\");\n\t\t\t\n\t\t\tif(!startVis){\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.popup.hideOnBlur(this._resolveValue.bind(this, true));\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_styleItem(item){\n\t\tif(item && item.element){\n\t\t\tif(item.selected){\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}else{\n\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// User Interaction ///////////\n\t//////////////////////////////////////\n\t\n\t_itemClick(item, e){\n\t\te.stopPropagation();\n\t\t\n\t\tthis._chooseItem(item);\n\t}\n\t\n\t_groupClick(item, e){\n\t\te.stopPropagation();\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t////// Current Item Management ///////\n\t//////////////////////////////////////\n\t\n\t_cancel(){\n\t\tthis.popup.hide(true);\n\t\tthis.actions.cancel();\n\t}\n\t\n\t_clearChoices(){\n\t\tthis.typing = true;\n\t\t\n\t\tthis.currentItems.forEach((item) => {\n\t\t\titem.selected = false;\n\t\t\tthis._styleItem(item);\n\t\t});\n\t\t\n\t\tthis.currentItems = [];\n\t\t\n\t\tthis.focusedItem = null;\n\t}\n\t\n\t_chooseItem(item, silent){\n\t\tvar index;\n\t\t\n\t\tthis.typing = false;\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\tindex = this.currentItems.indexOf(item);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.currentItems.splice(index, 1);\n\t\t\t\titem.selected = false;\n\t\t\t}else{\n\t\t\t\tthis.currentItems.push(item);\n\t\t\t\titem.selected = true;\n\t\t\t}\n\t\t\t\n\t\t\tthis.input.value = this.currentItems.map(item => item.label).join(\",\");\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t}else{\n\t\t\tthis.currentItems = [item];\n\t\t\titem.selected = true;\n\t\t\t\n\t\t\tthis.input.value = item.label;\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis._resolveValue();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._focusItem(item);\n\t}\n\t\n\t_resolveValue(blur){\n\t\tvar output, initialValue;\n\t\t\n\t\tif(this.popup){\n\t\t\tthis.popup.hide(true);\n\t\t}\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\toutput = this.currentItems.map(item => item.value);\n\t\t}else{\n\t\t\tif(blur && this.params.autocomplete && this.typing){\n\t\t\t\tif(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\n\t\t\t\t\toutput = this.input.value;\n\t\t\t\t}else{\n\t\t\t\t\tthis.actions.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.currentItems[0]){\n\t\t\t\t\toutput = this.currentItems[0].value;\n\t\t\t\t}else{\n\t\t\t\t\tinitialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;\n\t\t\t\t\t\n\t\t\t\t\tif(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\n\t\t\t\t\t\toutput = initialValue;\n\t\t\t\t\t}else{\n\t\t\t\t\t\toutput = this.params.emptyValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(output === \"\"){\n\t\t\toutput = this.params.emptyValue;\n\t\t}\n\t\t\n\t\tthis.actions.success(output);\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.initialValues = output && !Array.isArray(output) ? [output] : output;\n\t\t\tthis.currentItems = [];\n\t\t}\n\t}\n\t\n}\n","import input from './editors/input.js';\nimport textarea from './editors/textarea.js';\nimport number from './editors/number.js';\nimport range from './editors/range.js';\nimport date from './editors/date.js';\nimport time from './editors/time.js';\nimport datetime from './editors/datetime.js';\nimport select from './editors/select.js';\nimport list from './editors/list.js';\nimport autocomplete from './editors/autocomplete.js';\nimport star from './editors/star.js';\nimport progress from './editors/progress.js';\nimport tickCross from './editors/tickCross.js';\n\nexport default {\n\tinput:input,\n\ttextarea:textarea,\n\tnumber:number,\n\trange:range,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tselect:select,\n\tlist:list,\n\tautocomplete:autocomplete,\n\tstar:star,\n\tprogress:progress,\n\ttickCross:tickCross,\n};","import maskInput from '../../inputMask.js';\n\n//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange(e);\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//resizable text area element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"hybrid\",\n\tvalue = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\tinput = document.createElement(\"textarea\"),\n\tscrollHeight = 0;\n\n\t//create and style input\n\tinput.style.display = \"block\";\n\tinput.style.padding = \"2px\";\n\tinput.style.height = \"100%\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\tinput.style.whiteSpace = \"pre-wrap\";\n\tinput.style.resize = \"none\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = value;\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tinput.scrollHeight;\n\t\t\tinput.style.height = input.scrollHeight + \"px\";\n\t\t\tcell.getRow().normalizeHeight();\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\n\t\t\tsetTimeout(function(){\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t},300);\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\tinput.addEventListener(\"keyup\", function(){\n\n\t\tinput.style.height = \"\";\n\n\t\tvar heightNow = input.scrollHeight;\n\n\t\tinput.style.height = heightNow + \"px\";\n\n\t\tif(heightNow != scrollHeight){\n\t\t\tscrollHeight = heightNow;\n\t\t\tcell.getRow().normalizeHeight();\n\t\t}\n\t});\n\n\tinput.addEventListener(\"keydown\", function(e){\n\n\t\tswitch(e.keyCode){\n\n\t\t\tcase 13:\n\t\t\t\tif(e.shiftKey && editorParams.shiftEnterSubmit){\n\t\t\t\t\tonChange(e);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", \"number\");\n\n\tif(typeof editorParams.max != \"undefined\"){\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\n\tif(typeof editorParams.min != \"undefined\"){\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\n\tif(typeof editorParams.step != \"undefined\"){\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = cellValue;\n\n\tvar blurFunc = function(e){\n\t\tonChange();\n\t};\n\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\t//submit new value on blur\n\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(){\n\t\tvar value = input.value;\n\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\n\t\tif(value !== cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.setAttribute(\"type\", \"range\");\n\t\n\tif (typeof editorParams.max != \"undefined\") {\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\t\n\tif (typeof editorParams.min != \"undefined\") {\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\t\n\tif (typeof editorParams.step != \"undefined\") {\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\t\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value;\n\t\t\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\t\t\n\t\tif(value != cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e){\n\t\tonChange();\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tfunction convertDate(value){\n\t\tvar newDatetime;\n\t\t\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\t\t\n\t\treturn newDatetime.toFormat(\"yyyy-MM-dd\");\n\t}\n\t\n\tinput.type = \"date\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.max){\n\t\tinput.setAttribute(\"max\", inputFormat ? convertDate(editorParams.max) : editorParams.max);\n\t}\n\n\tif(editorParams.min){\n\t\tinput.setAttribute(\"min\", inputFormat ? convertDate(editorParams.min) : editorParams.min);\n\t}\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\t\t\n\t\t\tcellValue = convertDate(cellValue);\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDate;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDate = DT.fromFormat(String(value), \"yyyy-MM-dd\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDate;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDate.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDate.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"time\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"HH:mm\");\n\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\n\tconsole.log(\"val\", cellValue);\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() == \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxTime = DT.fromFormat(String(value), \"hh:mm\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"datetime-local\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"yyyy-MM-dd\") + \"T\" + newDatetime.toFormat(\"HH:mm\");\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDateTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDateTime = DT.fromISO(String(value));\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDateTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDateTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDateTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The select editor has been deprecated, please use the new list editor\");\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\n\n\teditorParams.autocomplete = true;\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","//star rating\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar self = this,\n\telement = cell.getElement(),\n\tvalue = cell.getValue(),\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\tstars = [],\n\tstarsHolder = document.createElement(\"div\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\n\t//change star type\n\tfunction starChange(val){\n\t\tstars.forEach(function(star, i){\n\t\t\tif(i < val){\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}else{\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//build stars\n\tfunction buildStar(i){\n\n\t\tvar starHolder = document.createElement(\"span\");\n\t\tvar nextStar = star.cloneNode(true);\n\n\t\tstars.push(nextStar);\n\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tstarChange(i);\n\t\t});\n\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t});\n\n\t\tstarHolder.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tsuccess(i);\n\t\t\telement.blur();\n\t\t});\n\n\t\tstarHolder.appendChild(nextStar);\n\t\tstarsHolder.appendChild(starHolder);\n\n\t}\n\n\t//handle keyboard navigation value change\n\tfunction changeValue(val){\n\t\tvalue = val;\n\t\tstarChange(val);\n\t}\n\n\t//style cell\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\t//style holding element\n\tstarsHolder.style.verticalAlign = \"middle\";\n\tstarsHolder.style.display = \"inline-block\";\n\tstarsHolder.style.padding = \"4px\";\n\n\t//style star\n\tstar.setAttribute(\"width\", size);\n\tstar.setAttribute(\"height\", size);\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//create correct number of stars\n\tfor(var i=1;i<= maxStars;i++){\n\t\tbuildStar(i);\n\t}\n\n\t//ensure value does not exceed number of stars\n\tvalue = Math.min(parseInt(value), maxStars);\n\n\t// set initial styling of stars\n\tstarChange(value);\n\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\n\t\tstarChange(0);\n\t});\n\n\tstarsHolder.addEventListener(\"click\", function(e){\n\t\tsuccess(0);\n\t});\n\n\telement.addEventListener(\"blur\", function(e){\n\t\tcancel();\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\tchangeValue(value + 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\tchangeValue(value - 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 13: //enter\n\t\t\t\tsuccess(value);\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\treturn starsHolder;\n}","//draggable progress bar\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar element = cell.getElement(),\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\n\tpercent = (max - min) / 100,\n\tvalue = cell.getValue() || 0,\n\thandle = document.createElement(\"div\"),\n\tbar = document.createElement(\"div\"),\n\tmouseDrag, mouseDragWidth;\n\n\t//set new value\n\tfunction updateValue(){\n\t\tvar style = window.getComputedStyle(element, null);\n\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\n\t\tsuccess(calcVal);\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\telement.setAttribute(\"aria-label\", value);\n\t}\n\n\t//style handle\n\thandle.style.position = \"absolute\";\n\thandle.style.right = \"0\";\n\thandle.style.top = \"0\";\n\thandle.style.bottom = \"0\";\n\thandle.style.width = \"5px\";\n\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t//style bar\n\tbar.style.display = \"inline-block\";\n\tbar.style.position = \"relative\";\n\t// bar.style.top = \"8px\";\n\t// bar.style.bottom = \"8px\";\n\t// bar.style.left = \"4px\";\n\t// bar.style.marginRight = \"4px\";\n\tbar.style.height = \"100%\";\n\tbar.style.backgroundColor = \"#488CE9\";\n\tbar.style.maxWidth = \"100%\";\n\tbar.style.minWidth = \"0%\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//style cell\n\telement.style.padding = \"4px 4px\";\n\n\t//make sure value is in range\n\tvalue = Math.min(parseFloat(value), max);\n\tvalue = Math.max(parseFloat(value), min);\n\n\t//workout percentage\n\tvalue = Math.round((value - min) / percent);\n\t// bar.style.right = value + \"%\";\n\tbar.style.width = value + \"%\";\n\n\telement.setAttribute(\"aria-valuemin\", min);\n\telement.setAttribute(\"aria-valuemax\", max);\n\n\tbar.appendChild(handle);\n\n\thandle.addEventListener(\"mousedown\", function(e){\n\t\tmouseDrag = e.screenX;\n\t\tmouseDragWidth = bar.offsetWidth;\n\t});\n\n\thandle.addEventListener(\"mouseover\", function(){\n\t\thandle.style.cursor = \"ew-resize\";\n\t});\n\n\telement.addEventListener(\"mousemove\", function(e){\n\t\tif(mouseDrag){\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\n\t\t}\n\t});\n\n\telement.addEventListener(\"mouseup\", function(e){\n\t\tif(mouseDrag){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\n\t\t\tmouseDrag = false;\n\t\t\tmouseDragWidth = false;\n\n\t\t\tupdateValue();\n\t\t}\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 9: //tab\n\t\t\tcase 13: //enter\n\t\t\t\tupdateValue();\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t}\n\t});\n\n\telement.addEventListener(\"blur\", function(){\n\t\tcancel();\n\t});\n\n\treturn bar;\n}","//checkbox\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar value = cell.getValue(),\n\tinput = document.createElement(\"input\"),\n\ttristate = editorParams.tristate,\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\tindetermState = false,\n\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\n\t\n\tinput.setAttribute(\"type\", \"checkbox\");\n\tinput.style.marginTop = \"5px\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = value;\n\t\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\n\t\tindetermState = true;\n\t\tinput.indeterminate = true;\n\t}\n\t\n\tif(this.table.browser != \"firefox\" && this.table.browser != \"safari\"){ //prevent blur issue on mac firefox\n\t\tonRendered(function(){\n\t\t\tif(cell.getType() === \"cell\"){\n\t\t\t\tinput.focus({preventScroll: true});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tinput.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === \"true\" || value === \"True\" || value === 1);\n\t\n\tfunction setValue(blur){\n\t\tvar checkedValue = input.checked;\n\t\t\n\t\tif(trueValueSet && checkedValue){\n\t\t\tcheckedValue = editorParams.trueValue;\n\t\t}else if(falseValueSet && !checkedValue){\n\t\t\tcheckedValue = editorParams.falseValue;\n\t\t}\n\t\t\n\t\tif(tristate){\n\t\t\tif(!blur){\n\t\t\t\tif(input.checked && !indetermState){\n\t\t\t\t\tinput.checked = false;\n\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\tindetermState = true;\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\tindetermState = false;\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(indetermState){\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\treturn checkedValue;\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"change\", function(e){\n\t\tsuccess(setValue());\n\t});\n\n\tinput.addEventListener(\"blur\", function(e){\n\t\tsuccess(setValue(true));\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tif(e.keyCode == 13){\n\t\t\tsuccess(setValue());\n\t\t}\n\t\tif(e.keyCode == 27){\n\t\t\tcancel();\n\t\t}\n\t});\n\t\n\treturn input;\n}","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultEditors from './defaults/editors.js';\n\nclass Edit extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.currentCell = false; //hold currently editing cell\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening\n\t\tthis.recursionBlock = false; //prevent focus recursion\n\t\tthis.invalidEdit = false;\n\t\tthis.editedCells = [];\n\t\t\n\t\tthis.editors = Edit.editors;\n\t\t\n\t\tthis.registerColumnOption(\"editable\");\n\t\tthis.registerColumnOption(\"editor\");\n\t\tthis.registerColumnOption(\"editorParams\");\n\t\t\n\t\tthis.registerColumnOption(\"cellEditing\");\n\t\tthis.registerColumnOption(\"cellEdited\");\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\n\t\t\n\t\tthis.registerTableOption(\"editTriggerEvent\", \"focus\");\n\t\t\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellIsEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.updateCellClass.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-layout\", this.rowEditableCheck.bind(this));\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\n\t\tthis.subscribe(\"clipboard-paste\", this.pasteBlocker.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\n\t\t\n\t\t\n\t\t// this.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\n\t\t// this.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Paste Negation //////////\n\t///////////////////////////////////\n\t\n\tpasteBlocker(e){\n\t\tif(this.currentCell){\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Keybinding Functions ///////\n\t///////////////////////////////////\n\t\n\tkeybindingNavigateNext(e){\n\t\tvar cell = this.currentCell,\n\t\tnewRow = this.options(\"tabEndNewRow\");\n\n\t\tif(cell){\n\t\t\tif(!this.navigateNext(cell, e)){\n\t\t\t\tif(newRow){\n\t\t\t\t\tcell.getElement().firstChild.blur();\n\t\t\t\t\t\n\t\t\t\t\tif(!this.invalidEdit){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(newRow === true){\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnewRow.then(() => {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tcell.getComponent().navigateNext();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Cell Functions //////////\n\t///////////////////////////////////\n\t\n\tcellIsEdited(cell){\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\n\t}\n\t\n\tcellCancelEdit(cell){\n\t\tif(cell === this.currentCell){\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}else{\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tupdateCellClass(cell){\n\t\tif(this.allowEdit(cell)) {\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\n\t\t}\n\t\telse {\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\n\t\t}\n\t}\n\t\n\tclearCellEdited(cells){\n\t\tif(!cells){\n\t\t\tcells = this.table.modules.edit.getEditedCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n\t\n\tnavigatePrev(cell = this.currentCell, e){\n\t\tvar nextCell, prevRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateLeft();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(prevRow){\n\t\t\t\t\tnextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateNext(cell = this.currentCell, e){\n\t\tvar nextCell, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateRight();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(nextRow){\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateLeft(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateRight(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateUp(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateDown(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfindNextEditableCell(row, index){\n\t\tvar nextCell = false;\n\t\t\n\t\tif(index < row.cells.length-1){\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tnextCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindPrevEditableCell(row, index){\n\t\tvar prevCell = false;\n\t\t\n\t\tif(index > 0){\n\t\t\tfor(var i = index-1; i >= 0; i--){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tprevCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn prevCell;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.editor !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\tcolumnDeleteCheck(column){\n\t\tif(this.currentCell && this.currentCell.column === column){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowDeleteCheck(row){\n\t\tif(this.currentCell && this.currentCell.row === row){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowEditableCheck(row){\n\t\trow.getCells().forEach((cell) => {\n\t\t\tif(cell.column.modules.edit && typeof cell.column.modules.edit.check === \"function\"){\n\t\t\t\tthis.updateCellClass(cell);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//initialize column editor\n\tinitializeColumn(column){\n\t\tvar config = {\n\t\t\teditor:false,\n\t\t\tblocked:false,\n\t\t\tcheck:column.definition.editable,\n\t\t\tparams:column.definition.editorParams || {}\n\t\t};\n\t\t\n\t\t//set column editor\n\t\tswitch(typeof column.definition.editor){\n\t\t\tcase \"string\":\n\t\t\t\tif(this.editors[column.definition.editor]){\n\t\t\t\t\tconfig.editor = this.editors[column.definition.editor];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.editor = column.definition.editor;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"boolean\":\n\t\t\t\tif(column.definition.editor === true){\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\n\t\t\t\t\t\tif(this.editors[column.definition.formatter]){\n\t\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(config.editor){\n\t\t\tcolumn.modules.edit = config;\n\t\t}\n\t}\n\t\n\tgetCurrentCell(){\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\n\t}\n\t\n\tclearEditor(cancel){\n\t\tvar cell = this.currentCell,\n\t\tcellEl;\n\t\t\n\t\tthis.invalidEdit = false;\n\t\t\n\t\tif(cell){\n\t\t\tthis.currentCell = false;\n\t\t\t\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\n\t\t\t\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\n\t\t\t\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\n\t\t}\n\t}\n\t\n\tcancelEdit(){\n\t\tif(this.currentCell){\n\t\t\tvar cell = this.currentCell;\n\t\t\tvar component = this.currentCell.getComponent();\n\t\t\t\n\t\t\tthis.clearEditor(true);\n\t\t\tcell.setValueActual(cell.getValue());\n\t\t\tcell.cellRendered();\n\t\t\t\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\n\t\t\t\tcell.row.normalizeHeight(true);\n\t\t\t}\n\t\t\t\n\t\t\tif(cell.column.definition.cellEditCancelled){\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\n\t\t}\n\t}\n\t\n\t//return a formatted value for a cell\n\tbindEditor(cell){\n\t\tif(cell.column.modules.edit){\n\t\t\tvar self = this,\n\t\t\telement = cell.getElement(true);\n\t\t\t\n\t\t\tthis.updateCellClass(cell);\n\t\t\telement.setAttribute(\"tabindex\", 0);\n\t\t\t\n\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif (e.button === 2) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}else{\n\t\t\t\t\tself.mouseClick = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(this.options(\"editTriggerEvent\") === \"dblclick\"){\n\t\t\t\telement.addEventListener(\"dblclick\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\" || this.options(\"editTriggerEvent\") === \"click\"){\n\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\"){\n\t\t\t\telement.addEventListener(\"focus\", function(e){\n\t\t\t\t\tif(!self.recursionBlock){\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfocusCellNoEvent(cell, block){\n\t\tthis.recursionBlock = true;\n\t\t\n\t\tif(!(block && this.table.browser === \"ie\")){\n\t\t\tcell.getElement().focus({preventScroll: true});\n\t\t}\n\t\t\n\t\tthis.recursionBlock = false;\n\t}\n\t\n\teditCell(cell, forceEdit){\n\t\tthis.focusCellNoEvent(cell);\n\t\tthis.edit(cell, false, forceEdit);\n\t}\n\t\n\tfocusScrollAdjust(cell){\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t\trowEl = cell.row.getElement();\n\t\t\t\n\t\t\tif(rowEl.offsetTop < topEdge){\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\n\t\t\t}else{\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0);\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t}\n\t\t\t\n\t\t\tif(cellEl.offsetLeft < leftEdge){\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\n\t\t\t}else{\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tallowEdit(cell) {\n\t\tvar check = cell.column.modules.edit ? true : false;\n\t\t\n\t\tif(cell.column.modules.edit){\n\t\t\tswitch(typeof cell.column.modules.edit.check){\n\t\t\t\tcase \"function\":\n\t\t\t\t\tif(cell.row.initialized){\n\t\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn check;\n\t}\n\t\n\tedit(cell, e, forceEdit){\n\t\tvar self = this,\n\t\tallowEdit = true,\n\t\trendered = function(){},\n\t\telement = cell.getElement(),\n\t\teditFinished = false,\n\t\tcellEditor, component, params;\n\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\t\t\n\t\tif(this.currentCell){\n\t\t\tif(!this.invalidEdit && this.currentCell !== cell){\n\t\t\t\tthis.cancelEdit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t//handle successful value change\n\t\tfunction success(value){\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\n\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\n\n\t\t\t\t\teditFinished = true;\n\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\t\n\t\t\t\t\tif(!cell.modules.edit){\n\t\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.modules.edit.edited = true;\n\t\t\t\t\t\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\n\t\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\t\treturn valid === true;\n\t\t\t\t}else{\n\t\t\t\t\teditFinished = true;\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\teditFinished = false;\n\t\t\t\t\t}, 10);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//handle aborted edit\n\t\tfunction cancel(){\n\t\t\t// editFinished = true;\n\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tself.cancelEdit();\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\trendered = callback;\n\t\t}\n\t\t\n\t\tif(!cell.column.modules.edit.blocked){\n\t\t\tif(e){\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\t\n\t\t\tallowEdit = this.allowEdit(cell);\n\t\t\t\n\t\t\tif(allowEdit || forceEdit){\n\t\t\t\tself.cancelEdit();\n\t\t\t\t\n\t\t\t\tself.currentCell = cell;\n\t\t\t\t\n\t\t\t\tthis.focusScrollAdjust(cell);\n\t\t\t\t\n\t\t\t\tcomponent = cell.getComponent();\n\t\t\t\t\n\t\t\t\tif(this.mouseClick){\n\t\t\t\t\tthis.mouseClick = false;\n\t\t\t\t\t\n\t\t\t\t\tif(cell.column.definition.cellClick){\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(cell.column.definition.cellEditing){\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\n\t\t\t\t\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\t\t\t\t\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\t\t\t\t\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\t\tif(this.currentCell && cellEditor !== false){\n\t\t\t\t\tif(cellEditor instanceof Node){\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\t\t\t\telement.appendChild(cellEditor);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\t\trendered();\n\t\t\t\t\t\t\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\t\tvar children = element.children;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\t\tthis.blur(element);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.blur(element);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tthis.mouseClick = false;\n\t\t\t\tthis.blur(element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.mouseClick = false;\n\t\t\tthis.blur(element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tblur(element){\n\t\tif(!this.confirm(\"edit-blur\", [element]) ){\n\t\t\telement.blur();\n\t\t}\n\t}\n\t\n\tgetEditedCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.editedCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearEdited(cell){\n\t\tvar editIndex;\n\t\t\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\n\t\t\tcell.modules.edit.edited = false;\n\t\t\t\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\n\t\t}\n\t\t\n\t\teditIndex = this.editedCells.indexOf(cell);\n\t\t\n\t\tif(editIndex > -1){\n\t\t\tthis.editedCells.splice(editIndex, 1);\n\t\t}\n\t}\n}\n\nEdit.moduleName = \"edit\";\n\n//load defaults\nEdit.editors = defaultEditors;\n\n\nexport default Edit;\n","class ExportRow{\n\tconstructor(type, columns, component, indent){\n\t\tthis.type = type;\n\t\tthis.columns = columns;\n\t\tthis.component = component || false;\n\t\tthis.indent = indent || 0;\n\t}\n}\n\nexport default ExportRow;","class ExportColumn{\n\tconstructor(value, component, width, height, depth){\n\t\tthis.value = value;\n\t\tthis.component = component || false;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = depth;\n\t}\n}\n\nexport default ExportColumn;","import Module from '../../core/Module.js';\n\nimport ExportRow from './ExportRow.js';\nimport ExportColumn from './ExportColumn.js';\n\nclass Export extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {};\n\t\tthis.cloneTableStyle = true;\n\t\tthis.colVisProp = \"\";\n\t\t\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html output config\n\t\t\n\t\tthis.registerColumnOption(\"htmlOutput\");\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tgenerateExportList(config, style, range, colVisProp){\n\t\tthis.cloneTableStyle = style;\n\t\tthis.config = config || {};\n\t\tthis.colVisProp = colVisProp;\n\n\t\tvar headers, body;\n\t\t\n\t\tif (range === 'range') {\n\t\t\tvar columns = this.table.modules.selectRange.selectedColumns();\n\t\t\theaders = this.config.columnHeaders !== false\n\t\t\t\t? this.headersToExportRows(this.generateColumnGroupHeaders(columns))\n\t\t\t\t: [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true));\n\t\t} else {\n\t\t\theaders = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range));\n\t\t}\n\n\t\treturn headers.concat(body);\n\t}\n\t\n\tgenerateTable(config, style, range, colVisProp){\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\n\t\t\n\t\treturn this.generateTableElement(list);\n\t}\n\t\n\trowLookup(range){\n\t\tvar rows = [];\n\t\t\n\t\tif(typeof range == \"function\"){\n\t\t\trange.call(this.table).forEach((row) =>{\n\t\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tswitch(range){\n\t\t\t\tcase true:\n\t\t\t\tcase \"visible\":\n\t\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"all\":\n\t\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"selected\":\n\t\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"range\":\n\t\t\t\t\trows = this.table.modules.selectRange.selectedRows();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"active\":\n\t\t\t\tdefault:\n\t\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Object.assign([], rows);\n\t}\n\t\n\tgenerateColumnGroupHeaders(columns){\n\t\tvar output = [];\n\t\t\n\t\tif (!columns) {\n\t\t\tcolumns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\t\t}\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\tvar colData = this.processColumnGroup(column);\n\t\t\t\n\t\t\tif(colData){\n\t\t\t\toutput.push(colData);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\t\n\tprocessColumnGroup(column){\n\t\tvar subGroups = column.columns,\n\t\tmaxDepth = 0,\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\t\t\n\t\tvar groupData = {\n\t\t\ttitle:title,\n\t\t\tcolumn:column,\n\t\t\tdepth:1,\n\t\t};\n\t\t\n\t\tif(subGroups.length){\n\t\t\tgroupData.subGroups = [];\n\t\t\tgroupData.width = 0;\n\t\t\t\n\t\t\tsubGroups.forEach((subGroup) => {\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\n\t\t\t\t\n\t\t\t\tif(subGroupData){\n\t\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\n\t\t\t\t\t\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tgroupData.depth += maxDepth;\n\t\t\t\n\t\t\tif(!groupData.width){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.columnVisCheck(column)){\n\t\t\t\tgroupData.width = 1;\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn groupData;\n\t}\n\t\n\tcolumnVisCheck(column){\n\t\tvar visProp = column.definition[this.colVisProp];\n\t\t\n\t\tif(typeof visProp === \"function\"){\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\n\t\t}\n\t\t\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\n\t}\n\t\n\theadersToExportRows(columns){\n\t\tvar headers = [],\n\t\theaderDepth = 0,\n\t\texportRows = [];\n\t\t\n\t\tfunction parseColumnGroup(column, level){\n\t\t\t\n\t\t\tvar depth = headerDepth - level;\n\t\t\t\n\t\t\tif(typeof headers[level] === \"undefined\"){\n\t\t\t\theaders[level] = [];\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\n\t\t\t\n\t\t\theaders[level].push(column);\n\t\t\t\n\t\t\tif(column.height > 1){\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\n\t\t\t\t\t\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\n\t\t\t\t\t\theaders[level + i] = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\theaders[level + i].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.width > 1){\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\n\t\t\t\t\theaders[level].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.subGroups){\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t//calculate maximum header depth\n\t\tcolumns.forEach(function(column){\n\t\t\tif(column.depth > headerDepth){\n\t\t\t\theaderDepth = column.depth;\n\t\t\t}\n\t\t});\n\t\t\n\t\tcolumns.forEach(function(column){\n\t\t\tparseColumnGroup(column,0);\n\t\t});\n\t\t\n\t\theaders.forEach((header) => {\n\t\t\tvar columns = [];\n\t\t\t\n\t\t\theader.forEach((col) => {\n\t\t\t\tif(col){\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t\t}else{\n\t\t\t\t\tcolumns.push(null);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tbodyToExportRows(rows, columns = []){\n\t\tvar exportRows = [];\n\t\t\n\t\tif (columns.length === 0) {\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\t\tcolumns.push(column.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\n\t\trows = rows.filter((row) => {\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn this.config.rowGroups !== false;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\treturn this.config.columnCalcs !== false;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t});\n\t\t\n\t\trows.forEach((row, i) => {\n\t\t\tvar rowData = row.getData(this.colVisProp);\n\t\t\tvar exportCols = [];\n\t\t\tvar indent = 0;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\tindent = row.level;\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\" :\n\t\t\t\tcase \"row\" :\n\t\t\t\t\tcolumns.forEach((col) => {\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tgenerateTableElement(list){\n\t\tvar table = document.createElement(\"table\"),\n\t\theaderEl = document.createElement(\"thead\"),\n\t\tbodyEl = document.createElement(\"tbody\"),\n\t\tstyles = this.lookupTableStyles(),\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t\tsetup = {};\n\t\t\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\t\t\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t\t}\n\t\t\n\t\t//assign group header formatter\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\t\t\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\n\t\t\tsetup.groupHeader = [setup.groupHeader];\n\t\t}\n\t\t\n\t\ttable.classList.add(\"tabulator-print-table\");\n\t\t\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\n\t\t\n\t\tif(list.length > 1000){\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t\t}\n\t\t\n\t\tlist.forEach((row, i) => {\n\t\t\tlet rowEl;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"header\":\n\t\t\t\t\theaderEl.appendChild(this.generateHeaderElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbodyEl.appendChild(this.generateGroupElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbodyEl.appendChild(this.generateCalcElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\n\t\t\t\t\n\t\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\t\tbodyEl.appendChild(rowEl);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(headerEl.innerHTML){\n\t\t\ttable.appendChild(headerEl);\n\t\t}\n\t\t\n\t\ttable.appendChild(bodyEl);\n\t\t\n\t\t\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\t\treturn table;\n\t}\n\t\n\tlookupTableStyles(){\n\t\tvar styles = {};\n\t\t\n\t\t//lookup row styles\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\t\t\t\n\t\t\tif(styles.firstRow){\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn styles;\n\t}\n\t\n\tgenerateHeaderElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trow.columns.forEach((column) => {\n\t\t\tif(column){\n\t\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tcellEl.colSpan = column.width;\n\t\t\t\tcellEl.rowSpan = column.height;\n\t\t\t\t\n\t\t\t\tcellEl.innerHTML = column.value;\n\t\t\t\t\n\t\t\t\tif(this.cloneTableStyle){\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\t\t\n\t\t\t\tif(column.component._column.visible){\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t\t}else{\n\t\t\t\t\tif(column.component._column.definition.width){\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(column.component._column.parent){\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateGroupElement(row, setup, styles){\n\t\t\n\t\tvar rowEl = document.createElement(\"tr\"),\n\t\tcellEl = document.createElement(\"td\"),\n\t\tgroup = row.columns[0];\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}else{\n\t\t\tif(setup.groupHeader !== false){\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t\t\n\t\tcellEl.colSpan = group.width;\n\t\tcellEl.innerHTML = group.value;\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\t\t\n\t\tif(group.component.isVisible()){\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\n\t\trowEl.appendChild(cellEl);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateCalcElement(row, setup, styles){\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateRowElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\trow.columns.forEach((col, i) => {\n\t\t\tif(col){\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t\tcolumn = col.component._column,\n\t\t\t\ttable = this.table,\n\t\t\t\tindex = table.columnManager.findColumnIndex(column),\n\t\t\t\tvalue = col.value,\n\t\t\t\tcellStyle;\n\t\t\t\t\n\t\t\t\tvar cellWrapper = {\n\t\t\t\t\tmodules:{},\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn cellEl;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\treturn row.component.getData();\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn row.component;\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:function(){\n\t\t\t\t\t\treturn table;\n\t\t\t\t\t},\n\t\t\t\t\tgetComponent:function(){\n\t\t\t\t\t\treturn cellWrapper;\n\t\t\t\t\t},\n\t\t\t\t\tcolumn:column,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\n\t\t\t\t}else{\n\t\t\t\t\tswitch(typeof value){\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(value instanceof Node){\n\t\t\t\t\tcellEl.appendChild(value);\n\t\t\t\t}else{\n\t\t\t\t\tcellEl.innerHTML = value;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\n\t\t\t\t\n\t\t\t\tif(cellStyle){\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\n\t\t\t\t\t\n\t\t\t\t\tif(column.definition.align){\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t\t\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(setup.rowFormatter && row.type === \"row\" && this.config.formatCells !== false){\n\t\t\tlet formatComponent = Object.assign(row.component);\n\n\t\t\tformatComponent.getElement = function(){return rowEl;};\n\n\t\t\tsetup.rowFormatter(row.component);\n\t\t}\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateHTMLTable(list){\n\t\tvar holder = document.createElement(\"div\");\n\t\t\n\t\tholder.appendChild(this.generateTableElement(list));\n\t\t\n\t\treturn holder.innerHTML;\n\t}\n\t\n\tgetHtml(visible, style, config, colVisProp){\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\t\t\n\t\treturn this.generateHTMLTable(list);\n\t}\n\t\n\tmapElementStyles(from, to, props){\n\t\tif(this.cloneTableStyle && from && to){\n\t\t\t\n\t\t\tvar lookup = {\n\t\t\t\t\"background-color\" : \"backgroundColor\",\n\t\t\t\t\"color\" : \"fontColor\",\n\t\t\t\t\"width\" : \"width\",\n\t\t\t\t\"font-weight\" : \"fontWeight\",\n\t\t\t\t\"font-family\" : \"fontFamily\",\n\t\t\t\t\"font-size\" : \"fontSize\",\n\t\t\t\t\"text-align\" : \"textAlign\",\n\t\t\t\t\"border-top\" : \"borderTop\",\n\t\t\t\t\"border-left\" : \"borderLeft\",\n\t\t\t\t\"border-right\" : \"borderRight\",\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\n\t\t\t\t\"padding-top\" : \"paddingTop\",\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\n\t\t\t\t\"padding-right\" : \"paddingRight\",\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\n\t\t\t};\n\t\t\t\n\t\t\tif(window.getComputedStyle){\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\n\t\t\t\t\n\t\t\t\tprops.forEach(function(prop){\n\t\t\t\t\tif(!to.style[lookup[prop]]){\n\t\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nExport.moduleName = \"export\";\n\nexport default Export;\n","export default {\n\n\t//equal to\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal == filterVal ? true : false;\n\t},\n\n\t//less than\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal < filterVal ? true : false;\n\t},\n\n\t//less than or equal to\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal <= filterVal ? true : false;\n\t},\n\n\t//greater than\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal > filterVal ? true : false;\n\t},\n\n\t//greater than or equal to\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal >= filterVal ? true : false;\n\t},\n\n\t//not equal to\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal != filterVal ? true : false;\n\t},\n\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\n\n\t\tif(typeof filterVal == \"string\"){\n\t\t\tfilterVal = new RegExp(filterVal);\n\t\t}\n\n\t\treturn filterVal.test(rowVal);\n\t},\n\n\t//contains the string\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//contains the keywords\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\tmatches = [];\n\n\t\tkeywords.forEach((keyword) =>{\n\t\t\tif(value.includes(keyword)){\n\t\t\t\tmatches.push(true);\n\t\t\t}\n\t\t});\n\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\n\t},\n\n\t//starts with the string\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//ends with the string\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(Array.isArray(filterVal)){\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\treturn false;\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultFilters from './defaults/filters.js';\n\nclass Filter extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.filterList = []; //hold filter list\n\t\tthis.headerFilters = {}; //hold column filters\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.changed = false; //has filtering changed since last render\n\t\tthis.tableInitialized = false;\n\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\n\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\n\t\tthis.registerTableOption(\"placeholderHeaderFilter\", false); //placeholder when header filter is empty\n\n\t\tthis.registerColumnOption(\"headerFilter\");\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\n\t\tthis.registerColumnOption(\"headerFilterParams\");\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\n\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\n\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\n\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.subscribe(\"placeholder\", this.generatePlaceholder.bind(this));\n\n\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\n\t\t}\n\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\n\t}\n\n\ttableBuilt(){\n\t\tif(this.table.options.initialFilter){\n\t\t\tthis.setFilter(this.table.options.initialFilter);\n\t\t}\n\n\t\tif(this.table.options.initialHeaderFilter){\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\n\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.tableInitialized = true;\n\t}\n\n\tremoteFilterParams(data, config, silent, params){\n\t\tparams.filter = this.getFilters(true, true);\n\t\treturn params;\n\t}\n\n\tgeneratePlaceholder(text){\n\t\tif(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){\n\t\t\treturn this.table.options.placeholderHeaderFilter;\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t//set standard filters\n\tuserSetFilter(field, type, value, params){\n\t\tthis.setFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\t//set standard filters\n\tuserRefreshFilter(){\n\t\tthis.refreshFilter();\n\t}\n\n\t//add filter to array\n\tuserAddFilter(field, type, value, params){\n\t\tthis.addFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\tuserSetHeaderFilterFocus(field){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterFocus(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tuserGetHeaderFilterValue(field) {\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\treturn this.getHeaderFilterValue(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t}\n\t}\n\n\tuserSetHeaderFilterValue(field, value){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterValue(column, value);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//remove filter from array\n\tuserRemoveFilter(field, type, value){\n\t\tthis.removeFilter(field, type, value);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear filters\n\tuserClearFilter(all){\n\t\tthis.clearFilter(all);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear header filters\n\tuserClearHeaderFilter(){\n\t\tthis.clearHeaderFilter();\n\t\tthis.refreshFilter();\n\t}\n\n\n\t//search for specific row components\n\tsearchRows(field, type, value){\n\t\treturn this.search(\"rows\", field, type, value);\n\t}\n\n\t//search for specific data\n\tsearchData(field, type, value){\n\t\treturn this.search(\"data\", field, type, value);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumnHeaderFilter(column){\n\t\tvar def = column.definition;\n\n\t\tif(def.headerFilter){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\n\t//initialize column header filter\n\tinitializeColumn(column, value){\n\t\tvar self = this,\n\t\tfield = column.getField();\n\n\t\t//handle successfully value change\n\t\tfunction success(value){\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t\ttype = \"\",\n\t\t\tfilterChangeCheck = \"\",\n\t\t\tfilterFunc;\n\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\n\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\n\t\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!filterFunc){\n\t\t\t\t\t\tswitch(filterType){\n\t\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\n\t\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type};\n\t\t\t\t}else{\n\t\t\t\t\tdelete self.headerFilters[field];\n\t\t\t\t}\n\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\t\tself.trackChanges();\n\t\t\t\t\tself.refreshFilter();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tcolumn.modules.filter = {\n\t\t\tsuccess:success,\n\t\t\tattrType:false,\n\t\t\ttagType:false,\n\t\t\temptyFunc:false,\n\t\t};\n\n\t\tthis.generateHeaderFilterElement(column);\n\t}\n\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\n\t\tvar self = this,\n\t\tsuccess = column.modules.filter.success,\n\t\tfield = column.getField(),\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback;\n\n\t\tcolumn.modules.filter.value = initialValue;\n\n\t\t//handle aborted edit\n\t\tfunction cancel(){}\n\n\t\tfunction onRendered(callback){\n\t\t\tonRenderedCallback = callback;\n\t\t}\n\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t\t}\n\n\t\tif(field){\n\n\t\t\t//set empty value function\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\n\t\t\t\treturn !value && value !== 0;\n\t\t\t};\n\n\t\t\tfilterElement = document.createElement(\"div\");\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t\t//set column editor\n\t\t\tswitch(typeof column.definition.headerFilter){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\n\t\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(editor){\n\n\t\t\t\tcellWrapper = {\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn filterElement;\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:() => {\n\t\t\t\t\t\treturn \"header\";\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnormalizeHeight:function(){\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\n\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params);\n\n\t\t\t\tif(!editorElement){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(!(editorElement instanceof Node)){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//set Placeholder Text\n\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : (column.definition.headerFilterPlaceholder || self.langText(\"headerFilters|default\")));\n\t\t\t\t});\n\n\t\t\t\t//focus on element on click\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\teditorElement.focus();\n\t\t\t\t});\n\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\n\t\t\t\t\tvar left = this.table.columnManager.contentsElement.scrollLeft;\n\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft;\n\n\t\t\t\t\tif(left !== headerPos){\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//live update filters as user types\n\t\t\t\ttypingTimer = false;\n\n\t\t\t\tsearchTrigger = function(e){\n\t\t\t\t\tif(typingTimer){\n\t\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t\t}\n\n\t\t\t\t\ttypingTimer = setTimeout(function(){\n\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\n\t\t\t\t};\n\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\n\t\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\n\t\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//prevent input and select elements from propagating click to column sorters etc\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\t\tif(!reinitialize){\n\t\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t\t}\n\n\t\t\t\tif(onRenderedCallback){\n\t\t\t\t\tonRenderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t\t}\n\t}\n\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\thideHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t\t}\n\t\t});\n\t}\n\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\tshowHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//programmatically set focus of header filter\n\tsetHeaderFilterFocus(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\tcolumn.modules.filter.headerElement.focus();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically get value of header filter\n\tgetHeaderFilterValue(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\treturn column.modules.filter.value;\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically set value of header filter\n\tsetHeaderFilterValue(column, value){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\t\tcolumn.modules.filter.success(value);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\treloadHeaderFilter(column){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\trefreshFilter(){\n\t\tif(this.tableInitialized){\n\t\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\t\tthis.reloadData(null, false, false);\n\t\t\t}else{\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\n\t//check if the filters has changed since last use\n\ttrackChanges(){\n\t\tthis.changed = true;\n\t\tthis.dispatch(\"filter-changed\");\n\t}\n\n\t//check if the filters has changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\n\t//set standard filters\n\tsetFilter(field, type, value, params){\n\t\tthis.filterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tthis.addFilter(field);\n\t}\n\n\t//add filter to array\n\taddFilter(field, type, value, params){\n\t\tvar changed = false;\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tthis.filterList.push(filter);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\n\t\tif(changed){\n\t\t\tthis.trackChanges();\n\t\t}\n\t}\n\n\tfindFilter(filter){\n\t\tvar column;\n\n\t\tif(Array.isArray(filter)){\n\t\t\treturn this.findSubFilters(filter);\n\t\t}\n\n\t\tvar filterFunc = false;\n\n\t\tif(typeof filter.field == \"function\"){\n\t\t\tfilterFunc = function(data){\n\t\t\t\treturn filter.field(data, filter.type || {});// pass params to custom filter function\n\t\t\t};\n\t\t}else{\n\n\t\t\tif(Filter.filters[filter.type]){\n\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}\n\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t}\n\n\t\tfilter.func = filterFunc;\n\n\t\treturn filter.func ? filter : false;\n\t}\n\n\tfindSubFilters(filters){\n\t\tvar output = [];\n\n\t\tfilters.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\toutput.push(filter);\n\t\t\t}\n\t\t});\n\n\t\treturn output.length ? output : false;\n\t}\n\n\t//get all filters\n\tgetFilters(all, ajax){\n\t\tvar output = [];\n\n\t\tif(all){\n\t\t\toutput = this.getHeaderFilters();\n\t\t}\n\n\t\tif(ajax){\n\t\t\toutput.forEach(function(item){\n\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\t\treturn output;\n\t}\n\n\t//filter to Object\n\tfiltersToArray(filterList, ajax){\n\t\tvar output = [];\n\n\t\tfilterList.forEach((filter) => {\n\t\t\tvar item;\n\n\t\t\tif(Array.isArray(filter)){\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\n\t\t\t}else{\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value};\n\n\t\t\t\tif(ajax){\n\t\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\t\titem.type = \"function\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//get all filters\n\tgetHeaderFilters(){\n\t\tvar output = [];\n\n\t\tfor(var key in this.headerFilters){\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//remove filter from array\n\tremoveFilter(field, type, value){\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tvar index = -1;\n\n\t\t\tif(typeof filter.field == \"object\"){\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter === element;\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.filterList.splice(index, 1);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear filters\n\tclearFilter(all){\n\t\tthis.filterList = [];\n\n\t\tif(all){\n\t\t\tthis.clearHeaderFilter();\n\t\t}\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear header filters\n\tclearHeaderFilter(){\n\t\tthis.headerFilters = {};\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.headerFilterColumns.forEach((column) => {\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\n\t\t\t\tdelete column.modules.filter.value;\n\t\t\t}\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\t\tthis.reloadHeaderFilter(column);\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//search data and return matching rows\n\tsearch (searchType, field, type, value){\n\t\tvar activeRows = [],\n\t\tfilterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tfilterList.push(filter);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\tvar match = true;\n\n\t\t\tfilterList.forEach((filter) => {\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t\t}\n\n\t\t});\n\n\t\treturn activeRows;\n\t}\n\n\t//filter row array\n\tfilter(rowList, filters){\n\t\tvar activeRows = [],\n\t\tactiveRowComponents = [];\n\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters(true));\n\t\t}\n\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\n\n\t\t\trowList.forEach((row) => {\n\t\t\t\tif(this.filterRow(row)){\n\t\t\t\t\tactiveRows.push(row);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}else{\n\t\t\tactiveRows = rowList.slice(0);\n\t\t}\n\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\n\n\t\t\tactiveRows.forEach((row) => {\n\t\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t\t});\n\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(true), activeRowComponents);\n\t\t}\n\n\t\treturn activeRows;\n\t}\n\n\t//filter individual row\n\tfilterRow(row, filters){\n\t\tvar match = true,\n\t\tdata = row.getData();\n\n\t\tthis.filterList.forEach((filter) => {\n\t\t\tif(!this.filterRecurse(filter, data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\n\t\tfor(var field in this.headerFilters){\n\t\t\tif(!this.headerFilters[field].func(data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\treturn match;\n\t}\n\n\tfilterRecurse(filter, data){\n\t\tvar match = false;\n\n\t\tif(Array.isArray(filter)){\n\t\t\tfilter.forEach((subFilter) => {\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\n\t\t\t\t\tmatch = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tmatch = filter.func(data);\n\t\t}\n\n\t\treturn match;\n\t}\n}\n\nFilter.moduleName = \"filter\";\n\n//load defaults\nFilter.filters = defaultFilters;\n\nexport default Filter;","import plaintext from './formatters/plaintext.js';\nimport html from './formatters/html.js';\nimport textarea from './formatters/textarea.js';\nimport money from './formatters/money.js';\nimport link from './formatters/link.js';\nimport image from './formatters/image.js';\nimport tickCross from './formatters/tickCross.js';\nimport datetime from './formatters/datetime.js';\nimport datetimediff from './formatters/datetimediff.js';\nimport lookup from './formatters/lookup.js';\nimport star from './formatters/star.js';\nimport traffic from './formatters/traffic.js';\nimport progress from './formatters/progress.js';\nimport color from './formatters/color.js';\nimport buttonTick from './formatters/buttonTick.js';\nimport buttonCross from './formatters/buttonCross.js';\nimport rownum from './formatters/rownum.js';\nimport handle from './formatters/handle.js';\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\nimport rowSelection from './formatters/rowSelection.js';\n\nexport default {\n\tplaintext:plaintext,\n\thtml:html,\n\ttextarea:textarea,\n\tmoney:money,\n\tlink:link,\n\timage:image,\n\ttickCross:tickCross,\n\tdatetime:datetime,\n\tdatetimediff:datetimediff,\n\tlookup:lookup,\n\tstar:star,\n\ttraffic:traffic,\n\tprogress:progress,\n\tcolor:color,\n\tbuttonTick:buttonTick,\n\tbuttonCross:buttonCross,\n\trownum:rownum,\n\thandle:handle,\n\tresponsiveCollapse:responsiveCollapse,\n\trowSelection:rowSelection,\n};","export default function(cell, formatterParams, onRendered){\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\treturn cell.getValue();\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\tvar floatVal = parseFloat(cell.getValue()),\n\tsign = \"\",\n\tnumber, integer, decimal, rgx, value;\n\n\tvar decimalSym = formatterParams.decimal || \".\";\n\tvar thousandSym = formatterParams.thousand || \",\";\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\n\tvar symbol = formatterParams.symbol || \"\";\n\tvar after = !!formatterParams.symbolAfter;\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\tif(isNaN(floatVal)){\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t}\n\n\tif(floatVal < 0){\n\t\tfloatVal = Math.abs(floatVal);\n\t\tsign = negativeSign;\n\t}\n\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\tnumber = String(number).split(\".\");\n\n\tinteger = number[0];\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\tif (formatterParams.thousand !== false) {\n\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\twhile (rgx.test(integer)){\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t}\n\t}\n\n\tvalue = integer + decimal;\n\t\n\tif(sign === true){\n\t\tvalue = \"(\" + value + \")\";\n\t\treturn after ? value + symbol : symbol + value;\n\t}else{\n\t\treturn after ? sign + value + symbol : sign + symbol + value;\n\t}\n}","import Helpers from '../../../../core/tools/Helpers.js';\n\n\nexport default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\turlPrefix = formatterParams.urlPrefix || \"\",\n\tdownload = formatterParams.download,\n\tlabel = value,\n\tel = document.createElement(\"a\"),\n\tdata;\n\n\tfunction labelTraverse(path, data){\n\t\tvar item = path.shift(),\n\t\tvalue = data[item];\n\t\t\n\t\tif(path.length && typeof value === \"object\"){\n\t\t\treturn labelTraverse(path, value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tif(formatterParams.labelField){\n\t\tdata = cell.getData();\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\n\t}\n\n\tif(formatterParams.label){\n\t\tswitch(typeof formatterParams.label){\n\t\t\tcase \"string\":\n\t\t\t\tlabel = formatterParams.label;\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(label){\n\t\tif(formatterParams.urlField){\n\t\t\tdata = cell.getData();\n\n\t\t\tvalue = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data);\n\t\t}\n\n\t\tif(formatterParams.url){\n\t\t\tswitch(typeof formatterParams.url){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\tif(formatterParams.target){\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t}\n\n\t\tif(formatterParams.download){\n\n\t\t\tif(typeof download == \"function\"){\n\t\t\t\tdownload = download(cell);\n\t\t\t}else{\n\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t}\n\n\t\t\tel.setAttribute(\"download\", download);\n\t\t}\n\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\treturn el;\n\t}else{\n\t\treturn \" \";\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"img\"),\n\tsrc = cell.getValue();\n\n\tif(formatterParams.urlPrefix){\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t}\n\n\tif(formatterParams.urlSuffix){\n\t\tsrc = src + formatterParams.urlSuffix;\n\t}\n\n\tel.setAttribute(\"src\", src);\n\n\tswitch(typeof formatterParams.height){\n\t\tcase \"number\":\n\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.height = formatterParams.height;\n\t\t\tbreak;\n\t}\n\n\tswitch(typeof formatterParams.width){\n\t\tcase \"number\":\n\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.width = formatterParams.width;\n\t\t\tbreak;\n\t}\n\n\tel.addEventListener(\"load\", function(){\n\t\tcell.getRow().normalizeHeight();\n\t});\n\n\treturn el;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tempty = formatterParams.allowEmpty,\n\ttruthy = formatterParams.allowTruthy,\n\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\n\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")))){\n\t\telement.setAttribute(\"aria-checked\", true);\n\t\treturn tick || \"\";\n\t}else{\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\treturn \"\";\n\t\t}else{\n\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\treturn cross || \"\";\n\t\t}\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif(newDatetime.isValid){\n\t\t\tif(formatterParams.timezone){\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\n\t\t\t}\n\n\t\t\treturn newDatetime.toFormat(outputFormat);\n\t\t}else{\n\t\t\tif(invalid === true || !value){\n\t\t\t\treturn value;\n\t\t\t}else if(typeof invalid === \"function\"){\n\t\t\t\treturn invalid(value);\n\t\t\t}else{\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif (newDatetime.isValid){\n\t\t\tif(humanize){\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\n\t\t\t}else{\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar value = cell.getValue();\n\n\tif (typeof formatterParams[value] === \"undefined\") {\n\t\tconsole.warn('Missing display value for ' + value);\n\t\treturn value;\n\t}\n\n\treturn formatterParams[value];\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\tstars = document.createElement(\"span\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\tstarActive = '',\n\tstarInactive = '';\n\n\t//style stars holder\n\tstars.style.verticalAlign = \"middle\";\n\n\t//style star\n\tstar.setAttribute(\"width\", \"14\");\n\tstar.setAttribute(\"height\", \"14\");\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\tfor(var i=1;i<= maxStars;i++){\n\t\tvar nextStar = star.cloneNode(true);\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\tstars.appendChild(nextStar);\n\t}\n\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\telement.setAttribute(\"aria-label\", value);\n\n\treturn stars;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\tel = document.createElement(\"span\"),\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\tcolor = \"#666666\",\n\tpercent, percentValue;\n\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\n\t\treturn;\n\t}\n\n\tel.classList.add(\"tabulator-traffic-light\");\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set color\n\tswitch(typeof colors){\n\t\tcase \"string\":\n\t\t\tcolor = colors;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = colors(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(colors)){\n\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = colors[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n\n\tel.style.backgroundColor = color;\n\n\treturn el;\n}","import CellComponent from '../../../../core/cell/CellComponent.js';\n\nexport default function(cell, formatterParams = {}, onRendered){ //progress bar\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\telement = cell.getElement(),\n\tmax = formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams.min ? formatterParams.min : 0,\n\tlegendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\tpercent, percentValue, color, legend, legendColor;\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set bar color\n\tswitch(typeof formatterParams.color){\n\t\tcase \"string\":\n\t\t\tcolor = formatterParams.color;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = formatterParams.color(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.color)){\n\t\t\t\tlet unit = 100 / formatterParams.color.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\tcolor = \"#2DC214\";\n\t}\n\n\t//generate legend\n\tswitch(typeof formatterParams.legend){\n\t\tcase \"string\":\n\t\t\tlegend = formatterParams.legend;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegend = formatterParams.legend(value);\n\t\t\tbreak;\n\t\tcase \"boolean\":\n\t\t\tlegend = value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegend = false;\n\t}\n\n\t//set legend color\n\tswitch(typeof formatterParams.legendColor){\n\t\tcase \"string\":\n\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.legendColor)){\n\t\t\t\tlet unit = 100 / formatterParams.legendColor.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegendColor = \"#000\";\n\t}\n\n\telement.style.minWidth = \"30px\";\n\telement.style.position = \"relative\";\n\n\telement.setAttribute(\"aria-label\", percentValue);\n\n\tvar barEl = document.createElement(\"div\");\n\tbarEl.style.display = \"inline-block\";\n\tbarEl.style.width = percentValue + \"%\";\n\tbarEl.style.backgroundColor = color;\n\tbarEl.style.height = \"100%\";\n\n\tbarEl.setAttribute('data-max', max);\n\tbarEl.setAttribute('data-min', min);\n\n\tvar barContainer = document.createElement(\"div\");\n\tbarContainer.style.position = \"relative\";\n\tbarContainer.style.width = \"100%\";\n\tbarContainer.style.height = \"100%\";\n\n\tif(legend){\n\t\tvar legendEl = document.createElement(\"div\");\n\t\tlegendEl.style.position = \"absolute\";\n\t\tlegendEl.style.top = 0;\n\t\tlegendEl.style.left = 0;\n\t\tlegendEl.style.textAlign = legendAlign;\n\t\tlegendEl.style.width = \"100%\";\n\t\tlegendEl.style.color = legendColor;\n\t\tlegendEl.innerHTML = legend;\n\t}\n\n\tonRendered(function(){\n\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\tif(!(cell instanceof CellComponent)){\n\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\tholderEl.style.position = \"absolute\";\n\t\t\tholderEl.style.top = \"4px\";\n\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\tholderEl.style.left = \"4px\";\n\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\telement.appendChild(holderEl);\n\n\t\t\telement = holderEl;\n\t\t}\n\n\t\telement.appendChild(barContainer);\n\t\tbarContainer.appendChild(barEl);\n\n\t\tif(legend){\n\t\t\tbarContainer.appendChild(legendEl);\n\t\t}\n\t});\n\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\tvar content = document.createElement(\"span\");\n\tvar row = cell.getRow();\n\tvar table = cell.getTable();\n\n\trow.watchPosition((position) => {\n\t\tif (formatterParams.relativeToPage) {\n\t\t\tposition += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);\n\t\t}\n\t\tcontent.innerText = position;\n\t});\n\t\n\treturn content;\n}\n","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\treturn \"
    \";\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"div\"),\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\n\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\n\tel.innerHTML = `\n \n \n\n\n\n \n`;\n\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\tfunction toggleList(isOpen){\n\t\tvar collapseEl = config.element;\n\n\t\tconfig.open = isOpen;\n\n\t\tif(collapseEl){\n\n\t\t\tif(config.open){\n\t\t\t\tel.classList.add(\"open\");\n\t\t\t\tcollapseEl.style.display = '';\n\t\t\t}else{\n\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tel.addEventListener(\"click\", function(e){\n\t\te.stopImmediatePropagation();\n\t\ttoggleList(!config.open);\n\t\tcell.getTable().rowManager.adjustTableSize();\n\t});\n\n\ttoggleList(config.open);\n\n\treturn el;\n}","import RowComponent from '../../../../core/row/RowComponent.js';\n\nexport default function(cell, formatterParams, onRendered){\n\tvar checkbox = document.createElement(\"input\");\n\tvar blocked = false;\n\n\tcheckbox.type = 'checkbox';\n\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\n\t\n\tif(this.table.modExists(\"selectRow\", true)){\n\n\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(typeof cell.getRow == 'function'){\n\t\t\tvar row = cell.getRow();\n\n\t\t\tif(row instanceof RowComponent){\n\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\t\tif(!blocked){\n\t\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tblocked = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\tblocked = true;\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t}else{\n\t\t\t\tcheckbox = \"\";\n\t\t\t}\n\t\t}else {\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\n\t\t\t\t\tthis.table.deselectRow();\n\t\t\t\t}else {\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t}\n\t}\n\n\treturn checkbox;\n}","import Module from '../../core/Module.js';\n\nimport defaultFormatters from './defaults/formatters.js';\n\nclass Format extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.registerColumnOption(\"formatter\");\n\t\tthis.registerColumnOption(\"formatterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"formatterPrint\");\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\n\t\tthis.registerColumnOption(\"formatterClipboard\");\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\n\t\tthis.registerColumnOption(\"titleFormatter\");\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\n\t}\n\t\n\t//initialize column formatter\n\tinitializeColumn(column){\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\t\t\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t\t}\n\t}\n\t\n\tlookupFormatter(column, type){\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\n\t\tformatter = column.definition[\"formatter\" + type];\n\t\t\n\t\t//set column formatter\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tconfig.formatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.formatter = formatter;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn config;\n\t}\n\t\n\tcellRendered(cell){\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\n\t\t\tcell.modules.format.renderedCallback();\n\t\t\tcell.modules.format.rendered = true;\n\t\t}\n\t}\n\t\n\t//return a formatted value for a column header\n\tformatHeader(column, title, el){\n\t\tvar formatter, params, onRendered, mockCell;\n\t\t\n\t\tif(column.definition.titleFormatter){\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\n\t\t\t\n\t\t\tonRendered = (callback) => {\n\t\t\t\tcolumn.titleFormatterRendered = callback;\n\t\t\t};\n\t\t\t\n\t\t\tmockCell = {\n\t\t\t\tgetValue:function(){\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\tgetElement:function(){\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\t\t\t\tgetType:function(){\n\t\t\t\t\treturn \"header\";\n\t\t\t\t},\n\t\t\t\tgetColumn:function(){\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetTable:() => {\n\t\t\t\t\treturn this.table;\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tparams = column.definition.titleFormatterParams || {};\n\t\t\t\n\t\t\tparams = typeof params === \"function\" ? params() : params;\n\t\t\t\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\n\t\t}else{\n\t\t\treturn title;\n\t\t}\n\t}\n\t\n\t\n\t//return a formatted value for a cell\n\tformatValue(cell){\n\t\tvar component = cell.getComponent(),\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\tif(!cell.modules.format){\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\t\t\t\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t}\n\t\t\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n\t}\n\t\n\tformatExportValue(cell, type){\n\t\tvar formatter = cell.column.modules.format[type],\n\t\tparams;\n\t\t\n\t\tif(formatter){\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(cell.getComponent()) : formatter.params;\n\t\t\t\n\t\t\tfunction onRendered(callback){\n\t\t\t\tif(!cell.modules.format){\n\t\t\t\t\tcell.modules.format = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\t\tcell.modules.format.rendered = false;\n\t\t\t}\n\t\t\t\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t\t\t\n\t\t}else{\n\t\t\treturn this.formatValue(cell);\n\t\t}\n\t}\n\t\n\tsanitizeHTML(value){\n\t\tif(value){\n\t\t\tvar entityMap = {\n\t\t\t\t'&': '&',\n\t\t\t\t'<': '<',\n\t\t\t\t'>': '>',\n\t\t\t\t'\"': '"',\n\t\t\t\t\"'\": ''',\n\t\t\t\t'/': '/',\n\t\t\t\t'`': '`',\n\t\t\t\t'=': '='\n\t\t\t};\n\t\t\t\n\t\t\treturn String(value).replace(/[&<>\"'`=/]/g, function (s) {\n\t\t\t\treturn entityMap[s];\n\t\t\t});\n\t\t}else{\n\t\t\treturn value;\n\t\t}\n\t}\n\t\n\temptyToSpace(value){\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n\t}\n\t\n\t//get formatter for cell\n\tgetFormatter(formatter){\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tformatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t//Custom formatter Function, do nothing\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn formatter;\n\t}\n}\n\nFormat.moduleName = \"format\";\n\n//load defaults\nFormat.formatters = defaultFormatters;\n\nexport default Format;","import Module from '../../core/Module.js';\n\nclass FrozenColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.initializationMode = \"left\";\n\t\tthis.active = false;\n\t\tthis.blocked = true;\n\t\t\n\t\tthis.registerColumnOption(\"frozen\");\n\t}\n\t\n\t//reset initial state\n\treset(){\n\t\tthis.initializationMode = \"left\";\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.active = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\n\t\t\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-deleted\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-show\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.reinitializeColumns.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t}\n\t\n\tblockLayout(){\n\t\tthis.blocked = true;\n\t}\n\t\n\tunblockLayout(){\n\t\tthis.blocked = false;\n\t}\n\t\n\tlayoutCell(cell){\n\t\tthis.layoutElement(cell.element, cell.column);\n\t}\n\t\n\treinitializeColumns(){\n\t\tthis.reset();\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tthis.initializeColumn(column);\n\t\t});\n\n\t\tthis.layout();\n\t}\n\t\n\t//initialize specific column\n\tinitializeColumn(column){\n\t\tvar config = {margin:0, edge:false};\n\t\t\n\t\tif(!column.isGroup){\t\t\t\n\t\t\tif(this.frozenCheck(column)){\n\t\t\t\tconfig.position = this.initializationMode;\n\t\t\t\t\n\t\t\t\tif(this.initializationMode == \"left\"){\n\t\t\t\t\tthis.leftColumns.push(column);\n\t\t\t\t}else{\n\t\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.active = true;\n\t\t\t\t\n\t\t\t\tcolumn.modules.frozen = config;\n\t\t\t}else{\n\t\t\t\tthis.initializationMode = \"right\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfrozenCheck(column){\n\t\tif(column.parent.isGroup && column.definition.frozen){\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t\t}\n\t\t\n\t\tif(column.parent.isGroup){\n\t\t\treturn this.frozenCheck(column.parent);\n\t\t}else{\n\t\t\treturn column.definition.frozen;\n\t\t}\n\t}\n\t\n\t//layout calculation rows\n\tlayoutCalcRows(){\n\t\tif(this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modExists(\"groupRows\")){\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\n\t\t\t}\n\t\t}\n\t}\n\t\n\tlayoutGroupCalcs(groups){\n\t\tgroups.forEach((group) => {\n\t\t\tif(group.calcs.top){\n\t\t\t\tthis.layoutRow(group.calcs.top);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.calcs.bottom){\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.groupList && group.groupList.length){\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//calculate column positions and layout headers\n\tlayoutColumnPosition(allCells){\n\t\tvar leftParents = [];\n\t\t\n\t\tvar leftMargin = 0;\n\t\tvar rightMargin = 0;\n\t\t\n\t\tthis.leftColumns.forEach((column, i) => {\t\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tleftMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.leftColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\n\t\t\t\tif(!leftParents.includes(parentEl)){\n\t\t\t\t\tthis.layoutElement(parentEl, column);\n\t\t\t\t\tleftParents.push(parentEl);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column, i) => {\n\t\t\t\n\t\t\tcolumn.modules.frozen.marginValue = rightMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\trightMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.rightColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetColGroupParentElement(column){\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n\t}\n\t\n\t//layout columns appropriately\n\tlayout(){\t\n\t\tif(this.active && !this.blocked){\n\t\t\t//calculate left columns\n\t\t\tthis.layoutColumnPosition();\n\t\t\t\n\t\t\tthis.reinitializeRows();\n\t\t\t\n\t\t\tthis.layoutCalcRows();\n\t\t}\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\t\t\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t\t\n\t\tvisibleRows.forEach((row) =>{\n\t\t\tif(row.type === \"row\"){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutRow(row){\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\n\t\t}\n\t\t\n\t\tthis.leftColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutElement(element, column){\n\t\tvar position;\n\t\t\n\t\tif(column.modules.frozen && element){\n\t\t\telement.style.position = \"sticky\";\n\n\t\t\tif(this.table.rtl){\n\t\t\t\tposition = column.modules.frozen.position === \"left\" ? \"right\" : \"left\";\n\t\t\t}else{\n\t\t\t\tposition = column.modules.frozen.position;\n\t\t\t}\n\t\t\n\t\t\telement.style[position] = column.modules.frozen.margin;\n\n\t\t\telement.classList.add(\"tabulator-frozen\");\n\t\t\t\n\t\t\telement.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\telement.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t}\n\t}\n\n\tadjustForScrollbar(width){\n\t\tif(this.rightColumns.length){\n\t\t\tthis.table.columnManager.getContentsElement().style.width = \"calc(100% - \" + width + \"px)\";\n\t\t}\n\t}\n\t\n\t_calcSpace(columns, index){\n\t\tvar width = 0;\n\t\t\n\t\tfor (let i = 0; i < index; i++){\n\t\t\tif(columns[i].visible){\n\t\t\t\twidth += columns[i].getWidth();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn width;\n\t}\n}\n\nFrozenColumns.moduleName = \"frozenColumns\";\n\nexport default FrozenColumns;","import Module from '../../core/Module.js';\n\nclass FrozenRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.topElement = document.createElement(\"div\");\n\t\tthis.rows = [];\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\n\n\t\t//register table options\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\n\t}\n\n\tinitialize(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\t\t\n\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\tfragment.appendChild(this.topElement);\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\n\n\t\tif(this.table.options.frozenRows){\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t}\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\tinitializeRows(){\n\t\tthis.table.rowManager.getRows().forEach((row) => {\n\t\t\tthis.initializeRow(row);\n\t\t});\n\t}\n\n\tinitializeRow(row){\n\t\tvar frozenRows = this.table.options.frozenRows,\n\t\trowType = typeof frozenRows;\n\n\t\tif(rowType === \"number\"){\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(rowType === \"function\"){\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(Array.isArray(frozenRows)){\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowFrozen(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\treturn index > -1;\n\t}\n\n\tisFrozen(){\n\t\treturn !!this.rows.length;\n\t}\n\n\tvisibleRows(viewable, rows){\n\t\tthis.rows.forEach((row) => {\n\t\t\trows.push(row);\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\t//filter frozen rows out of display data\n\tgetRows(rows){\n\t\tvar output = rows.slice(0);\n\n\t\tthis.rows.forEach(function(row){\n\t\t\tvar index = output.indexOf(row);\n\n\t\t\tif(index > -1){\n\t\t\t\toutput.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tfreezeRow(row){\n\t\tif(!row.modules.frozen){\n\t\t\trow.modules.frozen = true;\n\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\trow.initialize();\n\t\t\trow.normalizeHeight();\n\t\t\n\t\t\tthis.rows.push(row);\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.styleRows();\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t\t}\n\t}\n\n\tunfreezeRow(row){\n\t\tif(row.modules.frozen){\n\n\t\t\trow.modules.frozen = false;\n\n\t\t\tthis.detachRow(row);\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tif(this.rows.length){\n\t\t\t\tthis.styleRows();\n\t\t\t}\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t\t}\n\t}\n\n\tdetachRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t}\n\n\tstyleRows(row){\n\t\tthis.rows.forEach((row, i) => {\n\t\t\tthis.table.rowManager.styleRow(row, i);\n\t\t});\n\t}\n}\n\nFrozenRows.moduleName = \"frozenRows\";\n\nexport default FrozenRows;","//public group object\nclass GroupComponent {\n\tconstructor (group){\n\t\tthis._group = group;\n\t\tthis.type = \"GroupComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"group\", target._group, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetKey(){\n\t\treturn this._group.key;\n\t}\n\n\tgetField(){\n\t\treturn this._group.field;\n\t}\n\n\tgetElement(){\n\t\treturn this._group.element;\n\t}\n\n\tgetRows(){\n\t\treturn this._group.getRows(true);\n\t}\n\n\tgetSubGroups(){\n\t\treturn this._group.getSubGroups(true);\n\t}\n\n\tgetParentGroup(){\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\n\t}\n\n\tisVisible(){\n\t\treturn this._group.visible;\n\t}\n\n\tshow(){\n\t\tthis._group.show();\n\t}\n\n\thide(){\n\t\tthis._group.hide();\n\t}\n\n\ttoggle(){\n\t\tthis._group.toggleVisibility();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible);\n\t}\n\n\t_getSelf(){\n\t\treturn this._group;\n\t}\n\n\tgetTable(){\n\t\treturn this._group.groupManager.table;\n\t}\n}\n\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\nimport GroupComponent from './GroupComponent.js';\n\n//Group functions\nclass Group{\n\t\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\n\t\tthis.groupManager = groupManager;\n\t\tthis.parent = parent;\n\t\tthis.key = key;\n\t\tthis.level = level;\n\t\tthis.field = field;\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\t\tthis.type = \"group\"; //type of element\n\t\tthis.old = oldGroup;\n\t\tthis.rows = [];\n\t\tthis.groups = [];\n\t\tthis.groupList = [];\n\t\tthis.generator = generator;\n\t\tthis.element = false;\n\t\tthis.elementContents = false;\n\t\tthis.height = 0;\n\t\tthis.outerHeight = 0;\n\t\tthis.initialized = false;\n\t\tthis.calcs = {};\n\t\tthis.initialized = false;\n\t\tthis.modules = {};\n\t\tthis.arrowElement = false;\n\t\t\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.createElements();\n\t\tthis.addBindings();\n\t\t\n\t\tthis.createValueGroups();\n\t}\n\t\n\twipe(elementsOnly){\n\t\tif(!elementsOnly){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\tgroup.wipe();\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tif(row.modules){\n\t\t\t\t\t\tdelete row.modules.group;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n\t\n\tcreateElements(){\n\t\tvar arrow = document.createElement(\"div\");\n\t\tarrow.classList.add(\"tabulator-arrow\");\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-row\");\n\t\tthis.element.classList.add(\"tabulator-group\");\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tthis.arrowElement = document.createElement(\"div\");\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\t\tthis.arrowElement.appendChild(arrow);\n\t\t\n\t\t//setup movable rows\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t\t}\n\t}\n\t\n\tcreateValueGroups(){\n\t\tvar level = this.level + 1;\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\n\t\t\t\tthis._createGroup(value, level);\n\t\t\t});\n\t\t}\n\t}\n\t\n\taddBindings(){\n\t\tvar toggleElement;\n\t\t\n\t\tif(this.groupManager.table.options.groupToggleElement){\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\n\t\t\t\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\n\t\t\t\tif(this.groupManager.table.options.groupToggleElement === \"arrow\"){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t}\n\n\t\t\t\t//allow click event to propagate before toggling visibility\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.toggleVisibility();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\t\n\t_createGroup(groupID, level){\n\t\tvar groupKey = level + \"_\" + groupID;\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\t_addRowToGroup(row){\n\t\t\n\t\tvar level = this.level + 1;\n\t\t\n\t\tif(this.hasSubGroups){\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t\tgroupKey = level + \"_\" + groupID;\n\t\t\t\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\t\tif(this.groups[groupKey]){\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!this.groups[groupKey]){\n\t\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_addRow(row){\n\t\tthis.rows.push(row);\n\t\trow.modules.group = this;\n\t}\n\t\n\tinsertRow(row, to, after){\n\t\tvar data = this.conformRowData({});\n\t\t\n\t\trow.updateData(data);\n\t\t\n\t\tvar toIndex = this.rows.indexOf(to);\n\t\t\n\t\tif(toIndex > -1){\n\t\t\tif(after){\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\n\t\t\t}else{\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t\t}\n\t\t}else{\n\t\t\tif(after){\n\t\t\t\tthis.rows.push(row);\n\t\t\t}else{\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\trow.modules.group = this;\n\t\t\n\t\t// this.generateGroupHeaderContents();\n\t\t\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t\t\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\t\n\tscrollHeader(left){\n\t\tif(this.arrowElement){\n\t\t\tthis.arrowElement.style.marginLeft = left;\n\t\t\t\n\t\t\tthis.groupList.forEach(function(child){\n\t\t\t\tchild.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tgetRowIndex(row){}\n\t\n\t//update row data to match grouping constraints\n\tconformRowData(data){\n\t\tif(this.field){\n\t\t\tdata[this.field] = this.key;\n\t\t}else{\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t\t}\n\t\t\n\t\tif(this.parent){\n\t\t\tdata = this.parent.conformRowData(data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\tremoveRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\tvar el = row.getElement();\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t\t\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t}else{\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\t\t\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(el.parentNode){\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupManager.blockRedraw){\n\t\t\t\tthis.generateGroupHeaderContents();\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupList.length){\n\t\t\t\tif(this.parent){\n\t\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t\t}else{\n\t\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetHeadersAndRows(){\n\t\tvar output = [];\n\t\t\n\t\toutput.push(this);\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\t\n\t\tif(this.calcs.top){\n\t\t\tthis.calcs.top.detachElement();\n\t\t\tthis.calcs.top.deleteCells();\n\t\t}\n\t\t\n\t\tif(this.calcs.bottom){\n\t\t\tthis.calcs.bottom.detachElement();\n\t\t\tthis.calcs.bottom.deleteCells();\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\tif(this.visible){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput = output.concat(this.rows);\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetData(visible, transform){\n\t\tvar output = [];\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(!visible || (visible && this.visible)){\n\t\t\tthis.rows.forEach((row) => {\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRowCount(){\n\t\tvar count = 0;\n\t\t\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tcount += group.getRowCount();\n\t\t\t});\n\t\t}else{\n\t\t\tcount = this.rows.length;\n\t\t}\n\t\treturn count;\n\t}\n\n\t\n\ttoggleVisibility(){\n\t\tif(this.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\t\n\thide(){\n\t\tthis.visible = false;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\t\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\trow.detachElement();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\n\t}\n\t\n\tshow(){\n\t\tthis.visible = true;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tvar prev = this.generateElement();\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\t\trow.initialize();\n\t\t\t\t\t\tprev = rowEl;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\n\t}\n\t\n\t_visSet(){\n\t\tvar data = [];\n\t\t\n\t\tif(typeof this.visible == \"function\"){\n\t\t\t\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\tdata.push(row.getData());\n\t\t\t});\n\t\t\t\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t\t}\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\t\n\t\t\t\tif(result){\n\t\t\t\t\tmatch = result;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tif(this.rows.find(function(item){\n\t\t\t\treturn item === row;\n\t\t\t})){\n\t\t\t\tmatch = this;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetSubGroups(component){\n\t\tvar output = [];\n\t\t\n\t\tthis.groupList.forEach(function(child){\n\t\t\toutput.push(component ? child.getComponent() : child);\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRows(component, includeChildren){\n\t\tvar output = [];\n\t\t\n\t\tif(includeChildren && this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getRows(component, includeChildren));\n\t\t\t});\n\t\t}else{\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\toutput.push(component ? row.getComponent() : row);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgenerateGroupHeaderContents(){\n\t\tvar data = [];\n\t\t\n\t\tvar rows = this.getRows(false, true);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\t\t\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\n\t\tif(typeof this.elementContents === \"string\"){\n\t\t\tthis.element.innerHTML = this.elementContents;\n\t\t}else{\n\t\t\tthis.element.appendChild(this.elementContents);\n\t\t}\n\t\t\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n\t}\n\t\n\tgetPath(path = []) {\n\t\tpath.unshift(this.key);\n\t\tif(this.parent) {\n\t\t\tthis.parent.getPath(path);\n\t\t}\n\t\treturn path;\n\t}\n\t\n\t////////////// Standard Row Functions //////////////\n\t\n\tgetElement(){\n\t\treturn this.elementContents ? this.element : this.generateElement();\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.addBindings = false;\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(this.visible){\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t}else{\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t\t}\n\t\t\n\t\tthis.generateGroupHeaderContents();\n\t\t\n\t\t// this.addBindings();\n\t\t\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(){\n\t\tthis.setHeight(this.element.clientHeight);\n\t}\n\t\n\tinitialize(force){\n\t\tif(!this.initialized || force){\n\t\t\tthis.normalizeHeight();\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\treinitialize(){\n\t\tthis.initialized = false;\n\t\tthis.height = 0;\n\t\t\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.initialize(true);\n\t\t}\n\t}\n\t\n\tsetHeight(height){\n\t\tif(this.height != height){\n\t\t\tthis.height = height;\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\tgetGroup(){\n\t\treturn this;\n\t}\n\t\n\treinitializeHeight(){}\n\t\n\tcalcHeight(){}\n\t\n\tsetCellHeight(){}\n\t\n\tclearCellHeight(){}\n\t\n\tdeinitializeHeight(){}\n\n\trendered(){}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new GroupComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n\nexport default Group;","import Module from '../../core/Module.js';\n\nimport Group from './Group.js';\n\nclass GroupRows extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\tthis.groupList = []; //ordered list of groups\n\t\tthis.allowedValues = false;\n\t\tthis.groups = {}; //hold row groups\n\t\t\n\t\tthis.displayHandler = this.getRows.bind(this);\n\n\t\tthis.blockRedraw = false;\n\t\t\n\t\t//register table options\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\n\t\tthis.registerTableOption(\"groupValues\", false);\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\n\t\t\n\t\t//register table functions\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\n\t}\n\t\n\t//initialize group configuration\n\tinitialize(){\n\t\tthis.subscribe(\"table-destroy\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wipe\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wiped\", this._restore_redrawing.bind(this));\n\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t_blockRedrawing(){\n\t\tthis.blockRedraw = true;\n\t}\n\n\t_restore_redrawing(){\n\t\tthis.blockRedraw = false;\n\t}\n\n\tconfigureGroupSetup(){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar groupBy = this.table.options.groupBy,\n\t\t\tstartOpen = this.table.options.groupStartOpen,\n\t\t\tgroupHeader = this.table.options.groupHeader;\n\t\t\t\n\t\t\tthis.allowedValues = this.table.options.groupValues;\n\t\t\t\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\t\t\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\n\t\t\t\t};\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupIDLookups = [];\n\t\t\t\n\t\t\tif(groupBy){\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\t\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\t\t\t\t\t\n\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\tif(col.definition.topCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(col.definition.bottomCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(!Array.isArray(groupBy)){\n\t\t\t\tgroupBy = [groupBy];\n\t\t\t}\n\t\t\t\n\t\t\tgroupBy.forEach((group, i) => {\n\t\t\t\tvar lookupFunc, column;\n\t\t\t\t\n\t\t\t\tif(typeof group == \"function\"){\n\t\t\t\t\tlookupFunc = group;\n\t\t\t\t}else{\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn data[group];\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groupIDLookups.push({\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\t\t\tfunc:lookupFunc,\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tif(startOpen){\n\t\t\t\tif(!Array.isArray(startOpen)){\n\t\t\t\t\tstartOpen = [startOpen];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstartOpen.forEach((level) => {\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.startOpen = startOpen;\n\t\t\t}\n\t\t\t\n\t\t\tif(groupHeader){\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t\t\t}\n\t\t}else{\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\trowSample(rows, prevValue){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar group = this.getGroups(false)[0];\n\t\t\t\n\t\t\tprevValue.push(group.getRows(false)[0]);\n\t\t}\n\t\t\n\t\treturn prevValue;\n\t}\n\t\n\tvirtualRenderFill(){\n\t\tvar el = this.table.rowManager.tableElement;\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\trows = rows.filter((row) => {\n\t\t\t\treturn row.type !== \"group\";\n\t\t\t});\n\t\t\t\n\t\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\n\t\t}else{\n\t\t\treturn rows;\n\t\t}\n\t}\n\t\n\trowAddingIndex(row, index, top){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.assignRowToGroup(row);\n\t\t\t\n\t\t\tvar groupRows = row.modules.group.rows;\n\t\t\t\n\t\t\tif(groupRows.length > 1){\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\n\t\t\t\t\tif(top){\n\t\t\t\t\t\tif(groupRows[0] !== row){\n\t\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn index;\n\t\t}\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"group-changed\");\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tsetGroupBy(groups){\n\t\tthis.table.options.groupBy = groups;\n\t\t\n\t\tif(!this.initialized){\n\t\t\tthis.initialize();\n\t\t}\n\t\t\n\t\tthis.configureGroupSetup();\n\n\t\tif(!groups && this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs === true){\n\t\t\tthis.table.modules.columnCalcs.reinitializeCalcs();\n\t\t}\n\t\t\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupValues(groupValues){\n\t\tthis.table.options.groupValues = groupValues;\n\t\tthis.configureGroupSetup();\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupStartOpen(values){\n\t\tthis.table.options.groupStartOpen = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tsetGroupHeader(values){\n\t\tthis.table.options.groupHeader = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tuserGetGroups(values){\n\t\treturn this.getGroups(true);\n\t}\n\t\n\t// get grouped table data in the same format as getData()\n\tuserGetGroupedData(){\n\t\treturn this.table.options.groupBy ? this.getGroupedData() : this.getData();\n\t}\n\t\n\t\n\t///////////////////////////////////////\n\t///////// Component Functions /////////\n\t///////////////////////////////////////\n\t\n\trowGetGroup(row){\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\trowMoving(from, to, after){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(!after && to instanceof Group){\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t\t}\n\t\t\t\n\t\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\n\t\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\n\t\t\t\n\t\t\tif(toGroup === fromGroup){\n\t\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\n\t\t\t}else{\n\t\t\t\tif(fromGroup){\n\t\t\t\t\tfromGroup.removeRow(from);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttoGroup.insertRow(from, to, after);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\trowDeleting(row){\n\t\t//remove from group\n\t\tif(this.table.options.groupBy && row.modules.group){\n\t\t\trow.modules.group.removeRow(row);\n\t\t}\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.updateGroupRows(true);\n\t\t}\t\n\t}\n\t\n\tcellUpdated(cell){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.reassignRowToGroup(cell.row);\n\t\t}\n\t}\n\t\n\t//return appropriate rows with group headers\n\tgetRows(rows){\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\n\t\t\t\n\t\t\tthis.generateGroups(rows);\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\n\t\t\t}\n\t\t\t\n\t\t\treturn this.updateGroupRows();\n\t\t\t\n\t\t}else{\n\t\t\treturn rows.slice(0);\n\t\t}\n\t}\n\t\n\tgetGroups(component){\n\t\tvar groupComponents = [];\n\t\t\n\t\tthis.groupList.forEach(function(group){\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\tgetChildGroups(group){\n\t\tvar groupComponents = [];\n\t\t\n\t\tif(!group){\n\t\t\tgroup = this;\n\t\t}\n\t\t\n\t\tgroup.groupList.forEach((child) => {\n\t\t\tif(child.groupList.length){\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\n\t\t\t}else{\n\t\t\t\tgroupComponents.push(child);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\twipe(){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tgroup.wipe();\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\tpullGroupListData(groupList) {\n\t\tvar groupListData = [];\n\t\t\n\t\tgroupList.forEach((group) => {\n\t\t\tvar groupHeader = {};\n\t\t\tgroupHeader.level = 0;\n\t\t\tgroupHeader.rowCount = 0;\n\t\t\tgroupHeader.headerContent = \"\";\n\t\t\tvar childData = [];\n\t\t\t\n\t\t\tif (group.hasSubGroups) {\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\n\t\t\t\t\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\tgroupListData = groupListData.concat(childData);\n\t\t\t}\n\t\t\t\n\t\t\telse {\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\t\n\t\t\t\tgroup.getRows().forEach((row) => {\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupListData;\n\t}\n\t\n\tgetGroupedData(){\n\t\t\n\t\treturn this.pullGroupListData(this.groupList);\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\t\n\t\tif(this.options(\"dataTree\")){\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\n\t\t}\n\t\t\n\t\tthis.groupList.forEach((group) => {\n\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\n\t\t\tif(result){\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tcountGroups(){\n\t\treturn this.groupList.length;\n\t}\n\t\n\tgenerateGroups(rows){\n\t\tvar oldGroups = this.groups;\n\t\t\n\t\tthis.groups = {};\n\t\tthis.groupList = [];\n\t\t\n\t\tif(this.allowedValues && this.allowedValues[0]){\n\t\t\tthis.allowedValues[0].forEach((value) => {\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\n\t\t\t});\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\n\t\t\t});\n\t\t}else{\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\n\t\t\t});\n\t\t}\n\t\t\n\t\tObject.values(oldGroups).forEach((group) => {\n\t\t\tgroup.wipe(true);\n\t\t});\t\n\t}\n\t\n\t\n\tcreateGroup(groupID, level, oldGroups){\n\t\tvar groupKey = level + \"_\" + groupID,\n\t\tgroup;\n\t\t\n\t\toldGroups = oldGroups || [];\n\t\t\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\tassignRowToExistingGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tgroupKey = \"0_\" + groupID;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n\t\n\tassignRowToGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\n\t\t\n\t\tif(newGroupNeeded){\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\n\t\t}\n\t\t\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\n\t\t\n\t\treturn !newGroupNeeded;\n\t}\n\t\n\treassignRowToGroup(row){\n\t\tif(row.type === \"row\"){\n\t\t\tvar oldRowGroup = row.modules.group,\n\t\t\toldGroupPath = oldRowGroup.getPath(),\n\t\t\tnewGroupPath = this.getExpectedPath(row),\n\t\t\tsamePath;\n\t\t\t\n\t\t\t// figure out if new group path is the same as old group path\n\t\t\tsamePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\n\t\t\t\treturn element === newGroupPath[index];\n\t\t\t});\n\t\t\t\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\t\t\tif(!samePath) {\n\t\t\t\toldRowGroup.removeRow(row);\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetExpectedPath(row) {\n\t\tvar groupPath = [], rowData = row.getData();\n\t\t\n\t\tthis.groupIDLookups.forEach((groupId) => {\n\t\t\tgroupPath.push(groupId.func(rowData));\n\t\t});\n\t\t\n\t\treturn groupPath;\n\t}\n\t\n\tupdateGroupRows(force){\n\t\tvar output = [];\n\n\t\tif(!this.blockRedraw){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tscrollHeaders(left){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\n\t\t\t}\n\t\t\t\n\t\t\tleft = left + \"px\";\n\t\t\t\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tgroup.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcheckBasicModeGroupHeaderWidth(){\n\t\tvar element = this.table.rowManager.tableElement,\n\t\tonlyGroupHeaders = true;\n\t\t\n\t\tthis.table.rowManager.getDisplayRows().forEach((row, index) =>{\n\t\t\tthis.table.rowManager.styleRow(row, index);\n\t\t\telement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t\t\n\t\t\tif(row.type !== \"group\"){\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n}\n\nGroupRows.moduleName = \"groupRows\";\n\nexport default GroupRows;","import Module from '../../core/Module.js';\nimport Row from '../../core/row/Row.js';\nimport Cell from '../../core/cell/Cell.js';\n\nimport defaultUndoers from './defaults/undoers.js';\nimport defaultRedoers from './defaults/redoers.js';\n\nclass History extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.history){\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\n\t}\n\n\trowMoved(from, to, after){\n\t\tthis.action(\"rowMove\", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after});\n\t}\n\n\trowAdded(row, data, pos, index){\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\n\t}\n\n\trowDeleted(row){\n\t\tvar index, rows;\n\n\t\tif(this.table.options.groupBy){\n\n\t\t\trows = row.getComponent().getGroup()._getSelf().rows;\n\t\t\tindex = rows.indexOf(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = rows[index-1];\n\t\t\t}\n\t\t}else{\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\n\t\t\t}\n\t\t}\n\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\n\t}\n\n\tcellUpdated(cell){\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\n\t}\n\n\tclear(){\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t}\n\n\taction(type, component, data){\n\t\tthis.history = this.history.slice(0, this.index + 1);\n\n\t\tthis.history.push({\n\t\t\ttype:type,\n\t\t\tcomponent:component,\n\t\t\tdata:data,\n\t\t});\n\n\t\tthis.index ++;\n\t}\n\n\tgetHistoryUndoSize(){\n\t\treturn this.index + 1;\n\t}\n\n\tgetHistoryRedoSize(){\n\t\treturn this.history.length - (this.index + 1);\n\t}\n\n\tclearComponentHistory(component){\n\t\tvar index = this.history.findIndex(function(item){\n\t\t\treturn item.component === component;\n\t\t});\n\n\t\tif(index > -1){\n\t\t\tthis.history.splice(index, 1);\n\t\t\tif(index <= this.index){\n\t\t\t\tthis.index--;\n\t\t\t}\n\n\t\t\tthis.clearComponentHistory(component);\n\t\t}\n\t}\n\n\tundo(){\n\t\tif(this.index > -1){\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.undoers[action.type].call(this, action);\n\n\t\t\tthis.index--;\n\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Undo Error - No more history to undo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tredo(){\n\t\tif(this.history.length-1 > this.index){\n\n\t\t\tthis.index++;\n\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.redoers[action.type].call(this, action);\n\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Redo Error - No more history to redo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//rebind rows to new element after deletion\n\t_rebindRow(oldRow, newRow){\n\t\tthis.history.forEach(function(action){\n\t\t\tif(action.component instanceof Row){\n\t\t\t\tif(action.component === oldRow){\n\t\t\t\t\taction.component = newRow;\n\t\t\t\t}\n\t\t\t}else if(action.component instanceof Cell){\n\t\t\t\tif(action.component.row === oldRow){\n\t\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\t\tif(field){\n\t\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nHistory.moduleName = \"history\";\n\n//load defaults\nHistory.undoers = defaultUndoers;\nHistory.redoers = defaultRedoers;\n\nexport default History;","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tvar after = (action.data.posFrom - action.data.posTo) > 0;\n\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after);\n\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete:function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after);\n\t\t\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","import Module from '../../core/Module.js';\n\nclass HtmlTableImport extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.fieldIndex = [];\n\t\tthis.hasIndex = false;\n\t}\n\n\tinitialize(){\n\t\tthis.tableElementCheck();\n\t}\n\n\ttableElementCheck(){\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\n\t\t\tif(this.table.originalElement.childNodes.length){\n\t\t\t\tthis.parseTable();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tparseTable(){\n\t\tvar element = this.table.originalElement,\n\t\toptions = this.table.options,\n\t\theaders = element.getElementsByTagName(\"th\"),\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\n\t\tdata = [];\n\n\t\tthis.hasIndex = false;\n\n\t\tthis.dispatchExternal(\"htmlImporting\");\n\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t\t//check for Tabulator inline options\n\t\tthis._extractOptions(element, options);\n\n\t\tif(headers.length){\n\t\t\tthis._extractHeaders(headers, rows);\n\t\t}else{\n\t\t\tthis._generateBlankHeaders(headers, rows);\n\t\t}\n\n\t\t//iterate through table rows and build data set\n\t\tfor(var index = 0; index < rows.length; index++){\n\t\t\tvar row = rows[index],\n\t\t\tcells = row.getElementsByTagName(\"td\"),\n\t\t\titem = {};\n\n\t\t\t//create index if the don't exist in table\n\t\t\tif(!this.hasIndex){\n\t\t\t\titem[options.index] = index;\n\t\t\t}\n\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\tvar cell = cells[i];\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//add row data to item\n\t\t\tdata.push(item);\n\t\t}\n\n\t\toptions.data = data;\n\n\t\tthis.dispatchExternal(\"htmlImported\");\n\t}\n\n\t//extract tabulator attribute options\n\t_extractOptions(element, options, defaultOptions){\n\t\tvar attributes = element.attributes;\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\n\t\tvar optionsList = {};\n\n\t\toptionsArr.forEach((item) => {\n\t\t\toptionsList[item.toLowerCase()] = item;\n\t\t});\n\n\t\tfor(var index in attributes){\n\t\t\tvar attrib = attributes[index];\n\t\t\tvar name;\n\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//get value of attribute\n\t_attribValue(value){\n\t\tif(value === \"true\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(value === \"false\"){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t//find column if it has already been defined\n\t_findCol(title){\n\t\tvar match = this.table.options.columns.find((column) => {\n\t\t\treturn column.title === title;\n\t\t});\n\n\t\treturn match || false;\n\t}\n\n\t//extract column from headers\n\t_extractHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\texists = false,\n\t\t\tcol = this._findCol(header.textContent),\n\t\t\twidth;\n\n\t\t\tif(col){\n\t\t\t\texists = true;\n\t\t\t}else{\n\t\t\t\tcol = {title:header.textContent.trim()};\n\t\t\t}\n\n\t\t\tif(!col.field) {\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replaceAll(\" \", \"_\");\n\t\t\t}\n\n\t\t\twidth = header.getAttribute(\"width\");\n\n\t\t\tif(width && !col.width)\t{\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\t//check for Tabulator inline options\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tif(col.field == this.table.options.index){\n\t\t\t\tthis.hasIndex = true;\n\t\t\t}\n\n\t\t\tif(!exists){\n\t\t\t\tthis.table.options.columns.push(col);\n\t\t\t}\n\n\t\t}\n\t}\n\n\t//generate blank headers\n\t_generateBlankHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\tcol = {title:\"\", field:\"col\" + index};\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tvar width = header.getAttribute(\"width\");\n\n\t\t\tif(width){\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n}\n\nHtmlTableImport.moduleName = \"htmlTableImport\";\n\nexport default HtmlTableImport;\n","import csv from './importers/csv.js';\nimport json from './importers/json.js';\nimport array from './importers/array.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tarray:array,\n};","function csvImporter(input){\n\tvar data = [],\n\trow = 0, \n\tcol = 0,\n\tinQuote = false;\n \n\t//Iterate over each character\n\tfor (let index = 0; index < input.length; index++) {\n\t\tlet char = input[index], \n\t\tnextChar = input[index+1]; \n \n\t\t//Initialize empty row\n\t\tif(!data[row]){\n\t\t\tdata[row] = [];\n\t\t}\n\n\t\t//Initialize empty column\n\t\tif(!data[row][col]){\n\t\t\tdata[row][col] = \"\";\n\t\t}\n \n\t\t//Handle quotation mark inside string\n\t\tif (char == '\"' && inQuote && nextChar == '\"') { \n\t\t\tdata[row][col] += char; \n\t\t\tindex++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//Begin / End Quote\n\t\tif (char == '\"') { \n\t\t\tinQuote = !inQuote;\n\t\t\tcontinue;\n\t\t}\n \n\t\t//Next column (if not in quote)\n\t\tif (char == ',' && !inQuote) { \n\t\t\tcol++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CRLF) \n\t\tif (char == '\\r' && nextChar == '\\n' && !inQuote) { \n\t\t\tcol = 0; \n\t\t\trow++; \n\t\t\tindex++; \n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CR or LF) \n\t\tif ((char == '\\r' || char == '\\n') && !inQuote) { \n\t\t\tcol = 0;\n\t\t\trow++;\n\t\t\tcontinue; \n\t\t}\n\n\t\t//Normal Character, append to column\n\t\tdata[row][col] += char;\n\t}\n\n\treturn data;\n}\n\nexport default csvImporter;","export default function(input){\n\ttry {\n\t\treturn JSON.parse(input);\n\t} catch(e) {\n\t\tconsole.warn(\"JSON Import Error - File contents is invalid JSON\", e);\n\t\treturn Promise.reject();\n\t}\n}","function arrayImporter(input){\n\treturn input;\n}\n\nexport default arrayImporter;","import Module from '../../core/Module.js';\n\nimport defaultImporters from './defaults/importers.js';\n\nclass Import extends Module{\n \n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.registerTableOption(\"importFormat\");\n\t\tthis.registerTableOption(\"importReader\", \"text\");\n\t}\n \n\tinitialize(){\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\n\n\t\tif(this.table.options.importFormat){\n\t\t\tthis.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\n\t\t\tthis.subscribe(\"data-load\", this.loadData.bind(this), 10);\n\t\t}\n\t}\n\n\tloadDataCheck(data){\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\n\t}\n\n\tloadData(data, params, config, silent, previousData){\n\t\treturn this.importData(this.lookupImporter(), data)\n\t\t\t.then(this.structureData.bind(this))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import data\");\n\t\t\t\treturn Promise.reject(err);\n\t\t\t});\n\t}\n\n\tlookupImporter(importFormat){\n\t\tvar importer;\n \n\t\tif(!importFormat){\n\t\t\timportFormat = this.table.options.importFormat;\n\t\t}\n \n\t\tif(typeof importFormat === \"string\"){\n\t\t\timporter = Import.importers[importFormat];\n\t\t}else{\n\t\t\timporter = importFormat;\n\t\t}\n\n\t\tif(!importer){\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\n\t\t}\n \n\t\treturn importer;\n\t}\n \n\timportFromFile(importFormat, extension){\n\t\tvar importer = this.lookupImporter(importFormat);\n \n\t\tif(importer){\n\t\t\treturn this.pickFile(extension)\n\t\t\t\t.then(this.importData.bind(this, importer))\n\t\t\t\t.then(this.structureData.bind(this))\n\t\t\t\t.then(this.setData.bind(this))\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t});\n\t\t}\n\t}\n \n\tpickFile(extensions){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.type = \"file\";\n\t\t\tinput.accept = extensions;\n \n\t\t\tinput.addEventListener(\"change\", (e) => {\n\t\t\t\tvar file = input.files[0],\n\t\t\t\treader = new FileReader();\n \n\t\t\t\tswitch(this.table.options.importReader){\n\t\t\t\t\tcase \"buffer\":\n\t\t\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"binary\":\n\t\t\t\t\t\treader.readAsBinaryString(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\treader.readAsDataURL(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treader.readAsText(file);\n\t\t\t\t}\n \n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\tresolve(reader.result);\n\t\t\t\t};\n \n\t\t\t\treader.onerror = (e) => {\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\t\treject();\n\t\t\t\t};\n\t\t\t});\n \n\t\t\tinput.click();\n\t\t});\n\t}\n \n\timportData(importer, fileContents){\n\t\tvar data = importer.call(this.table, fileContents);\n \n\t\tif(data instanceof Promise){\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn data ? Promise.resolve(data) : Promise.reject();\n\t\t}\n\t}\n\n\tstructureData(parsedData){\n\t\tvar data = [];\n \n\t\tif(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\n\t\t\tif(this.table.options.autoColumns){\n\t\t\t\tdata = this.structureArrayToObject(parsedData);\n\t\t\t}else{\n\t\t\t\tdata = this.structureArrayToColumns(parsedData);\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn parsedData;\n\t\t}\n\t}\n\n\tstructureArrayToObject(parsedData){\n\t\tvar columns = parsedData.shift();\n\n\t\tvar data = parsedData.map((values) => {\n\t\t\tvar row = {};\n\n\t\t\tcolumns.forEach((key, i) => {\n\t\t\t\trow[key] = values[i];\n\t\t\t});\n\n\t\t\treturn row;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tstructureArrayToColumns(parsedData){\n\t\tvar data = [],\n\t\tcolumns = this.table.getColumns();\n\n\t\t//remove first row if it is the column names\n\t\tif(columns[0] && parsedData[0][0]){\n\t\t\tif(columns[0].getDefinition().title === parsedData[0][0]){\n\t\t\t\tparsedData.shift();\n\t\t\t}\n\t\t}\n \n\t\t//convert row arrays to objects\n\t\tparsedData.forEach((rowData) => {\n\t\t\tvar row = {};\n\n\t\t\trowData.forEach((value, index) => {\n\t\t\t\tvar column = columns[index];\n\n\t\t\t\tif(column){\n\t\t\t\t\trow[column.getField()] = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdata.push(row);\n\t\t});\n\n\t\treturn data;\n\t}\n \n\tsetData(data){\n\t\treturn this.table.setData(data);\n\t}\n}\n\nImport.moduleName = \"import\";\n\n//load defaults\nImport.importers = defaultImporters;\n\nexport default Import;","import Module from '../../core/Module.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\n\nclass Interaction extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.eventMap = {\n\t\t\t//row events\n\t\t\trowClick:\"row-click\",\n\t\t\trowDblClick:\"row-dblclick\",\n\t\t\trowContext:\"row-contextmenu\",\n\t\t\trowMouseEnter:\"row-mouseenter\",\n\t\t\trowMouseLeave:\"row-mouseleave\",\n\t\t\trowMouseOver:\"row-mouseover\",\n\t\t\trowMouseOut:\"row-mouseout\",\n\t\t\trowMouseMove:\"row-mousemove\",\n\t\t\trowMouseDown:\"row-mousedown\",\n\t\t\trowMouseUp:\"row-mouseup\",\n\t\t\trowTap:\"row\",\n\t\t\trowDblTap:\"row\",\n\t\t\trowTapHold:\"row\",\n\n\t\t\t//cell events\n\t\t\tcellClick:\"cell-click\",\n\t\t\tcellDblClick:\"cell-dblclick\",\n\t\t\tcellContext:\"cell-contextmenu\",\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\n\t\t\tcellMouseOver:\"cell-mouseover\",\n\t\t\tcellMouseOut:\"cell-mouseout\",\n\t\t\tcellMouseMove:\"cell-mousemove\",\n\t\t\tcellMouseDown:\"cell-mousedown\",\n\t\t\tcellMouseUp:\"cell-mouseup\",\n\t\t\tcellTap:\"cell\",\n\t\t\tcellDblTap:\"cell\",\n\t\t\tcellTapHold:\"cell\",\n\n\t\t\t//column header events\n\t\t\theaderClick:\"column-click\",\n\t\t\theaderDblClick:\"column-dblclick\",\n\t\t\theaderContext:\"column-contextmenu\",\n\t\t\theaderMouseEnter:\"column-mouseenter\",\n\t\t\theaderMouseLeave:\"column-mouseleave\",\n\t\t\theaderMouseOver:\"column-mouseover\",\n\t\t\theaderMouseOut:\"column-mouseout\",\n\t\t\theaderMouseMove:\"column-mousemove\",\n\t\t\theaderMouseDown:\"column-mousedown\",\n\t\t\theaderMouseUp:\"column-mouseup\",\n\t\t\theaderTap:\"column\",\n\t\t\theaderDblTap:\"column\",\n\t\t\theaderTapHold:\"column\",\n\n\t\t\t//group header\n\t\t\tgroupClick:\"group-click\",\n\t\t\tgroupDblClick:\"group-dblclick\",\n\t\t\tgroupContext:\"group-contextmenu\",\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\n\t\t\tgroupMouseOver:\"group-mouseover\",\n\t\t\tgroupMouseOut:\"group-mouseout\",\n\t\t\tgroupMouseMove:\"group-mousemove\",\n\t\t\tgroupMouseDown:\"group-mousedown\",\n\t\t\tgroupMouseUp:\"group-mouseup\",\n\t\t\tgroupTap:\"group\",\n\t\t\tgroupDblTap:\"group\",\n\t\t\tgroupTapHold:\"group\",\n\t\t};\n\n\t\tthis.subscribers = {};\n\n\t\tthis.touchSubscribers = {};\n\n\t\tthis.columnSubscribers = {};\n\n\t\tthis.touchWatchers = {\n\t\t\trow:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcell:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcolumn:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tgroup:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t}\n\t\t};\n\n\t\tthis.registerColumnOption(\"headerClick\");\n\t\tthis.registerColumnOption(\"headerDblClick\");\n\t\tthis.registerColumnOption(\"headerContext\");\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\n\t\tthis.registerColumnOption(\"headerMouseOver\");\n\t\tthis.registerColumnOption(\"headerMouseOut\");\n\t\tthis.registerColumnOption(\"headerMouseMove\");\n\t\tthis.registerColumnOption(\"headerMouseDown\");\n\t\tthis.registerColumnOption(\"headerMouseUp\");\n\t\tthis.registerColumnOption(\"headerTap\");\n\t\tthis.registerColumnOption(\"headerDblTap\");\n\t\tthis.registerColumnOption(\"headerTapHold\");\n\n\t\tthis.registerColumnOption(\"cellClick\");\n\t\tthis.registerColumnOption(\"cellDblClick\");\n\t\tthis.registerColumnOption(\"cellContext\");\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\n\t\tthis.registerColumnOption(\"cellMouseOver\");\n\t\tthis.registerColumnOption(\"cellMouseOut\");\n\t\tthis.registerColumnOption(\"cellMouseMove\");\n\t\tthis.registerColumnOption(\"cellMouseDown\");\n\t\tthis.registerColumnOption(\"cellMouseUp\");\n\t\tthis.registerColumnOption(\"cellTap\");\n\t\tthis.registerColumnOption(\"cellDblTap\");\n\t\tthis.registerColumnOption(\"cellTapHold\");\n\n\t}\n\n\tinitialize(){\n\t\tthis.initializeExternalEvents();\n\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.clearTouchWatchers.bind(this));\n\t\tthis.subscribe(\"scroll-vertical\", this.clearTouchWatchers.bind(this));\n\t}\n\n\tclearTouchWatchers(){\n\t\tvar types = Object.values(this.touchWatchers);\n\n\t\ttypes.forEach((type) => {\n\t\t\tfor(let key in type){\n\t\t\t\ttype[key] = null;\n\t\t\t}\n\t\t});\n\t}\n\t\t\n\tcellContentsSelectionFixer(e, cell){\n\t\tvar range;\n\n\t\tif(this.table.modExists(\"edit\")){\n\t\t\tif (this.table.modules.edit.currentCell === cell){\n\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t}\n\t\t}\n\n\t\te.preventDefault();\n\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\n\tinitializeExternalEvents(){\n\t\tfor(let key in this.eventMap){\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key));\n\t\t}\n\t}\n\n\tsubscriptionChanged(key, added){\n\t\tif(added){\n\t\t\tif(!this.subscribers[key]){\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t}else{\n\t\t\t\t\tthis.subscribeTouchEvents(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t\tdelete this.subscribers[key];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.unsubscribeTouchEvents(key);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tsubscribeTouchEvents(key){\n\t\tvar type = this.eventMap[key];\n\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\n\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\t\t}\n\n\t\tthis.subscribers[key] = true;\n\t}\n\n\tunsubscribeTouchEvents(key){\n\t\tvar noTouch = true,\n\t\ttype = this.eventMap[key];\n\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\n\t\t\tdelete this.subscribers[key];\n\n\t\t\tfor(let i in this.eventMap){\n\t\t\t\tif(this.eventMap[i] === type){\n\t\t\t\t\tif(this.subscribers[i]){\n\t\t\t\t\t\tnoTouch = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(noTouch){\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\n\t\tfor(let key in this.eventMap){\n\t\t\tif(def[key]){\n\t\t\t\tthis.subscriptionChanged(key, true);\n\n\t\t\t\tif(!this.columnSubscribers[key]){\n\t\t\t\t\tthis.columnSubscribers[key] = [];\n\t\t\t\t}\n\n\t\t\t\tthis.columnSubscribers[key].push(column);\n\t\t\t}\n\t\t}\n\t}\n\n\thandle(action, e, component){\n\t\tthis.dispatchEvent(action, e, component);\n\t}\n\n\thandleTouch(type, action, e, component){\n\t\tvar watchers = this.touchWatchers[type];\n\n\t\tif(type === \"column\"){\n\t\t\ttype = \"header\";\n\t\t}\n\n\t\tswitch(action){\n\t\t\tcase \"start\":\n\t\t\t\twatchers.tap = true;\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\n\t\t\t\twatchers.tapHold = setTimeout(() => {\n\t\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\t\twatchers.tapHold = null;\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\n\t\t\t\t}, 1000);\n\t\t\t\tbreak;\n\n\t\t\tcase \"end\":\n\t\t\t\tif(watchers.tap){\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\n\t\t\t\t}\n\n\t\t\t\tif(watchers.tapDbl){\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\n\t\t\t\t}else{\n\t\t\t\t\twatchers.tapDbl = setTimeout(() => {\n\t\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\t\twatchers.tapDbl = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\twatchers.tapHold = null;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdispatchEvent(action, e, component){\n\t\tvar componentObj = component.getComponent(),\n\t\tcallback;\n\n\t\tif(this.columnSubscribers[action]){\n\n\t\t\tif(component instanceof Cell){\n\t\t\t\tcallback = component.column.definition[action];\n\t\t\t}else if(component instanceof Column){\n\t\t\t\tcallback = component.definition[action];\n\t\t\t}\n\n\t\t\tif(callback){\n\t\t\t\tcallback(e, componentObj);\n\t\t\t}\n\t\t}\n\n\t\tthis.dispatchExternal(action, e, componentObj);\n\t}\n}\n\nInteraction.moduleName = \"interaction\";\n\nexport default Interaction;\n","import Module from '../../core/Module.js';\n\nimport defaultBindings from './defaults/bindings.js';\nimport defaultActions from './defaults/actions.js';\n\nclass Keybindings extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.watchKeys = null;\n\t\tthis.pressedKeys = null;\n\t\tthis.keyupBinding = false;\n\t\tthis.keydownBinding = false;\n\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\n\t}\n\n\tinitialize(){\n\t\tvar bindings = this.table.options.keybindings,\n\t\tmergedBindings = {};\n\n\t\tthis.watchKeys = {};\n\t\tthis.pressedKeys = [];\n\n\t\tif(bindings !== false){\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings);\n\t\t\tObject.assign(mergedBindings, bindings);\n\n\t\t\tthis.mapBindings(mergedBindings);\n\t\t\tthis.bindEvents();\n\t\t}\n\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t}\n\n\tmapBindings(bindings){\n\t\tfor(let key in bindings){\n\t\t\tif(Keybindings.actions[key]){\n\t\t\t\tif(bindings[key]){\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t\t}\n\n\t\t\t\t\tbindings[key].forEach((binding) => {\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\n\t\t\t\t\t\t\n\t\t\t\t\t\tbindingList.forEach((item) => {\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\n\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\tmapBinding(action, symbolsList){\n\t\tvar binding = {\n\t\t\taction: Keybindings.actions[action],\n\t\t\tkeys: [],\n\t\t\tctrl: false,\n\t\t\tshift: false,\n\t\t\tmeta: false,\n\t\t};\n\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\t\tsymbols.forEach((symbol) => {\n\t\t\tswitch(symbol){\n\t\t\t\tcase \"ctrl\":\n\t\t\t\t\tbinding.ctrl = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"shift\":\n\t\t\t\t\tbinding.shift = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"meta\":\n\t\t\t\t\tbinding.meta = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\n\t\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\t\tif(!this.watchKeys[symbol]){\n\t\t\t\t\t\tthis.watchKeys[symbol] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.watchKeys[symbol].push(binding);\n\t\t\t}\n\t\t});\n\t}\n\n\tbindEvents(){\n\t\tvar self = this;\n\n\t\tthis.keyupBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tself.pressedKeys.push(code);\n\n\t\t\t\tbindings.forEach(function(binding){\n\t\t\t\t\tself.checkBinding(e, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tthis.keydownBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n\t}\n\n\tclearBindings(){\n\t\tif(this.keyupBinding){\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t\t}\n\n\t\tif(this.keydownBinding){\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t\t}\n\t}\n\n\tcheckBinding(e, binding){\n\t\tvar match = true;\n\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\n\t\t\tbinding.keys.forEach((key) => {\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\n\n\t\t\t\tif(index == -1){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tbinding.action.call(this, e);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nKeybindings.moduleName = \"keybindings\";\n\n//load defaults\nKeybindings.bindings = defaultBindings;\nKeybindings.actions = defaultActions;\n\nexport default Keybindings;","export default {\n\tnavPrev:\"shift + 9\",\n\tnavNext:9,\n\tnavUp:38,\n\tnavDown:40,\n\tnavLeft:37,\n\tnavRight:39,\n\tscrollPageUp:33,\n\tscrollPageDown:34,\n\tscrollToStart:36,\n\tscrollToEnd:35,\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 67\"],\n\n\trangeJumpUp:[\"ctrl + 38\", \"meta + 38\"],\n\trangeJumpDown:[\"ctrl + 40\", \"meta + 40\"],\n\trangeJumpLeft:[\"ctrl + 37\", \"meta + 37\"],\n\trangeJumpRight:[\"ctrl + 39\", \"meta + 39\"],\n\trangeExpandUp:\"shift + 38\",\n\trangeExpandDown:\"shift + 40\",\n\trangeExpandLeft:\"shift + 37\",\n\trangeExpandRight:\"shift + 39\",\n\trangeExpandJumpUp:[\"ctrl + shift + 38\", \"meta + shift + 38\"],\n\trangeExpandJumpDown:[\"ctrl + shift + 40\", \"meta + shift + 40\"],\n\trangeExpandJumpLeft:[\"ctrl + shift + 37\", \"meta + shift + 37\"],\n\trangeExpandJumpRight:[\"ctrl + shift + 39\", \"meta + shift + 39\"],\n};\n","export default {\n\tkeyBlock:function(e){\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos >= 0){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollPageDown:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\n\t\tscrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos <= scrollMax){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\n\t},\n\tscrollToStart:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToEnd:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tnavPrev:function(e){\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\n\t},\n\n\tnavNext:function(e){\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\n\t},\n\n\tnavLeft:function(e){\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\n\t},\n\n\tnavRight:function(e){\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\n\t},\n\n\tnavUp:function(e){\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\n\t},\n\n\tnavDown:function(e){\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\n\t},\n\n\trangeJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, false);\n\t},\n\trangeJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, false);\n\t},\n\trangeJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, false);\n\t},\n\trangeJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, false);\n\t},\n\trangeExpandLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", false, true);\n\t},\n\trangeExpandRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", false, true);\n\t},\n\trangeExpandUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", false, true);\n\t},\n\trangeExpandDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", false, true);\n\t},\n\trangeExpandJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, true);\n\t},\n\trangeExpandJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, true);\n\t},\n\trangeExpandJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, true);\n\t},\n\trangeExpandJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, true);\n\t},\n\n\tundo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.undo();\n\t\t\t}\n\t\t}\n\t},\n\n\tredo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.redo();\n\t\t\t}\n\t\t}\n\t},\n\n\tcopyToClipboard:function(e){\n\t\tif(!this.table.modules.edit.currentCell){\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t}\n\t\t}\n\t},\n};\n","import Module from '../../core/Module.js';\n\nclass Menu extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.menuContainer = null;\n\t\tthis.nestedMenuBlock = false;\n\t\t\n\t\tthis.currentComponent = null;\n\t\tthis.rootPopup = null;\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\n\t\t\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\n\t\tthis.registerTableOption(\"rowDblClickMenu\", false);\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\n\t\tthis.registerTableOption(\"groupDblClickMenu\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextMenu\");\n\t\tthis.registerColumnOption(\"headerClickMenu\");\n\t\tthis.registerColumnOption(\"headerDblClickMenu\");\n\t\tthis.registerColumnOption(\"headerMenu\");\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\n\t\tthis.registerColumnOption(\"contextMenu\");\n\t\tthis.registerColumnOption(\"clickMenu\");\n\t\tthis.registerColumnOption(\"dblClickMenu\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tif(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\n\t\t}\n\t}\t\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextMenu){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickMenu){\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowDblClickMenu){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextMenu){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickMenu){\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupDblClickMenu){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar\tdef = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){\n\t\t\tthis.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerDblClickMenu\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerMenu){\n\t\t\tthis.initializeColumnHeaderMenu(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\n\t\t}\n\t\t\n\t\tif(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){\n\t\t\tthis.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, \"dblClickMenu\");\n\t\t\tthis.subscribe(\"cell-dblclick\", this.columnSubscribers.dblClickMenu);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderMenu(column){\n\t\tvar icon = column.definition.headerMenuIcon,\n\t\theaderMenuEl;\n\t\t\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\n\t\t\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderMenuEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderMenuEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadMenuTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadMenuTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadMenuEvent(menu, e, component){\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\n\t\t\n\t\tthis.loadMenu(e, component, menu);\n\t}\n\t\n\tloadMenu(e, component, menu, parentEl, parentPopup){\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\n\t\tmenuEl = document.createElement(\"div\"),\n\t\tpopup;\n\t\t\n\t\tmenuEl.classList.add(\"tabulator-menu\");\n\t\t\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t//abort if no menu set\n\t\tif(!menu || !menu.length){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(!parentEl){\n\t\t\tif(this.nestedMenuBlock){\n\t\t\t\t//abort if child menu already open\n\t\t\t\tif(this.rootPopup){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\n\t\t\t\t\tthis.nestedMenuBlock = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\n\t\t\t\n\t\t}else{\n\t\t\tpopup = parentPopup.child(menuEl);\n\t\t}\n\t\t\n\t\tmenu.forEach((item) => {\n\t\t\tvar itemEl = document.createElement(\"div\"),\n\t\t\tlabel = item.label,\n\t\t\tdisabled = item.disabled;\n\t\t\t\n\t\t\tif(item.separator){\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t\t}else{\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\t\t\t\t\n\t\t\t\tif(typeof label == \"function\"){\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(label instanceof Node){\n\t\t\t\t\titemEl.appendChild(label);\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = label;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(typeof disabled == \"function\"){\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(disabled){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(item.action){\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmenuEl.appendChild(itemEl);\n\t\t});\n\t\t\n\t\tmenuEl.addEventListener(\"click\", (e) => {\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\n\t\t\t}\n\t\t});\n\t\t\n\t\tpopup.show(parentEl || e);\n\t\t\n\t\tif(popup === this.rootPopup){\n\t\t\tthis.rootPopup.hideOnBlur(() => {\n\t\t\t\tthis.rootPopup = null;\n\t\t\t\t\n\t\t\t\tif(this.currentComponent){\n\t\t\t\t\tthis.dispatch(\"menu-closed\", menu, popup);\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\n\t\t\t\t\tthis.currentComponent = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.currentComponent = component;\n\t\t\t\n\t\t\tthis.dispatch(\"menu-opened\", menu, popup);\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nMenu.moduleName = \"menu\";\n\nexport default Menu;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating column header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving column\n\t\tthis.toCol = false; //destination column\n\t\tthis.toColAfter = false; //position of moving column relative to the destination column\n\t\tthis.startX = 0; //starting position within header element\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\n\t\tthis.touchMove = false;\n\t\t\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\n\t}\n\t\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.classList.add(\"tabulator-col-placeholder\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.movableColumns){\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"alert-show\", this.abortMove.bind(this));\n\t\t}\n\t}\n\n\tabortMove(){\n\t\tclearTimeout(this.checkTimeout);\n\t}\n\t\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\tcolEl;\n\t\t\n\t\tif(!column.modules.frozen && !column.isGroup){\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tconfig.mousemove = function(e){\n\t\t\t\tif(column.parent === self.moving.parent){\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(self);\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tself.touchMove = false;\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tself.bindTouchEvents(column);\n\t\t}\n\t\t\n\t\tcolumn.modules.moveColumn = config;\n\t}\n\t\n\tbindTouchEvents(column){\n\t\tvar colEl = column.getElement(),\n\t\tstartXMove = false, //shifting center position of the cell\n\t\tnextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\n\t\t\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextCol = column.nextColumn();\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\n\t\t\t\tprevCol = column.prevColumn();\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\n\t\t\t\tnextColWidthLast = 0;\n\t\t\t\tprevColWidthLast = 0;\n\t\t\t\tstartXMove = false;\n\t\t\t\t\n\t\t\t\tthis.startMove(e, column);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\n\t\t\tvar diff, moveToCol;\n\t\t\t\n\t\t\tif(this.moving){\n\t\t\t\tthis.moveHover(e);\n\t\t\t\t\n\t\t\t\tif(!startXMove){\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\n\t\t\t\t\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\n\t\t\t\t\t\tmoveToCol = nextCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\n\t\t\t\t\t\tmoveToCol = prevCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(moveToCol){\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tstartMove(e, column){\n\t\tvar element = column.getElement(),\n\t\theaderElement = this.table.columnManager.getContentsElement(),\n\t\theadersElement = this.table.columnManager.getHeadersElement();\n\t\t\n\t\tthis.moving = column;\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\n\t\t\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\t\t\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t\t\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\t\t\n\t\theaderElement.appendChild(this.hoverElement);\n\t\t\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\n\t\t\n\t\tif(!this.touchMove){\n\t\t\tthis._bindMouseMove();\n\t\t\t\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t\t\n\t\tthis.moveHover(e);\n\t}\n\t\n\t_bindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_unbindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tmoveColumn(column, after){\n\t\tvar movingCells = this.moving.getCells();\n\t\t\n\t\tthis.toCol = column;\n\t\tthis.toColAfter = after;\n\t\t\n\t\tif(after){\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\tendMove(e){\n\t\tif(e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\t\t\t\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\t\t\t\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(this.toCol){\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t\t}\n\t\t\t\n\t\t\tthis.moving = false;\n\t\t\tthis.toCol = false;\n\t\t\tthis.toColAfter = false;\n\t\t\t\n\t\t\tif(!this.touchMove){\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tmoveHover(e){\n\t\tvar columnHolder = this.table.columnManager.getContentsElement(),\n\t\tscrollLeft = columnHolder.scrollLeft,\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\n\t\tscrollPos;\n\t\t\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\n\t\t\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nMoveColumns.moduleName = \"moveColumn\";\n\nexport default MoveColumns;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating row header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving row\n\t\tthis.toRow = false; //destination row\n\t\tthis.toRowAfter = false; //position of moving row relative to the destination row\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\n\t\tthis.startY = 0; //starting Y position within header element\n\t\tthis.startX = 0; //starting X position within header element\n\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\tthis.tableRowDropEvent = false;\n\n\t\tthis.touchMove = false;\n\n\t\tthis.connection = false;\n\t\tthis.connectionSelectorsTables = false;\n\t\tthis.connectionSelectorsElements = false;\n\t\tthis.connectionElements = [];\n\t\tthis.connections = [];\n\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\n\n\t\tthis.registerColumnOption(\"rowHandle\");\n\t}\n\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.classList.add(\"tabulator-row-placeholder\");\n\n\t\treturn el;\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.movableRows){\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeGroupHeader(group){\n\t\tvar self = this,\n\t\tconfig = {};\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, group);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl;\n\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(group, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\tif(rowEl.previousSibling){\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tgroup.modules.moveRow = config;\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\trowEl;\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, row);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(row, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(row, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\n\t\tif(!this.hasHandle){\n\n\t\t\trowEl = row.getElement();\n\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(row, row.getElement());\n\t\t}\n\n\t\trow.modules.moveRow = config;\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tthis.hasHandle = true;\n\t\t}\n\t}\n\n\tinitializeCell(cell){\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tvar self = this,\n\t\t\tcellEl = cell.getElement(true);\n\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, cell.row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\n\t\t}\n\t}\n\n\tbindTouchEvents(row, element){\n\t\tvar startYMove = false, //shifting center position of the cell\n\t\tnextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\n\n\t\telement.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextRow = row.nextRow();\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\n\t\t\t\tprevRow = row.prevRow();\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\n\t\t\t\tnextRowHeightLast = 0;\n\t\t\t\tprevRowHeightLast = 0;\n\t\t\t\tstartYMove = false;\n\n\t\t\t\tthis.startMove(e, row);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\tthis.moving, this.toRow, this.toRowAfter;\n\t\telement.addEventListener(\"touchmove\", (e) => {\n\n\t\t\tvar diff, moveToRow;\n\n\t\t\tif(this.moving){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis.moveHover(e);\n\n\t\t\t\tif(!startYMove){\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t}\n\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\n\t\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\n\t\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(moveToRow){\n\t\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t\tthis.touchMove = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t_bindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\t_unbindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\tstartMove(e, row){\n\t\tvar element = row.getElement();\n\n\t\tthis.setStartPosition(e, row);\n\n\t\tthis.moving = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\t\tif(!this.connection){\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\t\telement.parentNode.removeChild(element);\n\t\t}else{\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\t\tthis.connectToTables(row);\n\t\t}\n\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\t\tif(this.connection){\n\t\t\tdocument.body.appendChild(this.hoverElement);\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t\t}else{\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\n\t\t\tthis._bindMouseMove();\n\t\t}\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\n\n\t\tthis.moveHover(e);\n\t}\n\n\tsetStartPosition(e, row){\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t\telement, position;\n\n\t\telement = row.getElement();\n\t\tif(this.connection){\n\t\t\tposition = element.getBoundingClientRect();\n\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t\t}else{\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\n\t\t}\n\t}\n\n\tendMove(e){\n\t\tif(!e || e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\n\t\t\tif(!this.connection){\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\t}\n\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif(this.toRow){\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\n\t\t\t}\n\n\t\t\tthis.moving = false;\n\t\t\tthis.toRow = false;\n\t\t\tthis.toRowAfter = false;\n\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\t\tif(this.connection){\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\t\tthis.disconnectFromTables();\n\t\t\t}\n\t\t}\n\t}\n\n\tmoveRow(row, after){\n\t\tthis.toRow = row;\n\t\tthis.toRowAfter = after;\n\t}\n\n\tmoveHover(e){\n\t\tif(this.connection){\n\t\t\tthis.moveHoverConnections.call(this, e);\n\t\t}else{\n\t\t\tthis.moveHoverTable.call(this, e);\n\t\t}\n\t}\n\n\tmoveHoverTable(e){\n\t\tvar rowHolder = this.table.rowManager.getElement(),\n\t\tscrollTop = rowHolder.scrollTop,\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop;\n\t\t\n\t\tthis.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + \"px\";\n\t}\n\n\tmoveHoverConnections(e){\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\n\t}\n\n\telementRowDrop(e, element, row){\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\n\t}\n\n\t//establish connection with other tables\n\tconnectToTables(row){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\t\trow:row,\n\t\t\t});\n\t\t}\n\n\t\tif(this.connectionSelectorsElements){\n\n\t\t\tthis.connectionElements = [];\n\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t\t}\n\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\n\t\t\t\tif(typeof query === \"string\"){\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t\t}else{\n\t\t\t\t\tthis.connectionElements.push(query);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.connectionElements.forEach((element) => {\n\t\t\t\tvar dropEvent = (e) => {\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\n\t\t\t\t};\n\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t\t});\n\t\t}\n\t}\n\n\t//disconnect from other tables\n\tdisconnectFromTables(){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t\t}\n\n\t\tthis.connectionElements.forEach((element) => {\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\t\tdelete element.tabulatorElementDropEvent;\n\t\t});\n\t}\n\n\t//accept incomming connection\n\tconnect(table, row){\n\t\tif(!this.connectedTable){\n\t\t\tthis.connectedTable = table;\n\t\t\tthis.connectedRow = row;\n\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\n\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//close incoming connection\n\tdisconnect(table){\n\t\tif(table === this.connectedTable){\n\t\t\tthis.connectedTable = false;\n\t\t\tthis.connectedRow = false;\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t\t}\n\t}\n\n\tdropComplete(table, row, success){\n\t\tvar sender = false;\n\n\t\tif(success){\n\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(sender){\n\t\t\t\tsender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table);\n\t\t\t}else{\n\t\t\t\tif(this.table.options.movableRowsSender){\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}\n\n\t\tthis.endMove();\n\t}\n\n\ttableRowDrop(e, row){\n\t\tvar receiver = false,\n\t\tsuccess = false;\n\n\t\te.stopImmediatePropagation();\n\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\n\t\t\tcase \"string\":\n\t\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(receiver){\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t\t}\n\n\t\tif(success){\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}\n\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\t\trow:row,\n\t\t\tsuccess:success,\n\t\t});\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"connect\":\n\t\t\t\treturn this.connect(table, data.row);\n\n\t\t\tcase \"disconnect\":\n\t\t\t\treturn this.disconnect(table);\n\n\t\t\tcase \"dropcomplete\":\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t}\n\t}\n}\n\nMoveRows.prototype.receivers = {\n\tinsert:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\ttoRow.update(fromRow.getData());\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\treplace:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\ttoRow.delete();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n};\n\nMoveRows.prototype.senders = {\n\tdelete:function(fromRow, toRow, toTable){\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.moduleName = \"moveRow\";\n\nexport default MoveRows;","import Module from '../../core/Module.js';\n\nimport defaultMutators from './defaults/mutators.js';\n\nclass Mutator extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of mutation types\n\t\tthis.enabled = true;\n\n\t\tthis.registerColumnOption(\"mutator\");\n\t\tthis.registerColumnOption(\"mutatorParams\");\n\t\tthis.registerColumnOption(\"mutatorData\");\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\n\t\tthis.registerColumnOption(\"mutatorEdit\");\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\n\t\tthis.registerColumnOption(\"mutateLink\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.mutateLink.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\n\t}\n\n\trowDataChanged(row, tempData, updatedData){\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\n\t}\n\n\t//initialize column mutator\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\tmutator;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\n\n\t\t\t\tif(mutator){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\tmutator:mutator,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.mutate = config;\n\t\t}\n\t}\n\n\tlookupMutator(value){\n\t\tvar mutator = false;\n\n\t\t//set column mutator\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Mutator.mutators[value]){\n\t\t\t\t\tmutator = Mutator.mutators[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tmutator = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn mutator;\n\t}\n\n\t//apply mutator to row\n\ttransformRow(data, type, updatedData){\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\tvalue;\n\n\t\tif(this.enabled){\n\n\t\t\tthis.table.columnManager.traverse((column) => {\n\t\t\t\tvar mutator, params, component;\n\n\t\t\t\tif(column.modules.mutate){\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\t\tif(mutator){\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\t\tif((type == \"data\" && !updatedData)|| typeof value !== \"undefined\"){\n\t\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//apply mutator to new cell value\n\ttransformCell(cell, value){\n\t\tif(cell.column.modules.mutate){\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t\t\ttempData = {};\n\n\t\t\tif(mutator){\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\t\t\tcell.column.setFieldValue(tempData, value);\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tmutateLink(cell){\n\t\tvar links = cell.column.definition.mutateLink;\n\n\t\tif(links){\n\t\t\tif(!Array.isArray(links)){\n\t\t\t\tlinks = [links];\n\t\t\t}\n\n\t\t\tlinks.forEach((link) => {\n\t\t\t\tvar linkCell = cell.row.getCell(link);\n\n\t\t\t\tif(linkCell){\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tenable(){\n\t\tthis.enabled = true;\n\t}\n\n\tdisable(){\n\t\tthis.enabled = false;\n\t}\n}\n\nMutator.moduleName = \"mutator\";\n\n//load defaults\nMutator.mutators = defaultMutators;\n\nexport default Mutator;","export default {};","import rows from './pageCounters/rows.js';\nimport pages from './pageCounters/pages.js';\n\n\nexport default {\n\trows:rows,\n\tpages:pages,\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\n\tif(totalRows){\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\n\t\t\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\n\t\t\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(ofEl);\n\t\tel.appendChild(totalEl);\n\t\tel.appendChild(rowsEl);\n\t}else{\n\t\tvalueEl.innerHTML = \" 0 \";\n\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(rowsEl);\n\t}\n\t\n\treturn el;\n}","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\t\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\t\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\t\n\tel.appendChild(showingEl);\n\tel.appendChild(valueEl);\n\tel.appendChild(ofEl);\n\tel.appendChild(totalEl);\n\tel.appendChild(rowsEl);\n\t\n\treturn el;\n}","import Module from '../../core/Module.js';\n\nimport defaultPageCounters from './defaults/pageCounters.js';\n\nclass Page extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.mode = \"local\";\n\t\tthis.progressiveLoad = false;\n\t\t\n\t\tthis.element = null;\n\t\tthis.pageCounterElement = null;\n\t\tthis.pageCounter = null;\n\t\t\n\t\tthis.size = 0;\n\t\tthis.page = 1;\n\t\tthis.count = 5;\n\t\tthis.max = 1;\n\n\t\tthis.remoteRowCountEstimate = null;\n\t\t\n\t\tthis.initialLoad = true;\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\n\t\t\n\t\tthis.pageSizes = [];\n\t\t\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initial page to show on load\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\n\t\t\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\n\t\t\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\n\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad){\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\n\t\t\t\n\t\t\tthis.createElements();\n\t\t\tthis.initializePageCounter();\n\t\t\tthis.initializePaginator();\n\t\t}else if(this.table.options.progressiveLoad){\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\t\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\t\n\trowAddingPosition(row, top){\n\t\tvar rowManager = this.table.rowManager,\n\t\tdisplayRows = rowManager.getDisplayRows(),\n\t\tindex;\n\t\t\n\t\tif(top){\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[0];\n\t\t\t}else{\n\t\t\t\tif(rowManager.activeRows.length){\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[displayRows.length - 1];\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {index, top};\n\t}\n\t\n\tcalculatePageSizes(){\n\t\tvar testElRow, testElCell;\n\t\t\n\t\tif(this.table.options.paginationSize){\n\t\t\tthis.size = this.table.options.paginationSize;\n\t\t}else{\n\t\t\ttestElRow = document.createElement(\"div\");\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\t\ttestElRow.style.visibility = \"hidden\";\n\t\t\t\n\t\t\ttestElCell = document.createElement(\"div\");\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\n\t\t\t\n\t\t\ttestElRow.appendChild(testElCell);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\n\t\t\t\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\n\t\t}\n\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\n\t\t\n\t\tthis.generatePageSizeSelectList();\n\t}\n\t\n\tinitialLoadComplete(){\n\t\tthis.initialLoad = false;\n\t}\n\t\n\tremotePageParams(data, config, silent, params){\n\t\tif(!this.initialLoad){\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\n\t\t\t\tthis.reset(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\t//configure request params\n\t\tparams.page = this.page;\n\t\t\n\t\t//set page size if defined\n\t\tif(this.size){\n\t\t\tparams.size = this.size;\n\t\t}\n\t\t\n\t\treturn params;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetPageToRow(row){\n\t\tif(this.table.options.pagination){\n\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\treturn this.setPageToRow(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Promise.reject();\n\t}\n\t\n\tuserSetPageSize(size){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.setPageSize(size);\n\t\t\treturn this.setPage(1);\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tscrollVertical(top, dir){\n\t\tvar element, diff, margin;\n\t\tif(!dir && !this.table.dataLoader.loading){\n\t\t\telement = this.table.rowManager.getElement();\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\n\t\t\t\n\t\t\tif(diff < margin){\n\t\t\t\tthis.nextPage()\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\n\t\t\t}\n\t\t}\n\t}\n\t\n\trestOnRenderBefore(rows, renderInPosition){\n\t\tif(!renderInPosition){\n\t\t\tif(this.mode === \"local\"){\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(){\n\t\tthis.refreshData(true, \"all\");\n\t}\n\t\n\tcreateElements(){\n\t\tvar button;\n\t\t\n\t\tthis.element = document.createElement(\"span\");\n\t\tthis.element.classList.add(\"tabulator-paginator\");\n\t\t\n\t\tthis.pagesElement = document.createElement(\"span\");\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\t\t\n\t\tbutton = document.createElement(\"button\");\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"\");\n\t\tbutton.setAttribute(\"title\", \"\");\n\t\t\n\t\tthis.firstBut = button.cloneNode(true);\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\t\t\n\t\tthis.prevBut = button.cloneNode(true);\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\t\t\n\t\tthis.nextBut = button.cloneNode(true);\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\t\t\n\t\tthis.lastBut = button.cloneNode(true);\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\t\t\n\t\tif(this.table.options.paginationSizeSelector){\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t\t}\n\t}\n\t\n\tgeneratePageSizeSelectList(){\n\t\tvar pageSizes = [];\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes = [];\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\n\t\t\t\t\t\tpageSizes.push(this.size * i);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t}else{\n\t\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t\t\n\t\t\tpageSizes.forEach((item) => {\n\t\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\t\titemEl.value = item;\n\t\t\t\t\n\t\t\t\tif(item === true){\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\n\t\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = item;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\n\t\t\t});\n\t\t\t\n\t\t\tthis.pageSizeSelect.value = this.size;\n\t\t}\n\t}\n\t\n\tinitializePageCounter(){\n\t\tvar counter = this.table.options.paginationCounter,\n\t\tpageCounter = null;\n\t\t\n\t\tif(counter){\n\t\t\tif(typeof counter === \"function\"){\n\t\t\t\tpageCounter = counter;\n\t\t\t}else{\n\t\t\t\tpageCounter = Page.pageCounters[counter];\n\t\t\t}\n\t\t\t\n\t\t\tif(pageCounter){\n\t\t\t\tthis.pageCounter = pageCounter;\n\t\t\t\t\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup pagination\n\tinitializePaginator(hidden){\n\t\tvar pageSelectLabel, paginationCounterHolder;\n\t\t\n\t\tif(!hidden){\n\t\t\t//build pagination element\n\t\t\t\n\t\t\t//bind localizations\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\n\t\t\t\tthis.firstBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\n\t\t\t\tthis.prevBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\n\t\t\t\tthis.nextBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\n\t\t\t\tthis.lastBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\t//click bindings\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(1);\n\t\t\t});\n\t\t\t\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.previousPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.nextPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(this.max);\n\t\t\t});\n\t\t\t\n\t\t\tif(this.table.options.paginationElement){\n\t\t\t\tthis.element = this.table.options.paginationElement;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.pageSizeSelect){\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\n\t\t\t\t\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\n\t\t\t\t\tthis.setPage(1);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//append to DOM\n\t\t\tthis.element.appendChild(this.firstBut);\n\t\t\tthis.element.appendChild(this.prevBut);\n\t\t\tthis.element.appendChild(this.pagesElement);\n\t\t\tthis.element.appendChild(this.nextBut);\n\t\t\tthis.element.appendChild(this.lastBut);\n\t\t\t\n\t\t\tif(!this.table.options.paginationElement){\n\t\t\t\tif(this.table.options.paginationCounter){\n\n\t\t\t\t\tpaginationCounterHolder; \n\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(paginationCounterHolder){\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.footerAppend(this.pageCounterElement);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.footerAppend(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.page = this.table.options.paginationInitialPage;\n\t\t\tthis.count = this.table.options.paginationButtonCount;\n\t\t}\n\t\t\n\t\t//set default values\n\t\tthis.mode = this.table.options.paginationMode;\n\t}\n\t\n\tinitializeProgressive(mode){\n\t\tthis.initializePaginator(true);\n\t\tthis.mode = \"progressive_\" + mode;\n\t\tthis.progressiveLoad = true;\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"page-changed\");\n\t}\n\t\n\t//calculate maximum page from number of rows\n\tsetMaxRows(rowCount){\n\t\tif(!rowCount){\n\t\t\tthis.max = 1;\n\t\t}else{\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\n\t\t}\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t}\n\t}\n\t\n\t//reset to first page without triggering action\n\treset(force){\n\t\tif(!this.initialLoad){\n\t\t\tif(this.mode == \"local\" || force){\n\t\t\t\tthis.page = 1;\n\t\t\t\tthis.trackChanges();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//set the maximum page\n\tsetMaxPage(max){\n\t\t\n\t\tmax = parseInt(max);\n\t\t\n\t\tthis.max = max || 1;\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t\tthis.trigger();\n\t\t}\n\t}\n\t\n\t//set current page number\n\tsetPage(page){\n\t\tswitch(page){\n\t\t\tcase \"first\":\n\t\t\t\treturn this.setPage(1);\n\t\n\t\t\tcase \"prev\":\n\t\t\t\treturn this.previousPage();\n\t\t\t\n\t\t\tcase \"next\":\n\t\t\t\treturn this.nextPage();\n\t\t\t\n\t\t\tcase \"last\":\n\t\t\t\treturn this.setPage(this.max);\n\t\t}\n\t\t\n\t\tpage = parseInt(page);\n\t\t\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\n\t\t\tthis.page = page;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageToRow(row){\n\t\tvar rows = this.displayRows(-1);\n\t\tvar index = rows.indexOf(row);\n\t\n\t\tif(index > -1){\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\n\t\t\t\n\t\t\treturn this.setPage(page);\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageSize(size){\n\t\tif(size !== true){\n\t\t\tsize = parseInt(size);\n\t\t}\n\n\t\tif(size > 0){\n\t\t\tthis.size = size;\n\t\t\tthis.dispatchExternal(\"pageSizeChanged\", size);\n\t\t}\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t// this.pageSizeSelect.value = size;\n\t\t\tthis.generatePageSizeSelectList();\n\t\t}\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\t_setPageCounter(totalRows, size, currentRow){\n\t\tvar content;\n\t\t\n\t\tif(this.pageCounter){\n\n\t\t\tif(this.mode === \"remote\"){\n\t\t\t\tsize = this.size;\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\n\t\t\t}\n\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\n\t\t\t\n\t\t\tswitch(typeof content){\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif(content instanceof Node){\n\t\t\t\t\t\n\t\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.pageCounterElement.appendChild(content);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\t\n\t\t\t\t\t\tif(content != null){\n\t\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.pageCounterElement.innerHTML = content;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup the pagination buttons\n\t_setPageButtons(){\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\n\t\t\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\n\t\t\n\t\tif(this.page == 1){\n\t\t\tthis.firstBut.disabled = true;\n\t\t\tthis.prevBut.disabled = true;\n\t\t}else{\n\t\t\tthis.firstBut.disabled = false;\n\t\t\tthis.prevBut.disabled = false;\n\t\t}\n\t\t\n\t\tif(this.page == this.max){\n\t\t\tthis.lastBut.disabled = true;\n\t\t\tthis.nextBut.disabled = true;\n\t\t}else{\n\t\t\tthis.lastBut.disabled = false;\n\t\t\tthis.nextBut.disabled = false;\n\t\t}\n\t\t\n\t\tfor(let i = min; i <= max; i++){\n\t\t\tif(i>0 && i <= this.max){\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.footerRedraw();\n\t}\n\t\n\t_generatePageButton(page){\n\t\tvar button = document.createElement(\"button\");\n\t\t\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tif(page == this.page){\n\t\t\tbutton.classList.add(\"active\");\n\t\t}\n\t\t\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\t\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t\t});\n\t\t\n\t\tbutton.setAttribute(\"data-page\", page);\n\t\tbutton.textContent = page;\n\t\t\n\t\tbutton.addEventListener(\"click\", (e) => {\n\t\t\tthis.setPage(page);\n\t\t});\n\t\t\n\t\treturn button;\n\t}\n\t\n\t//previous page\n\tpreviousPage(){\n\t\tif(this.page > 1){\n\t\t\tthis.page--;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//next page\n\tnextPage(){\n\t\tif(this.page < this.max){\n\t\t\tthis.page++;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tif(!this.progressiveLoad){\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\n\t\t\t}\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//return current page number\n\tgetPage(){\n\t\treturn this.page;\n\t}\n\t\n\t//return max page number\n\tgetPageMax(){\n\t\treturn this.max;\n\t}\n\t\n\tgetPageSize(size){\n\t\treturn this.size;\n\t}\n\t\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\t\n\t//return appropriate rows for current page\n\tgetRows(data){\n\t\tvar actualRowPageSize = 0,\n\t\toutput, start, end, actualStartRow;\n\n\t\tvar actualRows = data.filter((row) => {\n\t\t\treturn row.type === \"row\";\n\t\t});\n\t\t\n\t\tif(this.mode == \"local\"){\n\t\t\toutput = [];\n\t\t\t\n\t\t\tthis.setMaxRows(data.length);\n\t\t\t\n\t\t\tif(this.size === true){\n\t\t\t\tstart = 0;\n\t\t\t\tend = data.length;\n\t\t\t}else{\n\t\t\t\tstart = this.size * (this.page - 1);\n\t\t\t\tend = start + parseInt(this.size);\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageButtons();\n\t\t\t\n\t\t\tfor(let i = start; i < end; i++){\n\t\t\t\tlet row = data[i];\n\n\t\t\t\tif(row){\n\t\t\t\t\toutput.push(row);\n\n\t\t\t\t\tif(row.type === \"row\"){\n\t\t\t\t\t\tif(!actualStartRow){\n\t\t\t\t\t\t\tactualStartRow = row;\n\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\tactualRowPageSize++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\n\t\t\t\n\t\t\treturn output;\n\t\t}else{\n\t\t\tthis._setPageButtons();\n\t\t\tthis._setPageCounter(actualRows.length);\n\t\t\t\n\t\t\treturn data.slice(0);\n\t\t}\n\t}\n\t\n\ttrigger(){\n\t\tvar left;\n\t\t\n\t\tswitch(this.mode){\n\t\t\tcase \"local\":\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\n\t\t\t\n\t\t\t\tthis.refreshData();\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\n\t\t\t\treturn Promise.resolve();\n\t\t\t\n\t\t\tcase \"remote\":\n\t\t\t\tthis.dataChanging = true;\n\t\t\t\treturn this.reloadData(null)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.dataChanging = false;\n\t\t\t\t\t});\n\t\t\t\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\treturn this.reloadData(null, true);\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\n\t\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t_parseRemoteData(data){\n\t\tvar margin;\n\t\t\n\t\tif(typeof data.last_page === \"undefined\"){\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\n\t\t}\n\t\t\n\t\tif(data.data){\n\t\t\tthis.max = parseInt(data.last_page) || 1;\n\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\n\t\t\t\n\t\t\tif(this.progressiveLoad){\n\t\t\t\tswitch(this.mode){\n\t\t\t\t\tcase \"progressive_load\":\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page == 1){\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\n\t\t\t\t\t\n\t\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\n\t\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\n\t\t}\n\t\t\n\t\treturn data.data;\n\t}\n\t\n\t//handle the footer element being redrawn\n\tfooterRedraw(){\n\t\tvar footer = this.table.footerManager.containerElement;\n\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}else{\n\t\t\tthis.pagesElement.style.display = '';\n\t\t\t\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\t\tthis.pagesElement.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n}\n\nPage.moduleName = \"page\";\n\n//load defaults\nPage.pageCounters = defaultPageCounters;\n\nexport default Page;\n","// read persistance information from storage\nexport default {\n\tlocal:function(id, type){\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie:function(id, type){\n\t\tvar cookie = document.cookie,\n\t\tkey = id + \"-\" + type,\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\n\t\tend, data;\n\n\t\t//if cookie exists, decode and load column data into tabulator\n\t\tif(cookiePos > -1){\n\t\t\tcookie = cookie.slice(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif(end > -1){\n\t\t\t\tcookie = cookie.slice(0, end);\n\t\t\t}\n\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t}\n\n\t\treturn data ? JSON.parse(data) : false;\n\t}\n};\n","//write persistence information to storage\nexport default {\n\tlocal:function(id, type, data){\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie:function(id, type, data){\n\t\tvar expireDate = new Date();\n\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t}\n};","import Module from '../../core/Module.js';\n\nimport defaultReaders from './defaults/readers.js';\nimport defaultWriters from './defaults/writers.js';\n\nclass Persistence extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = \"\";\n\t\tthis.id = \"\";\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\t\tthis.defWatcherBlock = false;\n\t\tthis.config = {};\n\t\tthis.readFunc = false;\n\t\tthis.writeFunc = false;\n\n\t\tthis.registerTableOption(\"persistence\", false);\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\n\t}\n\n\t// Test for whether localStorage is available for use.\n\tlocalStorageTest() {\n\t\tvar testKey = \"_tabulator_test\";\n\n\t\ttry {\n\t\t\twindow.localStorage.setItem( testKey, testKey);\n\t\t\twindow.localStorage.removeItem( testKey );\n\t\t\treturn true;\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//setup parameters\n\tinitialize(){\n\t\tif(this.table.options.persistence){\n\t\t\t//determine persistent layout storage type\n\t\t\tvar mode = this.table.options.persistenceMode,\n\t\t\tid = this.table.options.persistenceID,\n\t\t\tretrievedData;\n\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\n\n\t\t\tif(this.table.options.persistenceReaderFunc){\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.readers[this.mode]){\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.table.options.persistenceWriterFunc){\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.writers[this.mode]){\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//set storage tag\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\n\n\t\t\tthis.config = {\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\t\t\theaderFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter,\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\n\t\t\t};\n\n\t\t\t//load pagination data if needed\n\t\t\tif(this.config.page){\n\t\t\t\tretrievedData = this.retrieveData(\"page\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.paginationInitialPage;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//load group data if needed\n\t\t\tif(this.config.group){\n\t\t\t\tretrievedData = this.retrieveData(\"group\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.groupHeader;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.config.columns){\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\n\t\t\t}\n\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\n\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"headerFilter\"));\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"column-width\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\n\t\t}\n\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\n\t}\n\n\teventSave(type){\n\t\tif(this.config[type]){\n\t\t\tthis.save(type);\n\t\t}\n\t}\n\n\ttableBuilt(){\n\t\tvar sorters, filters, headerFilters;\n\n\t\tif(this.config.sort){\n\t\t\tsorters = this.load(\"sort\");\n\n\t\t\tif(!sorters === false){\n\t\t\t\tthis.table.options.initialSort = sorters;\n\t\t\t}\n\t\t}\n\n\t\tif(this.config.filter){\n\t\t\tfilters = this.load(\"filter\");\n\n\t\t\tif(!filters === false){\n\t\t\t\tthis.table.options.initialFilter = filters;\n\t\t\t}\n\t\t}\n\t\tif(this.config.headerFilter){\n\t\t\theaderFilters = this.load(\"headerFilter\");\n\n\t\t\tif(!headerFilters === false){\n\t\t\t\tthis.table.options.initialHeaderFilter = headerFilters;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\ttableRedraw(force){\n\t\tif(force && this.config.columns){\n\t\t\tthis.save(\"columns\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tgetColumnLayout(){\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\n\t}\n\n\tsetColumnLayout(layout){\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true));\n\t\treturn true;\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumn(column){\n\t\tvar def, keys;\n\n\t\tif(this.config.columns){\n\t\t\tthis.defWatcherBlock = true;\n\n\t\t\tdef = column.getDefinition();\n\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\t\tkeys.forEach((key)=>{\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\t\tvar value = def[key];\n\n\t\t\t\tif(props){\n\t\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\t\tset: (newValue) => {\n\t\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(props.set){\n\t\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget:() => {\n\t\t\t\t\t\t\tif(props.get){\n\t\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.defWatcherBlock = false;\n\t\t}\n\t}\n\n\t//load saved definitions\n\tload(type, current){\n\t\tvar data = this.retrieveData(type);\n\n\t\tif(current){\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//retrieve data from memory\n\tretrieveData(type){\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n\t}\n\n\t//merge old and new column definitions\n\tmergeDefinition(oldCols, newCols, mergeAllNew){\n\t\tvar output = [];\n\n\t\tnewCols = newCols || [];\n\n\t\tnewCols.forEach((column, to) => {\n\t\t\tvar from = this._findColumn(oldCols, column),\n\t\t\tkeys;\n\n\t\t\tif(from){\n\t\t\t\tif(mergeAllNew){\n\t\t\t\t\tkeys = Object.keys(column);\n\t\t\t\t}else if(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(from);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\n\t\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(from.columns){\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\n\t\t\t\t}\n\n\t\t\t\toutput.push(from);\n\t\t\t}\n\t\t});\n\n\t\toldCols.forEach((column, i) => {\n\t\t\tvar from = this._findColumn(newCols, column);\n\n\t\t\tif (!from) {\n\t\t\t\tif(output.length>i){\n\t\t\t\t\toutput.splice(i, 0, column);\n\t\t\t\t}else{\n\t\t\t\t\toutput.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//find matching columns\n\t_findColumn(columns, subject){\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\n\n\t\treturn columns.find(function(col){\n\t\t\tswitch(type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\n\t\t\t\tcase \"field\":\n\t\t\t\t\treturn col.field === subject.field;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\treturn col === subject;\n\t\t\t}\n\t\t});\n\t}\n\n\t//save data\n\tsave(type){\n\t\tvar data = {};\n\n\t\tswitch(type){\n\t\t\tcase \"columns\":\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\t\tbreak;\n\n\t\t\tcase \"filter\":\n\t\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"headerFilter\":\n\t\t\t\tdata = this.table.modules.filter.getHeaderFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"sort\":\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tdata = this.getGroupConfig();\n\t\t\t\tbreak;\n\n\t\t\tcase \"page\":\n\t\t\t\tdata = this.getPageConfig();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(this.writeFunc){\n\t\t\tthis.writeFunc(this.id, type, data);\n\t\t}\n\n\t}\n\n\t//ensure sorters contain no function data\n\tvalidateSorters(data){\n\t\tdata.forEach(function(item){\n\t\t\titem.column = item.field;\n\t\t\tdelete item.field;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetGroupConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.group){\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tgetPageConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.page){\n\t\t\tif(this.config.page === true || this.config.page.size){\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t\t}\n\n\t\t\tif(this.config.page === true || this.config.page.page){\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\n\t//parse columns for data to store\n\tparseColumns(columns){\n\t\tvar definitions = [],\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\t\tcolumns.forEach((column) => {\n\t\t\tvar defStore = {},\n\t\t\tcolDef = column.getDefinition(),\n\t\t\tkeys;\n\n\t\t\tif(column.isGroup){\n\t\t\t\tdefStore.title = colDef.title;\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\n\t\t\t}else{\n\t\t\t\tdefStore.field = column.getField();\n\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t\tkeys.push(\"visible\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tswitch(key){\n\t\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdefinitions.push(defStore);\n\t\t});\n\n\t\treturn definitions;\n\t}\n}\n\nPersistence.moduleName = \"persistence\";\n\nPersistence.moduleInitOrder = -10;\n\n//load defaults\nPersistence.readers = defaultReaders;\nPersistence.writers = defaultWriters;\n\nexport default Persistence;","import Module from '../../core/Module.js';\n\nclass Popup extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\n\t\tthis.registerTableOption(\"rowDblClickPopup\", false);\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\n\t\tthis.registerTableOption(\"groupDblClickPopup\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextPopup\");\n\t\tthis.registerColumnOption(\"headerClickPopup\");\n\t\tthis.registerColumnOption(\"headerDblClickPopup\");\n\t\tthis.registerColumnOption(\"headerPopup\");\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\n\t\tthis.registerColumnOption(\"contextPopup\");\n\t\tthis.registerColumnOption(\"clickPopup\");\n\t\tthis.registerColumnOption(\"dblClickPopup\");\n\n\t\tthis.registerComponentFunction(\"cell\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"group\", \"popup\", this._componentPopupCall.bind(this));\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\t_componentPopupCall(component, contents, position){\n\t\tthis.loadPopupEvent(contents, null, component, position);\n\t}\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextPopup){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickPopup){\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\n\t\t}\n\n\t\tif(this.table.options.rowDblClickPopup){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextPopup){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickPopup){\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\n\t\t}\n\n\t\tif(this.table.options.groupDblClickPopup){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\n\t\t\n\t\t\n\t\t}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){\n\t\t\tthis.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerDblClickPopup\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickPopup);\n\t\t}\n\t\t\n\t\tif(def.headerPopup){\n\t\t\tthis.initializeColumnHeaderPopup(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\n\t\t}\n\n\t\tif(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){\n\t\t\tthis.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, \"dblClickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.dblClickPopup);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderPopup(column){\n\t\tvar icon = column.definition.headerPopupIcon,\n\t\theaderPopupEl;\n\t\t\n\t\theaderPopupEl = document.createElement(\"span\");\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\n\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderPopupEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderPopupEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadPopupTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadPopupTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadPopupEvent(contents, e, component, position){\n\t\tvar renderedCallback;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\n\t\t\n\t\tthis.loadPopup(e, component, contents, renderedCallback, position);\n\t}\n\t\n\tloadPopup(e, component, contents, renderedCallback, position){\n\t\tvar touch = !(e instanceof MouseEvent),\n\t\tcontentsEl, popup;\n\t\t\n\t\tif(contents instanceof HTMLElement){\n\t\t\tcontentsEl = contents;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\tcontentsEl.innerHTML = contents;\n\t\t}\n\t\t\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\n\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tpopup = this.popup(contentsEl);\n\n\t\tif(typeof renderedCallback === \"function\"){\n\t\t\tpopup.renderCallback(renderedCallback);\n\t\t}\n\n\t\tif(e){\n\t\t\tpopup.show(e);\n\t\t}else{\n\t\t\tpopup.show(component.getElement(), position || \"center\");\n\t\t}\n\n\t\t\n\t\tpopup.hideOnBlur(() => {\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\n\t\t});\n\n\n\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\n\t}\n}\n\nPopup.moduleName = \"popup\";\n\nexport default Popup;\n","import Module from '../../core/Module.js';\n\nclass Print extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.element = false;\n\t\tthis.manualBlock = false;\n\t\tthis.beforeprintEventHandler = null;\n\t\tthis.afterprintEventHandler = null;\n\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\n\n\t\tthis.registerColumnOption(\"print\");\n\t\tthis.registerColumnOption(\"titlePrint\");\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\tthis.beforeprintEventHandler = this.replaceTable.bind(this);\n\t\t\tthis.afterprintEventHandler = this.cleanup.bind(this);\n\n\t\t\twindow.addEventListener(\"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.addEventListener(\"afterprint\", this.afterprintEventHandler);\n\t\t\tthis.subscribe(\"table-destroy\", this.destroy.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\n\t}\n\n\tdestroy(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\twindow.removeEventListener( \"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.removeEventListener( \"afterprint\", this.afterprintEventHandler );\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\treplaceTable(){\n\t\tif(!this.manualBlock){\n\t\t\tthis.element = document.createElement(\"div\");\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\t\tthis.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\t\tthis.table.element.style.display = \"none\";\n\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t\t}\n\t}\n\n\tcleanup(){\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\t\tif(this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\tthis.table.element.style.display = \"\";\n\t\t}\n\t}\n\n\tprintFullscreen(visible, style, config){\n\t\tvar scrollX = window.scrollX,\n\t\tscrollY = window.scrollY,\n\t\theaderEl = document.createElement(\"div\"),\n\t\tfooterEl = document.createElement(\"div\"),\n\t\ttableEl = this.table.modules.export.generateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\n\t\theaderContent, footerContent;\n\n\t\tthis.manualBlock = true;\n\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\t\tif(this.table.options.printHeader){\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\t\tif(typeof headerContent == \"string\"){\n\t\t\t\theaderEl.innerHTML = headerContent;\n\t\t\t}else{\n\t\t\t\theaderEl.appendChild(headerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(headerEl);\n\t\t}\n\n\t\tthis.element.appendChild(tableEl);\n\n\t\tif(this.table.options.printFooter){\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\n\t\t\tif(typeof footerContent == \"string\"){\n\t\t\t\tfooterEl.innerHTML = footerContent;\n\t\t\t}else{\n\t\t\t\tfooterEl.appendChild(footerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(footerEl);\n\t\t}\n\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\t\tdocument.body.appendChild(this.element);\n\n\t\tif(this.table.options.printFormatter){\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t\t}\n\n\t\twindow.print();\n\n\t\tthis.cleanup();\n\n\t\twindow.scrollTo(scrollX, scrollY);\n\n\t\tthis.manualBlock = false;\n\t}\n}\n\nPrint.moduleName = \"print\";\n\nexport default Print;","import Module from '../../core/Module.js';\n\nclass ReactiveData extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.data = false;\n\t\tthis.blocked = false; //block reactivity while performing update\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\t\tthis.currentVersion = 0;\n\t\t\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.reactiveData){\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\n\t\t}\n\t}\n\t\n\twatchData(data){\n\t\tvar self = this,\n\t\tversion;\n\t\t\n\t\tthis.currentVersion ++;\n\t\t\n\t\tversion = this.currentVersion;\n\t\t\n\t\tthis.unwatchData();\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\t//override array push function\n\t\tthis.origFuncs.push = data.push;\n\t\t\n\t\tObject.defineProperty(this.data, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\t\n\t\t\t\t\tself.block(\"data-push\");\n\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.push.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-push\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array unshift function\n\t\tthis.origFuncs.unshift = data.unshift;\n\t\t\n\t\tObject.defineProperty(this.data, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-unshift\");\n\t\t\t\t\t\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.unshift.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-unshift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array shift function\n\t\tthis.origFuncs.shift = data.shift;\n\t\t\n\t\tObject.defineProperty(this.data, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-shift\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.shift.call(data);\n\n\t\t\t\t\tself.unblock(\"data-shift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array pop function\n\t\tthis.origFuncs.pop = data.pop;\n\t\t\n\t\tObject.defineProperty(this.data, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-pop\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.pop.call(data);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-pop\");\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array splice function\n\t\tthis.origFuncs.splice = data.splice;\n\t\t\n\t\tObject.defineProperty(this.data, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t\tend = args[1],\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\n\t\t\t\tstartRow, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-splice\");\n\t\t\t\t\t//add new rows\n\t\t\t\t\tif(newRows){\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(startRow){\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//delete removed rows\n\t\t\t\t\tif(end !== 0){\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\t\t\t\t\t\t\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(newRows || end !== 0){\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.splice.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-splice\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result ;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchData(){\n\t\tif(this.data !== false){\n\t\t\tfor(var key in this.origFuncs){\n\t\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable:true,\n\t\t\t\t\twritable:true,\n\t\t\t\t\tvalue: this.origFuncs.key,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\twatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tthis.watchKey(row, data, key);\n\t\t}\n\t\t\n\t\tif(this.table.options.dataTree){\n\t\t\tthis.watchTreeChildren(row);\n\t\t}\n\t}\n\t\n\twatchTreeChildren (row){\n\t\tvar self = this,\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\n\t\torigFuncs = {};\n\t\t\n\t\tif(childField){\n\t\t\t\n\t\t\torigFuncs.push = childField.push;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"push\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-push\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-push\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.unshift = childField.unshift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-unshift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-unshift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.shift = childField.shift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-shift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.shift.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-shift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.pop = childField.pop;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-pop\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.pop.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-pop\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.splice = childField.splice;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-splice\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-splice\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trebuildTree(row){\n\t\tthis.table.modules.dataTree.initializeRow(row);\n\t\tthis.table.modules.dataTree.layoutRow(row);\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\t\n\twatchKey(row, data, key){\n\t\tvar self = this,\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\n\t\tvalue = data[key],\n\t\tversion = this.currentVersion;\n\t\t\n\t\tObject.defineProperty(data, key, {\n\t\t\tset: (newValue) => {\n\t\t\t\tvalue = newValue;\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"key\");\n\t\t\t\t\t\n\t\t\t\t\tvar update = {};\n\t\t\t\t\tupdate[key] = newValue;\n\t\t\t\t\trow.updateData(update);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"key\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(props.set){\n\t\t\t\t\tprops.set(newValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\tget:() => {\n\t\t\t\t\n\t\t\t\tif(props.get){\n\t\t\t\t\tprops.get();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn value;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tObject.defineProperty(data, key, {\n\t\t\t\tvalue:data[key],\n\t\t\t});\n\t\t}\n\t}\n\t\n\tblock(key){\n\t\tif(!this.blocked){\n\t\t\tthis.blocked = key;\n\t\t}\n\t}\n\t\n\tunblock(key){\n\t\tif(this.blocked === key){\n\t\t\tthis.blocked = false;\n\t\t}\n\t}\n}\n\nReactiveData.moduleName = \"reactiveData\";\n\nexport default ReactiveData;\n\n\n\n","import Module from '../../core/Module.js';\n\nclass ResizeColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.startColumn = false;\n\t\tthis.startX = false;\n\t\tthis.startWidth = false;\n\t\tthis.latestX = false;\n\t\tthis.handle = null;\n\t\tthis.initialNextColumn = null;\n\t\tthis.nextColumn = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.registerColumnOption(\"resizable\", true);\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\n\t}\n\t\n\tinitializeEventWatchers(){\n\t\tif(!this.initialized){\n\t\t\t\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t\n\tlayoutCellHandles(cell){\n\t\tif(cell.row.type === \"row\"){\n\t\t\tthis.deInitializeComponent(cell);\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\n\t\t}\n\t}\n\t\n\tlayoutColumnHeader(column){\n\t\tif(column.definition.resizable){\n\t\t\tthis.initializeEventWatchers();\n\t\t\tthis.deInitializeComponent(column);\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\n\t\t}\n\t}\n\t\n\tcolumnLayoutUpdated(column){\n\t\tvar prev = column.prevColumn();\n\t\t\n\t\tthis.reinitializeColumn(column);\n\t\t\n\t\tif(prev){\n\t\t\tthis.reinitializeColumn(prev);\n\t\t}\n\t}\n\t\n\tcolumnWidthUpdated(column){\n\t\tif(column.modules.frozen){\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfrozenColumnOffset(column){\n\t\tvar offset = false;\n\n\t\tif(column.modules.frozen){\n\t\t\toffset = column.modules.frozen.marginValue; \n\n\t\t\tif(column.modules.frozen.position === \"left\"){\n\t\t\t\toffset += column.getWidth() - 3;\n\t\t\t}else{\n\t\t\t\tif(offset){\n\t\t\t\t\toffset -= 3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn offset !== false ? offset + \"px\" : false;\n\t}\n\t\n\treinitializeColumn(column){\n\t\tvar frozenOffset = this.frozenColumnOffset(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\n\t\t\t\tif(frozenOffset){\n\t\t\t\t\tcell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t\t\tcell.modules.resize.handleEl.style[\"z-index\"] = 11;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\n\t\t\tif(frozenOffset){\n\t\t\t\tcolumn.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\n\t\t}\n\t}\n\t\n\tinitializeColumn(type, component, column, element){\n\t\tvar self = this,\n\t\tvariableHeight = false,\n\t\tmode = column.definition.resizable,\n\t\tconfig = {},\n\t\tnearestColumn = column.getLastColumn();\n\t\t\n\t\t//set column resize mode\n\t\tif(type === \"header\"){\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\t\tconfig = {variableHeight:variableHeight};\n\t\t}\n\t\t\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\n\t\t\t\n\t\t\tvar handle = document.createElement('span');\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\n\t\t\t\n\t\t\thandle.addEventListener(\"click\", function(e){\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t\n\t\t\tvar handleDown = function(e){\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t};\n\t\t\t\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\t\t\t\n\t\t\t//resize column on double click\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\n\t\t\t\t\n\t\t\t\te.stopPropagation();\n\t\t\t\tnearestColumn.reinitializeWidth(true);\n\t\t\t\t\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(column.modules.frozen){\n\t\t\t\thandle.style.position = \"sticky\";\n\t\t\t\thandle.style[column.modules.frozen.position] = this.frozenColumnOffset(column);\n\t\t\t}\n\t\t\t\n\t\t\tconfig.handleEl = handle;\n\t\t\t\n\t\t\tif(element.parentNode && column.visible){\n\t\t\t\telement.after(handle);\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tcomponent.modules.resize = config;\n\t}\n\t\n\tdeInitializeColumn(column){\n\t\tthis.deInitializeComponent(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tthis.deInitializeComponent(cell);\n\t\t});\n\t}\n\t\n\tdeInitializeComponent(component){\n\t\tvar handleEl;\n\t\t\n\t\tif(component.modules.resize){\n\t\t\thandleEl = component.modules.resize.handleEl;\n\t\t\t\n\t\t\tif(handleEl && handleEl.parentElement){\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tresizeHandle(component, height){\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\n\t\t}\n\t}\n\t\n\t_checkResizability(column){\n\t\treturn column.definition.resizable;\n\t}\n\t\n\t_mouseDown(e, column, handle){\n\t\tvar self = this;\n\t\t\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tfunction mouseMove(e){\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\n\t\t\tstartDiff = x - self.startX,\n\t\t\tmoveDiff = x - self.latestX,\n\t\t\tblockedBefore, blockedAfter;\n\t\t\t\n\t\t\tself.latestX = x;\n\t\t\t\n\t\t\tif(self.table.rtl){\n\t\t\t\tstartDiff = -startDiff;\n\t\t\t\tmoveDiff = -moveDiff;\n\t\t\t}\n\t\t\t\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\n\t\t\t\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tif(moveDiff < 0){\n\t\t\t\tself.nextColumn = self.initialNextColumn;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\n\t\t\t\t\n\t\t\t\tif(moveDiff > 0){\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(self.nextColumn){\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.table.columnManager.rerenderColumns(true);\n\t\t\t\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction mouseUp(e){\n\t\t\t\n\t\t\t//block editor from taking action while resizing is taking place\n\t\t\tif(self.startColumn.modules.edit){\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\t\t\t\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\t\t\t\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(self.startWidth !== column.getWidth()){\n\t\t\t\tself.table.columnManager.verticalAlignHeaders();\n\n\t\t\t\tself.dispatch(\"column-resized\", column);\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\n\t\t\t}\n\t\t}\n\t\t\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\t\t\n\t\t//block editor from taking action while resizing is taking place\n\t\tif(self.startColumn.modules.edit){\n\t\t\tself.startColumn.modules.edit.blocked = true;\n\t\t}\n\t\t\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\t\tself.latestX = self.startX;\n\t\tself.startWidth = column.getWidth();\n\t\t\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeColumns.moduleName = \"resizeColumns\";\n\nexport default ResizeColumns;","import Module from '../../core/Module.js';\n\nclass ResizeRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.startColumn = false;\n\t\tthis.startY = false;\n\t\tthis.startHeight = false;\n\t\tthis.handle = null;\n\t\tthis.prevHandle = null;\n\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.resizableRows){\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\trowEl = row.getElement();\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-row-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function(e){\n\t\t\tself.startRow = row;\n\t\t\tself._mouseDown(e, row, handle);\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\n\t\tprevHandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function(e){\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\t\tif(prevRow){\n\t\t\t\tself.startRow = prevRow;\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\n\n\t\trowEl.appendChild(handle);\n\t\trowEl.appendChild(prevHandle);\n\t}\n\n\t_mouseDown(e, row, handle){\n\t\tvar self = this;\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e){\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t\t}\n\n\t\tfunction mouseUp(e){\n\n\t\t\t// //block editor from taking action while resizing is taking place\n\t\t\t// if(self.startColumn.modules.edit){\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t\t// }\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\n\t\t}\n\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\n\t\t//block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = true;\n\t\t// }\n\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\t\tself.startHeight = row.getHeight();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeRows.moduleName = \"resizeRows\";\n\nexport default ResizeRows;","import Module from '../../core/Module.js';\n\nclass ResizeTable extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.binding = false;\n\t\tthis.visibilityObserver = false;\n\t\tthis.resizeObserver = false;\n\t\tthis.containerObserver = false;\n\t\t\n\t\tthis.tableHeight = 0;\n\t\tthis.tableWidth = 0;\n\t\tthis.containerHeight = 0;\n\t\tthis.containerWidth = 0;\n\t\t\n\t\tthis.autoResize = false;\n\t\t\n\t\tthis.visible = false;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.initialRedraw = false;\n\t\t\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.autoResize){\n\t\t\tvar table = this.table,\n\t\t\ttableStyle;\n\t\t\t\n\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\n\t\t\tif(table.element.parentNode){\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\n\t\t\t\t\n\t\t\t\tthis.initializeVisibilityObserver();\n\t\t\t\t\n\t\t\t\tthis.autoResize = true;\n\t\t\t\t\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(table.element.parentNode){\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.resizeObserver.observe(table.element);\n\t\t\t\t\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\n\t\t\t\t\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.binding = function(){\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t\t}\n\t}\n\t\n\tinitializeVisibilityObserver(){\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\n\t\t\tthis.visible = entries[0].isIntersecting;\n\t\t\t\n\t\t\tif(!this.initialized){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.initialRedraw = !this.visible;\n\t\t\t}else{\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.redrawTable(this.initialRedraw);\n\t\t\t\t\tthis.initialRedraw = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.visibilityObserver.observe(this.table.element);\n\t}\n\t\n\tredrawTable(force){\n\t\tif(this.initialized && this.visible){\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\t\t\tthis.table.redraw(force);\n\t\t}\n\t}\n\t\n\ttableResized(){\n\t\tthis.table.rowManager.redraw();\n\t}\n\t\n\tclearBindings(){\n\t\tif(this.binding){\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\n\t\t}\n\t\t\n\t\tif(this.resizeObserver){\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.visibilityObserver){\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.containerObserver){\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t\t}\n\t}\n}\n\nResizeTable.moduleName = \"resizeTable\";\n\nexport default ResizeTable;","import Module from '../../core/Module.js';\n\nclass ResponsiveLayout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.columns = [];\n\t\tthis.hiddenColumns = [];\n\t\tthis.mode = \"\";\n\t\tthis.index = 0;\n\t\tthis.collapseFormatter = [];\n\t\tthis.collapseStartOpen = true;\n\t\tthis.collapseHandleColumn = false;\n\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\n\n\t\tthis.registerColumnOption(\"responsive\");\n\t}\n\n\t//generate responsive columns list\n\tinitialize(){\n\t\tif(this.table.options.responsiveLayout){\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\n\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.generateCollapsedRowContent.bind(this));\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\ttableRedraw(force){\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\n\t\t\tif(!force){\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeResponsivity(){\n\t\tvar columns = [];\n\n\t\tthis.mode = this.table.options.responsiveLayout;\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\t\tthis.hiddenColumns = [];\n\n\t\t//determine level of responsivity for each column\n\t\tthis.table.columnManager.columnsByIndex.forEach((column, i) => {\n\t\t\tif(column.modules.responsive){\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\n\t\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\t\tcolumns.push(column);\n\n\t\t\t\t\tif(!column.visible && this.mode === \"collapse\"){\n\t\t\t\t\t\tthis.hiddenColumns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//sort list by responsivity\n\t\tcolumns = columns.reverse();\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\n\t\t});\n\n\t\tthis.columns = columns;\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.generateCollapsedContent();\n\t\t}\n\n\t\t//assign collapse column\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\n\t\t\t\tthis.collapseHandleColumn = col;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif(this.collapseHandleColumn){\n\t\t\tif(this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}else{\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//define layout information\n\tinitializeColumn(column){\n\t\tvar def = column.getDefinition();\n\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\n\t}\n\n\tinitializeRow(row){\n\t\tvar el;\n\n\t\tif(row.type !== \"calc\"){\n\t\t\tel = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\t\trow.modules.responsiveLayout = {\n\t\t\t\telement:el,\n\t\t\t\topen:this.collapseStartOpen,\n\t\t\t};\n\n\t\t\tif(!this.collapseStartOpen){\n\t\t\t\tel.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tlayoutRow(row){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t}\n\t}\n\n\t//update column visibility\n\tupdateColumnVisibility(column, responsiveToggle){\n\t\tif(!responsiveToggle && column.modules.responsive){\n\t\t\tcolumn.modules.responsive.visible = column.visible;\n\t\t\tthis.initializeResponsivity();\n\t\t}\n\t}\n\n\thideColumn(column){\n\t\tvar colCount = this.hiddenColumns.length;\n\n\t\tcolumn.hide(false, true);\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.hiddenColumns.unshift(column);\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !colCount){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tshowColumn(column){\n\t\tvar index;\n\n\t\tcolumn.show(false, true);\n\t\t//set column width to prevent calculation loops on uninitialized columns\n\t\tcolumn.setWidth(column.getWidth());\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t\t}\n\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//redraw columns to fit space\n\tupdate(){\n\t\tvar working = true;\n\n\t\twhile(working){\n\n\t\t\tlet width = this.table.modules.layout.getMode() == \"fitColumns\" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth();\n\n\t\t\tlet diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width;\n\n\t\t\tif(diff < 0){\n\t\t\t\t//table is too wide\n\t\t\t\tlet column = this.columns[this.index];\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.hideColumn(column);\n\t\t\t\t\tthis.index ++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\t//table has spare space\n\t\t\t\tlet column = this.columns[this.index -1];\n\n\t\t\t\tif(column){\n\t\t\t\t\tif(diff > 0){\n\t\t\t\t\t\tif(diff >= column.getWidth()){\n\t\t\t\t\t\t\tthis.showColumn(column);\n\t\t\t\t\t\t\tthis.index --;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tworking = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!this.table.rowManager.activeRowsCount){\n\t\t\t\tthis.table.rowManager.renderEmptyScroll();\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedContent(){\n\t\tvar rows = this.table.rowManager.getDisplayRows();\n\n\t\trows.forEach((row) => {\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t});\n\t}\n\n\tgenerateCollapsedRowContent(row){\n\t\tvar el, contents;\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\tel = row.modules.responsiveLayout.element;\n\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\n\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\t\tif(contents){\n\t\t\t\tel.appendChild(contents);\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedRowData(row){\n\t\tvar data = row.getData(),\n\t\toutput = [],\n\t\tmockCellComponent;\n\n\t\tthis.hiddenColumns.forEach((column) => {\n\t\t\tvar value = column.getFieldValue(data);\n\n\t\t\tif(column.definition.title && column.field){\n\t\t\t\tif(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){\n\n\t\t\t\t\tmockCellComponent = {\n\t\t\t\t\t\tvalue:false,\n\t\t\t\t\t\tdata:{},\n\t\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\tfunction onRendered(callback){\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tformatCollapsedData(data){\n\t\tvar list = document.createElement(\"table\");\n\n\t\tdata.forEach(function(item){\n\t\t\tvar row = document.createElement(\"tr\");\n\t\t\tvar titleData = document.createElement(\"td\");\n\t\t\tvar valueData = document.createElement(\"td\");\n\t\t\tvar node_content;\n\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\t\ttitleData.appendChild(titleHighlight);\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\n\t\t\t\ttitleHighlight.innerHTML = text || item.title;\n\t\t\t});\n\n\t\t\tif(item.value instanceof Node){\n\t\t\t\tnode_content = document.createElement(\"div\");\n\t\t\t\tnode_content.appendChild(item.value);\n\t\t\t\tvalueData.appendChild(node_content);\n\t\t\t}else{\n\t\t\t\tvalueData.innerHTML = item.value;\n\t\t\t}\n\n\t\t\trow.appendChild(titleData);\n\t\t\trow.appendChild(valueData);\n\t\t\tlist.appendChild(row);\n\t\t}, this);\n\n\t\treturn Object.keys(data).length ? list : \"\";\n\t}\n}\n\nResponsiveLayout.moduleName = \"responsiveLayout\";\n\nexport default ResponsiveLayout;\n","import Module from '../../core/Module.js';\n\nclass SelectRow extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = false; //flag selecting in progress\n\t\tthis.lastClickedRow = false; //last clicked row\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\t\tthis.selectedRows = []; //hold selected rows\n\t\tthis.headerCheckboxElement = null; // hold header select element\n\t\t\n\t\tthis.registerTableOption(\"selectableRows\", \"highlight\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRangeMode\", \"drag\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\n\t\tthis.registerTableOption(\"selectableRowsPersistence\", true); // maintain selection when table view is updated\n\t\tthis.registerTableOption(\"selectableRowsCheck\", function(data, row){return true;}); //check whether row is selectable\n\t\t\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\n\t}\n\t\n\tinitialize(){\n\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tif(this.table.options.selectableRows === \"highlight\" && this.table.options.selectableRange){\n\t\t\tthis.table.options.selectableRows = false;\n\t\t}\n\n\t\tif(this.table.options.selectableRows !== false){\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"selectable\", \"selectableRows\", true);\n\t\tthis.deprecationCheck(\"selectableRollingSelection\", \"selectableRowsRollingSelection\", true);\n\t\tthis.deprecationCheck(\"selectableRangeMode\", \"selectableRowsRangeMode\", true);\n\t\tthis.deprecationCheck(\"selectablePersistence\", \"selectableRowsPersistence\", true);\n\t\tthis.deprecationCheck(\"selectableCheck\", \"selectableRowsCheck\", true);\n\t}\n\t\n\trowRetrieve(type, prevValue){\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\n\t}\n\t\n\trowDeleted(row){\n\t\tthis._deselectRow(row, true);\n\t}\n\t\n\tclearSelectionData(silent){\n\t\tvar prevSelected = this.selectedRows.length;\n\n\t\tthis.selecting = false;\n\t\tthis.lastClickedRow = false;\n\t\tthis.selectPrev = [];\n\t\tthis.selectedRows = [];\n\t\t\n\t\tif(prevSelected && silent !== true){\n\t\t\tthis._rowSelectionChanged();\n\t\t}\n\t}\n\t\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tselectable = self.checkRowSelectability(row),\n\t\telement = row.getElement();\n\t\t\n\t\t// trigger end of row selection\n\t\tvar endSelect = function(){\n\t\t\t\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.selecting = false;\n\t\t\t}, 50);\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t\t};\n\t\t\n\t\trow.modules.select = {selected:false};\n\n\t\telement.classList.toggle(\"tabulator-selectable\", selectable);\n\t\telement.classList.toggle(\"tabulator-unselectable\", !selectable);\n\t\t\n\t\t//set row selection class\n\t\tif(self.checkRowSelectability(row)){\t\t\t\n\t\t\tif(self.table.options.selectableRows && self.table.options.selectableRows != \"highlight\"){\n\t\t\t\tif(self.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\n\t\t\t\t}else{\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!self.selecting){\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\t\t\tif(e.shiftKey){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selecting = true;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selectPrev = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\thandleComplexRowClick(row, e){\n\t\tif(e.shiftKey){\n\t\t\tthis.table._clearSelection();\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\n\t\t\t\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\n\t\t\t\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\t\t\t\n\t\t\tif(e.ctrlKey || e.metaKey){\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.options.selectableRows !== true && !this.isRowSelected(row)){\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectableRows){\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.lastClickedRow = row;\n\t\t\t}else{\n\t\t\t\tthis.deselectRows(undefined, true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.selectableRows !== true){\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectableRows){\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectableRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectRows(toggledRows);\n\t\t\t}\n\t\t\tthis.table._clearSelection();\n\t\t}\n\t\telse if(e.ctrlKey || e.metaKey){\n\t\t\tthis.toggleRow(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}else{\n\t\t\tthis.deselectRows(undefined, true);\n\t\t\tthis.selectRows(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}\n\t}\n\n\tcheckRowSelectability(row){\n\t\tif(row && row.type === \"row\"){\n\t\t\treturn this.table.options.selectableRowsCheck.call(this.table, row.getComponent());\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\t//toggle row selection\n\ttoggleRow(row){\n\t\tif(this.checkRowSelectability(row)){\n\t\t\tif(row.modules.select && row.modules.select.selected){\n\t\t\t\tthis._deselectRow(row);\n\t\t\t}else{\n\t\t\t\tthis._selectRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//select a number of rows\n\tselectRows(rows){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._selectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(false, changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._selectRow(rowMatch, false, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//select an individual row\n\t_selectRow(rowInfo, silent, force){\n\t\t//handle max row count\n\t\tif(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){\n\t\t\tif(this.selectedRows.length >= this.table.options.selectableRows){\n\t\t\t\tif(this.table.options.selectableRowsRollingSelection){\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t\t}else{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\n\t\t\n\t\tif(row){\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = true;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tthis._rowSelectionChanged(silent, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisRowSelected(row){\n\t\treturn this.selectedRows.indexOf(row) !== -1;\n\t}\n\t\n\t//deselect a number of rows\n\tdeselectRows(rows, silent){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = Object.assign([], this.selectedRows);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._deselectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(silent, [], changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._deselectRow(rowMatch, silent, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//deselect an individual row\n\t_deselectRow(rowInfo, silent){\n\t\tvar self = this,\n\t\trow = self.table.rowManager.findRow(rowInfo),\n\t\tindex, element;\n\t\t\n\t\tif(row){\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\n\t\t\t\treturn selectedRow == row;\n\t\t\t});\n\t\t\t\n\t\t\tif(index > -1){\n\n\t\t\t\telement = row.getElement();\n\t\t\t\t\n\t\t\t\tif(element){\n\t\t\t\t\telement.classList.remove(\"tabulator-selected\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = false;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t\t}\n\t\t\t\tself.selectedRows.splice(index, 1);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tself._rowSelectionChanged(silent, undefined, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetSelectedData(){\n\t\tvar data = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetSelectedRows(){\n\t\tvar rows = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\trows.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t_rowSelectionChanged(silent, selected = [], deselected = []){\n\t\tif(this.headerCheckboxElement){\n\t\t\tif(this.selectedRows.length === 0){\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\n\t\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else {\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(!silent){\n\t\t\tif(!Array.isArray(selected)){\n\t\t\t\tselected = [selected];\n\t\t\t}\n\n\t\t\tselected = selected.map(row => row.getComponent());\n\n\t\t\tif(!Array.isArray(deselected)){\n\t\t\t\tdeselected = [deselected];\n\t\t\t}\n\n\t\t\tdeselected = deselected.map(row => row.getComponent());\n\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows(), selected, deselected);\n\t\t}\n\t}\n\t\n\tregisterRowSelectCheckbox (row, element) {\n\t\tif(!row._row.modules.select){\n\t\t\trow._row.modules.select = {};\n\t\t}\n\t\t\n\t\trow._row.modules.select.checkboxEl = element;\n\t}\n\t\n\tregisterHeaderSelectCheckbox (element) {\n\t\tthis.headerCheckboxElement = element;\n\t}\n\t\n\tchildRowSelection(row, select){\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\t\t\n\t\tif(select){\n\t\t\tfor(let child of children){\n\t\t\t\tthis._selectRow(child, true);\n\t\t\t}\n\t\t}else{\n\t\t\tfor(let child of children){\n\t\t\t\tthis._deselectRow(child, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nSelectRow.moduleName = \"selectRow\";\n\nexport default SelectRow;","//sort datetime\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tif(typeof DT != \"undefined\"){\n\t\tif(!DT.isDateTime(a)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\ta = DT.fromISO(String(a));\n\t\t\t}else{\n\t\t\t\ta = DT.fromFormat(String(a), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!DT.isDateTime(b)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\tb = DT.fromISO(String(b));\n\t\t\t}else{\n\t\t\t\tb = DT.fromFormat(String(b), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!a.isValid){\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\n\t\t}else if(!b.isValid){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\t//compare valid values\n\t\t\treturn a - b;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\n\t}else{\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\n\t}\n}","import number from './sorters/number.js';\nimport string from './sorters/string.js';\nimport date from './sorters/date.js';\nimport time from './sorters/time.js';\nimport datetime from './sorters/datetime.js';\nimport boolean from './sorters/boolean.js';\nimport array from './sorters/array.js';\nimport exists from './sorters/exists.js';\nimport alphanum from './sorters/alphanum.js';\n\nexport default {\n\tnumber:number,\n\tstring:string,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tboolean:boolean,\n\tarray:array,\n\texists:exists,\n\talphanum:alphanum\n};","//sort numbers\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar decimal = params.decimalSeparator;\n\tvar thousand = params.thousandSeparator;\n\tvar emptyAlign = 0;\n\n\ta = String(a);\n\tb = String(b);\n\n\tif(thousand){\n\t\ta = a.split(thousand).join(\"\");\n\t\tb = b.split(thousand).join(\"\");\n\t}\n\n\tif(decimal){\n\t\ta = a.split(decimal).join(\".\");\n\t\tb = b.split(decimal).join(\".\");\n\t}\n\n\ta = parseFloat(a);\n\tb = parseFloat(b);\n\n\t//handle non numeric values\n\tif(isNaN(a)){\n\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t}else if(isNaN(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\treturn a - b;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort strings\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\tvar locale;\n\n\t//handle empty values\n\tif(!a){\n\t\temptyAlign = !b ? 0 : -1;\n\t}else if(!b){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\tswitch(typeof params.locale){\n\t\t\tcase \"boolean\":\n\t\t\t\tif(params.locale){\n\t\t\t\t\tlocale = this.langLocale();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"string\":\n\t\t\t\tlocale = params.locale;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import datetime from './datetime.js';\n\n//sort date\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"dd/MM/yyyy\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","import datetime from './datetime.js';\n\n//sort times\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"HH:mm\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","//sort booleans\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\treturn el1 - el2;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar type = params.type || \"length\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tfunction calc(value){\n\t\tvar result;\n\n\t\tswitch(type){\n\t\t\tcase \"length\":\n\t\t\t\tresult = value.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"sum\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"max\":\n\t\t\t\tresult = Math.max.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"min\":\n\t\t\t\tresult = Math.min.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"avg\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t}) / value.length;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t//handle non array values\n\tif(!Array.isArray(a)){\n\t\temptyAlign = !Array.isArray(b) ? 0 : -1;\n\t}else if(!Array.isArray(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\treturn calc(b) - calc(a);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\treturn el1 - el2;\n}","//sort alpha numeric strings\nexport default function(as, bs, aRow, bRow, column, dir, params){\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\n\t//handle empty values\n\tif(!as && as!== 0){\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t}else if(!bs && bs!== 0){\n\t\temptyAlign = 1;\n\t}else{\n\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\ta = String(as).toLowerCase();\n\t\tb = String(bs).toLowerCase();\n\t\tif(a === b) return 0;\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\ta = a.match(rx);\n\t\tb = b.match(rx);\n\t\tL = a.length > b.length ? b.length : a.length;\n\t\twhile(i < L){\n\t\t\ta1= a[i];\n\t\t\tb1= b[i++];\n\t\t\tif(a1 !== b1){\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\treturn a1 - b1;\n\t\t\t\t}\n\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t}\n\t\t}\n\n\t\treturn a.length > b.length;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import Module from '../../core/Module.js';\n\nimport defaultSorters from './defaults/sorters.js';\n\nclass Sort extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\t\t\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\n\t\t\n\t\tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\n\t\tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\n\t\tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\n\t\tthis.registerTableOption(\"headerSortElement\", \"
    \"); //header sort element\n\t\tthis.registerTableOption(\"headerSortClickElement\", \"header\"); //element which triggers sort when clicked\n\t\t\n\t\tthis.registerColumnOption(\"sorter\");\n\t\tthis.registerColumnOption(\"sorterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"headerSort\", true);\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\n\t\tthis.registerColumnOption(\"headerSortTristate\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.registerDataHandler(this.sort.bind(this), 20);\n\t\t\n\t\tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\n\t\tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\n\t\tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\n\t\t\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\n\t\t}\n\t}\n\t\n\ttableBuilt(){\n\t\tif(this.table.options.initialSort){\n\t\t\tthis.setSort(this.table.options.initialSort);\n\t\t}\n\t}\n\t\n\tremoteSortParams(data, config, silent, params){\n\t\tvar sorters = this.getSort();\n\t\t\n\t\tsorters.forEach((item) => {\n\t\t\tdelete item.column;\n\t\t});\n\t\t\n\t\tparams.sort = sorters;\n\t\t\n\t\treturn params;\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetSort(sortList, dir){\n\t\tthis.setSort(sortList, dir);\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\tclearSort(){\n\t\tthis.clear();\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\t//initialize column header for sorting\n\tinitializeColumn(column){\n\t\tvar sorter = false,\n\t\tcolEl,\n\t\tarrowEl;\n\t\t\n\t\tswitch(typeof column.definition.sorter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Sort.sorters[column.definition.sorter]){\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tcolumn.modules.sort = {\n\t\t\tsorter:sorter, dir:\"none\",\n\t\t\tparams:column.definition.sorterParams || {},\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\n\t\t\ttristate: column.definition.headerSortTristate,\n\t\t};\n\t\t\n\t\tif(column.definition.headerSort !== false){\n\t\t\t\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\t\t\t\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortClickElement){\n\t\t\t\tcase \"icon\":\n\t\t\t\t\tarrowEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"header\":\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortElement){\n\t\t\t\tcase \"function\":\n\t\t\t\t//do nothing\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"object\":\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t\t}\n\t\t\t\n\t\t\t//create sorter arrow\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\n\t\t\t\n\t\t\tcolumn.modules.sort.element = arrowEl;\n\t\t\t\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t\n\t\t\tif(this.table.options.headerSortClickElement === \"icon\"){\n\t\t\t\tarrowEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//sort on click\n\t\t\t(this.table.options.headerSortClickElement === \"icon\" ? arrowEl : colEl).addEventListener(\"click\", (e) => {\n\t\t\t\tvar dir = \"\",\n\t\t\t\tsorters=[],\n\t\t\t\tmatch = false;\n\t\t\t\t\n\t\t\t\tif(column.modules.sort){\n\t\t\t\t\tif(column.modules.sort.tristate){\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\n\t\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = this.getSort();\n\t\t\t\t\t\t\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(match > -1){\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//add to existing sort\n\t\t\t\t\t\tthis.setSort(sorters);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(dir == \"none\"){\n\t\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\t\tthis.setSort(column, dir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\n\t\t\t\t\tthis.refreshSort();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trefreshSort(){\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.reloadData(null, false, false);\n\t\t}else{\n\t\t\tthis.refreshData(true);\n\t\t}\n\t\t\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\t\n\t//check if the sorters have changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\t\n\t//return current sorters\n\tgetSort(){\n\t\tvar self = this,\n\t\tsorters = [];\n\t\t\n\t\tself.sortList.forEach(function(item){\n\t\t\tif(item.column){\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn sorters;\n\t}\n\t\n\t//change sort list and trigger sort\n\tsetSort(sortList, dir){\n\t\tvar self = this,\n\t\tnewSortList = [];\n\t\t\n\t\tif(!Array.isArray(sortList)){\n\t\t\tsortList = [{column: sortList, dir:dir}];\n\t\t}\n\t\t\n\t\tsortList.forEach(function(item){\n\t\t\tvar column;\n\t\t\t\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\titem.column = column;\n\t\t\t\tnewSortList.push(item);\n\t\t\t\tself.changed = true;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tself.sortList = newSortList;\n\t\t\n\t\tthis.dispatch(\"sort-changed\");\n\t}\n\t\n\t//clear sorters\n\tclear(){\n\t\tthis.setSort([]);\n\t}\n\t\n\t//find appropriate sorter for column\n\tfindSorter(column){\n\t\tvar row = this.table.rowManager.activeRows[0],\n\t\tsorter = \"string\",\n\t\tfield, value;\n\t\t\n\t\tif(row){\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\t\t\t\n\t\t\tif(field){\n\t\t\t\t\n\t\t\t\tvalue = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Sort.sorters[sorter];\n\t}\n\t\n\t//work through sort list sorting data\n\tsort(data){\n\t\tvar self = this,\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t\tsortListActual = [],\n\t\trowComponents = [];\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorting\")){\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\n\t\t}\n\t\t\n\t\tself.clearColumnHeaders();\n\t\t\n\t\tif(this.table.options.sortMode !== \"remote\"){\n\t\t\t\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tvar sortObj;\n\t\t\t\t\n\t\t\t\tif(item.column){\n\t\t\t\t\tsortObj = item.column.modules.sort;\n\t\t\t\t\t\n\t\t\t\t\tif(sortObj){\n\t\t\t\t\t\t\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\t\t\tif(!sortObj.sorter){\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\t\t\t\t\t\t\n\t\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//sort data\n\t\t\tif (sortListActual.length) {\n\t\t\t\tself._sortItems(data, sortListActual);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorted\")){\n\t\t\tdata.forEach((row) => {\n\t\t\t\trowComponents.push(row.getComponent());\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//clear sort arrows on columns\n\tclearColumnHeaders(){\n\t\tthis.table.columnManager.getRealColumns().forEach((column) => {\n\t\t\tif(column.modules.sort){\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//set the column header sort direction\n\tsetColumnHeader(column, dir){\n\t\tcolumn.modules.sort.dir = dir;\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir === \"asc\" ? \"ascending\" : \"descending\");\n\t\tthis.setColumnHeaderSortIcon(column, dir);\n\t}\n\t\n\tsetColumnHeaderSortIcon(column, dir){\n\t\tvar sortEl = column.modules.sort.element,\n\t\tarrowEl;\n\t\t\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\n\t\t\t\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\n\t\t\t\n\t\t\tif(typeof arrowEl === \"object\"){\n\t\t\t\tsortEl.appendChild(arrowEl);\n\t\t\t}else{\n\t\t\t\tsortEl.innerHTML = arrowEl;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//sort each item in sort list\n\t_sortItems(data, sortList){\n\t\tvar sorterCount = sortList.length - 1;\n\t\t\n\t\tdata.sort((a, b) => {\n\t\t\tvar result;\n\t\t\t\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\n\t\t\t\tlet sortItem = sortList[i];\n\t\t\t\t\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\t\t\t\t\n\t\t\t\tif(result !== 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\t\t});\n\t}\n\t\n\t//process individual rows for a sort function on active data\n\t_sortRow(a, b, column, dir, params){\n\t\tvar el1Comp, el2Comp;\n\t\t\n\t\t//switch elements depending on search direction\n\t\tvar el1 = dir == \"asc\" ? a : b;\n\t\tvar el2 = dir == \"asc\" ? b : a;\n\t\t\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\t\t\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\t\t\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\t\t\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n\t}\n}\n\nSort.moduleName = \"sort\";\n\n//load defaults\nSort.sorters = defaultSorters;\n\nexport default Sort;\n","class RangeComponent {\n\tconstructor(range) {\n\t\tthis._range = range;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function (target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t} else {\n\t\t\t\t\treturn target._range.table.componentFunctionBinder.handle(\"range\", target._range, name);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tgetElement() {\n\t\treturn this._range.element;\n\t}\n\n\tgetData() {\n\t\treturn this._range.getData();\n\t}\n\n\tgetCells() {\n\t\treturn this._range.getCells(true);\n\t}\n\n\tgetStructuredCells() {\n\t\treturn this._range.getStructuredCells();\n\t}\n\n\tgetRows() {\n\t\treturn this._range.getRows().map((row) => row.getComponent());\n\t}\n\n\tgetColumns() {\n\t\treturn this._range.getColumns().map((column) => column.getComponent());\n\t}\n\t\n\tgetBounds() {\n\t\treturn this._range.getBounds();\n\t}\n\n\tgetTopEdge() {\n\t\treturn this._range.top;\n\t}\n\n\tgetBottomEdge() {\n\t\treturn this._range.bottom;\n\t}\n\n\tgetLeftEdge() {\n\t\treturn this._range.left;\n\t}\n\n\tgetRightEdge() {\n\t\treturn this._range.right;\n\t}\n\n\tsetBounds(start, end){\n\t\tif(this._range.destroyedGuard(\"setBounds\")){\n\t\t\tthis._range.setBounds(start ? start._cell : start, end ? end._cell : end);\n\t\t}\n\t}\n\n\tsetStartBound(start){\n\t\tif(this._range.destroyedGuard(\"setStartBound\")){\n\t\t\tthis._range.setEndBound(start ? start._cell : start);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tsetEndBound(end){\n\t\tif(this._range.destroyedGuard(\"setEndBound\")){\n\t\t\tthis._range.setEndBound(end ? end._cell : end);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tclearValues(){\n\t\tif(this._range.destroyedGuard(\"clearValues\")){\n\t\t\tthis._range.clearValues();\n\t\t}\n\t}\n\n\tremove(){\n\t\tif(this._range.destroyedGuard(\"remove\")){\n\t\t\tthis._range.destroy(true);\n\t\t}\n\t}\n}\n\nexport default RangeComponent;\n","import CoreFeature from '../../core/CoreFeature.js';\nimport RangeComponent from \"./RangeComponent\";\n\nclass Range extends CoreFeature{\n\tconstructor(table, rangeManager, start, end) {\n\t\tsuper(table);\n\t\t\n\t\tthis.rangeManager = rangeManager;\n\t\tthis.element = null;\n\t\tthis.initialized = false;\n\t\tthis.initializing = {\n\t\t\tstart:false,\n\t\t\tend:false,\n\t\t};\n\t\tthis.destroyed = false;\n\t\t\n\t\tthis.top = 0;\n\t\tthis.bottom = 0;\n\t\tthis.left = 0;\n\t\tthis.right = 0;\n\t\t\n\t\tthis.table = table;\n\t\tthis.start = {row:0, col:0};\n\t\tthis.end = {row:0, col:0};\n\n\t\tif(this.rangeManager.rowHeader){\n\t\t\tthis.left = 1;\n\t\t\tthis.right = 1;\n\t\t\tthis.start.col = 1;\n\t\t\tthis.end.col = 1;\n\t\t}\n\t\t\n\t\tthis.initElement();\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.initBounds(start, end);\n\t\t});\n\t}\n\t\n\tinitElement(){\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-range\");\n\t}\n\t\n\tinitBounds(start, end){\n\t\tthis._updateMinMax();\n\t\t\n\t\tif(start){\n\t\t\tthis.setBounds(start, end || start);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Boundary Setup ///////\n\t///////////////////////////////////\n\t\n\tsetStart(row, col) {\n\t\tif(this.start.row !== row || this.start.col !== col){\n\t\t\tthis.start.row = row;\n\t\t\tthis.start.col = col;\n\t\t\t\n\t\t\tthis.initializing.start = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetEnd(row, col) {\n\t\tif(this.end.row !== row || this.end.col !== col){\n\t\t\tthis.end.row = row;\n\t\t\tthis.end.col = col;\n\t\t\t\n\t\t\tthis.initializing.end = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetBounds(start, end, visibleRows){\n\t\tif(start){\n\t\t\tthis.setStartBound(start);\n\t\t}\n\t\t\n\t\tthis.setEndBound(end || start);\n\t\tthis.rangeManager.layoutElement(visibleRows);\n\t}\n\t\n\tsetStartBound(element){\n\t\tvar row, col;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tthis.setStart(0, element.getPosition() - 1);\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\t\n\t\t\tif (element.column === this.rangeManager.rowHeader) {\n\t\t\t\tthis.setStart(row, 1);\n\t\t\t} else {\n\t\t\t\tthis.setStart(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tsetEndBound(element){\n\t\tvar rowsCount = this._getTableRows().length,\n\t\trow, col, isRowHeader;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tif (this.rangeManager.selecting === \"column\") {\n\t\t\t\t\tthis.setEnd(rowsCount - 1, element.getPosition() - 1);\n\t\t\t\t} else if (this.rangeManager.selecting === \"cell\") {\n\t\t\t\t\tthis.setEnd(0, element.getPosition() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\tisRowHeader = element.column === this.rangeManager.rowHeader;\n\t\t\t\n\t\t\tif (this.rangeManager.selecting === \"row\") {\n\t\t\t\tthis.setEnd(row, this._getTableColumns().length - 1);\n\t\t\t} else if (this.rangeManager.selecting !== \"row\" && isRowHeader) {\n\t\t\t\tthis.setEnd(row, 0);\n\t\t\t} else if (this.rangeManager.selecting === \"column\") {\n\t\t\t\tthis.setEnd(rowsCount - 1, col);\n\t\t\t} else {\n\t\t\t\tthis.setEnd(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_updateMinMax() {\n\t\tthis.top = Math.min(this.start.row, this.end.row);\n\t\tthis.bottom = Math.max(this.start.row, this.end.row);\n\t\tthis.left = Math.min(this.start.col, this.end.col);\n\t\tthis.right = Math.max(this.start.col, this.end.col);\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeChanged\", this.getComponent());\n\t\t}else{\n\t\t\tif(this.initializing.start && this.initializing.end){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.dispatchExternal(\"rangeAdded\", this.getComponent());\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_getTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\t_getTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Rendering ///////\n\t///////////////////////////////////\n\t\n\tlayout() {\n\t\tvar _vDomTop = this.table.rowManager.renderer.vDomTop,\n\t\t_vDomBottom = this.table.rowManager.renderer.vDomBottom,\n\t\t_vDomLeft = this.table.columnManager.renderer.leftCol,\n\t\t_vDomRight = this.table.columnManager.renderer.rightCol,\t\t\n\t\ttop, bottom, left, right, topLeftCell, bottomRightCell;\n\t\t\n\t\tif (_vDomTop == null) {\n\t\t\t_vDomTop = 0;\n\t\t}\n\t\t\n\t\tif (_vDomBottom == null) {\n\t\t\t_vDomBottom = Infinity;\n\t\t}\n\t\t\n\t\tif (_vDomLeft == null) {\n\t\t\t_vDomLeft = 0;\n\t\t}\n\t\t\n\t\tif (_vDomRight == null) {\n\t\t\t_vDomRight = Infinity;\n\t\t}\n\t\t\n\t\tif (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) {\n\t\t\ttop = Math.max(this.top, _vDomTop);\n\t\t\tbottom = Math.min(this.bottom, _vDomBottom);\n\t\t\tleft = Math.max(this.left, _vDomLeft);\n\t\t\tright = Math.min(this.right, _vDomRight);\n\t\t\t\n\t\t\ttopLeftCell = this.rangeManager.getCell(top, left);\n\t\t\tbottomRightCell = this.rangeManager.getCell(bottom, right);\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-range-active\");\n\t\t\t// this.element.classList.toggle(\"tabulator-range-active\", this === this.rangeManager.activeRange);\n\t\t\t\n\t\t\tthis.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.top = topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t\tthis.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t}\n\t}\n\t\n\tatTopLeft(cell) {\n\t\treturn cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left;\n\t}\n\t\n\tatBottomRight(cell) {\n\t\treturn cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right;\n\t}\n\t\n\toccupies(cell) {\n\t\treturn this.occupiesRow(cell.row) && this.occupiesColumn(cell.column);\n\t}\n\t\n\toccupiesRow(row) {\n\t\treturn this.top <= row.position - 1 && row.position - 1 <= this.bottom;\n\t}\n\t\n\toccupiesColumn(col) {\n\t\treturn this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right;\n\t}\n\t\n\toverlaps(left, top, right, bottom) {\n\t\tif ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tgetData() {\n\t\tvar data = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tvar rowData = row.getData(),\n\t\t\tresult = {};\n\t\t\t\n\t\t\tcolumns.forEach((column) => {\n\t\t\t\tresult[column.field] = rowData[column.field];\n\t\t\t});\n\t\t\t\n\t\t\tdata.push(result);\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetCells(structured, component) {\n\t\tvar cells = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\tif (structured) {\n\t\t\tcells = rows.map((row) => {\n\t\t\t\tvar arr = [];\n\t\t\t\t\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tarr.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn arr;\n\t\t\t});\n\t\t} else {\n\t\t\trows.forEach((row) => {\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tcells.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn cells;\n\t}\n\t\n\tgetStructuredCells() {\n\t\treturn this.getCells(true, true);\n\t}\n\t\n\tgetRows() {\n\t\treturn this._getTableRows().slice(this.top, this.bottom + 1);\n\t}\n\t\n\tgetColumns() {\n\t\treturn this._getTableColumns().slice(this.left, this.right + 1);\n\t}\n\t\n\tclearValues(){\n\t\tvar cells = this.getCells();\n\t\tvar clearValue = this.table.options.selectableRangeClearCellsValue;\n\t\t\n\t\tthis.table.blockRedraw();\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tcell.setValue(clearValue);\n\t\t});\n\t\t\n\t\tthis.table.restoreRedraw();\n\t\t\n\t}\n\t\n\tgetBounds(component){\n\t\tvar cells = this.getCells(false, component),\n\t\toutput = {\n\t\t\tstart:null,\n\t\t\tend:null,\n\t\t};\n\t\t\n\t\tif(cells.length){\n\t\t\toutput.start = cells[0];\n\t\t\toutput.end = cells[cells.length - 1];\n\t\t}else{\n\t\t\tconsole.warn(\"No bounds defined on range\");\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponent() {\n\t\tif (!this.component) {\n\t\t\tthis.component = new RangeComponent(this);\n\t\t}\n\t\treturn this.component;\n\t}\n\t\n\tdestroy(notify) {\n\t\tthis.destroyed = true;\n\t\t\n\t\tthis.element.remove();\n\t\t\n\t\tif(notify){\n\t\t\tthis.rangeManager.rangeRemoved(this);\n\t\t}\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeRemoved\", this.getComponent());\n\t\t}\n\t}\n\t\n\tdestroyedGuard(func){\n\t\tif(this.destroyed){\n\t\t\tconsole.warn(\"You cannot call the \" + func + \" function on a destroyed range\");\n\t\t}\n\t\t\n\t\treturn !this.destroyed;\n\t}\n}\n\nexport default Range;\n","import Module from \"../../core/Module.js\";\nimport Range from \"./Range.js\";\n\nclass SelectRange extends Module {\n\tconstructor(table) {\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = \"cell\";\n\t\tthis.mousedown = false;\n\t\tthis.ranges = [];\n\t\tthis.overlay = null;\n\t\tthis.rowHeader = null;\n\t\tthis.layoutChangeTimeout = null;\n\t\tthis.columnSelection = false;\n\t\tthis.rowSelection = false;\n\t\tthis.maxRanges = 0;\n\t\tthis.activeRange = false;\n\t\tthis.blockKeydown = false;\n\t\t\n\t\tthis.keyDownEvent = this._handleKeyDown.bind(this);\n\t\tthis.mouseUpEvent = this._handleMouseUp.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"selectableRange\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeColumns\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeRows\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeClearCells\", false); //allow clearing of active range\n\t\tthis.registerTableOption(\"selectableRangeClearCellsValue\", undefined); //value for cleared active range\n\n\t\tthis.registerTableFunction(\"getRangesData\", this.getRangesData.bind(this));\n\t\tthis.registerTableFunction(\"getRanges\", this.getRanges.bind(this));\n\t\tthis.registerTableFunction(\"addRange\", this.addRangeFromComponent.bind(this));\n\n\t\tthis.registerComponentFunction(\"cell\", \"getRanges\", this.cellGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getRanges\", this.rowGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getRanges\", this.colGetRanges.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Initialization ///////\n\t///////////////////////////////////\n\t\n\tinitialize() {\n\t\tif (this.options(\"selectableRange\")) {\t\t\n\t\t\tif(!this.options(\"selectableRows\")){\n\t\t\t\t\n\t\t\t\tthis.maxRanges = this.options(\"selectableRange\");\n\t\t\t\t\n\t\t\t\tthis.initializeTable();\n\t\t\t\tthis.initializeWatchers();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"SelectRange functionality cannot be used in conjunction with row selection\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tinitializeTable() {\t\t\n\t\tthis.overlay = document.createElement(\"div\");\n\t\tthis.overlay.classList.add(\"tabulator-range-overlay\");\n\t\t\n\t\tthis.rangeContainer = document.createElement(\"div\");\n\t\tthis.rangeContainer.classList.add(\"tabulator-range-container\");\n\t\t\n\t\tthis.activeRangeCellElement = document.createElement(\"div\");\n\t\tthis.activeRangeCellElement.classList.add(\"tabulator-range-cell-active\");\n\t\t\n\t\tthis.overlay.appendChild(this.rangeContainer);\n\t\tthis.overlay.appendChild(this.activeRangeCellElement);\n\t\t\n\t\tthis.table.rowManager.element.addEventListener(\"keydown\", this.keyDownEvent);\n\t\t\n\t\tthis.resetRanges();\n\t\t\n\t\tthis.table.rowManager.element.appendChild(this.overlay);\n\t\tthis.table.columnManager.element.setAttribute(\"tabindex\", 0);\n\t\tthis.table.element.classList.add(\"tabulator-ranges\");\n\t}\n\t\n\tinitializeWatchers() {\n\t\tthis.columnSelection = this.options(\"selectableRangeColumns\");\n\t\tthis.rowSelection = this.options(\"selectableRangeRows\");\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-mousedown\", this.handleColumnMouseDown.bind(this));\n\t\tthis.subscribe(\"column-mousemove\", this.handleColumnMouseMove.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.handleColumnResized.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.updateHeaderColumn.bind(this));\n\n\t\tthis.subscribe(\"cell-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.renderCell.bind(this));\n\t\tthis.subscribe(\"cell-mousedown\", this.handleCellMouseDown.bind(this));\n\t\tthis.subscribe(\"cell-mousemove\", this.handleCellMouseMove.bind(this));\n\t\tthis.subscribe(\"cell-click\", this.handleCellClick.bind(this));\n\t\tthis.subscribe(\"cell-editing\", this.handleEditingCell.bind(this));\n\t\t\n\t\tthis.subscribe(\"page-changed\", this.redraw.bind(this));\n\n\t\tthis.subscribe(\"scroll-vertical\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.layoutChange.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-destroy\", this.tableDestroyed.bind(this));\n\t\tthis.subscribe(\"data-processed\", this.resetRanges.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-layout\", this.layoutElement.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.redraw.bind(this));\n\t\tthis.subscribe(\"table-destroy\", this.tableDestroyed.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-editor-clear\", this.finishEditingCell.bind(this));\n\t\tthis.subscribe(\"edit-blur\", this.restoreFocus.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-left\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-right\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.keyNavigate.bind(this, \"up\"));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.keyNavigate.bind(this, \"down\"));\n\t\tthis.subscribe(\"keybinding-nav-range\", this.keyNavigateRange.bind(this));\n\t}\n\t\n\t\n\tinitializeColumn(column) {\n\t\tif(this.columnSelection && column.definition.headerSort && this.options(\"headerSortClickElement\") !== \"icon\"){\n\t\t\tconsole.warn(\"Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.\");\n\t\t}\n\t\t\n\t\tif (column.modules.edit) {\n\t\t\t// Block editor from taking action so we can trigger edit by\n\t\t\t// double clicking.\n\t\t\t// column.modules.edit.blocked = true;\n\t\t}\n\t}\n\t\n\tupdateHeaderColumn(){\n\t\tif(this.rowSelection){\n\t\t\tthis.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];\n\t\t\t\n\t\t\tif(this.rowHeader){\n\t\t\t\tthis.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + \" tabulator-range-row-header\";\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.headerSort){\n\t\t\t\t\tconsole.warn(\"Using column headerSort with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.editor){\n\t\t\t\t\tconsole.warn(\"Using column editor with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Table Functions ///////\n\t///////////////////////////////////\n\t\n\tgetRanges(){\n\t\treturn this.ranges.map((range) => range.getComponent());\n\t}\n\t\n\tgetRangesData() {\n\t\treturn this.ranges.map((range) => range.getData());\n\t}\n\t\n\taddRangeFromComponent(start, end){\n\t\tstart = start ? start._cell : null;\n\t\tend = end ? end._cell : null;\n\t\t\n\t\treturn this.addRange(start, end);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Component Functions ///////\n\t///////////////////////////////////\n\t\n\tcellGetRanges(cell){\n\t\tvar ranges = [];\n\t\t\n\t\tif (cell.column === this.rowHeader) {\n\t\t\tranges = this.ranges.filter((range) => range.occupiesRow(cell.row));\n\t\t} else {\n\t\t\tranges = this.ranges.filter((range) => range.occupies(cell));\n\t\t}\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\trowGetRanges(row){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesRow(row));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\tcolGetRanges(col){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesColumn(col));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Event Handlers /////////\n\t///////////////////////////////////\n\t\n\t_handleMouseUp(e){\n\t\tthis.mousedown = false;\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t}\n\t\n\t_handleKeyDown(e) {\n\t\tif (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) {\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t// is editing a cell?\n\t\t\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.table.modules.edit.editCell(this.getActiveCell());\n\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tif ((e.key === \"Backspace\" || e.key === \"Delete\") && this.options(\"selectableRangeClearCells\")) {\n\t\t\t\tif(this.activeRange){\n\t\t\t\t\tthis.activeRange.clearValues();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeFocus(cell){\n\t\tvar range;\n\t\t\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\t\n\trestoreFocus(element){\n\t\tthis.table.rowManager.element.focus();\n\t\t\n\t\treturn true;\n\t}\n\t\n\t///////////////////////////////////\n\t////// Column Functionality ///////\n\t///////////////////////////////////\n\t\n\thandleColumnResized(column) {\n\t\tvar selected;\n\t\t\n\t\tif (this.selecting !== \"column\" && this.selecting !== \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tselected = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (!selected) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.ranges.forEach((range) => {\n\t\t\tvar selectedColumns = range.getColumns(true);\n\t\t\t\n\t\t\tselectedColumns.forEach((selectedColumn) => {\n\t\t\t\tif (selectedColumn !== column) {\n\t\t\t\t\tselectedColumn.setWidth(column.width);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\thandleColumnMouseDown(event, column) {\n\t\tif (event.button === 2 && (this.selecting === \"column\" || this.selecting === \"all\") && this.activeRange.occupiesColumn(column)) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, column);\n\t}\n\t\n\thandleColumnMouseMove(e, column) {\n\t\tif (column === this.rowHeader || !this.mousedown || this.selecting === 'all') {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, column, true);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Cell Functionality ///////\n\t///////////////////////////////////\n\t\n\trenderCell(cell) {\n\t\tvar el = cell.getElement(),\n\t\trangeIdx = this.ranges.findIndex((range) => range.occupies(cell));\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", rangeIdx !== -1);\n\t\tel.classList.toggle(\"tabulator-range-only-cell-selected\", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) &&\tthis.ranges[0].atBottomRight(cell));\n\t\t\n\t\tel.dataset.range = rangeIdx;\n\t}\n\t\n\thandleCellMouseDown(event, cell) {\n\t\tif (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === \"row\" || this.selecting === \"all\") && this.activeRange.occupiesRow(cell.row)))) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, cell);\n\t}\n\t\n\thandleCellMouseMove(e, cell) {\n\t\tif (!this.mousedown || this.selecting === \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, cell, true);\n\t}\n\t\n\thandleCellClick(e, cell){\n\t\tthis.initializeFocus(cell);\n\t}\n\t\n\thandleEditingCell(cell) {\n\t\tif(this.activeRange){\n\t\t\tthis.activeRange.setBounds(cell);\n\t\t}\n\t}\n\t\n\tfinishEditingCell() {\n\t\tthis.blockKeydown = true;\n\t\tthis.table.rowManager.element.focus();\n\n\t\tsetTimeout(() => {\n\t\t\tthis.blockKeydown = false;\n\t\t}, 10);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Navigation ///////\n\t///////////////////////////////////\n\t\n\tkeyNavigate(dir, e){\n\t\tif(this.navigate(false, false, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tkeyNavigateRange(e, dir, jump, expand){\n\t\tif(this.navigate(jump, expand, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tnavigate(jump, expand, dir) {\n\t\tvar moved = false,\n\t\trange, rangeEdge, nextRow, nextCol, row, column;\n\t\t\n\t\t// Don't navigate while editing\n\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// If there are more than 1 range, use the active range and destroy the others\n\t\tif (this.ranges.length > 1) {\n\t\t\tthis.ranges = this.ranges.filter((range) => {\n\t\t\t\tif (range === this.activeRange) {\n\t\t\t\t\trange.setEnd(range.start.row, range.start.col);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\trange.destroy();\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\trange = this.activeRange;\n\t\t\n\t\trangeEdge = expand ? range.end : range.start;\n\t\tnextRow = rangeEdge.row;\n\t\tnextCol = rangeEdge.col;\n\t\t\n\t\tif(jump){\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = this.findJumpCellRight(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = this.findJumpCellUp(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = this.findJumpCellDown(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}else{\n\t\t\tif(expand){\n\t\t\t\tif ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = Math.max(nextCol - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = Math.max(nextRow - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = Math.min(nextRow + 1, this.getTableRows().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tmoved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row;\n\t\t\n\t\tif(!expand){\n\t\t\trange.setStart(nextRow, nextCol);\n\t\t}\n\t\t\n\t\trange.setEnd(nextRow, nextCol);\n\t\t\n\t\tif(!expand){\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (moved) {\n\t\t\trow = this.getRowByRangePos(range.end.row);\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col);\n\t\t\t\n\t\t\tif ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) {\n\t\t\t\tcolumn.getComponent().scrollTo(undefined, false);\n\t\t\t} else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) {\n\t\t\t\trow.getComponent().scrollTo(undefined, false);\n\t\t\t} else {\n\t\t\t\t// Use faster autoScroll when the elements are on the DOM\n\t\t\t\tthis.autoScroll(range, row.getElement(), column.getElement());\n\t\t\t}\n\t\t\t\n\t\t\tthis.layoutElement();\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\trangeRemoved(removed){\n\t\tthis.ranges = this.ranges.filter((range) => range !== removed);\n\t\t\n\t\tif(this.activeRange === removed){\n\t\t\tif(this.ranges.length){\n\t\t\t\tthis.activeRange = this.ranges[this.ranges.length - 1];\n\t\t\t}else{\n\t\t\t\tthis.addRange();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.layoutElement();\n\t}\n\t\n\tfindJumpCell(cells, reverse, emptyStart, emptySide){\n\t\tvar nextCell;\n\t\t\n\t\tif(reverse){\n\t\t\tcells = cells.reverse();\n\t\t}\n\t\t\n\t\tfor(let currentCell of cells){\n\t\t\tlet currentValue = currentCell.getValue();\n\t\t\t\n\t\t\tif(emptyStart){\n\t\t\t\tnextCell = currentCell;\n\t\t\t\tif(currentValue){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(emptySide){\n\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindJumpCellLeft(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false,\n\t\tjumpCol = colPos,\n\t\ttargetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos),\n\t\tnextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellRight(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false,\n\t\tjumpCol = colPos,\n\t\tnextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellUp(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\tfindJumpCellDown(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Selection ///////\n\t///////////////////////////////////\n\tnewSelection(event, element) {\n\t\tvar range;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(!this.columnSelection){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (element === this.rowHeader) {\n\t\t\t\trange = this.resetRanges();\n\t\t\t\tthis.selecting = \"all\";\n\t\t\t\t\n\t\t\t\tvar topLeftCell, bottomRightCell = this.getCell(-1, -1);\n\n\t\t\t\tif(this.rowHeader){\n\t\t\t\t\ttopLeftCell = this.getCell(0, 1);\n\t\t\t\t}else{\n\t\t\t\t\ttopLeftCell = this.getCell(0, 0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trange.setBounds(topLeftCell, bottomRightCell);\t\t\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis.selecting = \"column\";\n\t\t\t}\n\t\t} else if (element.column === this.rowHeader) {\n\t\t\tthis.selecting = \"row\";\n\t\t} else {\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (event.shiftKey) {\n\t\t\tthis.activeRange.setBounds(false, element);\n\t\t} else if (event.ctrlKey) {\n\t\t\tthis.addRange().setBounds(element);\n\t\t} else {\n\t\t\tthis.resetRanges().setBounds(element);\n\t\t}\n\t}\n\t\n\tautoScroll(range, row, column) {\n\t\tvar tableHolder = this.table.rowManager.element,\n\t\trowHeader, rect, view, withinHorizontalView, withinVerticalView;\n\n\t\tif (typeof row === 'undefined') {\n\t\t\trow = this.getRowByRangePos(range.end.row).getElement();\n\t\t}\n\t\t\n\t\tif (typeof column === 'undefined') {\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col).getElement();\n\t\t}\n\n\t\tif (this.rowHeader) {\n\t\t\trowHeader = this.rowHeader.getElement();\n\t\t}\n\t\t\n\t\trect = {\n\t\t\tleft: column.offsetLeft,\n\t\t\tright: column.offsetLeft + column.offsetWidth,\n\t\t\ttop: row.offsetTop,\n\t\t\tbottom: row.offsetTop + row.offsetHeight,\n\t\t};\n\t\t\n\t\tview = {\n\t\t\tleft: tableHolder.scrollLeft,\n\t\t\tright: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),\n\t\t\ttop: tableHolder.scrollTop,\n\t\t\tbottom:\ttableHolder.scrollTop +\ttableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,\n\t\t};\n\n\t\tif (rowHeader) {\n\t\t\tview.left += rowHeader.offsetWidth;\n\t\t}\n\t\t\n\t\twithinHorizontalView = view.left < rect.left &&\trect.left < view.right && view.left < rect.right &&\trect.right < view.right;\n\t\t\n\t\twithinVerticalView = view.top < rect.top &&\trect.top < view.bottom && view.top < rect.bottom &&\trect.bottom < view.bottom;\n\t\t\n\t\tif (!withinHorizontalView) {\n\t\t\tif (rect.left < view.left) {\n\t\t\t\ttableHolder.scrollLeft = rect.left;\n\t\t\t\tif (rowHeader) {\n\t\t\t\t\ttableHolder.scrollLeft -= rowHeader.offsetWidth;\n\t\t\t\t}\n\t\t\t} else if (rect.right > view.right) {\n\t\t\t\ttableHolder.scrollLeft = rect.right - tableHolder.clientWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!withinVerticalView) {\n\t\t\tif (rect.top < view.top) {\n\t\t\t\ttableHolder.scrollTop = rect.top;\n\t\t\t} else if (rect.bottom > view.bottom) {\n\t\t\t\ttableHolder.scrollTop = rect.bottom - tableHolder.clientHeight;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Layout ///////\n\t///////////////////////////////////\n\t\n\tlayoutChange(){\n\t\tthis.overlay.style.visibility = \"hidden\";\n\t\tclearTimeout(this.layoutChangeTimeout);\n\t\tthis.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200);\n\t}\n\t\n\tredraw(force) {\n\t\tif (force) {\n\t\t\tthis.selecting = 'cell';\n\t\t\tthis.resetRanges();\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\t\n\tlayoutElement(visibleRows) {\n\t\tvar rows;\n\t\t\n\t\tif (visibleRows) {\n\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t} else {\n\t\t\trows = this.table.rowManager.getRows();\n\t\t}\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\trow.cells.forEach((cell) => this.renderCell(cell));\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.getTableColumns().forEach((column) => {\n\t\t\tthis.layoutColumn(column);\n\t\t});\n\t\t\n\t\tthis.layoutRanges();\n\t}\n\t\n\tlayoutRow(row) {\n\t\tvar el = row.getElement(),\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesRow(row));\n\t\t\n\t\tif (this.selecting === \"row\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutColumn(column) {\n\t\tvar el = column.getElement(),\t\t\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (this.selecting === \"column\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutRanges() {\n\t\tvar activeCell;\n\t\t\n\t\tif (!this.table.initialized) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tactiveCell = this.getActiveCell();\n\t\t\n\t\tif (!activeCell) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.top =\tactiveCell.row.getElement().offsetTop + \"px\";\n\t\tthis.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + \"px\";\n\t\t\n\t\tthis.ranges.forEach((range) => range.layout());\n\t\t\n\t\tthis.overlay.style.visibility = \"visible\";\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Helper Functions ///////\n\t///////////////////////////////////\t\n\t\n\tgetCell(rowIdx, colIdx) {\n\t\tvar row;\n\t\t\n\t\tif (colIdx < 0) {\n\t\t\tcolIdx = this.getTableColumns().length + colIdx;\n\t\t\tif (colIdx < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (rowIdx < 0) {\n\t\t\trowIdx = this.getTableRows().length + rowIdx;\n\t\t}\n\t\t\n\t\trow = this.table.rowManager.getRowFromPosition(rowIdx + 1);\n\t\t\n\t\treturn row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null;\n\t}\n\t\n\t\n\tgetActiveCell() {\n\t\treturn this.getCell(this.activeRange.start.row, this.activeRange.start.col);\n\t}\n\t\n\tgetRowByRangePos(pos) {\n\t\treturn this.getTableRows()[pos];\n\t}\n\t\n\tgetColumnByRangePos(pos) {\n\t\treturn this.getTableColumns()[pos];\n\t}\n\t\n\tgetTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\tgetTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\taddRange(start, end) {\n\t\tvar range;\n\t\t\n\t\tif(this.maxRanges !== true && this.ranges.length >= this.maxRanges){\n\t\t\tthis.ranges.shift().destroy();\n\t\t}\n\t\t\n\t\trange = new Range(this.table, this, start, end);\n\t\t\n\t\tthis.activeRange = range;\n\t\tthis.ranges.push(range);\n\t\tthis.rangeContainer.appendChild(range.element);\n\t\t\n\t\treturn range;\n\t}\n\t\n\tresetRanges() {\n\t\tvar range, cell;\n\t\t\n\t\tthis.ranges.forEach((range) => range.destroy());\n\t\tthis.ranges = [];\n\t\t\n\t\trange = this.addRange();\n\t\t\n\t\tif(this.table.rowManager.activeRows.length){\n\t\t\tcell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0];\n\n\t\t\tif(cell){\n\t\t\t\trange.setBounds(cell);\n\t\t\t\tthis.initializeFocus(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn range;\n\t}\n\t\n\ttableDestroyed(){\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t\tthis.table.rowManager.element.removeEventListener(\"keydown\", this.keyDownEvent);\n\t}\n\t\n\tselectedRows(component) {\n\t\treturn component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows();\n\t}\n\t\n\tselectedColumns(component) {\n\t\treturn component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();\n\t}\n}\n\nSelectRange.moduleName = \"selectRange\";\n\nexport default SelectRange;\n","import Module from '../../core/Module.js';\nimport Cell from '../../core/cell/Cell.js';\n\nclass Tooltip extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.tooltipSubscriber = null,\n\t\tthis.headerSubscriber = null,\n\t\t\n\t\tthis.timeout = null;\n\t\tthis.popupInstance = null;\n\t\t\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \n\t\t\n\t\tthis.registerColumnOption(\"tooltip\");\n\t\tthis.registerColumnOption(\"headerTooltip\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheckMsg(\"tooltipGenerationMode\", \"This option is no longer needed as tooltips are always generated on hover now\");\n\t}\t\n\t\n\tinitializeColumn(column){\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\n\t\t\tthis.headerSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\n\t\t}\n\t\t\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\n\t\t\tthis.tooltipSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\n\t\t}\n\t}\n\t\n\tmousemoveCheck(action, e, component){\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\n\t\t\n\t\tif(tooltip){\n\t\t\tthis.clearPopup();\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\n\t\t}\n\t}\n\n\tmouseoutCheck(action, e, component){\n\t\tif(!this.popupInstance){\n\t\t\tthis.clearPopup();\n\t\t}\n\t}\n\t\n\tclearPopup(action, e, component){\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = null;\n\t\t\n\t\tif(this.popupInstance){\n\t\t\tthis.popupInstance.hide();\n\t\t}\n\t}\n\t\n\tloadTooltip(e, component, tooltip){\n\t\tvar contentsEl, renderedCallback, coords;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(typeof tooltip === \"function\"){\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\n\t\t}\n\t\t\n\t\tif(tooltip instanceof HTMLElement){\n\t\t\tcontentsEl = tooltip;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\t\n\t\t\tif(tooltip === true){\n\t\t\t\tif(component instanceof Cell){\n\t\t\t\t\ttooltip = component.value;\n\t\t\t\t}else{\n\t\t\t\t\tif(component.definition.field){\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\ttooltip = component.definition.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcontentsEl.innerHTML = tooltip;\n\t\t}\n\t\t\n\t\tif(tooltip || tooltip === 0 || tooltip === false){\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\n\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault());\n\t\t\t\n\t\t\tthis.popupInstance = this.popup(contentsEl);\n\t\t\t\n\t\t\tif(typeof renderedCallback === \"function\"){\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\n\t\t\t}\n\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\n\t\t\t\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\n\t\t\t\tthis.popupInstance = null;\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nTooltip.moduleName = \"tooltip\";\n\nexport default Tooltip;\n","export default {\n\t//is integer\n\tinteger: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//must be alphanumeric\n\talphanumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvar reg = new RegExp(/^[a-z0-9]+$/i);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//maximum value\n\tmax: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\n\t//minimum string length\n\tminLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(typeof parameters == \"string\"){\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function(row){\n\t\t\tvar data = row.getData();\n\n\t\t\tif(data !== cellData){\n\t\t\t\tif(value == column.getFieldValue(data)){\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired:function(cell, value, parameters){\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultValidators from './defaults/validators.js';\n\nclass Validate extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.invalidCells = [];\n\t\t\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\n\t\t\n\t\tthis.registerColumnOption(\"validator\");\n\t\t\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\n\t}\n\t\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Event Handling //////////\n\t///////////////////////////////////\n\t\n\teditValidate(cell, value, previousValue){\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\n\t\t\n\t\t// allow time for editor to make render changes then style cell\n\t\tif(valid !== true){\n\t\t\tsetTimeout(() => {\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn valid;\n\t}\n\t\n\teditorClear(cell, cancelled){\n\t\tif(cancelled){\n\t\t\tif(cell.column.modules.validate){\n\t\t\t\tthis.cellValidate(cell);\n\t\t\t}\n\t\t}\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t}\n\t\n\teditedClear(cell){\n\t\tif(cell.modules.validate){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Cell Functions /////////\n\t///////////////////////////////////\n\t\n\tcellIsValid(cell){\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\n\t}\n\t\n\tcellValidate(cell){\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Column Functions ////////\n\t///////////////////////////////////\n\t\n\tcolumnValidate(column){\n\t\tvar invalid = [];\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Row Functions //////////\n\t///////////////////////////////////\n\t\n\trowValidate(row){\n\t\tvar invalid = [];\n\t\t\n\t\trow.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\tuserClearCellValidation(cells){\n\t\tif(!cells){\n\t\t\tcells = this.getInvalidCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.clearValidation(cell._getSelf());\n\t\t});\n\t}\n\t\n\tuserValidate(cells){\n\t\tvar output = [];\n\t\t\n\t\t//clear row data\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trow = row.getComponent();\n\t\t\t\n\t\t\tvar valid = row.validate();\n\t\t\t\n\t\t\tif(valid !== true){\n\t\t\t\toutput = output.concat(valid);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output.length ? output : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.validator !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//validate\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = [],\n\t\tvalidator;\n\t\t\n\t\tif(column.definition.validator){\n\t\t\t\n\t\t\tif(Array.isArray(column.definition.validator)){\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\n\t\t\t\t\tvalidator = self._extractValidator(item);\n\t\t\t\t\t\n\t\t\t\t\tif(validator){\n\t\t\t\t\t\tconfig.push(validator);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\t\t\t\t\n\t\t\t\tif(validator){\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.validate = config.length ? config : false;\n\t\t}\n\t}\n\t\n\t_extractValidator(value){\n\t\tvar type, params, pos;\n\t\t\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tpos = value.indexOf(':');\n\t\t\t\n\t\t\t\tif(pos > -1){\n\t\t\t\t\ttype = value.substring(0,pos);\n\t\t\t\t\tparams = value.substring(pos+1);\n\t\t\t\t}else{\n\t\t\t\t\ttype = value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\treturn this._buildValidator(type, params);\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\treturn this._buildValidator(value);\n\t\t\t\n\t\t\tcase \"object\":\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t}\n\t}\n\t\n\t_buildValidator(type, params){\n\t\t\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\n\t\t\n\t\tif(!func){\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn {\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\n\t\t\t\tfunc:func,\n\t\t\t\tparams:params,\n\t\t\t};\n\t\t}\n\t}\n\t\n\tvalidate(validators, cell, value){\n\t\tvar self = this,\n\t\tfailedValidators = [],\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\n\t\tif(validators){\n\t\t\tvalidators.forEach((item) => {\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\n\t\t\t\t\tfailedValidators.push({\n\t\t\t\t\t\ttype:item.type,\n\t\t\t\t\t\tparameters:item.params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(!cell.modules.validate){\n\t\t\tcell.modules.validate = {};\n\t\t}\n\t\t\n\t\tif(!failedValidators.length){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}else{\n\t\t\tcell.modules.validate.invalid = failedValidators;\n\t\t\t\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t}\n\t\t\t\n\t\t\tif(invalidIndex == -1){\n\t\t\t\tthis.invalidCells.push(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn failedValidators.length ? failedValidators : true;\n\t}\n\t\n\tgetInvalidCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.invalidCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearValidation(cell){\n\t\tvar invalidIndex;\n\t\t\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\n\t\t\t\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\t\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nValidate.moduleName = \"validate\";\n\n//load defaults\nValidate.validators = defaultValidators;\n\nexport default Validate;\n","//tabulator with all modules installed\nimport {default as Tabulator} from './Tabulator.js';\nimport * as modules from '../core/modules/optional.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nclass TabulatorFull extends Tabulator {}\n\n//bind modules and static functionality\nnew ModuleBinder(TabulatorFull, modules);\n\nexport default TabulatorFull;\n"],"names":["CoreFeature","constructor","table","this","reloadData","data","silent","columnsChanged","dataLoader","load","undefined","langText","modules","localize","getText","arguments","langBind","bind","langLocale","getLocale","commsConnections","comms","getConnections","commsSend","send","layoutMode","layout","getMode","layoutRefresh","force","subscribe","eventBus","unsubscribe","subscribed","key","subscriptionChange","dispatch","chain","confirm","dispatchExternal","externalEvents","subscribedExternal","subscriptionChangeExternal","options","setOption","value","deprecationCheck","oldOption","newOption","convert","deprecationAdvisor","check","deprecationCheckMsg","msg","checkMsg","deprecationMsg","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","getCells","cells","forEach","cell","push","getComponent","isVisible","visible","show","isGroup","columns","hide","toggle","delete","getSubColumns","output","length","getParentColumn","parent","Column","_getSelf","scrollTo","position","ifVisible","columnManager","scrollToColumn","getTable","move","to","after","toColumn","findColumn","moveColumn","console","warn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","getWidth","setWidth","width","result","reinitializeWidth","rerenderColumns","title","field","hozAlign","vertAlign","minWidth","maxWidth","maxInitialWidth","cssClass","variableHeight","headerVertical","headerHozAlign","headerWordWrap","editableTitle","CellComponent","_cell","getValue","getOldValue","getInitialValue","initialValue","getRow","row","getData","transform","getType","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","checkHeight","Cell","super","element","oldValue","height","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","style","textAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","split","classList","add","_generateContents","val","innerHTML","Node","firstChild","removeChild","appendChild","cellRendered","containerOnly","layoutElement","setValueProcessData","cellEdited","call","rowManager","changed","setFieldValue","widthStyled","clearWidth","offsetWidth","setMinWidth","minWidthStyled","setMaxWidth","maxWidthStyled","reinitializeHeight","clearHeight","setHeight","heightStyled","getHeight","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getIndex","getCellIndex","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","el","columnHeaderVertAlign","defaults","columnDefaults","optionsList","generate","defaultOptionList","checkDefinition","Object","keys","indexOf","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","parseInt","_buildColumnHeaderTitle","addEventListener","e","stopPropagation","focus","text","_formatColumnHeaderTitle","contents","dataObj","structure","columnRendered","verticalAlign","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","clearVerticalAlign","paddingTop","getFirstColumn","getLastColumn","getColumns","traverse","concat","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","checkCellHeights","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","getLeftOffset","offset","offsetLeft","ceil","getBoundingClientRect","Promise","resolve","reject","cellCount","deregisterColumn","generateCell","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","fitToData","setTo","error","assign","addColumn","then","getPosition","getVisibleColumnsByIndex","defaultOptions","Helpers","static","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","separator","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","match","copy","subject","findIndex","item","unshift","deepClone","OptionsList","msgType","registeredDefaults","register","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","initialize","clearRows","clearColumns","reinitializeColumnWidths","renderRows","renderColumns","rerenderRows","callback","update","blockRedraw","renderRowCells","rerenderRowCells","scrollColumns","dir","scrollRows","resize","scrollToRow","scrollToRowNearestTop","visibleRows","includingBuffer","getDisplayRows","styleRow","rowEl","remove","clear","render","rerender","scrollToRowPosition","rowIndex","scrollToRowIfVisible","elVisible","elOffset","scrollHeight","scrollTop","offsetTop","BasicHorizontal","inFragment","rowFrag","createDocumentFragment","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","windowBuffer","initialized","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","startsWith","clearVisRowCache","dataChange","scroll","calcWindowBuffer","buffer","columnsByIndex","old","cols","colPos","config","frozen","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","deinitialize","change","generateCells","colEnd","col","getVisibleRows","otherRows","getRows","filter","includes","diff","abs","addColRight","removeColLeft","addColLeft","removeColRight","colPositionAdjust","start","end","changes","working","getCell","insertBefore","nextSibling","fitDataColActualWidthCheck","ex","message","newWidth","widthDiff","frozenColumns","leftColumns","appendCell","rightColumns","ColumnManager","blockHozScrollEvent","headersElement","contentsElement","columnsByField","defaultColumnOptions","redrawBlockUpdate","renderer","initializeRenderer","createHeadersElement","createHeaderContentsElement","createHeaderElement","initializeScrollWheelWatcher","scrollHorizontal","padVerticalScrollbar","rtl","marginLeft","marginRight","renderClass","renderers","virtual","RendererVirtualDomHorizontal","basic","RendererBasicHorizontal","renderHorizontal","headerVisible","getContentsElement","deltaX","generateColumnsFromRowData","sorter","definitions","autoColumnsDefinitions","find","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","adjustTableSize","HTMLElement","getColumnByField","getColumnsByFieldRoot","root","matches","getFirstVisibleColumn","getRealColumns","getDefinitions","active","getDefinitionTree","getComponents","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","updateRows","toIndex","fromIndex","adjust","scrollToColumnPosition","scrollToColumnIfVisible","scrollWidth","getFlexBaseWidth","totalWidth","fixedWidth","colWidth","restoreRedraw","resetScroll","footerManager","RowComponent","_row","watchPosition","moveToRow","updateData","normalizeHeight","reformat","getNextRow","nextRow","getPrevRow","prevRow","Row","manualHeight","outerHeight","positionWatchers","created","setData","create","detachElement","deleteCells","rowFormatter","rendered","deinitializeHeight","children","maxHeight","rowHeight","resizableRows","updatedData","newRowData","tempData","JSON","parse","attrname","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","detachModules","deleteRow","wipe","isDisplayed","setPosition","getGroup","group","BasicVertical","visibility","onlyGroupHeaders","tableFrag","tableEmpty","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","rowFragment","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","renderedRows","totalRowsRendered","rowsToRender","fixedHeight","containerHeight","avgRowHeight","resized","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","placeholder","placeholderContents","firstRender","renderMode","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","displayPipeline","scrollbarWidth","initializePlaceholder","getTableElement","leftDir","topDir","_positionPlaceholder","getRowFromDataObject","getRowFromPosition","renderInPosition","pagination","_setDataActual","reRenderInPosition","autoColumns","_wipeElements","destroy","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowPositions","addRow","pos","addRowActual","addRows","refreshDisplayOnly","findAddRowPos","reverse","_clearPlaceholder","addRowPos","chainResult","moveRow","moveRowInArray","clearData","getRowIndex","findRowIndex","getDisplayRowIndex","rowOnly","getDataCount","registerDataPipelineHandler","handler","priority","sort","a","b","registerDisplayPipelineHandler","skipStage","stage","cascadeOrder","destroyed","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","viewable","scrollBarCheck","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","getRenderMode","_clearTable","renderEmptyScroll","_showPlaceholder","checkPlaceholder","initialHeight","otherHeight","external","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","containerElement","createContainerElement","initializeElement","footerElement","querySelector","append","activate","prepend","deactivate","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","bindPseudoEvents","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","links","values","comp","subscriptionChanged","clearWatchers","added","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","elTargets","targetMatches","previousTarget","closest","ComponentFunctionBinder","bindings","funcName","debugInvalidComponentFuncs","DataLoader","requestOrder","loading","params","replace","requestNo","alertLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","clearAlert","catch","alertError","setTimeout","dataLoaderErrorTimeout","finally","map","blockActiveLoad","alertManager","alert","dataLoaderLoading","dataLoaderError","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","DeprecationAdvisor","_warnUser","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Popup","container","_lookupContainer","reversedX","childPopup","blurable","blurCallback","blurEventsBound","renderedCallback","hideable","blurEvent","escEvent","_escapeCheck","destroyBinding","tableDestroyed","popupContainer","_checkContainerIsParent","body","renderCallback","containerEventCoords","touch","MouseEvent","x","touches","pageX","y","pageY","parentOffset","elementPositionCoords","containerOffset","origin","parentEl","coords","_fitToScreen","hideOnBlur","keyCode","blockHide","restoreHide","Module","_handler","registerTableOption","registerColumnOption","registerTableFunction","func","initGuard","registerComponentFunction","registerDataHandler","registerDisplayHandler","lookupIndex","refreshData","footerAppend","footerPrepend","footerRemove","popup","menuEl","menuContainer","content","forced","responsiveLayout","modExists","fitData","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","modes","initializeColumn","Number","dataChanged","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","getLang","default","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","groups","items","page_size","page_title","first","first_title","last","last_title","prev","prev_title","next","next_title","all","counter","showing","of","pages","Comms","receive","selectors","connections","con","action","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFunctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","prototype","orderedStartMods","orderedEndMods","unOrderedMods","moduleCore","modulesCore","moduleInitOrder","modulesRegular","core","mods","Alert","_createAlertElement","msgElement","_createMsgElement","_typeClass","interactionMonitor","browserSlow","browserMobile","originalElement","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","_clearSelection","getSelection","empty","removeAllRanges","selection","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","getComputedStyle","textDirection","direction","reactiveData","newElement","tagName","attributes","replaceChild","_detectBrowser","deregister","ua","userAgent","vendor","opera","test","stack","line","debugInitialization","Error","trim","replaceData","responses","addData","updateOrAddData","newRows","foundRows","updateOrAddRow","updateRow","fromRow","getRowPosition","getColumnDefinitions","showColumn","hideColumn","toggleColumn","deleteColumn","updateColumnDefinition","fromColumn","on","off","plugin","required","debugDeprecation","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","colComponent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","url","method","json","headers","stringify","form","FormData","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","previousData","generateConfig","sendRequest","defaultConfig","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","credentials","fetch","ok","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","export","generateExportList","clipboardCopyConfig","clipboardCopyStyled","generateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPasteOrigin","getPasteData","mutateData","mutator","valid","insert","bounds","startCell","startRow","rowWidth","dataLength","selectRange","activeRange","singleCell","getBounds","headerFindSuccess","columnMap","startCol","itemLength","CalcComponent","avg","calcParams","precision","reduce","sum","toFixed","parseFloat","String","count","unique","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","recalcAfterBlock","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","recalcActiveRowsRefresh","tableRedraw","adjustForScrollbar","resizeHolderWidth","getResults","userRecalc","recalc","blockCheck","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","reinitializeCalcs","fragment","rowsToData","generateRow","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","generateTopRow","generateBottomRow","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","formatter","getFormatter","paramKey","hasTopCalcs","hasBottomCalcs","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","tableRedrawing","reinitializeRowChildren","firstCol","dataTreeElementColumn","getTreeChildren","redrawNeeded","childArray","controlEl","generateControlElement","cloneNode","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","getTreeParentRoot","childIndex","findChildIndex","recurse","getChildField","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","compression","compress","writeOptions","bookType","bookSST","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","Download","mimeType","Blob","deprecatedOptionsCheck","download","downloadToTab","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","blob","downloadEncoder","URL","createObjectURL","msSaveOrOpenBlob","click","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","ctrlKey","metaKey","maskAutoFill","defaultDownloaders","Edit","editor","onRendered","success","cancel","editorParams","edit","_initializeParams","displayItems","currentItems","focusedItem","input","_createInputElement","listEl","_createListElement","initialValues","isFilter","filterTimeout","filtered","typing","listIteration","lastAction","filterTerm","actions","_deprecatedOptionsCheck","_initializeValue","_onRendered","listItemFormatter","sortValuesList","searchFunc","searchingPlaceholder","defaultValue","multiselect","headerFilterInitialListGen","cellEl","clickStop","preventScroll","_preventPopupBlur","_preventBlur","_inputKeyDown","_setListWidth","attribs","elementAttributes","clearable","padding","boxSizing","autocomplete","cursor","caretColor","getAttribute","_bindInputEvents","valueCheck","valueKeys","verticalNavigation","placeholderLoading","placeholderEmpty","filterDelay","emptyValue","freetext","filterFunc","filterRemote","allowEmpty","listOnEmpty","valuesLookup","valuesURL","_inputFocus","_inputClick","_inputBlur","_inputSearch","_inputKeyUp","rebuildOptionsList","_filter","clearTimeout","_filterList","_resolveValue","_clearChoices","_keyUp","_keyDown","_keySide","_keyEnter","_keyEsc","_keyHomeEnd","_keyTab","_keySelectLetter","_keyAutoCompLetter","_chooseItem","stopImmediatePropagation","_focusItem","_cancel","_scrollToValue","character","fromCharCode","label","scrollIntoView","behavior","block","inline","_generateOptions","_sortOptions","_buildList","_showList","isInteger","_filterOptions","iteration","_ajaxRequest","_uniqueColumnValues","valuesLookupField","_addPlaceholder","responseValues","_parseList","_clearList","term","urlBuilder","inputValues","entries","_parseListItem","_parseListGroup","itemParams","selected","original","_defaultSortFunction","_sortGroup","as","bs","a1","b1","L","rx","rd","emptyAlign","isFinite","_defaultFilterFunc","_filterItem","_buildItem","itemFormatter","_groupClick","_itemClick","_styleItem","startVis","blur","cellValue","search","onChange","selectContents","textarea","vertNav","whiteSpace","heightNow","shiftKey","shiftEnterSubmit","selectionStart","number","step","blurFunc","date","inputFormat","DT","DateTime","luxon","convertDate","isDateTime","fromISO","fromFormat","toFormat","luxDate","toISO","relatedTarget","rangeParent","explicitOriginalTarget","time","newDatetime","luxTime","datetime","luxDateTime","List","star","self","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","trueValueSet","falseValueSet","marginTop","checkedValue","checked","trueValue","falseValue","indeterminate","currentCell","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellIsEdited","clearEdited","editCell","cellCancelEdit","bindEditor","updateCellClass","columnDeleteCheck","rowDeleteCheck","rowEditableCheck","cancelEdit","pasteBlocker","keybindingNavigateNext","newRow","edited","allowEdit","nextCell","findPrevEditableCell","findNextEditableCell","prevCell","editable","getCurrentCell","clearEditor","cellEditCancelled","button","contains","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","editFinished","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","selectedColumns","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","generateTable","generateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","visProp","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","generateHeaderElement","generateGroupElement","generateCalcElement","generateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","cellStyle","cellWrapper","formatCells","formatExportValue","align","htmlOutputConfig","props","lookup","color","fromStyle","filterVal","rowVal","filterParams","regex","RegExp","like","keywords","keyword","matchAll","starts","ends","endsWith","in","Filter","filterList","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","generatePlaceholder","filterMode","remoteFilterParams","initialFilter","setFilter","initialHeaderFilter","placeholderHeaderFilter","refreshFilter","addFilter","removeFilter","clearFilter","clearHeaderFilter","headerFilter","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","onRenderedCallback","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","link","urlPrefix","labelField","labelTraverse","urlField","retrieveNestedData","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","outputFormat","invalid","invalidPlaceholder","isValid","timezone","setZone","datetimediff","suffix","humanize","now","toHuman","traffic","percentValue","colors","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","relativeToPage","page","getPageSize","getPage","innerText","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","selectableRowsRangeMode","toggleSelect","handleComplexRowClick","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","initializationMode","layoutCell","reinitializeColumns","blockLayout","unblockLayout","edge","frozenCheck","layoutCalcRows","layoutGroupCalcs","groupList","layoutColumnPosition","allCells","leftParents","marginValue","getColGroupParentElement","_calcSpace","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","frozenRows","initializeRows","rowType","isFrozen","styleRows","GroupComponent","groupManager","getParentGroup","toggleVisibility","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","elementContents","arrowElement","createElements","addBindings","createValueGroups","elementsOnly","arrow","movableRows","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","insertRow","conformRowData","updateGroupRows","scrollHeader","removeRow","groupValues","generateGroupHeaderContents","removeGroup","getHeadersAndRows","_visSet","groupClosedShowCalcs","includeChildren","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","_blockRedrawing","_restore_redrawing","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","generateGroups","groupComponents","pullGroupListData","groupListData","rowCount","headerContent","countGroups","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","checkBasicModeGroupHeaderWidth","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","newValue","undoers","redoers","_rebindRow","oldRow","cellEdit","rowAdd","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","_findCol","exists","textContent","replaceAll","inQuote","nextChar","array","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","err","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","structureArrayToObject","structureArrayToColumns","defaultImporters","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowMouseDown","rowMouseUp","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellMouseDown","cellMouseUp","cellTap","cellDblTap","cellTapHold","headerClick","headerDblClick","headerContext","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","headerMouseDown","headerMouseUp","headerTap","headerDblTap","headerTapHold","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupMouseDown","groupMouseUp","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tap","tapDbl","tapHold","initializeExternalEvents","cellContentsSelectionFixer","clearTouchWatchers","selectNode","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","noTouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","mapBinding","symbolsList","ctrl","meta","code","checkBinding","navPrev","navNext","navUp","navDown","navLeft","navRight","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","rangeJumpUp","rangeJumpDown","rangeJumpLeft","rangeJumpRight","rangeExpandUp","rangeExpandDown","rangeExpandLeft","rangeExpandRight","rangeExpandJumpUp","rangeExpandJumpDown","rangeExpandJumpLeft","rangeExpandJumpRight","keyBlock","newPos","scrollMax","Menu","nestedMenuBlock","currentComponent","rootPopup","initializeRowWatchers","initializeGroupWatchers","rowContextMenu","loadMenuEvent","rowClickMenu","rowDblClickMenu","groupContextMenu","groupClickMenu","groupDblClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerDblClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","dblClickMenu","headerMenuEl","icon","headerMenuIcon","menu","loadMenu","parentPopup","itemEl","disabled","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","movableColumns","abortMove","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","passive","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","elementRowDrop","connectionTables","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","movableRowsSender","senders","movableRowsReceiver","receivers","fromTable","toTable","Mutator","enabled","transformCell","mutateLink","lookupMutator","mutators","mutatorEdit","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","Page","progressiveLoad","pageCounterElement","pageCounter","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","previousPage","nextPage","getPageMax","setPageToRow","initialLoadComplete","calculatePageSizes","footerRedraw","paginationAddRow","rowAddingPosition","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","paginationInitialPage","paginationButtonCount","setMaxRows","trigger","_setPageCounter","_setPageButtons","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","setItem","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","removeItem","persistence","retrievedData","persistenceMode","persistenceID","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retrieveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","current","oldCols","newCols","mergeAllNew","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","_componentPopupCall","loadPopupEvent","rowContextPopup","rowClickPopup","rowDblClickPopup","groupContextPopup","groupClickPopup","groupDblClickPopup","headerContextPopup","loadPopupTableColumnEvent","headerClickPopup","headerDblClickPopup","headerPopup","initializeColumnHeaderPopup","contextPopup","loadPopupTableCellEvent","clickPopup","dblClickPopup","headerPopupEl","headerPopupIcon","loadPopup","contentsEl","Print","manualBlock","beforeprintEventHandler","afterprintEventHandler","printAsHtml","replaceTable","cleanup","printFullscreen","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","pop","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","unwatchRow","ResizeColumns","startColumn","startWidth","latestX","initialNextColumn","layoutColumnHeader","initializeEventWatchers","layoutCellHandles","deInitializeComponent","resizeHandle","columnLayoutUpdated","deInitializeColumn","columnWidthUpdated","resizable","reinitializeColumn","frozenColumnOffset","frozenOffset","handleEl","nearestColumn","_checkResizability","handleDown","_mouseDown","oldWidth","parentElement","mouseMove","blockedBefore","blockedAfter","startDiff","moveDiff","resizableColumnFit","mouseUp","ResizeRows","startHeight","prevHandle","prevHandleDown","screenY","ResizeTable","visibilityObserver","resizeObserver","containerObserver","tableHeight","containerWidth","autoResize","initialRedraw","tableStyle","IntersectionObserver","ResizeObserver","initializeVisibilityObserver","entry","nodeHeight","contentRect","nodeWidth","redrawTable","observe","tableResized","isIntersecting","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","generateCollapsedRowContent","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","colCount","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectableRows","selectableRange","clearSelectionData","rowRetrieve","selectableRowsPersistence","_deselectRow","prevSelected","_rowSelectionChanged","selectable","checkRowSelectability","endSelect","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","selectableRowsCheck","_selectRow","rowMatch","rowInfo","selectableRowsRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","deselected","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","string","localeCompare","boolean","calc","d","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortClickElement","headerSortElement","setColumnHeaderSortIcon","columnHeaderSortMulti","newSortList","findSorter","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","setColumnHeader","_sortItems","sortEl","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","RangeComponent","_range","getStructuredCells","getTopEdge","getBottomEdge","getLeftEdge","getRightEdge","setBounds","destroyedGuard","setStartBound","setEndBound","rangeManager","clearValues","Range","initializing","rowHeader","initElement","initBounds","_updateMinMax","setStart","setEnd","columnSelection","isRowHeader","_getTableRows","_getTableColumns","topLeftCell","bottomRightCell","_vDomTop","_vDomBottom","_vDomLeft","_vDomRight","Infinity","overlaps","atTopLeft","atBottomRight","occupies","occupiesRow","occupiesColumn","arr","clearValue","selectableRangeClearCellsValue","notify","rangeRemoved","SelectRange","mousedown","ranges","overlay","layoutChangeTimeout","maxRanges","blockKeydown","keyDownEvent","_handleKeyDown","mouseUpEvent","_handleMouseUp","getRangesData","getRanges","addRangeFromComponent","cellGetRanges","rowGetRanges","colGetRanges","initializeTable","initializeWatchers","rangeContainer","activeRangeCellElement","resetRanges","handleColumnMouseDown","handleColumnMouseMove","handleColumnResized","layoutChange","updateHeaderColumn","renderCell","handleCellMouseDown","handleCellMouseMove","handleCellClick","handleEditingCell","finishEditingCell","restoreFocus","keyNavigate","keyNavigateRange","getActiveCell","initializeFocus","some","selectedColumn","newSelection","rangeIdx","dataset","navigate","jump","expand","moved","rangeEdge","findJumpCellLeft","findJumpCellRight","findJumpCellUp","findJumpCellDown","getTableColumns","getTableRows","getRowByRangePos","getColumnByRangePos","autoScroll","removed","findJumpCell","emptyStart","emptySide","currentValue","rowPos","isStartingCellEmpty","isLeftOfStartingCellEmpty","jumpCol","targetCells","isRightOfStartingCellEmpty","isTopOfStartingCellEmpty","jumpRow","isBottomOfStartingCellEmpty","rect","withinHorizontalView","withinVerticalView","tableHolder","layoutRanges","layoutColumn","occupied","activeCell","colIdx","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","float","numeric","alphanumeric","minLength","maxLength","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","editValidate","editorClear","editedClear","previousValue","validate","cancelled","validator","_extractValidator","substring","_buildValidator","validators","failedValidators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.js b/tmp/tabulator-5.6.1/dist/js/tabulator_esm.js deleted file mode 100644 index 906f44d..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.js +++ /dev/null @@ -1,28045 +0,0 @@ -/* Tabulator v5.6.1 (c) Oliver Folkerd 2024 */ -class CoreFeature{ - - constructor(table){ - this.table = table; - } - - ////////////////////////////////////////// - /////////////// DataLoad ///////////////// - ////////////////////////////////////////// - - reloadData(data, silent, columnsChanged){ - return this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged); - } - - ////////////////////////////////////////// - ///////////// Localization /////////////// - ////////////////////////////////////////// - - langText(){ - return this.table.modules.localize.getText(...arguments); - } - - langBind(){ - return this.table.modules.localize.bind(...arguments); - } - - langLocale(){ - return this.table.modules.localize.getLocale(...arguments); - } - - - ////////////////////////////////////////// - ////////// Inter Table Comms ///////////// - ////////////////////////////////////////// - - commsConnections(){ - return this.table.modules.comms.getConnections(...arguments); - } - - commsSend(){ - return this.table.modules.comms.send(...arguments); - } - - ////////////////////////////////////////// - //////////////// Layout ///////////////// - ////////////////////////////////////////// - - layoutMode(){ - return this.table.modules.layout.getMode(); - } - - layoutRefresh(force){ - return this.table.modules.layout.layout(force); - } - - - ////////////////////////////////////////// - /////////////// Event Bus //////////////// - ////////////////////////////////////////// - - subscribe(){ - return this.table.eventBus.subscribe(...arguments); - } - - unsubscribe(){ - return this.table.eventBus.unsubscribe(...arguments); - } - - subscribed(key){ - return this.table.eventBus.subscribed(key); - } - - subscriptionChange(){ - return this.table.eventBus.subscriptionChange(...arguments); - } - - dispatch(){ - return this.table.eventBus.dispatch(...arguments); - } - - chain(){ - return this.table.eventBus.chain(...arguments); - } - - confirm(){ - return this.table.eventBus.confirm(...arguments); - } - - dispatchExternal(){ - return this.table.externalEvents.dispatch(...arguments); - } - - subscribedExternal(key){ - return this.table.externalEvents.subscribed(key); - } - - subscriptionChangeExternal(){ - return this.table.externalEvents.subscriptionChange(...arguments); - } - - ////////////////////////////////////////// - //////////////// Options ///////////////// - ////////////////////////////////////////// - - options(key){ - return this.table.options[key]; - } - - setOption(key, value){ - if(typeof value !== "undefined"){ - this.table.options[key] = value; - } - - return this.table.options[key]; - } - - ////////////////////////////////////////// - /////////// Deprecation Checks /////////// - ////////////////////////////////////////// - - deprecationCheck(oldOption, newOption, convert){ - return this.table.deprecationAdvisor.check(oldOption, newOption, convert); - } - - deprecationCheckMsg(oldOption, msg){ - return this.table.deprecationAdvisor.checkMsg(oldOption, msg); - } - - deprecationMsg(msg){ - return this.table.deprecationAdvisor.msg(msg); - } - ////////////////////////////////////////// - //////////////// Modules ///////////////// - ////////////////////////////////////////// - - module(key){ - return this.table.module(key); - } -} - -class Helpers{ - - static elVisible(el){ - return !(el.offsetWidth <= 0 && el.offsetHeight <= 0); - } - - static elOffset(el){ - var box = el.getBoundingClientRect(); - - return { - top: box.top + window.pageYOffset - document.documentElement.clientTop, - left: box.left + window.pageXOffset - document.documentElement.clientLeft - }; - } - - static retrieveNestedData(separator, field, data){ - var structure = separator ? field.split(separator) : [field], - length = structure.length, - output; - - for(let i = 0; i < length; i++){ - - data = data[structure[i]]; - - output = data; - - if(!data){ - break; - } - } - - return output; - } - - static deepClone(obj, clone, list = []){ - var objectProto = {}.__proto__, - arrayProto = [].__proto__; - - if (!clone){ - clone = Object.assign(Array.isArray(obj) ? [] : {}, obj); - } - - for(var i in obj) { - let subject = obj[i], - match, copy; - - if(subject != null && typeof subject === "object" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){ - match = list.findIndex((item) => { - return item.subject === subject; - }); - - if(match > -1){ - clone[i] = list[match].copy; - }else { - copy = Object.assign(Array.isArray(subject) ? [] : {}, subject); - - list.unshift({subject, copy}); - - clone[i] = this.deepClone(subject, copy, list); - } - } - } - - return clone; - } -} - -class Popup extends CoreFeature{ - constructor(table, element, parent){ - super(table); - - this.element = element; - this.container = this._lookupContainer(); - - this.parent = parent; - - this.reversedX = false; - this.childPopup = null; - this.blurable = false; - this.blurCallback = null; - this.blurEventsBound = false; - this.renderedCallback = null; - - this.visible = false; - this.hideable = true; - - this.element.classList.add("tabulator-popup-container"); - - this.blurEvent = this.hide.bind(this, false); - this.escEvent = this._escapeCheck.bind(this); - - this.destroyBinding = this.tableDestroyed.bind(this); - this.destroyed = false; - } - - tableDestroyed(){ - this.destroyed = true; - this.hide(true); - } - - _lookupContainer(){ - var container = this.table.options.popupContainer; - - if(typeof container === "string"){ - container = document.querySelector(container); - - if(!container){ - console.warn("Menu Error - no container element found matching selector:", this.table.options.popupContainer , "(defaulting to document body)"); - } - }else if (container === true){ - container = this.table.element; - } - - if(container && !this._checkContainerIsParent(container)){ - container = false; - console.warn("Menu Error - container element does not contain this table:", this.table.options.popupContainer , "(defaulting to document body)"); - } - - if(!container){ - container = document.body; - } - - return container; - } - - _checkContainerIsParent(container, element = this.table.element){ - if(container === element){ - return true; - }else { - return element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false; - } - } - - renderCallback(callback){ - this.renderedCallback = callback; - } - - containerEventCoords(e){ - var touch = !(e instanceof MouseEvent); - - var x = touch ? e.touches[0].pageX : e.pageX; - var y = touch ? e.touches[0].pageY : e.pageY; - - if(this.container !== document.body){ - let parentOffset = Helpers.elOffset(this.container); - - x -= parentOffset.left; - y -= parentOffset.top; - } - - return {x, y}; - } - - elementPositionCoords(element, position = "right"){ - var offset = Helpers.elOffset(element), - containerOffset, x, y; - - if(this.container !== document.body){ - containerOffset = Helpers.elOffset(this.container); - - offset.left -= containerOffset.left; - offset.top -= containerOffset.top; - } - - switch(position){ - case "right": - x = offset.left + element.offsetWidth; - y = offset.top - 1; - break; - - case "bottom": - x = offset.left; - y = offset.top + element.offsetHeight; - break; - - case "left": - x = offset.left; - y = offset.top - 1; - break; - - case "top": - x = offset.left; - y = offset.top; - break; - - case "center": - x = offset.left + (element.offsetWidth / 2); - y = offset.top + (element.offsetHeight / 2); - break; - - } - - return {x, y, offset}; - } - - show(origin, position){ - var x, y, parentEl, parentOffset, coords; - - if(this.destroyed || this.table.destroyed){ - return this; - } - - if(origin instanceof HTMLElement){ - parentEl = origin; - coords = this.elementPositionCoords(origin, position); - - parentOffset = coords.offset; - x = coords.x; - y = coords.y; - - }else if(typeof origin === "number"){ - parentOffset = {top:0, left:0}; - x = origin; - y = position; - }else { - coords = this.containerEventCoords(origin); - - x = coords.x; - y = coords.y; - - this.reversedX = false; - } - - this.element.style.top = y + "px"; - this.element.style.left = x + "px"; - - this.container.appendChild(this.element); - - if(typeof this.renderedCallback === "function"){ - this.renderedCallback(); - } - - this._fitToScreen(x, y, parentEl, parentOffset, position); - - this.visible = true; - - this.subscribe("table-destroy", this.destroyBinding); - - this.element.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - return this; - } - - _fitToScreen(x, y, parentEl, parentOffset, position){ - var scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop; - - //move menu to start on right edge if it is too close to the edge of the screen - if((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){ - this.element.style.left = ""; - - if(parentEl){ - this.element.style.right = (this.container.offsetWidth - parentOffset.left) + "px"; - }else { - this.element.style.right = (this.container.offsetWidth - x) + "px"; - } - - this.reversedX = true; - } - - //move menu to start on bottom edge if it is too close to the edge of the screen - if((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) { - if(parentEl){ - switch(position){ - case "bottom": - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + "px"; - break; - - default: - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + "px"; - } - - }else { - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + "px"; - } - } - } - - isVisible(){ - return this.visible; - } - - hideOnBlur(callback){ - this.blurable = true; - - if(this.visible){ - setTimeout(() => { - if(this.visible){ - this.table.rowManager.element.addEventListener("scroll", this.blurEvent); - this.subscribe("cell-editing", this.blurEvent); - document.body.addEventListener("click", this.blurEvent); - document.body.addEventListener("contextmenu", this.blurEvent); - document.body.addEventListener("mousedown", this.blurEvent); - window.addEventListener("resize", this.blurEvent); - document.body.addEventListener("keydown", this.escEvent); - - this.blurEventsBound = true; - } - }, 100); - - this.blurCallback = callback; - } - - return this; - } - - _escapeCheck(e){ - if(e.keyCode == 27){ - this.hide(); - } - } - - blockHide(){ - this.hideable = false; - } - - restoreHide(){ - this.hideable = true; - } - - hide(silent = false){ - if(this.visible && this.hideable){ - if(this.blurable && this.blurEventsBound){ - document.body.removeEventListener("keydown", this.escEvent); - document.body.removeEventListener("click", this.blurEvent); - document.body.removeEventListener("contextmenu", this.blurEvent); - document.body.removeEventListener("mousedown", this.blurEvent); - window.removeEventListener("resize", this.blurEvent); - this.table.rowManager.element.removeEventListener("scroll", this.blurEvent); - this.unsubscribe("cell-editing", this.blurEvent); - - this.blurEventsBound = false; - } - - if(this.childPopup){ - this.childPopup.hide(); - } - - if(this.parent){ - this.parent.childPopup = null; - } - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.visible = false; - - if(this.blurCallback && !silent){ - this.blurCallback(); - } - - this.unsubscribe("table-destroy", this.destroyBinding); - } - - return this; - } - - child(element){ - if(this.childPopup){ - this.childPopup.hide(); - } - - this.childPopup = new Popup(this.table, element, this); - - return this.childPopup; - } -} - -class Module extends CoreFeature{ - - constructor(table, name){ - super(table); - - this._handler = null; - } - - initialize(){ - // setup module when table is initialized, to be overridden in module - } - - - /////////////////////////////////// - ////// Options Registration /////// - /////////////////////////////////// - - registerTableOption(key, value){ - this.table.optionsList.register(key, value); - } - - registerColumnOption(key, value){ - this.table.columnManager.optionsList.register(key, value); - } - - /////////////////////////////////// - /// Public Function Registration /// - /////////////////////////////////// - - registerTableFunction(name, func){ - if(typeof this.table[name] === "undefined"){ - this.table[name] = (...args) => { - this.table.initGuard(name); - - return func(...args); - }; - }else { - console.warn("Unable to bind table function, name already in use", name); - } - } - - registerComponentFunction(component, func, handler){ - return this.table.componentFunctionBinder.bind(component, func, handler); - } - - /////////////////////////////////// - ////////// Data Pipeline ////////// - /////////////////////////////////// - - registerDataHandler(handler, priority){ - this.table.rowManager.registerDataPipelineHandler(handler, priority); - this._handler = handler; - } - - registerDisplayHandler(handler, priority){ - this.table.rowManager.registerDisplayPipelineHandler(handler, priority); - this._handler = handler; - } - - displayRows(adjust){ - var index = this.table.rowManager.displayRows.length - 1, - lookupIndex; - - if(this._handler){ - lookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => { - return item.handler === this._handler; - }); - - if(lookupIndex > -1){ - index = lookupIndex; - } - } - - if(adjust){ - index = index + adjust; - } - - if(this._handler){ - if(index > -1){ - return this.table.rowManager.getDisplayRows(index); - }else { - return this.activeRows(); - } - } - } - - activeRows(){ - return this.table.rowManager.activeRows; - } - - refreshData(renderInPosition, handler){ - if(!handler){ - handler = this._handler; - } - - if(handler){ - this.table.rowManager.refreshActiveData(handler, false, renderInPosition); - } - } - - /////////////////////////////////// - //////// Footer Management //////// - /////////////////////////////////// - - footerAppend(element){ - return this.table.footerManager.append(element); - } - - footerPrepend(element){ - return this.table.footerManager.prepend(element); - } - - footerRemove(element){ - return this.table.footerManager.remove(element); - } - - /////////////////////////////////// - //////// Popups Management //////// - /////////////////////////////////// - - popup(menuEl, menuContainer){ - return new Popup(this.table, menuEl, menuContainer); - } - - /////////////////////////////////// - //////// Alert Management //////// - /////////////////////////////////// - - alert(content, type){ - return this.table.alertManager.alert(content, type); - } - - clearAlert(){ - return this.table.alertManager.clear(); - } - -} - -var defaultAccessors = {}; - -class Accessor extends Module{ - - constructor(table){ - super(table); - - this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types - - this.registerColumnOption("accessor"); - this.registerColumnOption("accessorParams"); - this.registerColumnOption("accessorData"); - this.registerColumnOption("accessorDataParams"); - this.registerColumnOption("accessorDownload"); - this.registerColumnOption("accessorDownloadParams"); - this.registerColumnOption("accessorClipboard"); - this.registerColumnOption("accessorClipboardParams"); - this.registerColumnOption("accessorPrint"); - this.registerColumnOption("accessorPrintParams"); - this.registerColumnOption("accessorHtmlOutput"); - this.registerColumnOption("accessorHtmlOutputParams"); - } - - initialize(){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("row-data-retrieve", this.transformRow.bind(this)); - } - - //initialize column accessor - initializeColumn(column){ - var match = false, - config = {}; - - this.allowedTypes.forEach((type) => { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if(column.definition[key]){ - accessor = this.lookupAccessor(column.definition[key]); - - if(accessor){ - match = true; - - config[key] = { - accessor:accessor, - params: column.definition[key + "Params"] || {}, - }; - } - } - }); - - if(match){ - column.modules.accessor = config; - } - } - - lookupAccessor(value){ - var accessor = false; - - //set column accessor - switch(typeof value){ - case "string": - if(Accessor.accessors[value]){ - accessor = Accessor.accessors[value]; - }else { - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; - } - - //apply accessor to row - transformRow(row, type){ - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - rowComponent = row.getComponent(); - - //clone data object with deep copy to isolate internal data from returned result - var data = Helpers.deepClone(row.data || {}); - - this.table.columnManager.traverse(function(column){ - var value, accessor, params, colComponent; - - if(column.modules.accessor){ - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if(accessor){ - value = column.getFieldValue(data); - - if(value != "undefined"){ - colComponent = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent)); - } - } - } - }); - - return data; - } -} - -//load defaults -Accessor.moduleName = "accessor"; -Accessor.accessors = defaultAccessors; - -var defaultConfig = { - method: "GET", -}; - -function generateParamsList(data, prefix){ - var output = []; - - prefix = prefix || ""; - - if(Array.isArray(data)){ - data.forEach((item, i) => { - output = output.concat(generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - }else if (typeof data === "object"){ - for (var key in data){ - output = output.concat(generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - }else { - output.push({key:prefix, value:data}); - } - - return output; -} - -function serializeParams(params){ - var output = generateParamsList(params), - encoded = []; - - output.forEach(function(item){ - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); -} - -function urlBuilder(url, config, params){ - if(url){ - if(params && Object.keys(params).length){ - if(!config.method || config.method.toLowerCase() == "get"){ - config.method = "get"; - - url += (url.includes("?") ? "&" : "?") + serializeParams(params); - } - } - } - - return url; -} - -function defaultLoaderPromise(url, config, params){ - var contentType; - - return new Promise((resolve, reject) => { - //set url - url = this.urlGenerator.call(this.table, url, config, params); - - //set body content if not GET request - if(config.method.toUpperCase() != "GET"){ - contentType = typeof this.table.options.ajaxContentType === "object" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType]; - if(contentType){ - - for(var key in contentType.headers){ - if(!config.headers){ - config.headers = {}; - } - - if(typeof config.headers[key] === "undefined"){ - config.headers[key] = contentType.headers[key]; - } - } - - config.body = contentType.body.call(this, url, config, params); - - }else { - console.warn("Ajax Error - Invalid ajaxContentType value:", this.table.options.ajaxContentType); - } - } - - if(url){ - //configure headers - if(typeof config.headers === "undefined"){ - config.headers = {}; - } - - if(typeof config.headers.Accept === "undefined"){ - config.headers.Accept = "application/json"; - } - - if(typeof config.headers["X-Requested-With"] === "undefined"){ - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - if(typeof config.mode === "undefined"){ - config.mode = "cors"; - } - - if(config.mode == "cors"){ - if(typeof config.headers["Origin"] === "undefined"){ - config.headers["Origin"] = window.location.origin; - } - - if(typeof config.credentials === "undefined"){ - config.credentials = 'same-origin'; - } - }else { - if(typeof config.credentials === "undefined"){ - config.credentials = 'include'; - } - } - - //send request - fetch(url, config) - .then((response)=>{ - if(response.ok) { - response.json() - .then((data)=>{ - resolve(data); - }).catch((error)=>{ - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - }else { - console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText); - reject(response); - } - }) - .catch((error)=>{ - console.error("Ajax Load Error - Connection Error: ", error); - reject(error); - }); - }else { - console.warn("Ajax Load Error - No URL Set"); - resolve([]); - } - }); -} - -function generateParamsList$1(data, prefix){ - var output = []; - - prefix = prefix || ""; - - if(Array.isArray(data)){ - data.forEach((item, i) => { - output = output.concat(generateParamsList$1(item, prefix ? prefix + "[" + i + "]" : i)); - }); - }else if (typeof data === "object"){ - for (var key in data){ - output = output.concat(generateParamsList$1(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - }else { - output.push({key:prefix, value:data}); - } - - return output; -} - -var defaultContentTypeFormatters = { - "json":{ - headers:{ - 'Content-Type': 'application/json', - }, - body:function(url, config, params){ - return JSON.stringify(params); - }, - }, - "form":{ - headers:{ - }, - body:function(url, config, params){ - - var output = generateParamsList$1(params), - form = new FormData(); - - output.forEach(function(item){ - form.append(item.key, item.value); - }); - - return form; - }, - }, -}; - -class Ajax extends Module{ - - constructor(table){ - super(table); - - this.config = {}; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderPromise = false; - - this.registerTableOption("ajaxURL", false); //url for ajax loading - this.registerTableOption("ajaxURLGenerator", false); - this.registerTableOption("ajaxParams", {}); //params for ajax loading - this.registerTableOption("ajaxConfig", "get"); //ajax request type - this.registerTableOption("ajaxContentType", "form"); //ajax request type - this.registerTableOption("ajaxRequestFunc", false); //promise function - - this.registerTableOption("ajaxRequesting", function(){}); - this.registerTableOption("ajaxResponse", false); - - this.contentTypeFormatters = Ajax.contentTypeFormatters; - } - - //initialize setup options - initialize(){ - this.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise; - this.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator; - - if(this.table.options.ajaxURL){ - this.setUrl(this.table.options.ajaxURL); - } - - - this.setDefaultConfig(this.table.options.ajaxConfig); - - this.registerTableFunction("getAjaxUrl", this.getUrl.bind(this)); - - this.subscribe("data-loading", this.requestDataCheck.bind(this)); - this.subscribe("data-params", this.requestParams.bind(this)); - this.subscribe("data-load", this.requestData.bind(this)); - } - - requestParams(data, config, silent, params){ - var ajaxParams = this.table.options.ajaxParams; - - if(ajaxParams){ - if(typeof ajaxParams === "function"){ - ajaxParams = ajaxParams.call(this.table); - } - - params = Object.assign(Object.assign({}, ajaxParams), params); - } - - return params; - } - - requestDataCheck(data, params, config, silent){ - return !!((!data && this.url) || typeof data === "string"); - } - - requestData(url, params, config, silent, previousData){ - var ajaxConfig; - - if(!previousData && this.requestDataCheck(url)){ - if(url){ - this.setUrl(url); - } - - ajaxConfig = this.generateConfig(config); - - return this.sendRequest(this.url, params, ajaxConfig); - }else { - return previousData; - } - } - - setDefaultConfig(config = {}){ - this.config = Object.assign({}, Ajax.defaultConfig); - - if(typeof config == "string"){ - this.config.method = config; - }else { - Object.assign(this.config, config); - } - } - - //load config object - generateConfig(config = {}){ - var ajaxConfig = Object.assign({}, this.config); - - if(typeof config == "string"){ - ajaxConfig.method = config; - }else { - Object.assign(ajaxConfig, config); - } - - return ajaxConfig; - } - - //set request url - setUrl(url){ - this.url = url; - } - - //get request url - getUrl(){ - return this.url; - } - - //send ajax request - sendRequest(url, params, config){ - if(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){ - return this.loaderPromise(url, config, params) - .then((data)=>{ - if(this.table.options.ajaxResponse){ - data = this.table.options.ajaxResponse.call(this.table, url, params, data); - } - - return data; - }); - }else { - return Promise.reject(); - } - } -} - -Ajax.moduleName = "ajax"; - -//load defaults -Ajax.defaultConfig = defaultConfig; -Ajax.defaultURLGenerator = urlBuilder; -Ajax.defaultLoaderPromise = defaultLoaderPromise; -Ajax.contentTypeFormatters = defaultContentTypeFormatters; - -var defaultPasteActions = { - replace:function(data){ - return this.table.setData(data); - }, - update:function(data){ - return this.table.updateOrAddData(data); - }, - insert:function(data){ - return this.table.addData(data); - }, - range:function(data){ - var rows = [], - range = this.table.modules.selectRange.activeRange, - singleCell = false, - bounds, startCell, startRow, rowWidth, dataLength; - - dataLength = data.length; - - if(range){ - bounds = range.getBounds(); - startCell = bounds.start; - - if(bounds.start === bounds.end){ - singleCell = true; - } - - if(startCell){ - rows = this.table.rowManager.activeRows.slice(); - startRow = rows.indexOf(startCell.row); - - if(singleCell){ - rowWidth = data.length; - }else { - rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1; - } - - - if(startRow >-1){ - this.table.blockRedraw(); - - rows = rows.slice(startRow, startRow + rowWidth); - - rows.forEach((row, i) => { - row.updateData(data[i % dataLength]); - }); - - this.table.restoreRedraw(); - } - } - } - - return rows; - } -}; - -var defaultPasteParsers = { - table:function(clipboard){ - var data = [], - headerFindSuccess = true, - columns = this.table.columnManager.columns, - columnMap = [], - rows = []; - - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function(row){ - data.push(row.split("\t")); - }); - - if(data.length && !(data.length === 1 && data[0].length < 2)){ - - //check if headers are present by title - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else { - headerFindSuccess = false; - } - }); - - //check if column headers are present by field - if(!headerFindSuccess){ - headerFindSuccess = true; - columnMap = []; - - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.field && value.trim() && column.field.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else { - headerFindSuccess = false; - } - }); - - if(!headerFindSuccess){ - columnMap = this.table.columnManager.columnsByIndex; - } - } - - //remove header row if found - if(headerFindSuccess){ - data.shift(); - } - - data.forEach(function(item){ - var row = {}; - - item.forEach(function(value, i){ - if(columnMap[i]){ - row[columnMap[i].field] = value; - } - }); - - rows.push(row); - }); - - return rows; - }else { - return false; - } - }, - range:function(clipboard){ - var data = [], - rows = [], - range = this.table.modules.selectRange.activeRange, - singleCell = false, - bounds, startCell, colWidth, columnMap, startCol; - - if(range){ - bounds = range.getBounds(); - startCell = bounds.start; - - if(bounds.start === bounds.end){ - singleCell = true; - } - - if(startCell){ - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function(row){ - data.push(row.split("\t")); - }); - - if(data.length){ - columnMap = this.table.columnManager.getVisibleColumnsByIndex(); - startCol = columnMap.indexOf(startCell.column); - - if(startCol > -1){ - if(singleCell){ - colWidth = data[0].length; - }else { - colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1; - } - - columnMap = columnMap.slice(startCol, startCol + colWidth); - - data.forEach((item) => { - var row = {}; - var itemLength = item.length; - - columnMap.forEach(function(col, i){ - row[col.field] = item[i % itemLength]; - }); - - rows.push(row); - }); - - return rows; - } - } - } - } - - return false; - } -}; - -class Clipboard extends Module{ - - constructor(table){ - super(table); - - this.mode = true; - this.pasteParser = function(){}; - this.pasteAction = function(){}; - this.customSelection = false; - this.rowRange = false; - this.blocked = true; //block copy actions not originating from this command - - this.registerTableOption("clipboard", false); //enable clipboard - this.registerTableOption("clipboardCopyStyled", true); //formatted table data - this.registerTableOption("clipboardCopyConfig", false); //clipboard config - this.registerTableOption("clipboardCopyFormatter", false); //DEPRECATED - REMOVE in 5.0 - this.registerTableOption("clipboardCopyRowRange", "active"); //restrict clipboard to visible rows only - this.registerTableOption("clipboardPasteParser", "table"); //convert pasted clipboard data to rows - this.registerTableOption("clipboardPasteAction", "insert"); //how to insert pasted data into the table - - this.registerColumnOption("clipboard"); - this.registerColumnOption("titleClipboard"); - } - - initialize(){ - this.mode = this.table.options.clipboard; - - this.rowRange = this.table.options.clipboardCopyRowRange; - - if(this.mode === true || this.mode === "copy"){ - this.table.element.addEventListener("copy", (e) => { - var plain, html, list; - - if(!this.blocked){ - e.preventDefault(); - - if(this.customSelection){ - plain = this.customSelection; - - if(this.table.options.clipboardCopyFormatter){ - plain = this.table.options.clipboardCopyFormatter("plain", plain); - } - }else { - - list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, "clipboard"); - - html = this.table.modules.export.generateHTMLTable(list); - plain = html ? this.generatePlainContent(list) : ""; - - if(this.table.options.clipboardCopyFormatter){ - plain = this.table.options.clipboardCopyFormatter("plain", plain); - html = this.table.options.clipboardCopyFormatter("html", html); - } - } - - if (window.clipboardData && window.clipboardData.setData) { - window.clipboardData.setData('Text', plain); - } else if (e.clipboardData && e.clipboardData.setData) { - e.clipboardData.setData('text/plain', plain); - if(html){ - e.clipboardData.setData('text/html', html); - } - } else if (e.originalEvent && e.originalEvent.clipboardData.setData) { - e.originalEvent.clipboardData.setData('text/plain', plain); - if(html){ - e.originalEvent.clipboardData.setData('text/html', html); - } - } - - this.dispatchExternal("clipboardCopied", plain, html); - - this.reset(); - } - }); - } - - if(this.mode === true || this.mode === "paste"){ - this.table.element.addEventListener("paste", (e) => { - this.paste(e); - }); - } - - this.setPasteParser(this.table.options.clipboardPasteParser); - this.setPasteAction(this.table.options.clipboardPasteAction); - - this.registerTableFunction("copyToClipboard", this.copy.bind(this)); - } - - reset(){ - this.blocked = true; - this.customSelection = false; - } - - generatePlainContent (list) { - var output = []; - - list.forEach((row) => { - var rowData = []; - - row.columns.forEach((col) => { - var value = ""; - - if(col){ - - if(row.type === "group"){ - col.value = col.component.getKey(); - } - - if(col.value === null){ - value = ""; - }else { - switch(typeof col.value){ - case "object": - value = JSON.stringify(col.value); - break; - - case "undefined": - value = ""; - break; - - default: - value = col.value; - } - } - } - - rowData.push(value); - }); - - output.push(rowData.join("\t")); - }); - - return output.join("\n"); - } - - copy (range, internal) { - var sel, textRange; - this.blocked = false; - this.customSelection = false; - - - if (this.mode === true || this.mode === "copy") { - - this.rowRange = range || this.table.options.clipboardCopyRowRange; - - if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") { - range = document.createRange(); - range.selectNodeContents(this.table.element); - sel = window.getSelection(); - - if (sel.toString() && internal) { - this.customSelection = sel.toString(); - } - - sel.removeAllRanges(); - sel.addRange(range); - } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") { - textRange = document.body.createTextRange(); - textRange.moveToElementText(this.table.element); - textRange.select(); - } - - document.execCommand('copy'); - - if (sel) { - sel.removeAllRanges(); - } - } - } - - //PASTE EVENT HANDLING - setPasteAction(action){ - - switch(typeof action){ - case "string": - this.pasteAction = Clipboard.pasteActions[action]; - - if(!this.pasteAction){ - console.warn("Clipboard Error - No such paste action found:", action); - } - break; - - case "function": - this.pasteAction = action; - break; - } - } - - setPasteParser(parser){ - switch(typeof parser){ - case "string": - this.pasteParser = Clipboard.pasteParsers[parser]; - - if(!this.pasteParser){ - console.warn("Clipboard Error - No such paste parser found:", parser); - } - break; - - case "function": - this.pasteParser = parser; - break; - } - } - - paste(e){ - var data, rowData, rows; - - if(this.checkPasteOrigin(e)){ - - data = this.getPasteData(e); - - rowData = this.pasteParser.call(this, data); - - if(rowData){ - e.preventDefault(); - - if(this.table.modExists("mutator")){ - rowData = this.mutateData(rowData); - } - - rows = this.pasteAction.call(this, rowData); - - this.dispatchExternal("clipboardPasted", data, rowData, rows); - }else { - this.dispatchExternal("clipboardPasteError", data); - } - } - } - - mutateData(data){ - var output = []; - - if(Array.isArray(data)){ - data.forEach((row) => { - output.push(this.table.modules.mutator.transformRow(row, "clipboard")); - }); - }else { - output = data; - } - - return output; - } - - - checkPasteOrigin(e){ - var valid = true; - var blocked = this.confirm("clipboard-paste", [e]); - - if(blocked || !["DIV", "SPAN"].includes(e.target.tagName)){ - valid = false; - } - - return valid; - } - - getPasteData(e){ - var data; - - if (window.clipboardData && window.clipboardData.getData) { - data = window.clipboardData.getData('Text'); - } else if (e.clipboardData && e.clipboardData.getData) { - data = e.clipboardData.getData('text/plain'); - } else if (e.originalEvent && e.originalEvent.clipboardData.getData) { - data = e.originalEvent.clipboardData.getData('text/plain'); - } - - return data; - } -} - -Clipboard.moduleName = "clipboard"; - -//load defaults -Clipboard.pasteActions = defaultPasteActions; -Clipboard.pasteParsers = defaultPasteParsers; - -class CalcComponent{ - constructor (row){ - this._row = row; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._row.table.componentFunctionBinder.handle("row", target._row, name); - } - } - }); - } - - getData(transform){ - return this._row.getData(transform); - } - - getElement(){ - return this._row.getElement(); - } - - getTable(){ - return this._row.table; - } - - getCells(){ - var cells = []; - - this._row.getCells().forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - getCell(column){ - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; - } - - _getSelf(){ - return this._row; - } -} - -//public cell object -class CellComponent { - - constructor (cell){ - this._cell = cell; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._cell.table.componentFunctionBinder.handle("cell", target._cell, name); - } - } - }); - } - - getValue(){ - return this._cell.getValue(); - } - - getOldValue(){ - return this._cell.getOldValue(); - } - - getInitialValue(){ - return this._cell.initialValue; - } - - getElement(){ - return this._cell.getElement(); - } - - getRow(){ - return this._cell.row.getComponent(); - } - - getData(transform){ - return this._cell.row.getData(transform); - } - getType(){ - return "cell"; - } - getField(){ - return this._cell.column.getField(); - } - - getColumn(){ - return this._cell.column.getComponent(); - } - - setValue(value, mutate){ - if(typeof mutate == "undefined"){ - mutate = true; - } - - this._cell.setValue(value, mutate); - } - - restoreOldValue(){ - this._cell.setValueActual(this._cell.getOldValue()); - } - - restoreInitialValue(){ - this._cell.setValueActual(this._cell.initialValue); - } - - checkHeight(){ - this._cell.checkHeight(); - } - - getTable(){ - return this._cell.table; - } - - _getSelf(){ - return this._cell; - } -} - -class Cell extends CoreFeature{ - constructor(column, row){ - super(column.table); - - this.table = column.table; - this.column = column; - this.row = row; - this.element = null; - this.value = null; - this.initialValue; - this.oldValue = null; - this.modules = {}; - - this.height = null; - this.width = null; - this.minWidth = null; - - this.component = null; - - this.loaded = false; //track if the cell has been added to the DOM yet - - this.build(); - } - - //////////////// Setup Functions ///////////////// - //generate element - build(){ - this.generateElement(); - - this.setWidth(); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); - - this.initialValue = this.value; - } - - generateElement(){ - this.element = document.createElement('div'); - this.element.className = "tabulator-cell"; - this.element.setAttribute("role", "gridcell"); - } - - _configureCell(){ - var element = this.element, - field = this.column.getField(), - vertAligns = { - top:"flex-start", - bottom:"flex-end", - middle:"center", - }, - hozAligns = { - left:"flex-start", - right:"flex-end", - center:"center", - }; - - //set text alignment - element.style.textAlign = this.column.hozAlign; - - if(this.column.vertAlign){ - element.style.display = "inline-flex"; - - element.style.alignItems = vertAligns[this.column.vertAlign] || ""; - - if(this.column.hozAlign){ - element.style.justifyContent = hozAligns[this.column.hozAlign] || ""; - } - } - - if(field){ - element.setAttribute("tabulator-field", field); - } - - //add class to cell if needed - if(this.column.definition.cssClass){ - var classNames = this.column.definition.cssClass.split(" "); - classNames.forEach((className) => { - element.classList.add(className); - }); - } - - this.dispatch("cell-init", this); - - //hide cell if not visible - if(!this.column.visible){ - this.hide(); - } - } - - //generate cell contents - _generateContents(){ - var val; - - val = this.chain("cell-format", this, null, () => { - return this.element.innerHTML = this.value; - }); - - switch(typeof val){ - case "object": - if(val instanceof Node){ - - //clear previous cell contents - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - this.element.appendChild(val); - }else { - this.element.innerHTML = ""; - - if(val != null){ - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - } - break; - case "undefined": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = val; - } - } - - cellRendered(){ - this.dispatch("cell-rendered", this); - } - - //////////////////// Getters //////////////////// - getElement(containerOnly){ - if(!this.loaded){ - this.loaded = true; - if(!containerOnly){ - this.layoutElement(); - } - } - - return this.element; - } - - getValue(){ - return this.value; - } - - getOldValue(){ - return this.oldValue; - } - - //////////////////// Actions //////////////////// - setValue(value, mutate, force){ - var changed = this.setValueProcessData(value, mutate, force); - - if(changed){ - this.dispatch("cell-value-updated", this); - - this.cellRendered(); - - if(this.column.definition.cellEdited){ - this.column.definition.cellEdited.call(this.table, this.getComponent()); - } - - this.dispatchExternal("cellEdited", this.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - } - } - - setValueProcessData(value, mutate, force){ - var changed = false; - - if(this.value !== value || force){ - - changed = true; - - if(mutate){ - value = this.chain("cell-value-changing", [this, value], null, value); - } - } - - this.setValueActual(value); - - if(changed){ - this.dispatch("cell-value-changed", this); - } - - return changed; - } - - setValueActual(value){ - this.oldValue = this.value; - - this.value = value; - - this.dispatch("cell-value-save-before", this); - - this.column.setFieldValue(this.row.data, value); - - this.dispatch("cell-value-save-after", this); - - if(this.loaded){ - this.layoutElement(); - } - } - - layoutElement(){ - this._generateContents(); - - this.dispatch("cell-layout", this); - } - - setWidth(){ - this.width = this.column.width; - this.element.style.width = this.column.widthStyled; - } - - clearWidth(){ - this.width = ""; - this.element.style.width = ""; - } - - getWidth(){ - return this.width || this.element.offsetWidth; - } - - setMinWidth(){ - this.minWidth = this.column.minWidth; - this.element.style.minWidth = this.column.minWidthStyled; - } - - setMaxWidth(){ - this.maxWidth = this.column.maxWidth; - this.element.style.maxWidth = this.column.maxWidthStyled; - } - - checkHeight(){ - // var height = this.element.css("height"); - this.row.reinitializeHeight(); - } - - clearHeight(){ - this.element.style.height = ""; - this.height = null; - - this.dispatch("cell-height", this, ""); - } - - setHeight(){ - this.height = this.row.height; - this.element.style.height = this.row.heightStyled; - - this.dispatch("cell-height", this, this.row.heightStyled); - } - - getHeight(){ - return this.height || this.element.offsetHeight; - } - - show(){ - this.element.style.display = this.column.vertAlign ? "inline-flex" : ""; - } - - hide(){ - this.element.style.display = "none"; - } - - delete(){ - this.dispatch("cell-delete", this); - - if(!this.table.rowManager.redrawBlock && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.element = false; - this.column.deleteCell(this); - this.row.deleteCell(this); - this.calcs = {}; - } - - getIndex(){ - return this.row.getCellIndex(this); - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new CellComponent(this); - } - - return this.component; - } -} - -//public column object -class ColumnComponent { - constructor (column){ - this._column = column; - this.type = "ColumnComponent"; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._column.table.componentFunctionBinder.handle("column", target._column, name); - } - } - }); - } - - getElement(){ - return this._column.getElement(); - } - - getDefinition(){ - return this._column.getDefinition(); - } - - getField(){ - return this._column.getField(); - } - - getTitleDownload() { - return this._column.getTitleDownload(); - } - - getCells(){ - var cells = []; - - this._column.cells.forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - isVisible(){ - return this._column.visible; - } - - show(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.show(); - }); - }else { - this._column.show(); - } - } - - hide(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.hide(); - }); - }else { - this._column.hide(); - } - } - - toggle(){ - if(this._column.visible){ - this.hide(); - }else { - this.show(); - } - } - - delete(){ - return this._column.delete(); - } - - getSubColumns(){ - var output = []; - - if(this._column.columns.length){ - this._column.columns.forEach(function(column){ - output.push(column.getComponent()); - }); - } - - return output; - } - - getParentColumn(){ - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; - } - - _getSelf(){ - return this._column; - } - - scrollTo(position, ifVisible){ - return this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible); - } - - getTable(){ - return this._column.table; - } - - move(to, after){ - var toColumn = this._column.table.columnManager.findColumn(to); - - if(toColumn){ - this._column.table.columnManager.moveColumn(this._column, toColumn, after); - }else { - console.warn("Move Error - No matching column found:", toColumn); - } - } - - getNextColumn(){ - var nextCol = this._column.nextColumn(); - - return nextCol ? nextCol.getComponent() : false; - } - - getPrevColumn(){ - var prevCol = this._column.prevColumn(); - - return prevCol ? prevCol.getComponent() : false; - } - - updateDefinition(updates){ - return this._column.updateDefinition(updates); - } - - getWidth(){ - return this._column.getWidth(); - } - - setWidth(width){ - var result; - - if(width === true){ - result = this._column.reinitializeWidth(true); - }else { - result = this._column.setWidth(width); - } - - this._column.table.columnManager.rerenderColumns(true); - - return result; - } -} - -var defaultColumnOptions = { - "title": undefined, - "field": undefined, - "columns": undefined, - "visible": undefined, - "hozAlign": undefined, - "vertAlign": undefined, - "width": undefined, - "minWidth": 40, - "maxWidth": undefined, - "maxInitialWidth": undefined, - "cssClass": undefined, - "variableHeight": undefined, - "headerVertical": undefined, - "headerHozAlign": undefined, - "headerWordWrap": false, - "editableTitle": undefined, -}; - -class Column extends CoreFeature{ - - constructor(def, parent){ - super(parent.table); - - this.definition = def; //column definition - this.parent = parent; //hold parent object - this.type = "column"; //type of element - this.columns = []; //child columns - this.cells = []; //cells bound to this column - this.element = this.createElement(); //column header element - this.contentElement = false; - this.titleHolderElement = false; - this.titleElement = false; - this.groupElement = this.createGroupElement(); //column group holder element - this.isGroup = false; - this.hozAlign = ""; //horizontal text alignment - this.vertAlign = ""; //vert text alignment - - //multi dimensional filed handling - this.field =""; - this.fieldStructure = ""; - this.getFieldValue = ""; - this.setFieldValue = ""; - - this.titleDownload = null; - this.titleFormatterRendered = false; - - this.mapDefinitions(); - - this.setField(this.definition.field); - - this.modules = {}; //hold module variables; - - this.width = null; //column width - this.widthStyled = ""; //column width pre-styled to improve render efficiency - this.maxWidth = null; //column maximum width - this.maxWidthStyled = ""; //column maximum pre-styled to improve render efficiency - this.maxInitialWidth = null; - this.minWidth = null; //column minimum width - this.minWidthStyled = ""; //column minimum pre-styled to improve render efficiency - this.widthFixed = false; //user has specified a width for this column - - this.visible = true; //default visible state - - this.component = null; - - //initialize column - if(this.definition.columns){ - - this.isGroup = true; - - this.definition.columns.forEach((def, i) => { - var newCol = new Column(def, this); - this.attachColumn(newCol); - }); - - this.checkColumnVisibility(); - }else { - parent.registerColumnField(this); - } - - this._initialize(); - } - - createElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.setAttribute("role", "columnheader"); - el.setAttribute("aria-sort", "none"); - - switch(this.table.options.columnHeaderVertAlign){ - case "middle": - el.style.justifyContent = "center"; - break; - case "bottom": - el.style.justifyContent = "flex-end"; - break; - } - - return el; - } - - createGroupElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; - } - - mapDefinitions(){ - var defaults = this.table.options.columnDefaults; - - //map columnDefaults onto column definitions - if(defaults){ - for(let key in defaults){ - if(typeof this.definition[key] === "undefined"){ - this.definition[key] = defaults[key]; - } - } - } - - this.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition); - } - - checkDefinition(){ - Object.keys(this.definition).forEach((key) => { - if(Column.defaultOptionList.indexOf(key) === -1){ - console.warn("Invalid column definition option in '" + (this.field || this.definition.title) + "' column:", key); - } - }); - } - - setField(field){ - this.field = field; - this.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : []; - this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData; - this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData; - } - - //register column position with column manager - registerColumnPosition(column){ - this.parent.registerColumnPosition(column); - } - - //register column position with column manager - registerColumnField(column){ - this.parent.registerColumnField(column); - } - - //trigger position registration - reRegisterPosition(){ - if(this.isGroup){ - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); - }else { - this.registerColumnPosition(this); - } - } - - //build header element - _initialize(){ - var def = this.definition; - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(def.headerVertical){ - this.element.classList.add("tabulator-col-vertical"); - - if(def.headerVertical === "flip"){ - this.element.classList.add("tabulator-col-vertical-flip"); - } - } - - this.contentElement = this._buildColumnHeaderContent(); - - this.element.appendChild(this.contentElement); - - if(this.isGroup){ - this._buildGroupHeader(); - }else { - this._buildColumnHeader(); - } - - this.dispatch("column-init", this); - } - - //build header element for header - _buildColumnHeader(){ - var def = this.definition; - - this.dispatch("column-layout", this); - - //set column visibility - if(typeof def.visible != "undefined"){ - if(def.visible){ - this.show(true); - }else { - this.hide(true); - } - } - - //assign additional css classes to column header - if(def.cssClass){ - var classNames = def.cssClass.split(" "); - classNames.forEach((className) => { - this.element.classList.add(className); - }); - } - - if(def.field){ - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - this.setMinWidth(parseInt(def.minWidth)); - - if (def.maxInitialWidth) { - this.maxInitialWidth = parseInt(def.maxInitialWidth); - } - - if(def.maxWidth){ - this.setMaxWidth(parseInt(def.maxWidth)); - } - - this.reinitializeWidth(); - - //set horizontal text alignment - this.hozAlign = this.definition.hozAlign; - this.vertAlign = this.definition.vertAlign; - - this.titleElement.style.textAlign = this.definition.headerHozAlign; - } - - _buildColumnHeaderContent(){ - var contentElement = document.createElement("div"); - contentElement.classList.add("tabulator-col-content"); - - this.titleHolderElement = document.createElement("div"); - this.titleHolderElement.classList.add("tabulator-col-title-holder"); - - contentElement.appendChild(this.titleHolderElement); - - this.titleElement = this._buildColumnHeaderTitle(); - - this.titleHolderElement.appendChild(this.titleElement); - - return contentElement; - } - - //build title element of column - _buildColumnHeaderTitle(){ - var def = this.definition; - - var titleHolderElement = document.createElement("div"); - titleHolderElement.classList.add("tabulator-col-title"); - - if(def.headerWordWrap){ - titleHolderElement.classList.add("tabulator-col-title-wrap"); - } - - if(def.editableTitle){ - var titleElement = document.createElement("input"); - titleElement.classList.add("tabulator-title-editor"); - - titleElement.addEventListener("click", (e) => { - e.stopPropagation(); - titleElement.focus(); - }); - - titleElement.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - titleElement.addEventListener("change", () => { - def.title = titleElement.value; - this.dispatchExternal("columnTitleChanged", this.getComponent()); - }); - - titleHolderElement.appendChild(titleElement); - - if(def.field){ - this.langBind("columns|" + def.field, (text) => { - titleElement.value = text || (def.title || " "); - }); - }else { - titleElement.value = def.title || " "; - } - - }else { - if(def.field){ - this.langBind("columns|" + def.field, (text) => { - this._formatColumnHeaderTitle(titleHolderElement, text || (def.title || " ")); - }); - }else { - this._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; - } - - _formatColumnHeaderTitle(el, title){ - var contents = this.chain("column-format", [this, title, el], null, () => { - return title; - }); - - switch(typeof contents){ - case "object": - if(contents instanceof Node){ - el.appendChild(contents); - }else { - el.innerHTML = ""; - console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); - } - break; - case "undefined": - el.innerHTML = ""; - break; - default: - el.innerHTML = contents; - } - } - - //build header element for column group - _buildGroupHeader(){ - this.element.classList.add("tabulator-col-group"); - this.element.setAttribute("role", "columngroup"); - this.element.setAttribute("aria-title", this.definition.title); - - //asign additional css classes to column header - if(this.definition.cssClass){ - var classNames = this.definition.cssClass.split(" "); - classNames.forEach((className) => { - this.element.classList.add(className); - }); - } - - this.titleElement.style.textAlign = this.definition.headerHozAlign; - - this.element.appendChild(this.groupElement); - } - - //flat field lookup - _getFlatData(data){ - return data[this.field]; - } - - //nested field lookup - _getNestedData(data){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for(let i = 0; i < length; i++){ - - dataObj = dataObj[structure[i]]; - - output = dataObj; - - if(!dataObj){ - break; - } - } - - return output; - } - - //flat field set - _setFlatData(data, value){ - if(this.field){ - data[this.field] = value; - } - } - - //nested field set - _setNestedData(data, value){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for(let i = 0; i < length; i++){ - - if(i == length -1){ - dataObj[structure[i]] = value; - }else { - if(!dataObj[structure[i]]){ - if(typeof value !== "undefined"){ - dataObj[structure[i]] = {}; - }else { - break; - } - } - - dataObj = dataObj[structure[i]]; - } - } - } - - //attach column to this group - attachColumn(column){ - if(this.groupElement){ - this.columns.push(column); - this.groupElement.appendChild(column.getElement()); - - column.columnRendered(); - }else { - console.warn("Column Warning - Column being attached to another column instead of column group"); - } - } - - //vertically align header in column - verticalAlign(alignment, height){ - - //calculate height of column header and group holder element - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight); - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - this.element.style.height = parentHeight + "px"; - - this.dispatch("column-height", this, this.element.style.height); - - if(this.isGroup){ - this.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + "px"; - } - - //vertically align cell contents - // if(!this.isGroup && alignment !== "top"){ - // if(alignment === "bottom"){ - // this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + "px"; - // }else{ - // this.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + "px"; - // } - // } - - this.columns.forEach(function(column){ - column.verticalAlign(alignment); - }); - } - - //clear vertical alignment - clearVerticalAlign(){ - this.element.style.paddingTop = ""; - this.element.style.height = ""; - this.element.style.minHeight = ""; - this.groupElement.style.minHeight = ""; - - this.columns.forEach(function(column){ - column.clearVerticalAlign(); - }); - - this.dispatch("column-height", this, ""); - } - - //// Retrieve Column Information //// - //return column header element - getElement(){ - return this.element; - } - - //return column group element - getGroupElement(){ - return this.groupElement; - } - - //return field name - getField(){ - return this.field; - } - - getTitleDownload() { - return this.titleDownload; - } - - //return the first column in a group - getFirstColumn(){ - if(!this.isGroup){ - return this; - }else { - if(this.columns.length){ - return this.columns[0].getFirstColumn(); - }else { - return false; - } - } - } - - //return the last column in a group - getLastColumn(){ - if(!this.isGroup){ - return this; - }else { - if(this.columns.length){ - return this.columns[this.columns.length -1].getLastColumn(); - }else { - return false; - } - } - } - - //return all columns in a group - getColumns(traverse){ - var columns = []; - - if(traverse){ - this.columns.forEach((column) => { - columns.push(column); - - columns = columns.concat(column.getColumns(true)); - }); - }else { - columns = this.columns; - } - - return columns; - } - - //return all columns in a group - getCells(){ - return this.cells; - } - - //retrieve the top column in a group of columns - getTopColumn(){ - if(this.parent.isGroup){ - return this.parent.getTopColumn(); - }else { - return this; - } - } - - //return column definition object - getDefinition(updateBranches){ - var colDefs = []; - - if(this.isGroup && updateBranches){ - this.columns.forEach(function(column){ - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; - } - - //////////////////// Actions //////////////////// - checkColumnVisibility(){ - var visible = false; - - this.columns.forEach(function(column){ - if(column.visible){ - visible = true; - } - }); - - if(visible){ - this.show(); - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); - }else { - this.hide(); - } - } - - //show column - show(silent, responsiveToggle){ - if(!this.visible){ - this.visible = true; - - this.element.style.display = ""; - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.show(); - }); - - if(!this.isGroup && this.width === null){ - this.reinitializeWidth(); - } - - this.table.columnManager.verticalAlignHeaders(); - - this.dispatch("column-show", this, responsiveToggle); - - if(!silent){ - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), true); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - if(!this.silent){ - this.table.columnManager.rerenderColumns(); - } - } - } - - //hide column - hide(silent, responsiveToggle){ - if(this.visible){ - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager.verticalAlignHeaders(); - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.hide(); - }); - - this.dispatch("column-hide", this, responsiveToggle); - - if(!silent){ - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - if(!this.silent){ - this.table.columnManager.rerenderColumns(); - } - } - } - - matchChildWidths(){ - var childWidth = 0; - - if(this.contentElement && this.columns.length){ - this.columns.forEach(function(column){ - if(column.visible){ - childWidth += column.getWidth(); - } - }); - - this.contentElement.style.maxWidth = (childWidth - 1) + "px"; - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - } - } - - removeChild(child){ - var index = this.columns.indexOf(child); - - if(index > -1){ - this.columns.splice(index, 1); - } - - if(!this.columns.length){ - this.delete(); - } - } - - setWidth(width){ - this.widthFixed = true; - this.setWidthActual(width); - } - - setWidthActual(width){ - if(isNaN(width)){ - width = Math.floor((this.table.element.clientWidth/100) * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - if(this.maxWidth){ - width = Math.min(this.maxWidth, width); - } - - this.width = width; - this.widthStyled = width ? width + "px" : ""; - - this.element.style.width = this.widthStyled; - - if(!this.isGroup){ - this.cells.forEach(function(cell){ - cell.setWidth(); - }); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - this.dispatch("column-width", this); - } - - checkCellHeights(){ - var rows = []; - - this.cells.forEach(function(cell){ - if(cell.row.heightInitialized){ - if(cell.row.getElement().offsetParent !== null){ - rows.push(cell.row); - cell.row.clearCellHeight(); - }else { - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function(row){ - row.calcHeight(); - }); - - rows.forEach(function(row){ - row.setCellHeight(); - }); - } - - getWidth(){ - var width = 0; - - if(this.isGroup){ - this.columns.forEach(function(column){ - if(column.visible){ - width += column.getWidth(); - } - }); - }else { - width = this.width; - } - - return width; - } - - getLeftOffset(){ - var offset = this.element.offsetLeft; - - if(this.parent.isGroup){ - offset += this.parent.getLeftOffset(); - } - - return offset; - } - - getHeight(){ - return Math.ceil(this.element.getBoundingClientRect().height); - } - - setMinWidth(minWidth){ - if(this.maxWidth && minWidth > this.maxWidth){ - minWidth = this.maxWidth; - - console.warn("the minWidth ("+ minWidth + "px) for column '" + this.field + "' cannot be bigger that its maxWidth ("+ this.maxWidthStyled + ")"); - } - - this.minWidth = minWidth; - this.minWidthStyled = minWidth ? minWidth + "px" : ""; - - this.element.style.minWidth = this.minWidthStyled; - - this.cells.forEach(function(cell){ - cell.setMinWidth(); - }); - } - - setMaxWidth(maxWidth){ - if(this.minWidth && maxWidth < this.minWidth){ - maxWidth = this.minWidth; - - console.warn("the maxWidth ("+ maxWidth + "px) for column '" + this.field + "' cannot be smaller that its minWidth ("+ this.minWidthStyled + ")"); - } - - this.maxWidth = maxWidth; - this.maxWidthStyled = maxWidth ? maxWidth + "px" : ""; - - this.element.style.maxWidth = this.maxWidthStyled; - - this.cells.forEach(function(cell){ - cell.setMaxWidth(); - }); - } - - delete(){ - return new Promise((resolve, reject) => { - if(this.isGroup){ - this.columns.forEach(function(column){ - column.delete(); - }); - } - - this.dispatch("column-delete", this); - - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.element = false; - this.contentElement = false; - this.titleElement = false; - this.groupElement = false; - - if(this.parent.isGroup){ - this.parent.removeChild(this); - } - - this.table.columnManager.deregisterColumn(this); - - this.table.columnManager.rerenderColumns(true); - - this.dispatch("column-deleted", this); - - resolve(); - }); - } - - columnRendered(){ - if(this.titleFormatterRendered){ - this.titleFormatterRendered(); - } - - this.dispatch("column-rendered", this); - } - - //////////////// Cell Management ///////////////// - //generate cell for this column - generateCell(row){ - var cell = new Cell(this, row); - - this.cells.push(cell); - - return cell; - } - - nextColumn(){ - var index = this.table.columnManager.findColumnIndex(this); - return index > -1 ? this._nextVisibleColumn(index + 1) : false; - } - - _nextVisibleColumn(index){ - var column = this.table.columnManager.getColumnByIndex(index); - return !column || column.visible ? column : this._nextVisibleColumn(index + 1); - } - - prevColumn(){ - var index = this.table.columnManager.findColumnIndex(this); - return index > -1 ? this._prevVisibleColumn(index - 1) : false; - } - - _prevVisibleColumn(index){ - var column = this.table.columnManager.getColumnByIndex(index); - return !column || column.visible ? column : this._prevVisibleColumn(index - 1); - } - - reinitializeWidth(force){ - this.widthFixed = false; - - //set width if present - if(typeof this.definition.width !== "undefined" && !force){ - // maxInitialWidth ignored here as width specified - this.setWidth(this.definition.width); - } - - this.dispatch("column-width-fit-before", this); - - this.fitToData(force); - - this.dispatch("column-width-fit-after", this); - } - - //set column width to maximum cell width for non group columns - fitToData(force){ - if(this.isGroup){ - return; - } - - if(!this.widthFixed){ - this.element.style.width = ""; - - this.cells.forEach((cell) => { - cell.clearWidth(); - }); - } - - var maxWidth = this.element.offsetWidth; - - if(!this.width || !this.widthFixed){ - this.cells.forEach((cell) => { - var width = cell.getWidth(); - - if(width > maxWidth){ - maxWidth = width; - } - }); - - if(maxWidth){ - var setTo = maxWidth + 1; - if (this.maxInitialWidth && !force) { - setTo = Math.min(setTo, this.maxInitialWidth); - } - this.setWidthActual(setTo); - } - } - } - - updateDefinition(updates){ - var definition; - - if(!this.isGroup){ - if(!this.parent.isGroup){ - definition = Object.assign({}, this.getDefinition()); - definition = Object.assign(definition, updates); - - return this.table.columnManager.addColumn(definition, false, this) - .then((column) => { - - if(definition.field == this.field){ - this.field = false; //clear field name to prevent deletion of duplicate column from arrays - } - - return this.delete() - .then(() => { - return column.getComponent(); - }); - - }); - }else { - console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"); - return Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); - } - }else { - console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"); - return Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); - } - } - - deleteCell(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new ColumnComponent(this); - } - - return this.component; - } - - getPosition(){ - return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1; - } -} - -Column.defaultOptionList = defaultColumnOptions; - -//public row object -class RowComponent { - - constructor (row){ - this._row = row; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._row.table.componentFunctionBinder.handle("row", target._row, name); - } - } - }); - } - - getData(transform){ - return this._row.getData(transform); - } - - getElement(){ - return this._row.getElement(); - } - - getCells(){ - var cells = []; - - this._row.getCells().forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - getCell(column){ - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; - } - - getIndex(){ - return this._row.getData("data")[this._row.table.options.index]; - } - - getPosition(){ - return this._row.getPosition(); - } - - watchPosition(callback){ - return this._row.watchPosition(callback); - } - - delete(){ - return this._row.delete(); - } - - scrollTo(position, ifVisible){ - return this._row.table.rowManager.scrollToRow(this._row, position, ifVisible); - } - - move(to, after){ - this._row.moveToRow(to, after); - } - - update(data){ - return this._row.updateData(data); - } - - normalizeHeight(){ - this._row.normalizeHeight(true); - } - - _getSelf(){ - return this._row; - } - - reformat(){ - return this._row.reinitialize(); - } - - getTable(){ - return this._row.table; - } - - getNextRow(){ - var row = this._row.nextRow(); - return row ? row.getComponent() : row; - } - - getPrevRow(){ - var row = this._row.prevRow(); - return row ? row.getComponent() : row; - } -} - -class Row extends CoreFeature{ - constructor (data, parent, type = "row"){ - super(parent.table); - - this.parent = parent; - this.data = {}; - this.type = type; //type of element - this.element = false; - this.modules = {}; //hold module variables; - this.cells = []; - this.height = 0; //hold element height - this.heightStyled = ""; //hold element height pre-styled to improve render efficiency - this.manualHeight = false; //user has manually set row height - this.outerHeight = 0; //hold elements outer height - this.initialized = false; //element has been rendered - this.heightInitialized = false; //element has resized cells to fit - this.position = 0; //store position of element in row list - this.positionWatchers = []; - - this.component = null; - - this.created = false; - - this.setData(data); - } - - create(){ - if(!this.created){ - this.created = true; - this.generateElement(); - } - } - - createElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.setAttribute("role", "row"); - - this.element = el; - } - - getElement(){ - this.create(); - return this.element; - } - - detachElement(){ - if (this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - generateElement(){ - this.createElement(); - this.dispatch("row-init", this); - } - - generateCells(){ - this.cells = this.table.columnManager.generateCells(this); - } - - //functions to setup on first render - initialize(force, inFragment){ - this.create(); - - if(!this.initialized || force){ - - this.deleteCells(); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - this.dispatch("row-layout-before", this); - - this.generateCells(); - - this.initialized = true; - - this.table.columnManager.renderer.renderRowCells(this, inFragment); - - if(force){ - this.normalizeHeight(); - } - - this.dispatch("row-layout", this); - - if(this.table.options.rowFormatter){ - this.table.options.rowFormatter(this.getComponent()); - } - - this.dispatch("row-layout-after", this); - }else { - this.table.columnManager.renderer.rerenderRowCells(this, inFragment); - } - } - - rendered(){ - this.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - - reinitializeHeight(){ - this.heightInitialized = false; - - if(this.element && this.element.offsetParent !== null){ - this.normalizeHeight(true); - } - } - - deinitialize(){ - this.initialized = false; - } - - deinitializeHeight(){ - this.heightInitialized = false; - } - - reinitialize(children){ - this.initialized = false; - this.heightInitialized = false; - - if(!this.manualHeight){ - this.height = 0; - this.heightStyled = ""; - } - - if(this.element && this.element.offsetParent !== null){ - this.initialize(true); - } - - this.dispatch("row-relayout", this); - } - - //get heights when doing bulk row style calcs in virtual DOM - calcHeight(force){ - var maxHeight = 0, - minHeight; - - if(this.table.options.rowHeight){ - this.height = this.table.options.rowHeight; - }else { - minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; - - this.cells.forEach(function(cell){ - var height = cell.getHeight(); - if(height > maxHeight){ - maxHeight = height; - } - }); - - if(force){ - this.height = Math.max(maxHeight, minHeight); - }else { - this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight); - } - } - - this.heightStyled = this.height ? this.height + "px" : ""; - this.outerHeight = this.element.offsetHeight; - } - - //set of cells - setCellHeight(){ - this.cells.forEach(function(cell){ - cell.setHeight(); - }); - - this.heightInitialized = true; - } - - clearCellHeight(){ - this.cells.forEach(function(cell){ - cell.clearHeight(); - }); - } - - //normalize the height of elements in the row - normalizeHeight(force){ - if(force && !this.table.options.rowHeight){ - this.clearCellHeight(); - } - - this.calcHeight(force); - - this.setCellHeight(); - } - - //set height of rows - setHeight(height, force){ - if(this.height != height || force){ - - this.manualHeight = true; - - this.height = height; - this.heightStyled = height ? height + "px" : ""; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - this.outerHeight = this.element.offsetHeight; - } - } - - //return rows outer height - getHeight(){ - return this.outerHeight; - } - - //return rows outer Width - getWidth(){ - return this.element.offsetWidth; - } - - //////////////// Cell Management ///////////////// - deleteCell(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } - } - - //////////////// Data Management ///////////////// - setData(data){ - this.data = this.chain("row-data-init-before", [this, data], undefined, data); - - this.dispatch("row-data-init-after", this); - } - - //update the rows data - updateData(updatedData){ - var visible = this.element && Helpers.elVisible(this.element), - tempData = {}, - newRowData; - - return new Promise((resolve, reject) => { - - if(typeof updatedData === "string"){ - updatedData = JSON.parse(updatedData); - } - - this.dispatch("row-data-save-before", this); - - if(this.subscribed("row-data-changing")){ - tempData = Object.assign(tempData, this.data); - tempData = Object.assign(tempData, updatedData); - } - - newRowData = this.chain("row-data-changing", [this, tempData, updatedData], null, updatedData); - - //set data - for (let attrname in newRowData) { - this.data[attrname] = newRowData[attrname]; - } - - this.dispatch("row-data-save-after", this); - - //update affected cells only - for (let attrname in updatedData) { - - let columns = this.table.columnManager.getColumnsByFieldRoot(attrname); - - columns.forEach((column) => { - let cell = this.getCell(column.getField()); - - if(cell){ - let value = column.getFieldValue(newRowData); - if(cell.getValue() !== value){ - cell.setValueProcessData(value); - - if(visible){ - cell.cellRendered(); - } - } - } - }); - } - - //Partial reinitialization if visible - if(visible){ - this.normalizeHeight(true); - - if(this.table.options.rowFormatter){ - this.table.options.rowFormatter(this.getComponent()); - } - }else { - this.initialized = false; - this.height = 0; - this.heightStyled = ""; - } - - this.dispatch("row-data-changed", this, visible, updatedData); - - //this.reinitialize(); - - this.dispatchExternal("rowUpdated", this.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - - resolve(); - }); - } - - getData(transform){ - if(transform){ - return this.chain("row-data-retrieve", [this, transform], null, this.data); - } - - return this.data; - } - - getCell(column){ - var match = false; - - column = this.table.columnManager.findColumn(column); - - if(!this.initialized && this.cells.length === 0){ - this.generateCells(); - } - - match = this.cells.find(function(cell){ - return cell.column === column; - }); - - return match; - } - - getCellIndex(findCell){ - return this.cells.findIndex(function(cell){ - return cell === findCell; - }); - } - - findCell(subject){ - return this.cells.find((cell) => { - return cell.element === subject; - }); - } - - getCells(){ - if(!this.initialized && this.cells.length === 0){ - this.generateCells(); - } - - return this.cells; - } - - nextRow(){ - var row = this.table.rowManager.nextDisplayRow(this, true); - return row || false; - } - - prevRow(){ - var row = this.table.rowManager.prevDisplayRow(this, true); - return row || false; - } - - moveToRow(to, before){ - var toRow = this.table.rowManager.findRow(to); - - if(toRow){ - this.table.rowManager.moveRowActual(this, toRow, !before); - this.table.rowManager.refreshActiveData("display", false, true); - }else { - console.warn("Move Error - No matching row found:", to); - } - } - - ///////////////////// Actions ///////////////////// - delete(){ - this.dispatch("row-delete", this); - - this.deleteActual(); - - return Promise.resolve(); - } - - deleteActual(blockRedraw){ - this.detachModules(); - - this.table.rowManager.deleteRow(this, blockRedraw); - - this.deleteCells(); - - this.initialized = false; - this.heightInitialized = false; - this.element = false; - - this.dispatch("row-deleted", this); - } - - detachModules(){ - this.dispatch("row-deleting", this); - } - - deleteCells(){ - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } - } - - wipe(){ - this.detachModules(); - this.deleteCells(); - - if(this.element){ - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - this.element = false; - this.modules = {}; - } - - isDisplayed(){ - return this.table.rowManager.getDisplayRows().includes(this); - } - - getPosition(){ - return this.isDisplayed() ? this.position : false; - } - - setPosition(position){ - if(position != this.position){ - this.position = position; - - this.positionWatchers.forEach((callback) => { - callback(this.position); - }); - } - } - - watchPosition(callback){ - this.positionWatchers.push(callback); - - callback(this.position); - } - - getGroup(){ - return this.modules.group || false; - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new RowComponent(this); - } - - return this.component; - } -} - -var defaultCalculations = { - "avg":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2; - - if(values.length){ - output = values.reduce(function(sum, value){ - return Number(sum) + Number(value); - }); - - output = output / values.length; - - output = precision !== false ? output.toFixed(precision) : output; - } - - return parseFloat(output).toString(); - }, - "max":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value > output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "min":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value < output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "sum":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if(values.length){ - values.forEach(function(value){ - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - output = values.reduce(function(sum, value){ - return String(sum) + String(value); - }); - } - - return output; - }, - "count":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - values.forEach(function(value){ - if(value){ - output ++; - } - }); - } - - return output; - }, - "unique":function(values, data, calcParams){ - var unique = values.filter((value, index) => { - return (values || value === 0) && values.indexOf(value) === index; - }); - - return unique.length; - }, -}; - -class ColumnCalcs extends Module{ - - constructor(table){ - super(table); - - this.topCalcs = []; - this.botCalcs = []; - this.genColumn = false; - this.topElement = this.createElement(); - this.botElement = this.createElement(); - this.topRow = false; - this.botRow = false; - this.topInitialized = false; - this.botInitialized = false; - - this.blocked = false; - this.recalcAfterBlock = false; - - this.registerTableOption("columnCalcs", true); - - this.registerColumnOption("topCalc"); - this.registerColumnOption("topCalcParams"); - this.registerColumnOption("topCalcFormatter"); - this.registerColumnOption("topCalcFormatterParams"); - this.registerColumnOption("bottomCalc"); - this.registerColumnOption("bottomCalcParams"); - this.registerColumnOption("bottomCalcFormatter"); - this.registerColumnOption("bottomCalcFormatterParams"); - } - - createElement (){ - var el = document.createElement("div"); - el.classList.add("tabulator-calcs-holder"); - return el; - } - - initialize(){ - this.genColumn = new Column({field:"value"}, this); - - this.subscribe("cell-value-changed", this.cellValueChanged.bind(this)); - this.subscribe("column-init", this.initializeColumnCheck.bind(this)); - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); - this.subscribe("row-added", this.rowsUpdated.bind(this)); - this.subscribe("column-moved", this.recalcActiveRows.bind(this)); - this.subscribe("column-add", this.recalcActiveRows.bind(this)); - this.subscribe("data-refreshed", this.recalcActiveRowsRefresh.bind(this)); - this.subscribe("table-redraw", this.tableRedraw.bind(this)); - this.subscribe("rows-visible", this.visibleRows.bind(this)); - this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this)); - - this.subscribe("redraw-blocked", this.blockRedraw.bind(this)); - this.subscribe("redraw-restored", this.restoreRedraw.bind(this)); - - this.subscribe("table-redrawing", this.resizeHolderWidth.bind(this)); - this.subscribe("column-resized", this.resizeHolderWidth.bind(this)); - this.subscribe("column-show", this.resizeHolderWidth.bind(this)); - this.subscribe("column-hide", this.resizeHolderWidth.bind(this)); - - this.registerTableFunction("getCalcResults", this.getResults.bind(this)); - this.registerTableFunction("recalc", this.userRecalc.bind(this)); - - - this.resizeHolderWidth(); - } - - resizeHolderWidth(){ - this.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + "px"; - } - - - tableRedraw(force){ - this.recalc(this.table.rowManager.activeRows); - - if(force){ - this.redraw(); - } - } - - blockRedraw(){ - this.blocked = true; - this.recalcAfterBlock = false; - } - - - restoreRedraw(){ - this.blocked = false; - - if(this.recalcAfterBlock){ - this.recalcAfterBlock = false; - this.recalcActiveRowsRefresh(); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - userRecalc(){ - this.recalc(this.table.rowManager.activeRows); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - blockCheck(){ - if(this.blocked){ - this.recalcAfterBlock = true; - } - - return this.blocked; - } - - visibleRows(viewable, rows){ - if(this.topRow){ - rows.unshift(this.topRow); - } - - if(this.botRow){ - rows.push(this.botRow); - } - - return rows; - } - - rowsUpdated(row){ - if(this.table.options.groupBy){ - this.recalcRowGroup(row); - }else { - this.recalcActiveRows(); - } - } - - recalcActiveRowsRefresh(){ - if(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){ - this.recalcAll(); - }else { - this.recalcActiveRows(); - } - } - - recalcActiveRows(){ - this.recalc(this.table.rowManager.activeRows); - } - - cellValueChanged(cell){ - if(cell.column.definition.topCalc || cell.column.definition.bottomCalc){ - if(this.table.options.groupBy){ - if(this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both"){ - this.recalcActiveRows(); - } - - if(this.table.options.columnCalcs != "table"){ - this.recalcRowGroup(cell.row); - } - }else { - this.recalcActiveRows(); - } - } - } - - initializeColumnCheck(column){ - if(column.definition.topCalc || column.definition.bottomCalc){ - this.initializeColumn(column); - } - } - - //initialize column calcs - initializeColumn(column){ - var def = column.definition; - - var config = { - topCalcParams:def.topCalcParams || {}, - botCalcParams:def.bottomCalcParams || {}, - }; - - if(def.topCalc){ - - switch(typeof def.topCalc){ - case "string": - if(ColumnCalcs.calculations[def.topCalc]){ - config.topCalc = ColumnCalcs.calculations[def.topCalc]; - }else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc); - } - break; - - case "function": - config.topCalc = def.topCalc; - break; - - } - - if(config.topCalc){ - column.modules.columnCalcs = config; - this.topCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeTopRow(); - } - } - - } - - if(def.bottomCalc){ - switch(typeof def.bottomCalc){ - case "string": - if(ColumnCalcs.calculations[def.bottomCalc]){ - config.botCalc = ColumnCalcs.calculations[def.bottomCalc]; - }else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc); - } - break; - - case "function": - config.botCalc = def.bottomCalc; - break; - - } - - if(config.botCalc){ - column.modules.columnCalcs = config; - this.botCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeBottomRow(); - } - } - } - - } - - //dummy functions to handle being mock column manager - registerColumnField(){} - - removeCalcs(){ - var changed = false; - - if(this.topInitialized){ - this.topInitialized = false; - this.topElement.parentNode.removeChild(this.topElement); - changed = true; - } - - if(this.botInitialized){ - this.botInitialized = false; - this.footerRemove(this.botElement); - changed = true; - } - - if(changed){ - this.table.rowManager.adjustTableSize(); - } - } - - reinitializeCalcs(){ - if(this.topCalcs.length){ - this.initializeTopRow(); - } - - if(this.botCalcs.length){ - this.initializeBottomRow(); - } - } - - initializeTopRow(){ - var fragment = document.createDocumentFragment(); - - if(!this.topInitialized){ - - fragment.appendChild(document.createElement("br")); - fragment.appendChild(this.topElement); - - this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling); - this.topInitialized = true; - } - } - - initializeBottomRow(){ - if(!this.botInitialized){ - this.footerPrepend(this.botElement); - this.botInitialized = true; - } - } - - scrollHorizontal(left){ - if(this.botInitialized && this.botRow){ - this.botElement.scrollLeft = left; - } - } - - recalc(rows){ - var data, row; - - if(!this.blockCheck()){ - if(this.topInitialized || this.botInitialized){ - data = this.rowsToData(rows); - - if(this.topInitialized){ - if(this.topRow){ - this.topRow.deleteCells(); - } - - row = this.generateRow("top", data); - this.topRow = row; - while(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild); - this.topElement.appendChild(row.getElement()); - row.initialize(true); - } - - if(this.botInitialized){ - if(this.botRow){ - this.botRow.deleteCells(); - } - - row = this.generateRow("bottom", data); - this.botRow = row; - while(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild); - this.botElement.appendChild(row.getElement()); - row.initialize(true); - } - - this.table.rowManager.adjustTableSize(); - - //set resizable handles - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layout(); - } - } - } - } - - recalcRowGroup(row){ - this.recalcGroup(this.table.modules.groupRows.getRowGroup(row)); - } - - recalcAll(){ - if(this.topCalcs.length || this.botCalcs.length){ - if(this.table.options.columnCalcs !== "group"){ - this.recalcActiveRows(); - } - - if(this.table.options.groupBy && this.table.options.columnCalcs !== "table"){ - - var groups = this.table.modules.groupRows.getChildGroups(); - - groups.forEach((group) => { - this.recalcGroup(group); - }); - } - } - } - - recalcGroup(group){ - var data, rowData; - - if(!this.blockCheck()){ - if(group){ - if(group.calcs){ - if(group.calcs.bottom){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("bottom", data); - - group.calcs.bottom.updateData(rowData); - group.calcs.bottom.reinitialize(); - } - - if(group.calcs.top){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("top", data); - - group.calcs.top.updateData(rowData); - group.calcs.top.reinitialize(); - } - } - } - } - } - - //generate top stats row - generateTopRow(rows){ - return this.generateRow("top", this.rowsToData(rows)); - } - //generate bottom stats row - generateBottomRow(rows){ - return this.generateRow("bottom", this.rowsToData(rows)); - } - - rowsToData(rows){ - var data = []; - - rows.forEach((row) => { - data.push(row.getData()); - - if(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){ - if(row.modules.dataTree && row.modules.dataTree.open){ - var children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row)); - data = data.concat(children); - } - } - }); - - return data; - } - - //generate stats row - generateRow(pos, data){ - var rowData = this.generateRowData(pos, data), - row; - - if(this.table.modExists("mutator")){ - this.table.modules.mutator.disable(); - } - - row = new Row(rowData, this, "calc"); - - if(this.table.modExists("mutator")){ - this.table.modules.mutator.enable(); - } - - row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos); - - row.component = false; - - row.getComponent = () => { - if(!row.component){ - row.component = new CalcComponent(row); - } - - return row.component; - }; - - row.generateCells = () => { - - var cells = []; - - this.table.columnManager.columnsByIndex.forEach((column) => { - - //set field name of mock column - this.genColumn.setField(column.getField()); - this.genColumn.hozAlign = column.hozAlign; - - if(column.definition[pos + "CalcFormatter"] && this.table.modExists("format")){ - this.genColumn.modules.format = { - formatter: this.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]), - params: column.definition[pos + "CalcFormatterParams"] || {}, - }; - }else { - this.genColumn.modules.format = { - formatter: this.table.modules.format.getFormatter("plaintext"), - params:{} - }; - } - - //ensure css class definition is replicated to calculation cell - this.genColumn.definition.cssClass = column.definition.cssClass; - - //generate cell and assign to correct column - var cell = new Cell(this.genColumn, row); - cell.getElement(); - cell.column = column; - cell.setWidth(); - - column.cells.push(cell); - cells.push(cell); - - if(!column.visible){ - cell.hide(); - } - }); - - row.cells = cells; - }; - - return row; - } - - //generate stats row - generateRowData(pos, data){ - var rowData = {}, - calcs = pos == "top" ? this.topCalcs : this.botCalcs, - type = pos == "top" ? "topCalc" : "botCalc", - params, paramKey; - - calcs.forEach(function(column){ - var values = []; - - if(column.modules.columnCalcs && column.modules.columnCalcs[type]){ - data.forEach(function(item){ - values.push(column.getFieldValue(item)); - }); - - paramKey = type + "Params"; - params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey]; - - column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params)); - } - }); - - return rowData; - } - - hasTopCalcs(){ - return !!(this.topCalcs.length); - } - - hasBottomCalcs(){ - return !!(this.botCalcs.length); - } - - //handle table redraw - redraw(){ - if(this.topRow){ - this.topRow.normalizeHeight(true); - } - if(this.botRow){ - this.botRow.normalizeHeight(true); - } - } - - //return the calculated - getResults(){ - var results = {}, - groups; - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - groups = this.table.modules.groupRows.getGroups(true); - - groups.forEach((group) => { - results[group.getKey()] = this.getGroupResults(group); - }); - }else { - results = { - top: this.topRow ? this.topRow.getData() : {}, - bottom: this.botRow ? this.botRow.getData() : {}, - }; - } - - return results; - } - - //get results from a group - getGroupResults(group){ - var groupObj = group._getSelf(), - subGroups = group.getSubGroups(), - subGroupResults = {}, - results = {}; - - subGroups.forEach((subgroup) => { - subGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup); - }); - - results = { - top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {}, - bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {}, - groups: subGroupResults, - }; - - return results; - } - - adjustForScrollbar(width){ - if(this.botRow){ - if(this.table.rtl){ - this.botElement.style.paddingLeft = width + "px"; - }else { - this.botElement.style.paddingRight = width + "px"; - } - } - } -} - -ColumnCalcs.moduleName = "columnCalcs"; - -//load defaults -ColumnCalcs.calculations = defaultCalculations; - -class DataTree extends Module{ - - constructor(table){ - super(table); - - this.indent = 10; - this.field = ""; - this.collapseEl = null; - this.expandEl = null; - this.branchEl = null; - this.elementField = false; - - this.startOpen = function(){}; - - this.registerTableOption("dataTree", false); //enable data tree - this.registerTableOption("dataTreeFilter", true); //filter child rows - this.registerTableOption("dataTreeSort", true); //sort child rows - this.registerTableOption("dataTreeElementColumn", false); - this.registerTableOption("dataTreeBranchElement", true);//show data tree branch element - this.registerTableOption("dataTreeChildIndent", 9); //data tree child indent in px - this.registerTableOption("dataTreeChildField", "_children");//data tre column field to look for child rows - this.registerTableOption("dataTreeCollapseElement", false);//data tree row collapse element - this.registerTableOption("dataTreeExpandElement", false);//data tree row expand element - this.registerTableOption("dataTreeStartExpanded", false); - this.registerTableOption("dataTreeChildColumnCalcs", false);//include visible data tree rows in column calculations - this.registerTableOption("dataTreeSelectPropagate", false);//selecting a parent row selects its children - - //register component functions - this.registerComponentFunction("row", "treeCollapse", this.collapseRow.bind(this)); - this.registerComponentFunction("row", "treeExpand", this.expandRow.bind(this)); - this.registerComponentFunction("row", "treeToggle", this.toggleRow.bind(this)); - this.registerComponentFunction("row", "getTreeParent", this.getTreeParent.bind(this)); - this.registerComponentFunction("row", "getTreeChildren", this.getRowChildren.bind(this)); - this.registerComponentFunction("row", "addTreeChild", this.addTreeChildRow.bind(this)); - this.registerComponentFunction("row", "isTreeExpanded", this.isRowExpanded.bind(this)); - } - - initialize(){ - if(this.table.options.dataTree){ - var dummyEl = null, - options = this.table.options; - - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - - if(this.options("movableRows")){ - console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"); - } - - if(options.dataTreeBranchElement){ - - if(options.dataTreeBranchElement === true){ - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - }else { - if(typeof options.dataTreeBranchElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; - }else { - this.branchEl = options.dataTreeBranchElement; - } - } - }else { - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch-empty"); - } - - if(options.dataTreeCollapseElement){ - if(typeof options.dataTreeCollapseElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; - }else { - this.collapseEl = options.dataTreeCollapseElement; - } - }else { - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.tabIndex = 0; - this.collapseEl.innerHTML = "
    "; - } - - if(options.dataTreeExpandElement){ - if(typeof options.dataTreeExpandElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; - }else { - this.expandEl = options.dataTreeExpandElement; - } - }else { - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.tabIndex = 0; - this.expandEl.innerHTML = "
    "; - } - - - switch(typeof options.dataTreeStartExpanded){ - case "boolean": - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded; - }; - break; - - case "function": - this.startOpen = options.dataTreeStartExpanded; - break; - - default: - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded[index]; - }; - break; - } - - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-layout-after", this.layoutRow.bind(this)); - this.subscribe("row-deleted", this.rowDelete.bind(this),0); - this.subscribe("row-data-changed", this.rowDataChanged.bind(this), 10); - this.subscribe("cell-value-updated", this.cellValueChanged.bind(this)); - this.subscribe("edit-cancelled", this.cellValueChanged.bind(this)); - this.subscribe("column-moving-rows", this.columnMoving.bind(this)); - this.subscribe("table-built", this.initializeElementField.bind(this)); - this.subscribe("table-redrawing", this.tableRedrawing.bind(this)); - - this.registerDisplayHandler(this.getRows.bind(this), 30); - } - } - - tableRedrawing(force){ - var rows; - - if(force){ - rows = this.table.rowManager.getRows(); - - rows.forEach((row) => { - this.reinitializeRowChildren(row); - }); - } - } - - initializeElementField(){ - var firstCol = this.table.columnManager.getFirstVisibleColumn(); - - this.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false); - } - - getRowChildren(row){ - return this.getTreeChildren(row, true); - } - - columnMoving(){ - var rows = []; - - this.table.rowManager.rows.forEach((row) => { - rows = rows.concat(this.getTreeChildren(row, false, true)); - }); - - return rows; - } - - rowDataChanged(row, visible, updatedData){ - if(this.redrawNeeded(updatedData)){ - this.initializeRow(row); - - if(visible){ - this.layoutRow(row); - this.refreshData(true); - } - } - } - - cellValueChanged(cell){ - var field = cell.column.getField(); - - if(field === this.elementField){ - this.layoutRow(cell.row); - } - } - - initializeRow(row){ - var childArray = row.getData()[this.field]; - var isArray = Array.isArray(childArray); - - var children = isArray || (!isArray && typeof childArray === "object" && childArray !== null); - - if(!children && row.modules.dataTree && row.modules.dataTree.branchEl){ - row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl); - } - - if(!children && row.modules.dataTree && row.modules.dataTree.controlEl){ - row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl); - } - - row.modules.dataTree = { - index: row.modules.dataTree ? row.modules.dataTree.index : 0, - open: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false, - controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false, - branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false, - parent: row.modules.dataTree ? row.modules.dataTree.parent : false, - children:children, - }; - } - - reinitializeRowChildren(row){ - var children = this.getTreeChildren(row, false, true); - - children.forEach(function(child){ - child.reinitialize(true); - }); - } - - layoutRow(row){ - var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0], - el = cell.getElement(), - config = row.modules.dataTree; - - if(config.branchEl){ - if(config.branchEl.parentNode){ - config.branchEl.parentNode.removeChild(config.branchEl); - } - config.branchEl = false; - } - - if(config.controlEl){ - if(config.controlEl.parentNode){ - config.controlEl.parentNode.removeChild(config.controlEl); - } - config.controlEl = false; - } - - this.generateControlElement(row, el); - - row.getElement().classList.add("tabulator-tree-level-" + config.index); - - if(config.index){ - if(this.branchEl){ - config.branchEl = this.branchEl.cloneNode(true); - el.insertBefore(config.branchEl, el.firstChild); - - if(this.table.rtl){ - config.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + "px"; - }else { - config.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + "px"; - } - }else { - - if(this.table.rtl){ - el.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + "px"; - }else { - el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + "px"; - } - } - } - } - - generateControlElement(row, el){ - var config = row.modules.dataTree, - oldControl = config.controlEl; - - el = el || row.getCells()[0].getElement(); - - if(config.children !== false){ - - if(config.open){ - config.controlEl = this.collapseEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.collapseRow(row); - }); - }else { - config.controlEl = this.expandEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.expandRow(row); - }); - } - - config.controlEl.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - if(oldControl && oldControl.parentNode === el){ - oldControl.parentNode.replaceChild(config.controlEl,oldControl); - }else { - el.insertBefore(config.controlEl, el.firstChild); - } - } - } - - getRows(rows){ - var output = []; - - rows.forEach((row, i) => { - var config, children; - - output.push(row); - - if(row instanceof Row){ - - row.create(); - - config = row.modules.dataTree; - - if(!config.index && config.children !== false){ - children = this.getChildren(row); - - children.forEach((child) => { - child.create(); - output.push(child); - }); - } - } - }); - - return output; - } - - getChildren(row, allChildren){ - var config = row.modules.dataTree, - children = [], - output = []; - - if(config.children !== false && (config.open || allChildren)){ - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - if(this.table.modExists("filter") && this.table.options.dataTreeFilter){ - children = this.table.modules.filter.filter(config.children); - }else { - children = config.children; - } - - if(this.table.modExists("sort") && this.table.options.dataTreeSort){ - this.table.modules.sort.sort(children); - } - - children.forEach((child) => { - output.push(child); - - var subChildren = this.getChildren(child); - - subChildren.forEach((sub) => { - output.push(sub); - }); - }); - } - - return output; - } - - generateChildren(row){ - var children = []; - - var childArray = row.getData()[this.field]; - - if(!Array.isArray(childArray)){ - childArray = [childArray]; - } - - childArray.forEach((childData) => { - var childRow = new Row(childData || {}, this.table.rowManager); - - childRow.create(); - - childRow.modules.dataTree.index = row.modules.dataTree.index + 1; - childRow.modules.dataTree.parent = row; - - if(childRow.modules.dataTree.children){ - childRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); - } - children.push(childRow); - }); - - return children; - } - - expandRow(row, silent){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = true; - - row.reinitialize(); - - this.refreshData(true); - - this.dispatchExternal("dataTreeRowExpanded", row.getComponent(), row.modules.dataTree.index); - } - } - - collapseRow(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = false; - - row.reinitialize(); - - this.refreshData(true); - - this.dispatchExternal("dataTreeRowCollapsed", row.getComponent(), row.modules.dataTree.index); - } - } - - toggleRow(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - if(config.open){ - this.collapseRow(row); - }else { - this.expandRow(row); - } - } - } - - isRowExpanded(row){ - return row.modules.dataTree.open; - } - - getTreeParent(row){ - return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false; - } - - getTreeParentRoot(row){ - return row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row; - } - - getFilteredTreeChildren(row){ - var config = row.modules.dataTree, - output = [], children; - - if(config.children){ - - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - if(this.table.modExists("filter") && this.table.options.dataTreeFilter){ - children = this.table.modules.filter.filter(config.children); - }else { - children = config.children; - } - - children.forEach((childRow) => { - if(childRow instanceof Row){ - output.push(childRow); - } - }); - } - - return output; - } - - rowDelete(row){ - var parent = row.modules.dataTree.parent, - childIndex; - - if(parent){ - childIndex = this.findChildIndex(row, parent); - - if(childIndex !== false){ - parent.data[this.field].splice(childIndex, 1); - } - - if(!parent.data[this.field].length){ - delete parent.data[this.field]; - } - - this.initializeRow(parent); - this.layoutRow(parent); - } - - this.refreshData(true); - } - - addTreeChildRow(row, data, top, index){ - var childIndex = false; - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(!Array.isArray(row.data[this.field])){ - row.data[this.field] = []; - - row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index); - } - - if(typeof index !== "undefined"){ - childIndex = this.findChildIndex(index, row); - - if(childIndex !== false){ - row.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data); - } - } - - if(childIndex === false){ - if(top){ - row.data[this.field].unshift(data); - }else { - row.data[this.field].push(data); - } - } - - this.initializeRow(row); - this.layoutRow(row); - - this.refreshData(true); - } - - findChildIndex(subject, parent){ - var match = false; - - if(typeof subject == "object"){ - - if(subject instanceof Row){ - //subject is row element - match = subject.data; - }else if(subject instanceof RowComponent){ - //subject is public row component - match = subject._getSelf().data; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - if(parent.modules.dataTree){ - match = parent.modules.dataTree.children.find((childRow) => { - return childRow instanceof Row ? childRow.element === subject : false; - }); - - if(match){ - match = match.data; - } - } - }else if(subject === null){ - match = false; - } - - }else if(typeof subject == "undefined"){ - match = false; - }else { - //subject should be treated as the index of the row - match = parent.data[this.field].find((row) => { - return row.data[this.table.options.index] == subject; - }); - } - - if(match){ - - if(Array.isArray(parent.data[this.field])){ - match = parent.data[this.field].indexOf(match); - } - - if(match == -1){ - match = false; - } - } - - //catch all for any other type of input - - return match; - } - - getTreeChildren(row, component, recurse){ - var config = row.modules.dataTree, - output = []; - - if(config && config.children){ - - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - config.children.forEach((childRow) => { - if(childRow instanceof Row){ - output.push(component ? childRow.getComponent() : childRow); - - if(recurse){ - output = output.concat(this.getTreeChildren(childRow, component, recurse)); - } - } - }); - } - - return output; - } - - getChildField(){ - return this.field; - } - - redrawNeeded(data){ - return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false); - } -} - -DataTree.moduleName = "dataTree"; - -function csv(list, options = {}, setFileContents){ - var delimiter = options.delimiter ? options.delimiter : ",", - fileContents = [], - headers = []; - - list.forEach((row) => { - var item = []; - - switch(row.type){ - case "group": - console.warn("Download Warning - CSV downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - CSV downloader cannot process column calculations"); - break; - - case "header": - row.columns.forEach((col, i) => { - if(col && col.depth === 1){ - headers[i] = typeof col.value == "undefined" || col.value === null ? "" : ('"' + String(col.value).split('"').join('""') + '"'); - } - }); - break; - - case "row": - row.columns.forEach((col) => { - - if(col){ - - switch(typeof col.value){ - case "object": - col.value = col.value !== null ? JSON.stringify(col.value) : ""; - break; - - case "undefined": - col.value = ""; - break; - } - - item.push('"' + String(col.value).split('"').join('""') + '"'); - } - }); - - fileContents.push(item.join(delimiter)); - break; - } - }); - - if(headers.length){ - fileContents.unshift(headers.join(delimiter)); - } - - fileContents = fileContents.join("\n"); - - if(options.bom){ - fileContents = "\ufeff" + fileContents; - } - - setFileContents(fileContents, "text/csv"); -} - -function json(list, options, setFileContents){ - var fileContents = []; - - list.forEach((row) => { - var item = {}; - - switch(row.type){ - case "header": - break; - - case "group": - console.warn("Download Warning - JSON downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - JSON downloader cannot process column calculations"); - break; - - case "row": - row.columns.forEach((col) => { - if(col){ - item[col.component.getTitleDownload() || col.component.getField()] = col.value; - } - }); - - fileContents.push(item); - break; - } - }); - - fileContents = JSON.stringify(fileContents, null, '\t'); - - setFileContents(fileContents, "application/json"); -} - -function pdf(list, options = {}, setFileContents){ - var header = [], - body = [], - autoTableParams = {}, - rowGroupStyles = options.rowGroupStyles || { - fontStyle: "bold", - fontSize: 12, - cellPadding: 6, - fillColor: 220, - }, - rowCalcStyles = options.rowCalcStyles || { - fontStyle: "bold", - fontSize: 10, - cellPadding: 4, - fillColor: 232, - }, - jsPDFParams = options.jsPDF || {}, - title = options.title ? options.title : ""; - - if(!jsPDFParams.orientation){ - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if(!jsPDFParams.unit){ - jsPDFParams.unit = "pt"; - } - - //parse row list - list.forEach((row) => { - switch(row.type){ - case "header": - header.push(parseRow(row)); - break; - - case "group": - body.push(parseRow(row, rowGroupStyles)); - break; - - case "calc": - body.push(parseRow(row, rowCalcStyles)); - break; - - case "row": - body.push(parseRow(row)); - break; - } - }); - - function parseRow(row, styles){ - var rowData = []; - - row.columns.forEach((col) =>{ - var cell; - - if(col){ - switch(typeof col.value){ - case "object": - col.value = col.value !== null ? JSON.stringify(col.value) : ""; - break; - - case "undefined": - col.value = ""; - break; - } - - cell = { - content:col.value, - colSpan:col.width, - rowSpan:col.height, - }; - - if(styles){ - cell.styles = styles; - } - - rowData.push(cell); - } - }); - - return rowData; - } - - - //configure PDF - var doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if(options.autoTable){ - if(typeof options.autoTable === "function"){ - autoTableParams = options.autoTable(doc) || {}; - }else { - autoTableParams = options.autoTable; - } - } - - if(title){ - autoTableParams.didDrawPage = function(data) { - doc.text(title, 40, 30); - }; - } - - autoTableParams.head = header; - autoTableParams.body = body; - - doc.autoTable(autoTableParams); - - if(options.documentProcessing){ - options.documentProcessing(doc); - } - - setFileContents(doc.output("arraybuffer"), "application/pdf"); -} - -function xlsx(list, options, setFileContents){ - var self = this, - sheetName = options.sheetName || "Sheet1", - workbook = XLSX.utils.book_new(), - tableFeatures = new CoreFeature(this), - compression = 'compress' in options ? options.compress : true, - writeOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression}, - output; - - writeOptions.type = 'binary'; - - workbook.SheetNames = []; - workbook.Sheets = {}; - - function generateSheet(){ - var rows = [], - merges = [], - worksheet = {}, - range = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }}; - - //parse row list - list.forEach((row, i) => { - var rowData = []; - - row.columns.forEach(function(col, j){ - - if(col){ - rowData.push(!(col.value instanceof Date) && typeof col.value === "object" ? JSON.stringify(col.value) : col.value); - - if(col.width > 1 || col.height > -1){ - if(col.height > 1 || col.width > 1){ - merges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}}); - } - } - }else { - rowData.push(""); - } - }); - - rows.push(rowData); - }); - - //convert rows to worksheet - XLSX.utils.sheet_add_aoa(worksheet, rows); - - worksheet['!ref'] = XLSX.utils.encode_range(range); - - if(merges.length){ - worksheet["!merges"] = merges; - } - - return worksheet; - } - - if(options.sheetOnly){ - setFileContents(generateSheet()); - return; - } - - if(options.sheets){ - for(var sheet in options.sheets){ - - if(options.sheets[sheet] === true){ - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - }else { - - workbook.SheetNames.push(sheet); - - tableFeatures.commsSend(options.sheets[sheet], "download", "intercept",{ - type:"xlsx", - options:{sheetOnly:true}, - active:self.active, - intercept:function(data){ - workbook.Sheets[sheet] = data; - } - }); - } - } - }else { - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - if(options.documentProcessing){ - workbook = options.documentProcessing(workbook); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; - return buf; - } - - output = XLSX.write(workbook, writeOptions); - - setFileContents(s2ab(output), "application/octet-stream"); -} - -function html(list, options, setFileContents){ - if(this.modExists("export", true)){ - setFileContents(this.modules.export.generateHTMLTable(list), "text/html"); - } -} - -function jsonLines (list, options, setFileContents) { - const fileContents = []; - - list.forEach((row) => { - const item = {}; - - switch (row.type) { - case "header": - break; - - case "group": - console.warn("Download Warning - JSON downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - JSON downloader cannot process column calculations"); - break; - - case "row": - row.columns.forEach((col) => { - if (col) { - item[col.component.getTitleDownload() || col.component.getField()] = col.value; - } - }); - - fileContents.push(JSON.stringify(item)); - break; - } - }); - - setFileContents(fileContents.join("\n"), "application/x-ndjson"); -} - -var defaultDownloaders = { - csv:csv, - json:json, - jsonLines:jsonLines, - pdf:pdf, - xlsx:xlsx, - html:html, -}; - -class Download extends Module{ - - constructor(table){ - super(table); - - this.registerTableOption("downloadEncoder", function(data, mimeType){ - return new Blob([data],{type:mimeType}); - }); //function to manipulate download data - this.registerTableOption("downloadReady", undefined); //warn of function deprecation - this.registerTableOption("downloadConfig", {}); //download config - this.registerTableOption("downloadRowRange", "active"); //restrict download to active rows only - - this.registerColumnOption("download"); - this.registerColumnOption("titleDownload"); - } - - initialize(){ - this.deprecatedOptionsCheck(); - - this.registerTableFunction("download", this.download.bind(this)); - this.registerTableFunction("downloadToTab", this.downloadToTab.bind(this)); - } - - deprecatedOptionsCheck(){ - this.deprecationCheck("downloadReady", "downloadEncoder"); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - downloadToTab(type, filename, options, active){ - this.download(type, filename, options, active, true); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - //trigger file download - download(type, filename, options, range, interceptCallback){ - var downloadFunc = false; - - function buildLink(data, mime){ - if(interceptCallback){ - if(interceptCallback === true){ - this.triggerDownload(data, mime, type, filename, true); - }else { - interceptCallback(data); - } - - }else { - this.triggerDownload(data, mime, type, filename); - } - } - - if(typeof type == "function"){ - downloadFunc = type; - }else { - if(Download.downloaders[type]){ - downloadFunc = Download.downloaders[type]; - }else { - console.warn("Download Error - No such download type found: ", type); - } - } - - if(downloadFunc){ - var list = this.generateExportList(range); - - downloadFunc.call(this.table, list , options || {}, buildLink.bind(this)); - } - } - - generateExportList(range){ - var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download"); - - //assign group header formatter - var groupHeader = this.table.options.groupHeaderDownload; - - if(groupHeader && !Array.isArray(groupHeader)){ - groupHeader = [groupHeader]; - } - - list.forEach((row) => { - var group; - - if(row.type === "group"){ - group = row.columns[0]; - - if(groupHeader && groupHeader[row.indent]){ - group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - }); - - return list; - } - - triggerDownload(data, mime, type, filename, newTab){ - var element = document.createElement('a'), - blob = this.table.options.downloadEncoder(data, mime); - - if(blob){ - if(newTab){ - window.open(window.URL.createObjectURL(blob)); - }else { - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - if(navigator.msSaveOrOpenBlob){ - navigator.msSaveOrOpenBlob(blob, filename); - }else { - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - } - - this.dispatchExternal("downloadComplete"); - } - } - - commsReceived(table, action, data){ - switch(action){ - case "intercept": - this.download(data.type, "", data.options, data.active, data.intercept); - break; - } - } -} - -Download.moduleName = "download"; - -//load defaults -Download.downloaders = defaultDownloaders; - -function maskInput(el, options){ - var mask = options.mask, - maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A", - maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9", - maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*"; - - function fillSymbols(index){ - var symbol = mask[index]; - if(typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){ - el.value = el.value + "" + symbol; - fillSymbols(index+1); - } - } - - el.addEventListener("keydown", (e) => { - var index = el.value.length, - char = e.key; - - if(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){ - if(index >= mask.length){ - e.preventDefault(); - e.stopPropagation(); - return false; - }else { - switch(mask[index]){ - case maskLetter: - if(char.toUpperCase() == char.toLowerCase()){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - break; - - case maskNumber: - if(isNaN(char)){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - break; - - case maskWildcard: - break; - - default: - if(char !== mask[index]){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - } - } - } - - return; - }); - - el.addEventListener("keyup", (e) => { - if(e.keyCode > 46){ - if(options.maskAutoFill){ - fillSymbols(el.value.length); - } - } - }); - - - if(!el.placeholder){ - el.placeholder = mask; - } - - if(options.maskAutoFill){ - fillSymbols(el.value.length); - } -} - -//input element -function input(cell, onRendered, success, cancel, editorParams){ - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", editorParams.search ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = typeof cellValue !== "undefined" ? cellValue : ""; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(e){ - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value !== cellValue){ - if(success(input.value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; -} - -//resizable text area element -function textarea(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "hybrid", - value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""), - input = document.createElement("textarea"), - scrollHeight = 0; - - //create and style input - input.style.display = "block"; - input.style.padding = "2px"; - input.style.height = "100%"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.style.whiteSpace = "pre-wrap"; - input.style.resize = "none"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - input.scrollHeight; - input.style.height = input.scrollHeight + "px"; - cell.getRow().normalizeHeight(); - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(e){ - - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value !== cellValue){ - - if(success(input.value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - - setTimeout(function(){ - cell.getRow().normalizeHeight(); - },300); - }else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - input.addEventListener("keyup", function(){ - - input.style.height = ""; - - var heightNow = input.scrollHeight; - - input.style.height = heightNow + "px"; - - if(heightNow != scrollHeight){ - scrollHeight = heightNow; - cell.getRow().normalizeHeight(); - } - }); - - input.addEventListener("keydown", function(e){ - - switch(e.keyCode){ - - case 13: - if(e.shiftKey && editorParams.shiftEnterSubmit){ - onChange(); - } - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - if(vertNav == "editor" || (vertNav == "hybrid" && input.selectionStart)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - - break; - - case 40: //down arrow - if(vertNav == "editor" || (vertNav == "hybrid" && input.selectionStart !== input.value.length)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; -} - -//input element with type of number -function number(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - input = document.createElement("input"); - - input.setAttribute("type", "number"); - - if(typeof editorParams.max != "undefined"){ - input.setAttribute("max", editorParams.max); - } - - if(typeof editorParams.min != "undefined"){ - input.setAttribute("min", editorParams.min); - } - - if(typeof editorParams.step != "undefined"){ - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - var blurFunc = function(e){ - onChange(); - }; - - onRendered(function () { - if(cell.getType() === "cell"){ - //submit new value on blur - input.removeEventListener("blur", blurFunc); - - input.focus({preventScroll: true}); - input.style.height = "100%"; - - //submit new value on blur - input.addEventListener("blur", blurFunc); - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value !== cellValue){ - if(success(value)){ - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; -} - -//input element with type of number -function range(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "range"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - onRendered(function () { - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - } - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value != cellValue){ - if(success(value)){ - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e){ - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; -} - -//input element -function date(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - function convertDate(value){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else { - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - return newDatetime.toFormat("yyyy-MM-dd"); - } - - input.type = "date"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.max){ - input.setAttribute("max", inputFormat ? convertDate(editorParams.max) : editorParams.max); - } - - if(editorParams.min){ - input.setAttribute("min", inputFormat ? convertDate(editorParams.min) : editorParams.min); - } - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - cellValue = convertDate(cellValue); - }else { - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxDate; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxDate = DT.fromFormat(String(value), "yyyy-MM-dd"); - - switch(inputFormat){ - case true: - value = luxDate; - break; - - case "iso": - value = luxDate.toISO(); - break; - - default: - value = luxDate.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; -} - -//input element -function time(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null, - newDatetime; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.type = "time"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - if(DT.isDateTime(cellValue)){ - newDatetime = cellValue; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(cellValue)); - }else { - newDatetime = DT.fromFormat(String(cellValue), inputFormat); - } - - cellValue = newDatetime.toFormat("HH:mm"); - - }else { - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - console.log("val", cellValue); - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() == "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxTime; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxTime = DT.fromFormat(String(value), "hh:mm"); - - switch(inputFormat){ - case true: - value = luxTime; - break; - - case "iso": - value = luxTime.toISO(); - break; - - default: - value = luxTime.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; -} - -//input element -function datetime(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null, - newDatetime; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.type = "datetime-local"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - if(DT.isDateTime(cellValue)){ - newDatetime = cellValue; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(cellValue)); - }else { - newDatetime = DT.fromFormat(String(cellValue), inputFormat); - } - - cellValue = newDatetime.toFormat("yyyy-MM-dd") + "T" + newDatetime.toFormat("HH:mm"); - }else { - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxDateTime; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxDateTime = DT.fromISO(String(value)); - - switch(inputFormat){ - case true: - value = luxDateTime; - break; - - case "iso": - value = luxDateTime.toISO(); - break; - - default: - value = luxDateTime.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; -} - -class Edit{ - constructor(editor, cell, onRendered, success, cancel, editorParams){ - this.edit = editor; - this.table = editor.table; - this.cell = cell; - this.params = this._initializeParams(editorParams); - - this.data = []; - this.displayItems = []; - this.currentItems = []; - this.focusedItem = null; - - this.input = this._createInputElement(); - this.listEl = this._createListElement(); - - this.initialValues = null; - - this.isFilter = cell.getType() === "header"; - - this.filterTimeout = null; - this.filtered = false; - this.typing = false; - - this.values = []; - this.popup = null; - - this.listIteration = 0; - - this.lastAction=""; - this.filterTerm=""; - - this.blurable = true; - - this.actions = { - success:success, - cancel:cancel - }; - - this._deprecatedOptionsCheck(); - this._initializeValue(); - - onRendered(this._onRendered.bind(this)); - } - - _deprecatedOptionsCheck(){ - if(this.params.listItemFormatter){ - this.cell.getTable().deprecationAdvisor.msg("The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.sortValuesList){ - this.cell.getTable().deprecationAdvisor.msg("The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.searchFunc){ - this.cell.getTable().deprecationAdvisor.msg("The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.searchingPlaceholder){ - this.cell.getTable().deprecationAdvisor.msg("The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options"); - } - } - - _initializeValue(){ - var initialValue = this.cell.getValue(); - - if(typeof initialValue === "undefined" && typeof this.params.defaultValue !== "undefined"){ - initialValue = this.params.defaultValue; - } - - this.initialValues = this.params.multiselect ? initialValue : [initialValue]; - - if(this.isFilter){ - this.input.value = this.initialValues ? this.initialValues.join(",") : ""; - this.headerFilterInitialListGen(); - } - } - - _onRendered(){ - var cellEl = this.cell.getElement(); - - function clickStop(e){ - e.stopPropagation(); - } - - if(!this.isFilter){ - this.input.style.height = "100%"; - this.input.focus({preventScroll: true}); - } - - - cellEl.addEventListener("click", clickStop); - - setTimeout(() => { - cellEl.removeEventListener("click", clickStop); - }, 1000); - - this.input.addEventListener("mousedown", this._preventPopupBlur.bind(this)); - } - - _createListElement(){ - var listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-list"); - - listEl.addEventListener("mousedown", this._preventBlur.bind(this)); - listEl.addEventListener("keydown", this._inputKeyDown.bind(this)); - - return listEl; - } - - _setListWidth(){ - var element = this.isFilter ? this.input : this.cell.getElement(); - - this.listEl.style.minWidth = element.offsetWidth + "px"; - - if(this.params.maxWidth){ - if(this.params.maxWidth === true){ - this.listEl.style.maxWidth = element.offsetWidth + "px"; - }else if(typeof this.params.maxWidth === "number"){ - this.listEl.style.maxWidth = this.params.maxWidth + "px"; - }else { - this.listEl.style.maxWidth = this.params.maxWidth; - } - } - - } - - _createInputElement(){ - var attribs = this.params.elementAttributes; - var input = document.createElement("input"); - - input.setAttribute("type", this.params.clearable ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(!this.params.autocomplete){ - input.style.cursor = "default"; - input.style.caretColor = "transparent"; - // input.readOnly = (this.edit.currentCell != false); - } - - if(attribs && typeof attribs == "object"){ - for (let key in attribs){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + attribs["+" + key]); - }else { - input.setAttribute(key, attribs[key]); - } - } - } - - if(this.params.mask){ - maskInput(input, this.params); - } - - this._bindInputEvents(input); - - return input; - } - - _initializeParams(params){ - var valueKeys = ["values", "valuesURL", "valuesLookup"], - valueCheck; - - params = Object.assign({}, params); - - params.verticalNavigation = params.verticalNavigation || "editor"; - params.placeholderLoading = typeof params.placeholderLoading === "undefined" ? "Searching ..." : params.placeholderLoading; - params.placeholderEmpty = typeof params.placeholderEmpty === "undefined" ? "No Results Found" : params.placeholderEmpty; - params.filterDelay = typeof params.filterDelay === "undefined" ? 300 : params.filterDelay; - - params.emptyValue = Object.keys(params).includes("emptyValue") ? params.emptyValue : ""; - - valueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length; - - if(!valueCheck){ - console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"); - }else if(valueCheck > 1){ - console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"); - } - - if(params.autocomplete){ - if(params.multiselect){ - params.multiselect = false; - console.warn("list editor config error - multiselect option is not available when autocomplete is enabled"); - } - }else { - if(params.freetext){ - params.freetext = false; - console.warn("list editor config error - freetext option is only available when autocomplete is enabled"); - } - - if(params.filterFunc){ - params.filterFunc = false; - console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled"); - } - - if(params.filterRemote){ - params.filterRemote = false; - console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled"); - } - - if(params.mask){ - params.mask = false; - console.warn("list editor config error - mask option is only available when autocomplete is enabled"); - } - - if(params.allowEmpty){ - params.allowEmpty = false; - console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled"); - } - - if(params.listOnEmpty){ - params.listOnEmpty = false; - console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"); - } - } - - if(params.filterRemote && !(typeof params.valuesLookup === "function" || params.valuesURL)){ - params.filterRemote = false; - console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source"); - } - return params; - } - ////////////////////////////////////// - ////////// Event Handling //////////// - ////////////////////////////////////// - - _bindInputEvents(input){ - input.addEventListener("focus", this._inputFocus.bind(this)); - input.addEventListener("click", this._inputClick.bind(this)); - input.addEventListener("blur", this._inputBlur.bind(this)); - input.addEventListener("keydown", this._inputKeyDown.bind(this)); - input.addEventListener("search", this._inputSearch.bind(this)); - - if(this.params.autocomplete){ - input.addEventListener("keyup", this._inputKeyUp.bind(this)); - } - } - - - _inputFocus(e){ - this.rebuildOptionsList(); - } - - _filter(){ - if(this.params.filterRemote){ - clearTimeout(this.filterTimeout); - - this.filterTimeout = setTimeout(() => { - this.rebuildOptionsList(); - }, this.params.filterDelay); - }else { - this._filterList(); - } - } - - _inputClick(e){ - e.stopPropagation(); - } - - _inputBlur(e){ - if(this.blurable){ - if(this.popup){ - this.popup.hide(); - }else { - this._resolveValue(true); - } - } - } - - _inputSearch(){ - this._clearChoices(); - } - - _inputKeyDown(e){ - switch(e.keyCode){ - - case 38: //up arrow - this._keyUp(e); - break; - - case 40: //down arrow - this._keyDown(e); - break; - - case 37: //left arrow - case 39: //right arrow - this._keySide(e); - break; - - case 13: //enter - this._keyEnter(); - break; - - case 27: //escape - this._keyEsc(); - break; - - case 36: //home - case 35: //end - this._keyHomeEnd(e); - break; - - case 9: //tab - this._keyTab(e); - break; - - default: - this._keySelectLetter(e); - } - } - - _inputKeyUp(e){ - switch(e.keyCode){ - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: //escape - break; - - default: - this._keyAutoCompLetter(e); - } - } - - _preventPopupBlur(){ - if(this.popup){ - this.popup.blockHide(); - } - - setTimeout(() =>{ - if(this.popup){ - this.popup.restoreHide(); - } - }, 10); - } - - _preventBlur(){ - this.blurable = false; - - setTimeout(() =>{ - this.blurable = true; - }, 10); - } - - ////////////////////////////////////// - //////// Keyboard Navigation ///////// - ////////////////////////////////////// - - _keyTab(e){ - if(this.params.autocomplete && this.lastAction === "typing"){ - this._resolveValue(true); - }else { - if(this.focusedItem){ - this._chooseItem(this.focusedItem, true); - } - } - } - - _keyUp(e){ - var index = this.displayItems.indexOf(this.focusedItem); - - if(this.params.verticalNavigation == "editor" || (this.params.verticalNavigation == "hybrid" && index)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if(index > 0){ - this._focusItem(this.displayItems[index - 1]); - } - } - } - - _keyDown(e){ - var index = this.displayItems.indexOf(this.focusedItem); - - if(this.params.verticalNavigation == "editor" || (this.params.verticalNavigation == "hybrid" && index < this.displayItems.length - 1)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if(index < this.displayItems.length - 1){ - if(index == -1){ - this._focusItem(this.displayItems[0]); - }else { - this._focusItem(this.displayItems[index + 1]); - } - } - } - } - - _keySide(e){ - if(!this.params.autocomplete){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - } - } - - _keyEnter(e){ - if(this.params.autocomplete && this.lastAction === "typing"){ - this._resolveValue(true); - }else { - if(this.focusedItem){ - this._chooseItem(this.focusedItem); - } - } - } - - _keyEsc(e){ - this._cancel(); - } - - _keyHomeEnd(e){ - if(this.params.autocomplete){ - //prevent table navigation while using input element - e.stopImmediatePropagation(); - } - } - - _keySelectLetter(e){ - if(!this.params.autocomplete){ - // if(this.edit.currentCell === false){ - e.preventDefault(); - // } - - if(e.keyCode >= 38 && e.keyCode <= 90){ - this._scrollToValue(e.keyCode); - } - } - } - - _keyAutoCompLetter(e){ - this._filter(); - this.lastAction = "typing"; - this.typing = true; - } - - - _scrollToValue(char){ - clearTimeout(this.filterTimeout); - - var character = String.fromCharCode(char).toLowerCase(); - this.filterTerm += character.toLowerCase(); - - var match = this.displayItems.find((item) => { - return typeof item.label !== "undefined" && item.label.toLowerCase().startsWith(this.filterTerm); - }); - - if(match){ - this._focusItem(match); - } - - this.filterTimeout = setTimeout(() => { - this.filterTerm = ""; - }, 800); - } - - _focusItem(item){ - this.lastAction = "focus"; - - if(this.focusedItem && this.focusedItem.element){ - this.focusedItem.element.classList.remove("focused"); - } - - this.focusedItem = item; - - if(item && item.element){ - item.element.classList.add("focused"); - item.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'}); - } - } - - - ////////////////////////////////////// - /////// Data List Generation ///////// - ////////////////////////////////////// - headerFilterInitialListGen(){ - this._generateOptions(true); - } - - rebuildOptionsList(){ - this._generateOptions() - .then(this._sortOptions.bind(this)) - .then(this._buildList.bind(this)) - .then(this._showList.bind(this)) - .catch((e) => { - if(!Number.isInteger(e)){ - console.error("List generation error", e); - } - }); - } - - _filterList(){ - this._buildList(this._filterOptions()); - this._showList(); - } - - _generateOptions(silent){ - var values = []; - var iteration = ++ this.listIteration; - - this.filtered = false; - - if(this.params.values){ - values = this.params.values; - }else if (this.params.valuesURL){ - values = this._ajaxRequest(this.params.valuesURL, this.input.value); - }else { - if(typeof this.params.valuesLookup === "function"){ - values = this.params.valuesLookup(this.cell, this.input.value); - }else if(this.params.valuesLookup){ - values = this._uniqueColumnValues(this.params.valuesLookupField); - } - } - - if(values instanceof Promise){ - if(!silent){ - this._addPlaceholder(this.params.placeholderLoading); - } - - return values.then() - .then((responseValues) => { - if(this.listIteration === iteration){ - return this._parseList(responseValues); - }else { - return Promise.reject(iteration); - } - }); - }else { - return Promise.resolve(this._parseList(values)); - } - } - - _addPlaceholder(contents){ - var placeholder = document.createElement("div"); - - if(typeof contents === "function"){ - contents = contents(this.cell.getComponent(), this.listEl); - } - - if(contents){ - this._clearList(); - - if(contents instanceof HTMLElement){ - placeholder = contents; - }else { - placeholder.classList.add("tabulator-edit-list-placeholder"); - placeholder.innerHTML = contents; - } - - this.listEl.appendChild(placeholder); - - this._showList(); - } - } - - _ajaxRequest(url, term){ - var params = this.params.filterRemote ? {term:term} : {}; - url = urlBuilder(url, {}, params); - - return fetch(url) - .then((response)=>{ - if(response.ok) { - return response.json() - .catch((error)=>{ - console.warn("List Ajax Load Error - Invalid JSON returned", error); - return Promise.reject(error); - }); - }else { - console.error("List Ajax Load Error - Connection Error: " + response.status, response.statusText); - return Promise.reject(response); - } - }) - .catch((error)=>{ - console.error("List Ajax Load Error - Connection Error: ", error); - return Promise.reject(error); - }); - } - - _uniqueColumnValues(field){ - var output = {}, - data = this.table.getData(this.params.valuesLookup), - column; - - if(field){ - column = this.table.columnManager.getColumnByField(field); - }else { - column = this.cell.getColumn()._getSelf(); - } - - if(column){ - data.forEach((row) => { - var val = column.getFieldValue(row); - - if(val !== null && typeof val !== "undefined" && val !== ""){ - output[val] = true; - } - }); - }else { - console.warn("unable to find matching column to create select lookup list:", field); - output = []; - } - - return Object.keys(output); - } - - - _parseList(inputValues){ - var data = []; - - if(!Array.isArray(inputValues)){ - inputValues = Object.entries(inputValues).map(([key, value]) => { - return { - label:value, - value:key, - }; - }); - } - - inputValues.forEach((value) => { - if(typeof value !== "object"){ - value = { - label:value, - value:value, - }; - } - - this._parseListItem(value, data, 0); - }); - - if(!this.currentItems.length && this.params.freetext){ - this.input.value = this.initialValues; - this.typing = true; - this.lastAction = "typing"; - } - - this.data = data; - - return data; - } - - _parseListItem(option, data, level){ - var item = {}; - - if(option.options){ - item = this._parseListGroup(option, level + 1); - }else { - item = { - label:option.label, - value:option.value, - itemParams:option.itemParams, - elementAttributes: option.elementAttributes, - element:false, - selected:false, - visible:true, - level:level, - original:option, - }; - - if(this.initialValues && this.initialValues.indexOf(option.value) > -1){ - this._chooseItem(item, true); - } - } - - data.push(item); - } - - _parseListGroup(option, level){ - var item = { - label:option.label, - group:true, - itemParams:option.itemParams, - elementAttributes:option.elementAttributes, - element:false, - visible:true, - level:level, - options:[], - original:option, - }; - - option.options.forEach((child) => { - this._parseListItem(child, item.options, level); - }); - - return item; - } - - _sortOptions(options){ - var sorter; - - if(this.params.sort){ - sorter = typeof this.params.sort === "function" ? this.params.sort : this._defaultSortFunction.bind(this); - - this._sortGroup(sorter, options); - } - - return options; - } - - _sortGroup(sorter, options){ - options.sort((a,b) => { - return sorter(a.label, b.label, a.value, b.value, a.original, b.original); - }); - - options.forEach((option) => { - if(option.group){ - this._sortGroup(sorter, option.options); - } - }); - } - - _defaultSortFunction(as, bs){ - var a, b, a1, b1, i= 0, L, rx = /(\d+)|(\D+)/g, rd = /\d/; - var emptyAlign = 0; - - if(this.params.sort === "desc"){ - [as, bs] = [bs, as]; - } - - //handle empty values - if(!as && as!== 0){ - emptyAlign = !bs && bs!== 0 ? 0 : -1; - }else if(!bs && bs!== 0){ - emptyAlign = 1; - }else { - if(isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if(a === b) return 0; - if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while(i < L){ - a1= a[i]; - b1= b[i++]; - if(a1 !== b1){ - if(isFinite(a1) && isFinite(b1)){ - if(a1.charAt(0) === "0") a1 = "." + a1; - if(b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } - else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - return emptyAlign; - } - - _filterOptions(){ - var filterFunc = this.params.filterFunc || this._defaultFilterFunc, - term = this.input.value; - - if(term){ - this.filtered = true; - - this.data.forEach((item) => { - this._filterItem(filterFunc, term, item); - }); - }else { - this.filtered = false; - } - - return this.data; - } - - _filterItem(func, term, item){ - var matches = false; - - if(!item.group){ - item.visible = func(term, item.label, item.value, item.original); - }else { - item.options.forEach((option) => { - if(this._filterItem(func, term, option)){ - matches = true; - } - }); - - item.visible = matches; - } - - return item.visible; - } - - _defaultFilterFunc(term, label, value, item){ - term = String(term).toLowerCase(); - - if(label !== null && typeof label !== "undefined"){ - if(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){ - return true; - } - } - - return false; - } - - ////////////////////////////////////// - /////////// Display List ///////////// - ////////////////////////////////////// - - _clearList(){ - while(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild); - - this.displayItems = []; - } - - _buildList(data){ - this._clearList(); - - data.forEach((option) => { - this._buildItem(option); - }); - - if(!this.displayItems.length){ - this._addPlaceholder(this.params.placeholderEmpty); - } - } - - _buildItem(item){ - var el = item.element, - contents; - - if(!this.filtered || item.visible){ - - if(!el){ - el = document.createElement("div"); - el.tabIndex = 0; - - contents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label; - - if(contents instanceof HTMLElement){ - el.appendChild(contents); - }else { - el.innerHTML = contents; - } - - if(item.group){ - el.classList.add("tabulator-edit-list-group"); - }else { - el.classList.add("tabulator-edit-list-item"); - } - - el.classList.add("tabulator-edit-list-group-level-" + item.level); - - if(item.elementAttributes && typeof item.elementAttributes == "object"){ - for (let key in item.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - el.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes["+" + key]); - }else { - el.setAttribute(key, item.elementAttributes[key]); - } - } - } - - if(item.group){ - el.addEventListener("click", this._groupClick.bind(this, item)); - }else { - el.addEventListener("click", this._itemClick.bind(this, item)); - } - - el.addEventListener("mousedown", this._preventBlur.bind(this)); - - item.element = el; - } - - this._styleItem(item); - - this.listEl.appendChild(el); - - if(item.group){ - item.options.forEach((option) => { - this._buildItem(option); - }); - }else { - this.displayItems.push(item); - } - } - } - - _showList(){ - var startVis = this.popup && this.popup.isVisible(); - - if(this.input.parentNode){ - if(this.params.autocomplete && this.input.value === "" && !this.params.listOnEmpty){ - if(this.popup){ - this.popup.hide(true); - } - return; - } - - this._setListWidth(); - - if(!this.popup){ - this.popup = this.edit.popup(this.listEl); - } - - this.popup.show(this.cell.getElement(), "bottom"); - - if(!startVis){ - setTimeout(() => { - this.popup.hideOnBlur(this._resolveValue.bind(this, true)); - }, 10); - } - } - } - - _styleItem(item){ - if(item && item.element){ - if(item.selected){ - item.element.classList.add("active"); - }else { - item.element.classList.remove("active"); - } - } - } - - ////////////////////////////////////// - ///////// User Interaction /////////// - ////////////////////////////////////// - - _itemClick(item, e){ - e.stopPropagation(); - - this._chooseItem(item); - } - - _groupClick(item, e){ - e.stopPropagation(); - } - - - ////////////////////////////////////// - ////// Current Item Management /////// - ////////////////////////////////////// - - _cancel(){ - this.popup.hide(true); - this.actions.cancel(); - } - - _clearChoices(){ - this.typing = true; - - this.currentItems.forEach((item) => { - item.selected = false; - this._styleItem(item); - }); - - this.currentItems = []; - - this.focusedItem = null; - } - - _chooseItem(item, silent){ - var index; - - this.typing = false; - - if(this.params.multiselect){ - index = this.currentItems.indexOf(item); - - if(index > -1){ - this.currentItems.splice(index, 1); - item.selected = false; - }else { - this.currentItems.push(item); - item.selected = true; - } - - this.input.value = this.currentItems.map(item => item.label).join(","); - - this._styleItem(item); - - }else { - this.currentItems = [item]; - item.selected = true; - - this.input.value = item.label; - - this._styleItem(item); - - if(!silent){ - this._resolveValue(); - } - } - - this._focusItem(item); - } - - _resolveValue(blur){ - var output, initialValue; - - if(this.popup){ - this.popup.hide(true); - } - - if(this.params.multiselect){ - output = this.currentItems.map(item => item.value); - }else { - if(blur && this.params.autocomplete && this.typing){ - if(this.params.freetext || (this.params.allowEmpty && this.input.value === "")){ - output = this.input.value; - }else { - this.actions.cancel(); - return; - } - }else { - if(this.currentItems[0]){ - output = this.currentItems[0].value; - }else { - initialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues; - - if(initialValue === null || typeof initialValue === "undefined" || initialValue === ""){ - output = initialValue; - }else { - output = this.params.emptyValue; - } - } - - } - } - - if(output === ""){ - output = this.params.emptyValue; - } - - this.actions.success(output); - - if(this.isFilter){ - this.initialValues = output && !Array.isArray(output) ? [output] : output; - this.currentItems = []; - } - } - -} - -function select(cell, onRendered, success, cancel, editorParams){ - - this.deprecationMsg("The select editor has been deprecated, please use the new list editor"); - - var list = new Edit(this, cell, onRendered, success, cancel, editorParams); - - return list.input; -} - -function list(cell, onRendered, success, cancel, editorParams){ - var list = new Edit(this, cell, onRendered, success, cancel, editorParams); - - return list.input; -} - -function autocomplete(cell, onRendered, success, cancel, editorParams){ - - this.deprecationMsg("The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam"); - - editorParams.autocomplete = true; - - var list = new Edit(this, cell, onRendered, success, cancel, editorParams); - - return list.input; -} - -//star rating -function star(cell, onRendered, success, cancel, editorParams){ - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - - //change star type - function starChange(val){ - stars.forEach(function(star, i){ - if(i < val){ - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-active"); - }else { - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - }else { - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-inactive"); - }else { - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i){ - - var starHolder = document.createElement("span"); - var nextStar = star.cloneNode(true); - - stars.push(nextStar); - - starHolder.addEventListener("mouseenter", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - starChange(i); - }); - - starHolder.addEventListener("mousemove", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - }); - - starHolder.addEventListener("click", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - success(i); - element.blur(); - }); - - starHolder.appendChild(nextStar); - starsHolder.appendChild(starHolder); - - } - - //handle keyboard navigation value change - function changeValue(val){ - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - star.setAttribute("width", size); - star.setAttribute("height", size); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - starsHolder.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //create correct number of stars - for(var i=1;i<= maxStars;i++){ - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mousemove", function(e){ - starChange(0); - }); - - starsHolder.addEventListener("click", function(e){ - success(0); - }); - - element.addEventListener("blur", function(e){ - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - changeValue(value + 1); - break; - - case 37: //left arrow - changeValue(value - 1); - break; - - case 13: //enter - success(value); - break; - - case 27: //escape - cancel(); - break; - } - }); - - return starsHolder; -} - -//draggable progress bar -function progress(cell, onRendered, success, cancel, editorParams){ - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("max")) || 100) : editorParams.max, - min = typeof editorParams.min === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("min")) || 0) : editorParams.min, - percent = (max - min) / 100, - value = cell.getValue() || 0, - handle = document.createElement("div"), - bar = document.createElement("div"), - mouseDrag, mouseDragWidth; - - //set new value - function updateValue(){ - var style = window.getComputedStyle(element, null); - - var calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue("padding-left")) - parseInt(style.getPropertyValue("padding-right")))/100))) + min; - success(calcVal); - element.setAttribute("aria-valuenow", calcVal); - element.setAttribute("aria-label", value); - } - - //style handle - handle.style.position = "absolute"; - handle.style.right = "0"; - handle.style.top = "0"; - handle.style.bottom = "0"; - handle.style.width = "5px"; - handle.classList.add("tabulator-progress-handle"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "relative"; - // bar.style.top = "8px"; - // bar.style.bottom = "8px"; - // bar.style.left = "4px"; - // bar.style.marginRight = "4px"; - bar.style.height = "100%"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - bar.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //style cell - element.style.padding = "4px 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = Math.round((value - min) / percent); - // bar.style.right = value + "%"; - bar.style.width = value + "%"; - - element.setAttribute("aria-valuemin", min); - element.setAttribute("aria-valuemax", max); - - bar.appendChild(handle); - - handle.addEventListener("mousedown", function(e){ - mouseDrag = e.screenX; - mouseDragWidth = bar.offsetWidth; - }); - - handle.addEventListener("mouseover", function(){ - handle.style.cursor = "ew-resize"; - }); - - element.addEventListener("mousemove", function(e){ - if(mouseDrag){ - bar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + "px"; - } - }); - - element.addEventListener("mouseup", function(e){ - if(mouseDrag){ - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - e.preventDefault(); - bar.style.width = (bar.clientWidth + element.clientWidth/100) + "px"; - break; - - case 37: //left arrow - e.preventDefault(); - bar.style.width = (bar.clientWidth - element.clientWidth/100) + "px"; - break; - - case 9: //tab - case 13: //enter - updateValue(); - break; - - case 27: //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function(){ - cancel(); - }); - - return bar; -} - -//checkbox -function tickCross(cell, onRendered, success, cancel, editorParams){ - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false, - trueValueSet = Object.keys(editorParams).includes("trueValue"), - falseValueSet = Object.keys(editorParams).includes("falseValue"); - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - if(tristate && (typeof value === "undefined" || value === indetermValue || value === "")){ - indetermState = true; - input.indeterminate = true; - } - - if(this.table.browser != "firefox" && this.table.browser != "safari"){ //prevent blur issue on mac firefox - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - } - }); - } - - input.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === "true" || value === "True" || value === 1); - - function setValue(blur){ - var checkedValue = input.checked; - - if(trueValueSet && checkedValue){ - checkedValue = editorParams.trueValue; - }else if(falseValueSet && !checkedValue){ - checkedValue = editorParams.falseValue; - } - - if(tristate){ - if(!blur){ - if(input.checked && !indetermState){ - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - }else { - indetermState = false; - return checkedValue; - } - }else { - if(indetermState){ - return indetermValue; - }else { - return checkedValue; - } - } - }else { - return checkedValue; - } - } - - //submit new value on blur - input.addEventListener("change", function(e){ - success(setValue()); - }); - - input.addEventListener("blur", function(e){ - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - if(e.keyCode == 13){ - success(setValue()); - } - if(e.keyCode == 27){ - cancel(); - } - }); - - return input; -} - -var defaultEditors = { - input:input, - textarea:textarea, - number:number, - range:range, - date:date, - time:time, - datetime:datetime, - select:select, - list:list, - autocomplete:autocomplete, - star:star, - progress:progress, - tickCross:tickCross, -}; - -class Edit$1 extends Module{ - - constructor(table){ - super(table); - - this.currentCell = false; //hold currently editing cell - this.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening - this.recursionBlock = false; //prevent focus recursion - this.invalidEdit = false; - this.editedCells = []; - - this.editors = Edit$1.editors; - - this.registerColumnOption("editable"); - this.registerColumnOption("editor"); - this.registerColumnOption("editorParams"); - - this.registerColumnOption("cellEditing"); - this.registerColumnOption("cellEdited"); - this.registerColumnOption("cellEditCancelled"); - - this.registerTableOption("editTriggerEvent", "focus"); - - this.registerTableFunction("getEditedCells", this.getEditedCells.bind(this)); - this.registerTableFunction("clearCellEdited", this.clearCellEdited.bind(this)); - this.registerTableFunction("navigatePrev", this.navigatePrev.bind(this)); - this.registerTableFunction("navigateNext", this.navigateNext.bind(this)); - this.registerTableFunction("navigateLeft", this.navigateLeft.bind(this)); - this.registerTableFunction("navigateRight", this.navigateRight.bind(this)); - this.registerTableFunction("navigateUp", this.navigateUp.bind(this)); - this.registerTableFunction("navigateDown", this.navigateDown.bind(this)); - - this.registerComponentFunction("cell", "isEdited", this.cellIsEdited.bind(this)); - this.registerComponentFunction("cell", "clearEdited", this.clearEdited.bind(this)); - this.registerComponentFunction("cell", "edit", this.editCell.bind(this)); - this.registerComponentFunction("cell", "cancelEdit", this.cellCancelEdit.bind(this)); - - this.registerComponentFunction("cell", "navigatePrev", this.navigatePrev.bind(this)); - this.registerComponentFunction("cell", "navigateNext", this.navigateNext.bind(this)); - this.registerComponentFunction("cell", "navigateLeft", this.navigateLeft.bind(this)); - this.registerComponentFunction("cell", "navigateRight", this.navigateRight.bind(this)); - this.registerComponentFunction("cell", "navigateUp", this.navigateUp.bind(this)); - this.registerComponentFunction("cell", "navigateDown", this.navigateDown.bind(this)); - } - - initialize(){ - this.subscribe("cell-init", this.bindEditor.bind(this)); - this.subscribe("cell-delete", this.clearEdited.bind(this)); - this.subscribe("cell-value-changed", this.updateCellClass.bind(this)); - this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); - this.subscribe("column-delete", this.columnDeleteCheck.bind(this)); - this.subscribe("row-deleting", this.rowDeleteCheck.bind(this)); - this.subscribe("row-layout", this.rowEditableCheck.bind(this)); - this.subscribe("data-refreshing", this.cancelEdit.bind(this)); - this.subscribe("clipboard-paste", this.pasteBlocker.bind(this)); - - this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this, undefined)); - this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this)); - - - // this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this, undefined)); - // this.subscribe("keybinding-nav-right", this.navigateRight.bind(this, undefined)); - this.subscribe("keybinding-nav-up", this.navigateUp.bind(this, undefined)); - this.subscribe("keybinding-nav-down", this.navigateDown.bind(this, undefined)); - } - - - /////////////////////////////////// - ///////// Paste Negation ////////// - /////////////////////////////////// - - pasteBlocker(e){ - if(this.currentCell){ - return true; - } - } - - - /////////////////////////////////// - ////// Keybinding Functions /////// - /////////////////////////////////// - - keybindingNavigateNext(e){ - var cell = this.currentCell, - newRow = this.options("tabEndNewRow"); - - if(cell){ - if(!this.navigateNext(cell, e)){ - if(newRow){ - cell.getElement().firstChild.blur(); - - if(!this.invalidEdit){ - - if(newRow === true){ - newRow = this.table.addRow({}); - }else { - if(typeof newRow == "function"){ - newRow = this.table.addRow(newRow(cell.row.getComponent())); - }else { - newRow = this.table.addRow(Object.assign({}, newRow)); - } - } - - newRow.then(() => { - setTimeout(() => { - cell.getComponent().navigateNext(); - }); - }); - } - } - } - } - } - - /////////////////////////////////// - ///////// Cell Functions ////////// - /////////////////////////////////// - - cellIsEdited(cell){ - return !! cell.modules.edit && cell.modules.edit.edited; - } - - cellCancelEdit(cell){ - if(cell === this.currentCell){ - this.table.modules.edit.cancelEdit(); - }else { - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } - - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - updateCellClass(cell){ - if(this.allowEdit(cell)) { - cell.getElement().classList.add("tabulator-editable"); - } - else { - cell.getElement().classList.remove("tabulator-editable"); - } - } - - clearCellEdited(cells){ - if(!cells){ - cells = this.table.modules.edit.getEditedCells(); - } - - if(!Array.isArray(cells)){ - cells = [cells]; - } - - cells.forEach((cell) => { - this.table.modules.edit.clearEdited(cell._getSelf()); - }); - } - - navigatePrev(cell = this.currentCell, e){ - var nextCell, prevRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - nextCell = this.navigateLeft(); - - if(nextCell){ - return true; - }else { - prevRow = this.table.rowManager.prevDisplayRow(cell.row, true); - - if(prevRow){ - nextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - } - } - - return false; - } - - navigateNext(cell = this.currentCell, e){ - var nextCell, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - nextCell = this.navigateRight(); - - if(nextCell){ - return true; - }else { - nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); - - if(nextRow){ - nextCell = this.findNextEditableCell(nextRow, -1); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - } - } - - return false; - } - - navigateLeft(cell = this.currentCell, e){ - var index, nextCell; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextCell = this.findPrevEditableCell(cell.row, index); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - - return false; - } - - navigateRight(cell = this.currentCell, e){ - var index, nextCell; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextCell = this.findNextEditableCell(cell.row, index); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - - return false; - } - - navigateUp(cell = this.currentCell, e){ - var index, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextRow = this.table.rowManager.prevDisplayRow(cell.row, true); - - if(nextRow){ - nextRow.cells[index].getComponent().edit(); - return true; - } - } - - return false; - } - - navigateDown(cell = this.currentCell, e){ - var index, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); - - if(nextRow){ - nextRow.cells[index].getComponent().edit(); - return true; - } - } - - return false; - } - - findNextEditableCell(row, index){ - var nextCell = false; - - if(index < row.cells.length-1){ - for(var i = index+1; i < row.cells.length; i++){ - let cell = row.cells[i]; - - if(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){ - let allowEdit = this.allowEdit(cell); - - if(allowEdit){ - nextCell = cell; - break; - } - } - } - } - - return nextCell; - } - - findPrevEditableCell(row, index){ - var prevCell = false; - - if(index > 0){ - for(var i = index-1; i >= 0; i--){ - let cell = row.cells[i]; - - if(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){ - let allowEdit = this.allowEdit(cell); - - if(allowEdit){ - prevCell = cell; - break; - } - } - } - } - - return prevCell; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnCheck(column){ - if(typeof column.definition.editor !== "undefined"){ - this.initializeColumn(column); - } - } - - columnDeleteCheck(column){ - if(this.currentCell && this.currentCell.column === column){ - this.cancelEdit(); - } - } - - rowDeleteCheck(row){ - if(this.currentCell && this.currentCell.row === row){ - this.cancelEdit(); - } - } - - rowEditableCheck(row){ - row.getCells().forEach((cell) => { - if(cell.column.modules.edit && typeof cell.column.modules.edit.check === "function"){ - this.updateCellClass(cell); - } - }); - } - - //initialize column editor - initializeColumn(column){ - var config = { - editor:false, - blocked:false, - check:column.definition.editable, - params:column.definition.editorParams || {} - }; - - //set column editor - switch(typeof column.definition.editor){ - case "string": - if(this.editors[column.definition.editor]){ - config.editor = this.editors[column.definition.editor]; - }else { - console.warn("Editor Error - No such editor found: ", column.definition.editor); - } - break; - - case "function": - config.editor = column.definition.editor; - break; - - case "boolean": - if(column.definition.editor === true){ - if(typeof column.definition.formatter !== "function"){ - if(this.editors[column.definition.formatter]){ - config.editor = this.editors[column.definition.formatter]; - }else { - config.editor = this.editors["input"]; - } - }else { - console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); - } - } - break; - } - - if(config.editor){ - column.modules.edit = config; - } - } - - getCurrentCell(){ - return this.currentCell ? this.currentCell.getComponent() : false; - } - - clearEditor(cancel){ - var cell = this.currentCell, - cellEl; - - this.invalidEdit = false; - - if(cell){ - this.currentCell = false; - - cellEl = cell.getElement(); - - this.dispatch("edit-editor-clear", cell, cancel); - - cellEl.classList.remove("tabulator-editing"); - - while(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild); - - cell.row.getElement().classList.remove("tabulator-editing"); - - cell.table.element.classList.remove("tabulator-editing"); - } - } - - cancelEdit(){ - if(this.currentCell){ - var cell = this.currentCell; - var component = this.currentCell.getComponent(); - - this.clearEditor(true); - cell.setValueActual(cell.getValue()); - cell.cellRendered(); - - if(cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight){ - cell.row.normalizeHeight(true); - } - - if(cell.column.definition.cellEditCancelled){ - cell.column.definition.cellEditCancelled.call(this.table, component); - } - - this.dispatch("edit-cancelled", cell); - this.dispatchExternal("cellEditCancelled", component); - } - } - - //return a formatted value for a cell - bindEditor(cell){ - if(cell.column.modules.edit){ - var self = this, - element = cell.getElement(true); - - this.updateCellClass(cell); - element.setAttribute("tabindex", 0); - - element.addEventListener("mousedown", function(e){ - if (e.button === 2) { - e.preventDefault(); - }else { - self.mouseClick = true; - } - }); - - if(this.options("editTriggerEvent") === "dblclick"){ - element.addEventListener("dblclick", function(e){ - if(!element.classList.contains("tabulator-editing")){ - element.focus({preventScroll: true}); - self.edit(cell, e, false); - } - }); - } - - - if(this.options("editTriggerEvent") === "focus" || this.options("editTriggerEvent") === "click"){ - element.addEventListener("click", function(e){ - if(!element.classList.contains("tabulator-editing")){ - element.focus({preventScroll: true}); - self.edit(cell, e, false); - } - }); - } - - if(this.options("editTriggerEvent") === "focus"){ - element.addEventListener("focus", function(e){ - if(!self.recursionBlock){ - self.edit(cell, e, false); - } - }); - } - } - } - - focusCellNoEvent(cell, block){ - this.recursionBlock = true; - - if(!(block && this.table.browser === "ie")){ - cell.getElement().focus({preventScroll: true}); - } - - this.recursionBlock = false; - } - - editCell(cell, forceEdit){ - this.focusCellNoEvent(cell); - this.edit(cell, false, forceEdit); - } - - focusScrollAdjust(cell){ - if(this.table.rowManager.getRenderMode() == "virtual"){ - var topEdge = this.table.rowManager.element.scrollTop, - bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop, - rowEl = cell.row.getElement(); - - if(rowEl.offsetTop < topEdge){ - this.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop); - }else { - if(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){ - this.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge); - } - } - - var leftEdge = this.table.rowManager.element.scrollLeft, - rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft, - cellEl = cell.getElement(); - - if(this.table.modExists("frozenColumns")){ - leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0); - rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0); - } - - if(this.table.options.renderHorizontal === "virtual"){ - leftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); - rightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); - } - - if(cellEl.offsetLeft < leftEdge){ - this.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft); - }else { - if(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){ - this.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge); - } - } - } - } - - allowEdit(cell) { - var check = cell.column.modules.edit ? true : false; - - if(cell.column.modules.edit){ - switch(typeof cell.column.modules.edit.check){ - case "function": - if(cell.row.initialized){ - check = cell.column.modules.edit.check(cell.getComponent()); - } - break; - - case "string": - check = !!cell.row.data[cell.column.modules.edit.check]; - break; - - case "boolean": - check = cell.column.modules.edit.check; - break; - } - } - - return check; - } - - edit(cell, e, forceEdit){ - var self = this, - allowEdit = true, - rendered = function(){}, - element = cell.getElement(), - editFinished = false, - cellEditor, component, params; - - //prevent editing if another cell is refusing to leave focus (eg. validation fail) - - if(this.currentCell){ - if(!this.invalidEdit && this.currentCell !== cell){ - this.cancelEdit(); - } - return; - } - - //handle successful value change - function success(value){ - if(self.currentCell === cell && !editFinished){ - var valid = self.chain("edit-success", [cell, value], true, true); - - if(valid === true || self.table.options.validationMode === "highlight"){ - - editFinished = true; - - self.clearEditor(); - - if(!cell.modules.edit){ - cell.modules.edit = {}; - } - - cell.modules.edit.edited = true; - - if(self.editedCells.indexOf(cell) == -1){ - self.editedCells.push(cell); - } - - cell.setValue(value, true); - - return valid === true; - }else { - editFinished = true; - self.invalidEdit = true; - self.focusCellNoEvent(cell, true); - rendered(); - - setTimeout(() => { - editFinished = false; - }, 10); - return false; - } - } - } - - //handle aborted edit - function cancel(){ - // editFinished = true; - - if(self.currentCell === cell && !editFinished){ - self.cancelEdit(); - } - } - - function onRendered(callback){ - rendered = callback; - } - - if(!cell.column.modules.edit.blocked){ - if(e){ - e.stopPropagation(); - } - - allowEdit = this.allowEdit(cell); - - if(allowEdit || forceEdit){ - self.cancelEdit(); - - self.currentCell = cell; - - this.focusScrollAdjust(cell); - - component = cell.getComponent(); - - if(this.mouseClick){ - this.mouseClick = false; - - if(cell.column.definition.cellClick){ - cell.column.definition.cellClick.call(this.table, e, component); - } - } - - if(cell.column.definition.cellEditing){ - cell.column.definition.cellEditing.call(this.table, component); - } - - this.dispatch("cell-editing", cell); - this.dispatchExternal("cellEditing", component); - - params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; - - cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); - - //if editor returned, add to DOM, if false, abort edit - if(this.currentCell && cellEditor !== false){ - if(cellEditor instanceof Node){ - element.classList.add("tabulator-editing"); - cell.row.getElement().classList.add("tabulator-editing"); - cell.table.element.classList.add("tabulator-editing"); - while(element.firstChild) element.removeChild(element.firstChild); - element.appendChild(cellEditor); - - //trigger onRendered Callback - rendered(); - - //prevent editing from triggering rowClick event - var children = element.children; - - for (var i = 0; i < children.length; i++) { - children[i].addEventListener("click", function(e){ - e.stopPropagation(); - }); - } - }else { - console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor); - this.blur(element); - return false; - } - }else { - this.blur(element); - return false; - } - - return true; - }else { - this.mouseClick = false; - this.blur(element); - return false; - } - }else { - this.mouseClick = false; - this.blur(element); - return false; - } - } - - blur(element){ - if(!this.confirm("edit-blur", [element]) ){ - element.blur(); - } - } - - getEditedCells(){ - var output = []; - - this.editedCells.forEach((cell) => { - output.push(cell.getComponent()); - }); - - return output; - } - - clearEdited(cell){ - var editIndex; - - if(cell.modules.edit && cell.modules.edit.edited){ - cell.modules.edit.edited = false; - - this.dispatch("edit-edited-clear", cell); - } - - editIndex = this.editedCells.indexOf(cell); - - if(editIndex > -1){ - this.editedCells.splice(editIndex, 1); - } - } -} - -Edit$1.moduleName = "edit"; - -//load defaults -Edit$1.editors = defaultEditors; - -class ExportRow{ - constructor(type, columns, component, indent){ - this.type = type; - this.columns = columns; - this.component = component || false; - this.indent = indent || 0; - } -} - -class ExportColumn{ - constructor(value, component, width, height, depth){ - this.value = value; - this.component = component || false; - this.width = width; - this.height = height; - this.depth = depth; - } -} - -class Export extends Module{ - - constructor(table){ - super(table); - - this.config = {}; - this.cloneTableStyle = true; - this.colVisProp = ""; - - this.registerTableOption("htmlOutputConfig", false); //html output config - - this.registerColumnOption("htmlOutput"); - this.registerColumnOption("titleHtmlOutput"); - } - - initialize(){ - this.registerTableFunction("getHtml", this.getHtml.bind(this)); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - generateExportList(config, style, range, colVisProp){ - this.cloneTableStyle = style; - this.config = config || {}; - this.colVisProp = colVisProp; - - var headers, body; - - if (range === 'range') { - var columns = this.table.modules.selectRange.selectedColumns(); - headers = this.config.columnHeaders !== false - ? this.headersToExportRows(this.generateColumnGroupHeaders(columns)) - : []; - body = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true)); - } else { - headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : []; - body = this.bodyToExportRows(this.rowLookup(range)); - } - - return headers.concat(body); - } - - generateTable(config, style, range, colVisProp){ - var list = this.generateExportList(config, style, range, colVisProp); - - return this.generateTableElement(list); - } - - rowLookup(range){ - var rows = []; - - if(typeof range == "function"){ - range.call(this.table).forEach((row) =>{ - row = this.table.rowManager.findRow(row); - - if(row){ - rows.push(row); - } - }); - }else { - switch(range){ - case true: - case "visible": - rows = this.table.rowManager.getVisibleRows(false, true); - break; - - case "all": - rows = this.table.rowManager.rows; - break; - - case "selected": - rows = this.table.modules.selectRow.selectedRows; - break; - - case "range": - rows = this.table.modules.selectRange.selectedRows(); - break; - - case "active": - default: - if(this.table.options.pagination){ - rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2); - }else { - rows = this.table.rowManager.getDisplayRows(); - } - } - } - - return Object.assign([], rows); - } - - generateColumnGroupHeaders(columns){ - var output = []; - - if (!columns) { - columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex; - } - - columns.forEach((column) => { - var colData = this.processColumnGroup(column); - - if(colData){ - output.push(colData); - } - }); - - return output; - } - - processColumnGroup(column){ - var subGroups = column.columns, - maxDepth = 0, - title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title; - - var groupData = { - title:title, - column:column, - depth:1, - }; - - if(subGroups.length){ - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach((subGroup) => { - var subGroupData = this.processColumnGroup(subGroup); - - if(subGroupData){ - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - - if(subGroupData.depth > maxDepth){ - maxDepth = subGroupData.depth; - } - } - }); - - groupData.depth += maxDepth; - - if(!groupData.width){ - return false; - } - }else { - if(this.columnVisCheck(column)){ - groupData.width = 1; - }else { - return false; - } - } - - return groupData; - } - - columnVisCheck(column){ - var visProp = column.definition[this.colVisProp]; - - if(typeof visProp === "function"){ - visProp = visProp.call(this.table, column.getComponent()); - } - - return visProp !== false && (column.visible || (!column.visible && visProp)); - } - - headersToExportRows(columns){ - var headers = [], - headerDepth = 0, - exportRows = []; - - function parseColumnGroup(column, level){ - - var depth = headerDepth - level; - - if(typeof headers[level] === "undefined"){ - headers[level] = []; - } - - column.height = column.subGroups ? 1 : (depth - column.depth) + 1; - - headers[level].push(column); - - if(column.height > 1){ - for(let i = 1; i < column.height; i ++){ - - if(typeof headers[level + i] === "undefined"){ - headers[level + i] = []; - } - - headers[level + i].push(false); - } - } - - if(column.width > 1){ - for(let i = 1; i < column.width; i ++){ - headers[level].push(false); - } - } - - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - } - } - - //calculate maximum header depth - columns.forEach(function(column){ - if(column.depth > headerDepth){ - headerDepth = column.depth; - } - }); - - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - - headers.forEach((header) => { - var columns = []; - - header.forEach((col) => { - if(col){ - let title = typeof col.title === "undefined" ? "" : col.title; - columns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth)); - }else { - columns.push(null); - } - }); - - exportRows.push(new ExportRow("header", columns)); - }); - - return exportRows; - } - - bodyToExportRows(rows, columns = []){ - var exportRows = []; - - if (columns.length === 0) { - this.table.columnManager.columnsByIndex.forEach((column) => { - if (this.columnVisCheck(column)) { - columns.push(column.getComponent()); - } - }); - } - - if(this.config.columnCalcs !== false && this.table.modExists("columnCalcs")){ - if(this.table.modules.columnCalcs.topInitialized){ - rows.unshift(this.table.modules.columnCalcs.topRow); - } - - if(this.table.modules.columnCalcs.botInitialized){ - rows.push(this.table.modules.columnCalcs.botRow); - } - } - - rows = rows.filter((row) => { - switch(row.type){ - case "group": - return this.config.rowGroups !== false; - - case "calc": - return this.config.columnCalcs !== false; - - case "row": - return !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent); - } - - return true; - }); - - rows.forEach((row, i) => { - var rowData = row.getData(this.colVisProp); - var exportCols = []; - var indent = 0; - - switch(row.type){ - case "group": - indent = row.level; - exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1)); - break; - - case "calc" : - case "row" : - columns.forEach((col) => { - exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1)); - }); - - if(this.table.options.dataTree && this.config.dataTree !== false){ - indent = row.modules.dataTree.index; - } - break; - } - - exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent)); - }); - - return exportRows; - } - - generateTableElement(list){ - var table = document.createElement("table"), - headerEl = document.createElement("thead"), - bodyEl = document.createElement("tbody"), - styles = this.lookupTableStyles(), - rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))], - setup = {}; - - setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter; - - if(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists("columnCalcs")){ - setup.treeElementField = this.table.modules.dataTree.elementField; - } - - //assign group header formatter - setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))]; - - if(setup.groupHeader && !Array.isArray(setup.groupHeader)){ - setup.groupHeader = [setup.groupHeader]; - } - - table.classList.add("tabulator-print-table"); - - this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - - if(list.length > 1000){ - console.warn("It may take a long time to render an HTML table with more than 1000 rows"); - } - - list.forEach((row, i) => { - let rowEl; - - switch(row.type){ - case "header": - headerEl.appendChild(this.generateHeaderElement(row, setup, styles)); - break; - - case "group": - bodyEl.appendChild(this.generateGroupElement(row, setup, styles)); - break; - - case "calc": - bodyEl.appendChild(this.generateCalcElement(row, setup, styles)); - break; - - case "row": - rowEl = this.generateRowElement(row, setup, styles); - - this.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - bodyEl.appendChild(rowEl); - break; - } - }); - - if(headerEl.innerHTML){ - table.appendChild(headerEl); - } - - table.appendChild(bodyEl); - - - this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]); - return table; - } - - lookupTableStyles(){ - var styles = {}; - - //lookup row styles - if(this.cloneTableStyle && window.getComputedStyle){ - styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); - styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); - styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs"); - styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); - styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; - - if(styles.firstRow){ - styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell"); - styles.firstCell = styles.styleCells[0]; - styles.lastCell = styles.styleCells[styles.styleCells.length - 1]; - } - } - - return styles; - } - - generateHeaderElement(row, setup, styles){ - var rowEl = document.createElement("tr"); - - row.columns.forEach((column) => { - if(column){ - var cellEl = document.createElement("th"); - var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : []; - - cellEl.colSpan = column.width; - cellEl.rowSpan = column.height; - - cellEl.innerHTML = column.value; - - if(this.cloneTableStyle){ - cellEl.style.boxSizing = "border-box"; - } - - classNames.forEach(function(className) { - cellEl.classList.add(className); - }); - - this.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - this.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); - - if(column.component._column.visible){ - this.mapElementStyles(column.component.getElement(), cellEl, ["width"]); - }else { - if(column.component._column.definition.width){ - cellEl.style.width = column.component._column.definition.width + "px"; - } - } - - if(column.component._column.parent){ - this.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]); - } - - rowEl.appendChild(cellEl); - } - }); - - return rowEl; - } - - generateGroupElement(row, setup, styles){ - - var rowEl = document.createElement("tr"), - cellEl = document.createElement("td"), - group = row.columns[0]; - - rowEl.classList.add("tabulator-print-table-row"); - - if(setup.groupHeader && setup.groupHeader[row.indent]){ - group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - }else { - if(setup.groupHeader !== false){ - group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - - cellEl.colSpan = group.width; - cellEl.innerHTML = group.value; - - rowEl.classList.add("tabulator-print-table-group"); - rowEl.classList.add("tabulator-group-level-" + row.indent); - - if(group.component.isVisible()){ - rowEl.classList.add("tabulator-group-visible"); - } - - this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); - - rowEl.appendChild(cellEl); - - return rowEl; - } - - generateCalcElement(row, setup, styles){ - var rowEl = this.generateRowElement(row, setup, styles); - - rowEl.classList.add("tabulator-print-table-calcs"); - this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - - return rowEl; - } - - generateRowElement(row, setup, styles){ - var rowEl = document.createElement("tr"); - - rowEl.classList.add("tabulator-print-table-row"); - - row.columns.forEach((col, i) => { - if(col){ - var cellEl = document.createElement("td"), - column = col.component._column, - table = this.table, - index = table.columnManager.findColumnIndex(column), - value = col.value, - cellStyle; - - var cellWrapper = { - modules:{}, - getValue:function(){ - return value; - }, - getField:function(){ - return column.definition.field; - }, - getElement:function(){ - return cellEl; - }, - getType:function(){ - return "cell"; - }, - getColumn:function(){ - return column.getComponent(); - }, - getData:function(){ - return row.component.getData(); - }, - getRow:function(){ - return row.component; - }, - getTable:function(){ - return table; - }, - getComponent:function(){ - return cellWrapper; - }, - column:column, - }; - - var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : []; - - classNames.forEach(function(className) { - cellEl.classList.add(className); - }); - - if(this.table.modExists("format") && this.config.formatCells !== false){ - value = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp); - }else { - switch(typeof value){ - case "object": - value = value !== null ? JSON.stringify(value) : ""; - break; - - case "undefined": - value = ""; - break; - } - } - - if(value instanceof Node){ - cellEl.appendChild(value); - }else { - cellEl.innerHTML = value; - } - - cellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell; - - if(cellStyle){ - this.mapElementStyles(cellStyle, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "text-align"]); - - if(column.definition.align){ - cellEl.style.textAlign = column.definition.align; - } - } - - if(this.table.options.dataTree && this.config.dataTree !== false){ - if((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){ - if(row.component._row.modules.dataTree.controlEl){ - cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild); - } - if(row.component._row.modules.dataTree.branchEl){ - cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild); - } - } - } - - rowEl.appendChild(cellEl); - - if(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){ - cellWrapper.modules.format.renderedCallback(); - } - } - }); - - if(setup.rowFormatter && row.type === "row" && this.config.formatCells !== false){ - let formatComponent = Object.assign(row.component); - - formatComponent.getElement = function(){return rowEl;}; - - setup.rowFormatter(row.component); - } - - return rowEl; - } - - generateHTMLTable(list){ - var holder = document.createElement("div"); - - holder.appendChild(this.generateTableElement(list)); - - return holder.innerHTML; - } - - getHtml(visible, style, config, colVisProp){ - var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput"); - - return this.generateHTMLTable(list); - } - - mapElementStyles(from, to, props){ - if(this.cloneTableStyle && from && to){ - - var lookup = { - "background-color" : "backgroundColor", - "color" : "fontColor", - "width" : "width", - "font-weight" : "fontWeight", - "font-family" : "fontFamily", - "font-size" : "fontSize", - "text-align" : "textAlign", - "border-top" : "borderTop", - "border-left" : "borderLeft", - "border-right" : "borderRight", - "border-bottom" : "borderBottom", - "padding-top" : "paddingTop", - "padding-left" : "paddingLeft", - "padding-right" : "paddingRight", - "padding-bottom" : "paddingBottom", - }; - - if(window.getComputedStyle){ - var fromStyle = window.getComputedStyle(from); - - props.forEach(function(prop){ - if(!to.style[lookup[prop]]){ - to.style[lookup[prop]] = fromStyle.getPropertyValue(prop); - } - }); - } - } - } -} - -Export.moduleName = "export"; - -var defaultFilters = { - - //equal to - "=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal == filterVal ? true : false; - }, - - //less than - "<":function(filterVal, rowVal, rowData, filterParams){ - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">":function(filterVal, rowVal, rowData, filterParams){ - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal != filterVal ? true : false; - }, - - "regex":function(filterVal, rowVal, rowData, filterParams){ - - if(typeof filterVal == "string"){ - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else { - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1; - } - else { - return false; - } - } - }, - - //contains the keywords - "keywords":function(filterVal, rowVal, rowData, filterParams){ - var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator), - value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(), - matches = []; - - keywords.forEach((keyword) =>{ - if(value.includes(keyword)){ - matches.push(true); - } - }); - - return filterParams.matchAll ? matches.length === keywords.length : !!matches.length; - }, - - //starts with the string - "starts":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else { - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase()); - } - else { - return false; - } - } - }, - - //ends with the string - "ends":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else { - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase()); - } - else { - return false; - } - } - }, - - //in array - "in":function(filterVal, rowVal, rowData, filterParams){ - if(Array.isArray(filterVal)){ - return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true; - }else { - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - }, -}; - -class Filter extends Module{ - - constructor(table){ - super(table); - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterColumns = []; //hold columns that use header filters - - this.prevHeaderFilterChangeCheck = ""; - this.prevHeaderFilterChangeCheck = "{}"; - - this.changed = false; //has filtering changed since last render - this.tableInitialized = false; - - this.registerTableOption("filterMode", "local"); //local or remote filtering - - this.registerTableOption("initialFilter", false); //initial filtering criteria - this.registerTableOption("initialHeaderFilter", false); //initial header filtering criteria - this.registerTableOption("headerFilterLiveFilterDelay", 300); //delay before updating column after user types in header filter - this.registerTableOption("placeholderHeaderFilter", false); //placeholder when header filter is empty - - this.registerColumnOption("headerFilter"); - this.registerColumnOption("headerFilterPlaceholder"); - this.registerColumnOption("headerFilterParams"); - this.registerColumnOption("headerFilterEmptyCheck"); - this.registerColumnOption("headerFilterFunc"); - this.registerColumnOption("headerFilterFuncParams"); - this.registerColumnOption("headerFilterLiveFilter"); - - this.registerTableFunction("searchRows", this.searchRows.bind(this)); - this.registerTableFunction("searchData", this.searchData.bind(this)); - - this.registerTableFunction("setFilter", this.userSetFilter.bind(this)); - this.registerTableFunction("refreshFilter", this.userRefreshFilter.bind(this)); - this.registerTableFunction("addFilter", this.userAddFilter.bind(this)); - this.registerTableFunction("getFilters", this.getFilters.bind(this)); - this.registerTableFunction("setHeaderFilterFocus", this.userSetHeaderFilterFocus.bind(this)); - this.registerTableFunction("getHeaderFilterValue", this.userGetHeaderFilterValue.bind(this)); - this.registerTableFunction("setHeaderFilterValue", this.userSetHeaderFilterValue.bind(this)); - this.registerTableFunction("getHeaderFilters", this.getHeaderFilters.bind(this)); - this.registerTableFunction("removeFilter", this.userRemoveFilter.bind(this)); - this.registerTableFunction("clearFilter", this.userClearFilter.bind(this)); - this.registerTableFunction("clearHeaderFilter", this.userClearHeaderFilter.bind(this)); - - this.registerComponentFunction("column", "headerFilterFocus", this.setHeaderFilterFocus.bind(this)); - this.registerComponentFunction("column", "reloadHeaderFilter", this.reloadHeaderFilter.bind(this)); - this.registerComponentFunction("column", "getHeaderFilterValue", this.getHeaderFilterValue.bind(this)); - this.registerComponentFunction("column", "setHeaderFilterValue", this.setHeaderFilterValue.bind(this)); - } - - initialize(){ - this.subscribe("column-init", this.initializeColumnHeaderFilter.bind(this)); - this.subscribe("column-width-fit-before", this.hideHeaderFilterElements.bind(this)); - this.subscribe("column-width-fit-after", this.showHeaderFilterElements.bind(this)); - this.subscribe("table-built", this.tableBuilt.bind(this)); - this.subscribe("placeholder", this.generatePlaceholder.bind(this)); - - if(this.table.options.filterMode === "remote"){ - this.subscribe("data-params", this.remoteFilterParams.bind(this)); - } - - this.registerDataHandler(this.filter.bind(this), 10); - } - - tableBuilt(){ - if(this.table.options.initialFilter){ - this.setFilter(this.table.options.initialFilter); - } - - if(this.table.options.initialHeaderFilter){ - this.table.options.initialHeaderFilter.forEach((item) => { - - var column = this.table.columnManager.findColumn(item.field); - - if(column){ - this.setHeaderFilterValue(column, item.value); - }else { - console.warn("Column Filter Error - No matching column found:", item.field); - return false; - } - }); - } - - this.tableInitialized = true; - } - - remoteFilterParams(data, config, silent, params){ - params.filter = this.getFilters(true, true); - return params; - } - - generatePlaceholder(text){ - if(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){ - return this.table.options.placeholderHeaderFilter; - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - //set standard filters - userSetFilter(field, type, value, params){ - this.setFilter(field, type, value, params); - this.refreshFilter(); - } - - //set standard filters - userRefreshFilter(){ - this.refreshFilter(); - } - - //add filter to array - userAddFilter(field, type, value, params){ - this.addFilter(field, type, value, params); - this.refreshFilter(); - } - - userSetHeaderFilterFocus(field){ - var column = this.table.columnManager.findColumn(field); - - if(column){ - this.setHeaderFilterFocus(column); - }else { - console.warn("Column Filter Focus Error - No matching column found:", field); - return false; - } - } - - userGetHeaderFilterValue(field) { - var column = this.table.columnManager.findColumn(field); - - if(column){ - return this.getHeaderFilterValue(column); - }else { - console.warn("Column Filter Error - No matching column found:", field); - } - } - - userSetHeaderFilterValue(field, value){ - var column = this.table.columnManager.findColumn(field); - - if(column){ - this.setHeaderFilterValue(column, value); - }else { - console.warn("Column Filter Error - No matching column found:", field); - return false; - } - } - - //remove filter from array - userRemoveFilter(field, type, value){ - this.removeFilter(field, type, value); - this.refreshFilter(); - } - - //clear filters - userClearFilter(all){ - this.clearFilter(all); - this.refreshFilter(); - } - - //clear header filters - userClearHeaderFilter(){ - this.clearHeaderFilter(); - this.refreshFilter(); - } - - - //search for specific row components - searchRows(field, type, value){ - return this.search("rows", field, type, value); - } - - //search for specific data - searchData(field, type, value){ - return this.search("data", field, type, value); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnHeaderFilter(column){ - var def = column.definition; - - if(def.headerFilter){ - this.initializeColumn(column); - } - } - - //initialize column header filter - initializeColumn(column, value){ - var self = this, - field = column.getField(); - - //handle successfully value change - function success(value){ - var filterType = (column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text") || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterChangeCheck = "", - filterFunc; - - if(typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value){ - - column.modules.filter.prevSuccess = value; - - if(!column.modules.filter.emptyFunc(value)){ - column.modules.filter.value = value; - - switch(typeof column.definition.headerFilterFunc){ - case "string": - if(Filter.filters[column.definition.headerFilterFunc]){ - type = column.definition.headerFilterFunc; - filterFunc = function(data){ - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params); - }; - }else { - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function(data){ - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if(!filterFunc){ - switch(filterType){ - case "partial": - filterFunc = function(data){ - var colVal = column.getFieldValue(data); - - if(typeof colVal !== 'undefined' && colVal !== null){ - return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - }else { - return false; - } - }; - type = "like"; - break; - - default: - filterFunc = function(data){ - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = {value:value, func:filterFunc, type:type}; - }else { - delete self.headerFilters[field]; - } - - column.modules.filter.value = value; - - filterChangeCheck = JSON.stringify(self.headerFilters); - - if(self.prevHeaderFilterChangeCheck !== filterChangeCheck){ - self.prevHeaderFilterChangeCheck = filterChangeCheck; - - self.trackChanges(); - self.refreshFilter(); - } - } - - return true; - } - - column.modules.filter = { - success:success, - attrType:false, - tagType:false, - emptyFunc:false, - }; - - this.generateHeaderFilterElement(column); - } - - generateHeaderFilterElement(column, initialValue, reinitialize){ - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback; - - column.modules.filter.value = initialValue; - - //handle aborted edit - function cancel(){} - - function onRendered(callback){ - onRenderedCallback = callback; - } - - if(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){ - column.contentElement.removeChild(column.modules.filter.headerElement.parentNode); - } - - if(field){ - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){ - return !value && value !== 0; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch(typeof column.definition.headerFilter){ - case "string": - if(self.table.modules.edit.editors[column.definition.headerFilter]){ - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else { - console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor); - } - break; - - case "function": - editor = column.definition.headerFilter; - break; - - case "boolean": - if(column.modules.edit && column.modules.edit.editor){ - editor = column.modules.edit.editor; - }else { - if(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){ - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else { - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if(editor){ - - cellWrapper = { - getValue:function(){ - return typeof initialValue !== "undefined" ? initialValue : ""; - }, - getField:function(){ - return column.definition.field; - }, - getElement:function(){ - return filterElement; - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - }, - getType:() => { - return "header"; - }, - getRow:function(){ - return { - normalizeHeight:function(){ - - } - }; - } - }; - - params = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table, cellWrapper) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params); - - if(!editorElement){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if(!(editorElement instanceof Node)){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - self.langBind("headerFilters|columns|" + column.definition.field, function(value){ - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : (column.definition.headerFilterPlaceholder || self.langText("headerFilters|default"))); - }); - - //focus on element on click - editorElement.addEventListener("click", function(e){ - e.stopPropagation(); - editorElement.focus(); - }); - - editorElement.addEventListener("focus", (e) => { - var left = this.table.columnManager.contentsElement.scrollLeft; - - var headerPos = this.table.rowManager.element.scrollLeft; - - if(left !== headerPos){ - this.table.rowManager.scrollHorizontal(left); - this.table.columnManager.scrollHorizontal(left); - } - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function(e){ - if(typingTimer){ - clearTimeout(typingTimer); - } - - typingTimer = setTimeout(function(){ - success(editorElement.value); - },self.table.options.headerFilterLiveFilterDelay); - }; - - column.modules.filter.headerElement = editorElement; - column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "" ; - column.modules.filter.tagType = editorElement.tagName.toLowerCase(); - - if(column.definition.headerFilterLiveFilter !== false){ - - if ( - !( - column.definition.headerFilter === 'autocomplete' || - column.definition.headerFilter === 'tickCross' || - ((column.definition.editor === 'autocomplete' || - column.definition.editor === 'tickCross') && - column.definition.headerFilter === true) - ) - ) { - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - - //update number filtered columns on change - if(column.modules.filter.attrType == "number"){ - editorElement.addEventListener("change", function(e){ - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if(column.modules.filter.attrType == "text" && this.table.browser !== "ie"){ - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - - } - - //prevent input and select elements from propagating click to column sorters etc - if(column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea"){ - editorElement.addEventListener("mousedown",function(e){ - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - if(!reinitialize){ - self.headerFilterColumns.push(column); - } - - if(onRenderedCallback){ - onRenderedCallback(); - } - } - }else { - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } - } - - //hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) - hideHeaderFilterElements(){ - this.headerFilterColumns.forEach(function(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.style.display = 'none'; - } - }); - } - - //show all header filter elements (used to ensure correct column widths in "fitData" layout mode) - showHeaderFilterElements(){ - this.headerFilterColumns.forEach(function(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.style.display = ''; - } - }); - } - - //programmatically set focus of header filter - setHeaderFilterFocus(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.focus(); - }else { - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } - } - - //programmatically get value of header filter - getHeaderFilterValue(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - return column.modules.filter.value; - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - - //programmatically set value of header filter - setHeaderFilterValue(column, value){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, value, true); - column.modules.filter.success(value); - }else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - } - - reloadHeaderFilter(column){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, column.modules.filter.value, true); - }else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - } - - refreshFilter(){ - if(this.tableInitialized){ - if(this.table.options.filterMode === "remote"){ - this.reloadData(null, false, false); - }else { - this.refreshData(true); - } - } - - //TODO - Persist left position of row manager - // left = this.scrollLeft; - // this.scrollHorizontal(left); - } - - //check if the filters has changed since last use - trackChanges(){ - this.changed = true; - this.dispatch("filter-changed"); - } - - //check if the filters has changed since last use - hasChanged(){ - var changed = this.changed; - this.changed = false; - return changed; - } - - //set standard filters - setFilter(field, type, value, params){ - this.filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value, params:params}]; - } - - this.addFilter(field); - } - - //add filter to array - addFilter(field, type, value, params){ - var changed = false; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value, params:params}]; - } - - field.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - this.filterList.push(filter); - changed = true; - } - }); - - if(changed){ - this.trackChanges(); - } - } - - findFilter(filter){ - var column; - - if(Array.isArray(filter)){ - return this.findSubFilters(filter); - } - - var filterFunc = false; - - if(typeof filter.field == "function"){ - filterFunc = function(data){ - return filter.field(data, filter.type || {});// pass params to custom filter function - }; - }else { - - if(Filter.filters[filter.type]){ - - column = this.table.columnManager.getColumnByField(filter.field); - - if(column){ - filterFunc = function(data){ - return Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {}); - }; - }else { - filterFunc = function(data){ - return Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {}); - }; - } - - - }else { - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - filter.func = filterFunc; - - return filter.func ? filter : false; - } - - findSubFilters(filters){ - var output = []; - - filters.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - output.push(filter); - } - }); - - return output.length ? output : false; - } - - //get all filters - getFilters(all, ajax){ - var output = []; - - if(all){ - output = this.getHeaderFilters(); - } - - if(ajax){ - output.forEach(function(item){ - if(typeof item.type == "function"){ - item.type = "function"; - } - }); - } - - output = output.concat(this.filtersToArray(this.filterList, ajax)); - - return output; - } - - //filter to Object - filtersToArray(filterList, ajax){ - var output = []; - - filterList.forEach((filter) => { - var item; - - if(Array.isArray(filter)){ - output.push(this.filtersToArray(filter, ajax)); - }else { - item = {field:filter.field, type:filter.type, value:filter.value}; - - if(ajax){ - if(typeof item.type == "function"){ - item.type = "function"; - } - } - - output.push(item); - } - }); - - return output; - } - - //get all filters - getHeaderFilters(){ - var output = []; - - for(var key in this.headerFilters){ - output.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value}); - } - - return output; - } - - //remove filter from array - removeFilter(field, type, value){ - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach((filter) => { - var index = -1; - - if(typeof filter.field == "object"){ - index = this.filterList.findIndex((element) => { - return filter === element; - }); - }else { - index = this.filterList.findIndex((element) => { - return filter.field === element.field && filter.type === element.type && filter.value === element.value; - }); - } - - if(index > -1){ - this.filterList.splice(index, 1); - }else { - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - }); - - this.trackChanges(); - } - - //clear filters - clearFilter(all){ - this.filterList = []; - - if(all){ - this.clearHeaderFilter(); - } - - this.trackChanges(); - } - - //clear header filters - clearHeaderFilter(){ - this.headerFilters = {}; - this.prevHeaderFilterChangeCheck = "{}"; - - this.headerFilterColumns.forEach((column) => { - if(typeof column.modules.filter.value !== "undefined"){ - delete column.modules.filter.value; - } - column.modules.filter.prevSuccess = undefined; - this.reloadHeaderFilter(column); - }); - - this.trackChanges(); - } - - //search data and return matching rows - search (searchType, field, type, value){ - var activeRows = [], - filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach((row) => { - var match = true; - - filterList.forEach((filter) => { - if(!this.filterRecurse(filter, row.getData())){ - match = false; - } - }); - - if(match){ - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - - }); - - return activeRows; - } - - //filter row array - filter(rowList, filters){ - var activeRows = [], - activeRowComponents = []; - - if(this.subscribedExternal("dataFiltering")){ - this.dispatchExternal("dataFiltering", this.getFilters(true)); - } - - if(this.table.options.filterMode !== "remote" && (this.filterList.length || Object.keys(this.headerFilters).length)){ - - rowList.forEach((row) => { - if(this.filterRow(row)){ - activeRows.push(row); - } - }); - - }else { - activeRows = rowList.slice(0); - } - - if(this.subscribedExternal("dataFiltered")){ - - activeRows.forEach((row) => { - activeRowComponents.push(row.getComponent()); - }); - - this.dispatchExternal("dataFiltered", this.getFilters(true), activeRowComponents); - } - - return activeRows; - } - - //filter individual row - filterRow(row, filters){ - var match = true, - data = row.getData(); - - this.filterList.forEach((filter) => { - if(!this.filterRecurse(filter, data)){ - match = false; - } - }); - - - for(var field in this.headerFilters){ - if(!this.headerFilters[field].func(data)){ - match = false; - } - } - - return match; - } - - filterRecurse(filter, data){ - var match = false; - - if(Array.isArray(filter)){ - filter.forEach((subFilter) => { - if(this.filterRecurse(subFilter, data)){ - match = true; - } - }); - }else { - match = filter.func(data); - } - - return match; - } -} - -Filter.moduleName = "filter"; - -//load defaults -Filter.filters = defaultFilters; - -function plaintext(cell, formatterParams, onRendered){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); -} - -function html$1(cell, formatterParams, onRendered){ - return cell.getValue(); -} - -function textarea$1(cell, formatterParams, onRendered){ - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); -} - -function money(cell, formatterParams, onRendered){ - var floatVal = parseFloat(cell.getValue()), - sign = "", - number, integer, decimal, rgx, value; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var negativeSign = formatterParams.negativeSign || "-"; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if(isNaN(floatVal)){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - if(floatVal < 0){ - floatVal = Math.abs(floatVal); - sign = negativeSign; - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - if (formatterParams.thousand !== false) { - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)){ - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - } - - value = integer + decimal; - - if(sign === true){ - value = "(" + value + ")"; - return after ? value + symbol : symbol + value; - }else { - return after ? sign + value + symbol : sign + symbol + value; - } -} - -function link(cell, formatterParams, onRendered){ - var value = cell.getValue(), - urlPrefix = formatterParams.urlPrefix || "", - download = formatterParams.download, - label = value, - el = document.createElement("a"), - data; - - function labelTraverse(path, data){ - var item = path.shift(), - value = data[item]; - - if(path.length && typeof value === "object"){ - return labelTraverse(path, value); - } - - return value; - } - - if(formatterParams.labelField){ - data = cell.getData(); - label = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data); - } - - if(formatterParams.label){ - switch(typeof formatterParams.label){ - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if(label){ - if(formatterParams.urlField){ - data = cell.getData(); - - value = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data); - } - - if(formatterParams.url){ - switch(typeof formatterParams.url){ - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if(formatterParams.target){ - el.setAttribute("target", formatterParams.target); - } - - if(formatterParams.download){ - - if(typeof download == "function"){ - download = download(cell); - }else { - download = download === true ? "" : download; - } - - el.setAttribute("download", download); - } - - el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label)); - - return el; - }else { - return " "; - } -} - -function image(cell, formatterParams, onRendered){ - var el = document.createElement("img"), - src = cell.getValue(); - - if(formatterParams.urlPrefix){ - src = formatterParams.urlPrefix + cell.getValue(); - } - - if(formatterParams.urlSuffix){ - src = src + formatterParams.urlSuffix; - } - - el.setAttribute("src", src); - - switch(typeof formatterParams.height){ - case "number": - el.style.height = formatterParams.height + "px"; - break; - - case "string": - el.style.height = formatterParams.height; - break; - } - - switch(typeof formatterParams.width){ - case "number": - el.style.width = formatterParams.width + "px"; - break; - - case "string": - el.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function(){ - cell.getRow().normalizeHeight(); - }); - - return el; -} - -function tickCross$1(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - trueValueSet = Object.keys(formatterParams).includes("trueValue"), - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === "true" || value === "True" || value === 1 || value === "1")))){ - element.setAttribute("aria-checked", true); - return tick || ""; - }else { - if(empty && (value === "null" || value === "" || value === null || typeof value === "undefined")){ - element.setAttribute("aria-checked", "mixed"); - return ""; - }else { - element.setAttribute("aria-checked", false); - return cross || ""; - } - } -} - -function datetime$1(cell, formatterParams, onRendered){ - var DT = window.DateTime || luxon.DateTime; - var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss"; - var outputFormat = formatterParams.outputFormat || "dd/MM/yyyy HH:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - if(typeof DT != "undefined"){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else { - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - if(newDatetime.isValid){ - if(formatterParams.timezone){ - newDatetime = newDatetime.setZone(formatterParams.timezone); - } - - return newDatetime.toFormat(outputFormat); - }else { - if(invalid === true || !value){ - return value; - }else if(typeof invalid === "function"){ - return invalid(value); - }else { - return invalid; - } - } - }else { - console.error("Format Error - 'datetime' formatter is dependant on luxon.js"); - } -} - -function datetimediff (cell, formatterParams, onRendered) { - var DT = window.DateTime || luxon.DateTime; - var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : "days"; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : DT.now(); - var value = cell.getValue(); - - if(typeof DT != "undefined"){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else { - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - if (newDatetime.isValid){ - if(humanize){ - return newDatetime.diff(date, unit).toHuman() + (suffix ? " " + suffix : ""); - }else { - return parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? " " + suffix : ""); - } - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }else { - console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js"); - } -} - -function lookup (cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; -} - -function star$1(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5, - stars = document.createElement("span"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"), - starActive = '', - starInactive = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - star.setAttribute("width", "14"); - star.setAttribute("height", "14"); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - value = value && !isNaN(value) ? parseInt(value) : 0; - - value = Math.max(0, Math.min(value, maxStars)); - - for(var i=1;i<= maxStars;i++){ - var nextStar = star.cloneNode(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return stars; -} - -function traffic(cell, formatterParams, onRendered){ - var value = this.sanitizeHTML(cell.getValue()) || 0, - el = document.createElement("span"), - max = formatterParams && formatterParams.max ? formatterParams.max : 100, - min = formatterParams && formatterParams.min ? formatterParams.min : 0, - colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"], - color = "#666666", - percent, percentValue; - - if(isNaN(value) || typeof cell.getValue() === "undefined"){ - return; - } - - el.classList.add("tabulator-traffic-light"); - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set color - switch(typeof colors){ - case "string": - color = colors; - break; - case "function": - color = colors(value); - break; - case "object": - if(Array.isArray(colors)){ - var unit = 100 / colors.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, colors.length - 1); - index = Math.max(index, 0); - color = colors[index]; - break; - } - } - - el.style.backgroundColor = color; - - return el; -} - -function progress$1(cell, formatterParams = {}, onRendered){ //progress bar - var value = this.sanitizeHTML(cell.getValue()) || 0, - element = cell.getElement(), - max = formatterParams.max ? formatterParams.max : 100, - min = formatterParams.min ? formatterParams.min : 0, - legendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : "center", - percent, percentValue, color, legend, legendColor; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch(typeof formatterParams.color){ - case "string": - color = formatterParams.color; - break; - case "function": - color = formatterParams.color(value); - break; - case "object": - if(Array.isArray(formatterParams.color)){ - let unit = 100 / formatterParams.color.length; - let index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.color.length - 1); - index = Math.max(index, 0); - color = formatterParams.color[index]; - break; - } - default: - color = "#2DC214"; - } - - //generate legend - switch(typeof formatterParams.legend){ - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - switch(typeof formatterParams.legendColor){ - case "string": - legendColor = formatterParams.legendColor; - break; - case "function": - legendColor = formatterParams.legendColor(value); - break; - case "object": - if(Array.isArray(formatterParams.legendColor)){ - let unit = 100 / formatterParams.legendColor.length; - let index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.legendColor.length - 1); - index = Math.max(index, 0); - legendColor = formatterParams.legendColor[index]; - } - break; - default: - legendColor = "#000"; - } - - element.style.minWidth = "30px"; - element.style.position = "relative"; - - element.setAttribute("aria-label", percentValue); - - var barEl = document.createElement("div"); - barEl.style.display = "inline-block"; - barEl.style.width = percentValue + "%"; - barEl.style.backgroundColor = color; - barEl.style.height = "100%"; - - barEl.setAttribute('data-max', max); - barEl.setAttribute('data-min', min); - - var barContainer = document.createElement("div"); - barContainer.style.position = "relative"; - barContainer.style.width = "100%"; - barContainer.style.height = "100%"; - - if(legend){ - var legendEl = document.createElement("div"); - legendEl.style.position = "absolute"; - legendEl.style.top = 0; - legendEl.style.left = 0; - legendEl.style.textAlign = legendAlign; - legendEl.style.width = "100%"; - legendEl.style.color = legendColor; - legendEl.innerHTML = legend; - } - - onRendered(function(){ - - //handle custom element needed if formatter is to be included in printed/downloaded output - if(!(cell instanceof CellComponent)){ - var holderEl = document.createElement("div"); - holderEl.style.position = "absolute"; - holderEl.style.top = "4px"; - holderEl.style.bottom = "4px"; - holderEl.style.left = "4px"; - holderEl.style.right = "4px"; - - element.appendChild(holderEl); - - element = holderEl; - } - - element.appendChild(barContainer); - barContainer.appendChild(barEl); - - if(legend){ - barContainer.appendChild(legendEl); - } - }); - - return ""; -} - -function color(cell, formatterParams, onRendered){ - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; -} - -function buttonTick(cell, formatterParams, onRendered){ - return ''; -} - -function buttonCross(cell, formatterParams, onRendered){ - return ''; -} - -function rownum(cell, formatterParams, onRendered){ - var content = document.createElement("span"); - var row = cell.getRow(); - var table = cell.getTable(); - - row.watchPosition((position) => { - if (formatterParams.relativeToPage) { - position += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1); - } - content.innerText = position; - }); - - return content; -} - -function handle(cell, formatterParams, onRendered){ - cell.getElement().classList.add("tabulator-row-handle"); - return "
    "; -} - -function responsiveCollapse(cell, formatterParams, onRendered){ - var el = document.createElement("div"), - config = cell.getRow()._row.modules.responsiveLayout; - - el.classList.add("tabulator-responsive-collapse-toggle"); - - el.innerHTML = ` - - - - - - -`; - - cell.getElement().classList.add("tabulator-row-handle"); - - function toggleList(isOpen){ - var collapseEl = config.element; - - config.open = isOpen; - - if(collapseEl){ - - if(config.open){ - el.classList.add("open"); - collapseEl.style.display = ''; - }else { - el.classList.remove("open"); - collapseEl.style.display = 'none'; - } - } - } - - el.addEventListener("click", function(e){ - e.stopImmediatePropagation(); - toggleList(!config.open); - cell.getTable().rowManager.adjustTableSize(); - }); - - toggleList(config.open); - - return el; -} - -function rowSelection(cell, formatterParams, onRendered){ - var checkbox = document.createElement("input"); - var blocked = false; - - checkbox.type = 'checkbox'; - - checkbox.setAttribute("aria-label", "Select Row"); - - if(this.table.modExists("selectRow", true)){ - - checkbox.addEventListener("click", (e) => { - e.stopPropagation(); - }); - - if(typeof cell.getRow == 'function'){ - var row = cell.getRow(); - - if(row instanceof RowComponent){ - - checkbox.addEventListener("change", (e) => { - if(this.table.options.selectableRowsRangeMode === "click"){ - if(!blocked){ - row.toggleSelect(); - }else { - blocked = false; - } - }else { - row.toggleSelect(); - } - }); - - if(this.table.options.selectableRowsRangeMode === "click"){ - checkbox.addEventListener("click", (e) => { - blocked = true; - this.table.modules.selectRow.handleComplexRowClick(row._row, e); - }); - } - - checkbox.checked = row.isSelected && row.isSelected(); - this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox); - }else { - checkbox = ""; - } - }else { - checkbox.addEventListener("change", (e) => { - if(this.table.modules.selectRow.selectedRows.length){ - this.table.deselectRow(); - }else { - this.table.selectRow(formatterParams.rowRange); - } - }); - - this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox); - } - } - - return checkbox; -} - -var defaultFormatters = { - plaintext:plaintext, - html:html$1, - textarea:textarea$1, - money:money, - link:link, - image:image, - tickCross:tickCross$1, - datetime:datetime$1, - datetimediff:datetimediff, - lookup:lookup, - star:star$1, - traffic:traffic, - progress:progress$1, - color:color, - buttonTick:buttonTick, - buttonCross:buttonCross, - rownum:rownum, - handle:handle, - responsiveCollapse:responsiveCollapse, - rowSelection:rowSelection, -}; - -class Format extends Module{ - - constructor(table){ - super(table); - - this.registerColumnOption("formatter"); - this.registerColumnOption("formatterParams"); - - this.registerColumnOption("formatterPrint"); - this.registerColumnOption("formatterPrintParams"); - this.registerColumnOption("formatterClipboard"); - this.registerColumnOption("formatterClipboardParams"); - this.registerColumnOption("formatterHtmlOutput"); - this.registerColumnOption("formatterHtmlOutputParams"); - this.registerColumnOption("titleFormatter"); - this.registerColumnOption("titleFormatterParams"); - } - - initialize(){ - this.subscribe("cell-format", this.formatValue.bind(this)); - this.subscribe("cell-rendered", this.cellRendered.bind(this)); - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("column-format", this.formatHeader.bind(this)); - } - - //initialize column formatter - initializeColumn(column){ - column.modules.format = this.lookupFormatter(column, ""); - - if(typeof column.definition.formatterPrint !== "undefined"){ - column.modules.format.print = this.lookupFormatter(column, "Print"); - } - - if(typeof column.definition.formatterClipboard !== "undefined"){ - column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard"); - } - - if(typeof column.definition.formatterHtmlOutput !== "undefined"){ - column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput"); - } - } - - lookupFormatter(column, type){ - var config = {params:column.definition["formatter" + type + "Params"] || {}}, - formatter = column.definition["formatter" + type]; - - //set column formatter - switch(typeof formatter){ - case "string": - if(Format.formatters[formatter]){ - config.formatter = Format.formatters[formatter]; - }else { - console.warn("Formatter Error - No such formatter found: ", formatter); - config.formatter = Format.formatters.plaintext; - } - break; - - case "function": - config.formatter = formatter; - break; - - default: - config.formatter = Format.formatters.plaintext; - break; - } - - return config; - } - - cellRendered(cell){ - if(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){ - cell.modules.format.renderedCallback(); - cell.modules.format.rendered = true; - } - } - - //return a formatted value for a column header - formatHeader(column, title, el){ - var formatter, params, onRendered, mockCell; - - if(column.definition.titleFormatter){ - formatter = this.getFormatter(column.definition.titleFormatter); - - onRendered = (callback) => { - column.titleFormatterRendered = callback; - }; - - mockCell = { - getValue:function(){ - return title; - }, - getElement:function(){ - return el; - }, - getType:function(){ - return "header"; - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - } - }; - - params = column.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - return formatter.call(this, mockCell, params, onRendered); - }else { - return title; - } - } - - - //return a formatted value for a cell - formatValue(cell){ - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback){ - if(!cell.modules.format){ - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; - } - - return cell.column.modules.format.formatter.call(this, component, params, onRendered); - } - - formatExportValue(cell, type){ - var formatter = cell.column.modules.format[type], - params; - - if(formatter){ - params = typeof formatter.params === "function" ? formatter.params(cell.getComponent()) : formatter.params; - - function onRendered(callback){ - if(!cell.modules.format){ - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; - } - - return formatter.formatter.call(this, cell.getComponent(), params, onRendered); - - }else { - return this.formatValue(cell); - } - } - - sanitizeHTML(value){ - if(value){ - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=/]/g, function (s) { - return entityMap[s]; - }); - }else { - return value; - } - } - - emptyToSpace(value){ - return value === null || typeof value === "undefined" || value === "" ? " " : value; - } - - //get formatter for cell - getFormatter(formatter){ - switch(typeof formatter){ - case "string": - if(Format.formatters[formatter]){ - formatter = Format.formatters[formatter]; - }else { - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = Format.formatters.plaintext; - } - break; - - case "function": - //Custom formatter Function, do nothing - break; - - default: - formatter = Format.formatters.plaintext; - break; - } - - return formatter; - } -} - -Format.moduleName = "format"; - -//load defaults -Format.formatters = defaultFormatters; - -class FrozenColumns extends Module{ - - constructor(table){ - super(table); - - this.leftColumns = []; - this.rightColumns = []; - this.initializationMode = "left"; - this.active = false; - this.blocked = true; - - this.registerColumnOption("frozen"); - } - - //reset initial state - reset(){ - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.active = false; - } - - initialize(){ - this.subscribe("cell-layout", this.layoutCell.bind(this)); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-width", this.layout.bind(this)); - this.subscribe("row-layout-after", this.layoutRow.bind(this)); - this.subscribe("table-layout", this.layout.bind(this)); - this.subscribe("columns-loading", this.reset.bind(this)); - - this.subscribe("column-add", this.reinitializeColumns.bind(this)); - this.subscribe("column-deleted", this.reinitializeColumns.bind(this)); - this.subscribe("column-hide", this.reinitializeColumns.bind(this)); - this.subscribe("column-show", this.reinitializeColumns.bind(this)); - this.subscribe("columns-loaded", this.reinitializeColumns.bind(this)); - - this.subscribe("table-redraw", this.layout.bind(this)); - this.subscribe("layout-refreshing", this.blockLayout.bind(this)); - this.subscribe("layout-refreshed", this.unblockLayout.bind(this)); - this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this)); - } - - blockLayout(){ - this.blocked = true; - } - - unblockLayout(){ - this.blocked = false; - } - - layoutCell(cell){ - this.layoutElement(cell.element, cell.column); - } - - reinitializeColumns(){ - this.reset(); - - this.table.columnManager.columnsByIndex.forEach((column) => { - this.initializeColumn(column); - }); - - this.layout(); - } - - //initialize specific column - initializeColumn(column){ - var config = {margin:0, edge:false}; - - if(!column.isGroup){ - if(this.frozenCheck(column)){ - config.position = this.initializationMode; - - if(this.initializationMode == "left"){ - this.leftColumns.push(column); - }else { - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - }else { - this.initializationMode = "right"; - } - } - } - - frozenCheck(column){ - if(column.parent.isGroup && column.definition.frozen){ - console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"); - } - - if(column.parent.isGroup){ - return this.frozenCheck(column.parent); - }else { - return column.definition.frozen; - } - } - - //layout calculation rows - layoutCalcRows(){ - if(this.table.modExists("columnCalcs")){ - if(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){ - this.layoutRow(this.table.modules.columnCalcs.topRow); - } - - if(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){ - this.layoutRow(this.table.modules.columnCalcs.botRow); - } - - if(this.table.modExists("groupRows")){ - this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()); - } - } - } - - layoutGroupCalcs(groups){ - groups.forEach((group) => { - if(group.calcs.top){ - this.layoutRow(group.calcs.top); - } - - if(group.calcs.bottom){ - this.layoutRow(group.calcs.bottom); - } - - if(group.groupList && group.groupList.length){ - this.layoutGroupCalcs(group.groupList); - } - }); - } - - //calculate column positions and layout headers - layoutColumnPosition(allCells){ - var leftParents = []; - - var leftMargin = 0; - var rightMargin = 0; - - this.leftColumns.forEach((column, i) => { - column.modules.frozen.marginValue = leftMargin; - column.modules.frozen.margin = column.modules.frozen.marginValue + "px"; - - if(column.visible){ - leftMargin += column.getWidth(); - } - - if(i == this.leftColumns.length - 1){ - column.modules.frozen.edge = true; - }else { - column.modules.frozen.edge = false; - } - - if(column.parent.isGroup){ - var parentEl = this.getColGroupParentElement(column); - if(!leftParents.includes(parentEl)){ - this.layoutElement(parentEl, column); - leftParents.push(parentEl); - } - - parentEl.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left"); - parentEl.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right"); - }else { - this.layoutElement(column.getElement(), column); - } - - if(allCells){ - column.cells.forEach((cell) => { - this.layoutElement(cell.getElement(true), column); - }); - } - }); - - this.rightColumns.forEach((column, i) => { - - column.modules.frozen.marginValue = rightMargin; - column.modules.frozen.margin = column.modules.frozen.marginValue + "px"; - - if(column.visible){ - rightMargin += column.getWidth(); - } - - if(i == this.rightColumns.length - 1){ - column.modules.frozen.edge = true; - }else { - column.modules.frozen.edge = false; - } - - if(column.parent.isGroup){ - this.layoutElement(this.getColGroupParentElement(column), column); - }else { - this.layoutElement(column.getElement(), column); - } - - if(allCells){ - column.cells.forEach((cell) => { - this.layoutElement(cell.getElement(true), column); - }); - } - }); - } - - getColGroupParentElement(column){ - return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement(); - } - - //layout columns appropriately - layout(){ - if(this.active && !this.blocked){ - //calculate left columns - this.layoutColumnPosition(); - - this.reinitializeRows(); - - this.layoutCalcRows(); - } - } - - reinitializeRows(){ - var visibleRows = this.table.rowManager.getVisibleRows(true); - var otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row)); - - otherRows.forEach((row) =>{ - row.deinitialize(); - }); - - visibleRows.forEach((row) =>{ - if(row.type === "row"){ - this.layoutRow(row); - } - }); - } - - layoutRow(row){ - if(this.table.options.layout === "fitDataFill" && this.rightColumns.length){ - this.table.rowManager.getTableElement().style.minWidth = "calc(100% - " + this.rightMargin + ")"; - } - - this.leftColumns.forEach((column) => { - var cell = row.getCell(column); - - if(cell){ - this.layoutElement(cell.getElement(true), column); - } - }); - - this.rightColumns.forEach((column) => { - var cell = row.getCell(column); - - if(cell){ - this.layoutElement(cell.getElement(true), column); - } - }); - } - - layoutElement(element, column){ - var position; - - if(column.modules.frozen && element){ - element.style.position = "sticky"; - - if(this.table.rtl){ - position = column.modules.frozen.position === "left" ? "right" : "left"; - }else { - position = column.modules.frozen.position; - } - - element.style[position] = column.modules.frozen.margin; - - element.classList.add("tabulator-frozen"); - - element.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left"); - element.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right"); - } - } - - adjustForScrollbar(width){ - if(this.rightColumns.length){ - this.table.columnManager.getContentsElement().style.width = "calc(100% - " + width + "px)"; - } - } - - _calcSpace(columns, index){ - var width = 0; - - for (let i = 0; i < index; i++){ - if(columns[i].visible){ - width += columns[i].getWidth(); - } - } - - return width; - } -} - -FrozenColumns.moduleName = "frozenColumns"; - -class FrozenRows extends Module{ - - constructor(table){ - super(table); - - this.topElement = document.createElement("div"); - this.rows = []; - - //register component functions - this.registerComponentFunction("row", "freeze", this.freezeRow.bind(this)); - this.registerComponentFunction("row", "unfreeze", this.unfreezeRow.bind(this)); - this.registerComponentFunction("row", "isFrozen", this.isRowFrozen.bind(this)); - - //register table options - this.registerTableOption("frozenRowsField", "id"); //field to choose frozen rows by - this.registerTableOption("frozenRows", false); //holder for frozen row identifiers - } - - initialize(){ - var fragment = document.createDocumentFragment(); - - this.rows = []; - - this.topElement.classList.add("tabulator-frozen-rows-holder"); - - fragment.appendChild(document.createElement("br")); - fragment.appendChild(this.topElement); - - // this.table.columnManager.element.append(this.topElement); - this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling); - - this.subscribe("row-deleting", this.detachRow.bind(this)); - this.subscribe("rows-visible", this.visibleRows.bind(this)); - - this.registerDisplayHandler(this.getRows.bind(this), 10); - - if(this.table.options.frozenRows){ - this.subscribe("data-processed", this.initializeRows.bind(this)); - this.subscribe("row-added", this.initializeRow.bind(this)); - this.subscribe("table-redrawing", this.resizeHolderWidth.bind(this)); - this.subscribe("column-resized", this.resizeHolderWidth.bind(this)); - this.subscribe("column-show", this.resizeHolderWidth.bind(this)); - this.subscribe("column-hide", this.resizeHolderWidth.bind(this)); - } - - this.resizeHolderWidth(); - } - - resizeHolderWidth(){ - this.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + "px"; - } - - initializeRows(){ - this.table.rowManager.getRows().forEach((row) => { - this.initializeRow(row); - }); - } - - initializeRow(row){ - var frozenRows = this.table.options.frozenRows, - rowType = typeof frozenRows; - - if(rowType === "number"){ - if(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){ - this.freezeRow(row); - } - }else if(rowType === "function"){ - if(frozenRows.call(this.table, row.getComponent())){ - this.freezeRow(row); - } - }else if(Array.isArray(frozenRows)){ - if(frozenRows.includes(row.data[this.options("frozenRowsField")])){ - this.freezeRow(row); - } - } - } - - isRowFrozen(row){ - var index = this.rows.indexOf(row); - return index > -1; - } - - isFrozen(){ - return !!this.rows.length; - } - - visibleRows(viewable, rows){ - this.rows.forEach((row) => { - rows.push(row); - }); - - return rows; - } - - //filter frozen rows out of display data - getRows(rows){ - var output = rows.slice(0); - - this.rows.forEach(function(row){ - var index = output.indexOf(row); - - if(index > -1){ - output.splice(index, 1); - } - }); - - return output; - } - - freezeRow(row){ - if(!row.modules.frozen){ - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - - this.rows.push(row); - - this.refreshData(false, "display"); - - this.table.rowManager.adjustTableSize(); - - this.styleRows(); - - }else { - console.warn("Freeze Error - Row is already frozen"); - } - } - - unfreezeRow(row){ - if(row.modules.frozen){ - - row.modules.frozen = false; - - this.detachRow(row); - - this.table.rowManager.adjustTableSize(); - - this.refreshData(false, "display"); - - if(this.rows.length){ - this.styleRows(); - } - - }else { - console.warn("Freeze Error - Row is already unfrozen"); - } - } - - detachRow(row){ - var index = this.rows.indexOf(row); - - if(index > -1){ - var rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - - this.rows.splice(index, 1); - } - } - - styleRows(row){ - this.rows.forEach((row, i) => { - this.table.rowManager.styleRow(row, i); - }); - } -} - -FrozenRows.moduleName = "frozenRows"; - -//public group object -class GroupComponent { - constructor (group){ - this._group = group; - this.type = "GroupComponent"; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else { - return target._group.groupManager.table.componentFunctionBinder.handle("group", target._group, name); - } - } - }); - } - - getKey(){ - return this._group.key; - } - - getField(){ - return this._group.field; - } - - getElement(){ - return this._group.element; - } - - getRows(){ - return this._group.getRows(true); - } - - getSubGroups(){ - return this._group.getSubGroups(true); - } - - getParentGroup(){ - return this._group.parent ? this._group.parent.getComponent() : false; - } - - isVisible(){ - return this._group.visible; - } - - show(){ - this._group.show(); - } - - hide(){ - this._group.hide(); - } - - toggle(){ - this._group.toggleVisibility(); - } - - scrollTo(position, ifVisible){ - return this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible); - } - - _getSelf(){ - return this._group; - } - - getTable(){ - return this._group.groupManager.table; - } -} - -//Group functions -class Group{ - - constructor(groupManager, parent, level, key, field, generator, oldGroup){ - this.groupManager = groupManager; - this.parent = parent; - this.key = key; - this.level = level; - this.field = field; - this.hasSubGroups = level < (groupManager.groupIDLookups.length - 1); - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.element = false; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - this.arrowElement = false; - - this.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]); - - this.component = null; - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); - } - - wipe(elementsOnly){ - if(!elementsOnly){ - if(this.groupList.length){ - this.groupList.forEach(function(group){ - group.wipe(); - }); - }else { - this.rows.forEach((row) => { - if(row.modules){ - delete row.modules.group; - } - }); - } - } - - this.element = false; - this.arrowElement = false; - this.elementContents = false; - } - - createElements(){ - var arrow = document.createElement("div"); - arrow.classList.add("tabulator-arrow"); - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-group-toggle"); - this.arrowElement.appendChild(arrow); - - //setup movable rows - if(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")){ - this.groupManager.table.modules.moveRow.initializeGroupHeader(this); - } - } - - createValueGroups(){ - var level = this.level + 1; - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - this.groupManager.allowedValues[level].forEach((value) => { - this._createGroup(value, level); - }); - } - } - - addBindings(){ - var toggleElement; - - if(this.groupManager.table.options.groupToggleElement){ - toggleElement = this.groupManager.table.options.groupToggleElement == "arrow" ? this.arrowElement : this.element; - - toggleElement.addEventListener("click", (e) => { - if(this.groupManager.table.options.groupToggleElement === "arrow"){ - e.stopPropagation(); - e.stopImmediatePropagation(); - } - - //allow click event to propagate before toggling visibility - setTimeout(() => { - this.toggleVisibility(); - }); - }); - } - } - - _createGroup(groupID, level){ - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); - } - - _addRowToGroup(row){ - - var level = this.level + 1; - - if(this.hasSubGroups){ - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } - }else { - if(!this.groups[groupKey]){ - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } - } - - _addRow(row){ - this.rows.push(row); - row.modules.group = this; - } - - insertRow(row, to, after){ - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if(toIndex > -1){ - if(after){ - this.rows.splice(toIndex+1, 0, row); - }else { - this.rows.splice(toIndex, 0, row); - } - }else { - if(after){ - this.rows.push(row); - }else { - this.rows.unshift(row); - } - } - - row.modules.group = this; - - // this.generateGroupHeaderContents(); - - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - - this.groupManager.updateGroupRows(true); - } - - scrollHeader(left){ - if(this.arrowElement){ - this.arrowElement.style.marginLeft = left; - - this.groupList.forEach(function(child){ - child.scrollHeader(left); - }); - } - } - - getRowIndex(row){} - - //update row data to match grouping constraints - conformRowData(data){ - if(this.field){ - data[this.field] = this.key; - }else { - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if(this.parent){ - data = this.parent.conformRowData(data); - } - - return data; - } - - removeRow(row){ - var index = this.rows.indexOf(row); - var el = row.getElement(); - - if(index > -1){ - this.rows.splice(index, 1); - } - - if(!this.groupManager.table.options.groupValues && !this.rows.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else { - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - - }else { - - if(el.parentNode){ - el.parentNode.removeChild(el); - } - - if(!this.groupManager.blockRedraw){ - this.generateGroupHeaderContents(); - - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } - - } - } - - removeGroup(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - - if(!this.groupList.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else { - this.groupManager.removeGroup(this); - } - } - } - } - - getHeadersAndRows(){ - var output = []; - - output.push(this); - - this._visSet(); - - - if(this.calcs.top){ - this.calcs.top.detachElement(); - this.calcs.top.deleteCells(); - } - - if(this.calcs.bottom){ - this.calcs.bottom.detachElement(); - this.calcs.bottom.deleteCells(); - } - - - - if(this.visible){ - if(this.groupList.length){ - this.groupList.forEach(function(group){ - output = output.concat(group.getHeadersAndRows()); - }); - - }else { - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - output = output.concat(this.rows); - - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - }else { - if(!this.groupList.length && this.groupManager.table.options.columnCalcs != "table"){ - - if(this.groupManager.table.modExists("columnCalcs")){ - if(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - if(this.groupManager.table.options.groupClosedShowCalcs){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - } - - if(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - if(this.groupManager.table.options.groupClosedShowCalcs){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - - } - - return output; - } - - getData(visible, transform){ - var output = []; - - this._visSet(); - - if(!visible || (visible && this.visible)){ - this.rows.forEach((row) => { - output.push(row.getData(transform || "data")); - }); - } - - return output; - } - - getRowCount(){ - var count = 0; - - if(this.groupList.length){ - this.groupList.forEach((group) => { - count += group.getRowCount(); - }); - }else { - count = this.rows.length; - } - return count; - } - - - toggleVisibility(){ - if(this.visible){ - this.hide(); - }else { - this.show(); - } - } - - hide(){ - this.visible = false; - - if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){ - - this.element.classList.remove("tabulator-group-visible"); - - if(this.groupList.length){ - this.groupList.forEach((group) => { - - var rows = group.getHeadersAndRows(); - - rows.forEach((row) => { - row.detachElement(); - }); - }); - - }else { - this.rows.forEach((row) => { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - } - - this.groupManager.updateGroupRows(true); - - }else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), false); - } - - show(){ - this.visible = true; - - if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){ - - this.element.classList.add("tabulator-group-visible"); - - var prev = this.generateElement(); - - if(this.groupList.length){ - this.groupList.forEach((group) => { - var rows = group.getHeadersAndRows(); - - rows.forEach((row) => { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - - }else { - this.rows.forEach((row) => { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - } - - this.groupManager.updateGroupRows(true); - }else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), true); - } - - _visSet(){ - var data = []; - - if(typeof this.visible == "function"){ - - this.rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent()); - } - } - - getRowGroup(row){ - var match = false; - if(this.groupList.length){ - this.groupList.forEach(function(group){ - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - }else { - if(this.rows.find(function(item){ - return item === row; - })){ - match = this; - } - } - - return match; - } - - getSubGroups(component){ - var output = []; - - this.groupList.forEach(function(child){ - output.push(component ? child.getComponent() : child); - }); - - return output; - } - - getRows(component, includeChildren){ - var output = []; - - if(includeChildren && this.groupList.length){ - this.groupList.forEach((group) => { - output = output.concat(group.getRows(component, includeChildren)); - }); - }else { - this.rows.forEach(function(row){ - output.push(component ? row.getComponent() : row); - }); - } - - return output; - } - - generateGroupHeaderContents(){ - var data = []; - - var rows = this.getRows(false, true); - - rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(typeof this.elementContents === "string"){ - this.element.innerHTML = this.elementContents; - }else { - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); - } - - getPath(path = []) { - path.unshift(this.key); - if(this.parent) { - this.parent.getPath(path); - } - return path; - } - - ////////////// Standard Row Functions ////////////// - - getElement(){ - return this.elementContents ? this.element : this.generateElement(); - } - - generateElement(){ - this.addBindings = false; - - this._visSet(); - - if(this.visible){ - this.element.classList.add("tabulator-group-visible"); - }else { - this.element.classList.remove("tabulator-group-visible"); - } - - for(var i = 0; i < this.element.childNodes.length; ++i){ - this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]); - } - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; - } - - detachElement(){ - if (this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - //normalize the height of elements in the row - normalizeHeight(){ - this.setHeight(this.element.clientHeight); - } - - initialize(force){ - if(!this.initialized || force){ - this.normalizeHeight(); - this.initialized = true; - } - } - - reinitialize(){ - this.initialized = false; - this.height = 0; - - if(Helpers.elVisible(this.element)){ - this.initialize(true); - } - } - - setHeight(height){ - if(this.height != height){ - this.height = height; - this.outerHeight = this.element.offsetHeight; - } - } - - //return rows outer height - getHeight(){ - return this.outerHeight; - } - - getGroup(){ - return this; - } - - reinitializeHeight(){} - - calcHeight(){} - - setCellHeight(){} - - clearCellHeight(){} - - deinitializeHeight(){} - - rendered(){} - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new GroupComponent(this); - } - - return this.component; - } -} - -class GroupRows extends Module{ - - constructor(table){ - super(table); - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function(){return false;}]; //starting state of group - this.headerGenerator = [function(){return "";}]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - - this.displayHandler = this.getRows.bind(this); - - this.blockRedraw = false; - - //register table options - this.registerTableOption("groupBy", false); //enable table grouping and set field to group by - this.registerTableOption("groupStartOpen", true); //starting state of group - this.registerTableOption("groupValues", false); - this.registerTableOption("groupUpdateOnCellEdit", false); - this.registerTableOption("groupHeader", false); //header generation function - this.registerTableOption("groupHeaderPrint", null); - this.registerTableOption("groupHeaderClipboard", null); - this.registerTableOption("groupHeaderHtmlOutput", null); - this.registerTableOption("groupHeaderDownload", null); - this.registerTableOption("groupToggleElement", "arrow"); - this.registerTableOption("groupClosedShowCalcs", false); - - //register table functions - this.registerTableFunction("setGroupBy", this.setGroupBy.bind(this)); - this.registerTableFunction("setGroupValues", this.setGroupValues.bind(this)); - this.registerTableFunction("setGroupStartOpen", this.setGroupStartOpen.bind(this)); - this.registerTableFunction("setGroupHeader", this.setGroupHeader.bind(this)); - this.registerTableFunction("getGroups", this.userGetGroups.bind(this)); - this.registerTableFunction("getGroupedData", this.userGetGroupedData.bind(this)); - - //register component functions - this.registerComponentFunction("row", "getGroup", this.rowGetGroup.bind(this)); - } - - //initialize group configuration - initialize(){ - this.subscribe("table-destroy", this._blockRedrawing.bind(this)); - this.subscribe("rows-wipe", this._blockRedrawing.bind(this)); - this.subscribe("rows-wiped", this._restore_redrawing.bind(this)); - - if(this.table.options.groupBy){ - if(this.table.options.groupUpdateOnCellEdit){ - this.subscribe("cell-value-updated", this.cellUpdated.bind(this)); - this.subscribe("row-data-changed", this.reassignRowToGroup.bind(this), 0); - } - - this.subscribe("table-built", this.configureGroupSetup.bind(this)); - - this.subscribe("row-deleting", this.rowDeleting.bind(this)); - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("scroll-horizontal", this.scrollHeaders.bind(this)); - this.subscribe("rows-wipe", this.wipe.bind(this)); - this.subscribe("rows-added", this.rowsUpdated.bind(this)); - this.subscribe("row-moving", this.rowMoving.bind(this)); - this.subscribe("row-adding-index", this.rowAddingIndex.bind(this)); - - this.subscribe("rows-sample", this.rowSample.bind(this)); - - this.subscribe("render-virtual-fill", this.virtualRenderFill.bind(this)); - - this.registerDisplayHandler(this.displayHandler, 20); - - this.initialized = true; - } - } - - _blockRedrawing(){ - this.blockRedraw = true; - } - - _restore_redrawing(){ - this.blockRedraw = false; - } - - configureGroupSetup(){ - if(this.table.options.groupBy){ - var groupBy = this.table.options.groupBy, - startOpen = this.table.options.groupStartOpen, - groupHeader = this.table.options.groupHeader; - - this.allowedValues = this.table.options.groupValues; - - if(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){ - console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"); - } - - this.headerGenerator = [function(){return "";}]; - this.startOpen = [function(){return false;}]; //starting state of group - - this.langBind("groups|item", (langValue, lang) => { - this.headerGenerator[0] = (value, count, data) => { //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + ((count === 1) ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if(groupBy){ - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both"){ - this.table.modules.columnCalcs.removeCalcs(); - } - }else { - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group"){ - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach((col) => { - if(col.definition.topCalc){ - this.table.modules.columnCalcs.initializeTopRow(); - } - - if(col.definition.bottomCalc){ - this.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - if(!Array.isArray(groupBy)){ - groupBy = [groupBy]; - } - - groupBy.forEach((group, i) => { - var lookupFunc, column; - - if(typeof group == "function"){ - lookupFunc = group; - }else { - column = this.table.columnManager.getColumnByField(group); - - if(column){ - lookupFunc = function(data){ - return column.getFieldValue(data); - }; - }else { - lookupFunc = function(data){ - return data[group]; - }; - } - } - - this.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func:lookupFunc, - values:this.allowedValues ? this.allowedValues[i] : false, - }); - }); - - if(startOpen){ - if(!Array.isArray(startOpen)){ - startOpen = [startOpen]; - } - - startOpen.forEach((level) => { - }); - - this.startOpen = startOpen; - } - - if(groupHeader){ - this.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - }else { - this.groupList = []; - this.groups = {}; - } - } - - rowSample(rows, prevValue){ - if(this.table.options.groupBy){ - var group = this.getGroups(false)[0]; - - prevValue.push(group.getRows(false)[0]); - } - - return prevValue; - } - - virtualRenderFill(){ - var el = this.table.rowManager.tableElement; - var rows = this.table.rowManager.getVisibleRows(); - - if(this.table.options.groupBy){ - rows = rows.filter((row) => { - return row.type !== "group"; - }); - - el.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + "px" : ""; - }else { - return rows; - } - } - - rowAddingIndex(row, index, top){ - if(this.table.options.groupBy){ - this.assignRowToGroup(row); - - var groupRows = row.modules.group.rows; - - if(groupRows.length > 1){ - if(!index || (index && groupRows.indexOf(index) == -1)){ - if(top){ - if(groupRows[0] !== row){ - index = groupRows[0]; - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - }else { - if(groupRows[groupRows.length -1] !== row){ - index = groupRows[groupRows.length -1]; - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - } - }else { - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - } - - return index; - } - } - - trackChanges(){ - this.dispatch("group-changed"); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - setGroupBy(groups){ - this.table.options.groupBy = groups; - - if(!this.initialized){ - this.initialize(); - } - - this.configureGroupSetup(); - - if(!groups && this.table.modExists("columnCalcs") && this.table.options.columnCalcs === true){ - this.table.modules.columnCalcs.reinitializeCalcs(); - } - - this.refreshData(); - - this.trackChanges(); - } - - setGroupValues(groupValues){ - this.table.options.groupValues = groupValues; - this.configureGroupSetup(); - this.refreshData(); - - this.trackChanges(); - } - - setGroupStartOpen(values){ - this.table.options.groupStartOpen = values; - this.configureGroupSetup(); - - if(this.table.options.groupBy){ - this.refreshData(); - - this.trackChanges(); - }else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } - - setGroupHeader(values){ - this.table.options.groupHeader = values; - this.configureGroupSetup(); - - if(this.table.options.groupBy){ - this.refreshData(); - - this.trackChanges(); - }else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } - - userGetGroups(values){ - return this.getGroups(true); - } - - // get grouped table data in the same format as getData() - userGetGroupedData(){ - return this.table.options.groupBy ? this.getGroupedData() : this.getData(); - } - - - /////////////////////////////////////// - ///////// Component Functions ///////// - /////////////////////////////////////// - - rowGetGroup(row){ - return row.modules.group ? row.modules.group.getComponent() : false; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - rowMoving(from, to, after){ - if(this.table.options.groupBy){ - if(!after && to instanceof Group){ - to = this.table.rowManager.prevDisplayRow(from) || to; - } - - var toGroup = to instanceof Group ? to : to.modules.group; - var fromGroup = from instanceof Group ? from : from.modules.group; - - if(toGroup === fromGroup){ - this.table.rowManager.moveRowInArray(toGroup.rows, from, to, after); - }else { - if(fromGroup){ - fromGroup.removeRow(from); - } - - toGroup.insertRow(from, to, after); - } - } - } - - - rowDeleting(row){ - //remove from group - if(this.table.options.groupBy && row.modules.group){ - row.modules.group.removeRow(row); - } - } - - rowsUpdated(row){ - if(this.table.options.groupBy){ - this.updateGroupRows(true); - } - } - - cellUpdated(cell){ - if(this.table.options.groupBy){ - this.reassignRowToGroup(cell.row); - } - } - - //return appropriate rows with group headers - getRows(rows){ - if(this.table.options.groupBy && this.groupIDLookups.length){ - - this.dispatchExternal("dataGrouping"); - - this.generateGroups(rows); - - if(this.subscribedExternal("dataGrouped")){ - this.dispatchExternal("dataGrouped", this.getGroups(true)); - } - - return this.updateGroupRows(); - - }else { - return rows.slice(0); - } - } - - getGroups(component){ - var groupComponents = []; - - this.groupList.forEach(function(group){ - groupComponents.push(component ? group.getComponent() : group); - }); - - return groupComponents; - } - - getChildGroups(group){ - var groupComponents = []; - - if(!group){ - group = this; - } - - group.groupList.forEach((child) => { - if(child.groupList.length){ - groupComponents = groupComponents.concat(this.getChildGroups(child)); - }else { - groupComponents.push(child); - } - }); - - return groupComponents; - } - - wipe(){ - if(this.table.options.groupBy){ - this.groupList.forEach(function(group){ - group.wipe(); - }); - - this.groupList = []; - this.groups = {}; - } - } - - pullGroupListData(groupList) { - var groupListData = []; - - groupList.forEach((group) => { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = this.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } - - else { - groupHeader.level = group.level; - groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group); - groupHeader.rowCount = group.getRows().length; - - groupListData.push(groupHeader); - - group.getRows().forEach((row) => { - groupListData.push(row.getData("data")); - }); - } - }); - - return groupListData; - } - - getGroupedData(){ - - return this.pullGroupListData(this.groupList); - } - - getRowGroup(row){ - var match = false; - - if(this.options("dataTree")){ - row = this.table.modules.dataTree.getTreeParentRoot(row); - } - - this.groupList.forEach((group) => { - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - - return match; - } - - countGroups(){ - return this.groupList.length; - } - - generateGroups(rows){ - var oldGroups = this.groups; - - this.groups = {}; - this.groupList = []; - - if(this.allowedValues && this.allowedValues[0]){ - this.allowedValues[0].forEach((value) => { - this.createGroup(value, 0, oldGroups); - }); - - rows.forEach((row) => { - this.assignRowToExistingGroup(row, oldGroups); - }); - }else { - rows.forEach((row) => { - this.assignRowToGroup(row, oldGroups); - }); - } - - Object.values(oldGroups).forEach((group) => { - group.wipe(true); - }); - } - - - createGroup(groupID, level, oldGroups){ - var groupKey = level + "_" + groupID, - group; - - oldGroups = oldGroups || []; - - group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); - } - - assignRowToExistingGroup(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } - } - - assignRowToGroup(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - newGroupNeeded = !this.groups["0_" + groupID]; - - if(newGroupNeeded){ - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; - } - - reassignRowToGroup(row){ - if(row.type === "row"){ - var oldRowGroup = row.modules.group, - oldGroupPath = oldRowGroup.getPath(), - newGroupPath = this.getExpectedPath(row), - samePath; - - // figure out if new group path is the same as old group path - samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => { - return element === newGroupPath[index]; - }); - - // refresh if they new path and old path aren't the same (aka the row's groupings have changed) - if(!samePath) { - oldRowGroup.removeRow(row); - this.assignRowToGroup(row, this.groups); - this.refreshData(true); - } - } - } - - getExpectedPath(row) { - var groupPath = [], rowData = row.getData(); - - this.groupIDLookups.forEach((groupId) => { - groupPath.push(groupId.func(rowData)); - }); - - return groupPath; - } - - updateGroupRows(force){ - var output = []; - - if(!this.blockRedraw){ - this.groupList.forEach((group) => { - output = output.concat(group.getHeadersAndRows()); - }); - - if(force){ - this.refreshData(true); - } - } - - return output; - } - - scrollHeaders(left){ - if(this.table.options.groupBy){ - if(this.table.options.renderHorizontal === "virtual"){ - left -= this.table.columnManager.renderer.vDomPadLeft; - } - - left = left + "px"; - - this.groupList.forEach((group) => { - group.scrollHeader(left); - }); - } - } - - removeGroup(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - } - } - - checkBasicModeGroupHeaderWidth(){ - var element = this.table.rowManager.tableElement, - onlyGroupHeaders = true; - - this.table.rowManager.getDisplayRows().forEach((row, index) =>{ - this.table.rowManager.styleRow(row, index); - element.appendChild(row.getElement()); - row.initialize(true); - - if(row.type !== "group"){ - onlyGroupHeaders = false; - } - }); - - if(onlyGroupHeaders){ - element.style.minWidth = this.table.columnManager.getWidth() + "px"; - }else { - element.style.minWidth = ""; - } - } - -} - -GroupRows.moduleName = "groupRows"; - -var defaultUndoers = { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.oldValue); - action.component.cellRendered(); - }, - - rowAdd: function(action){ - action.component.deleteActual(); - - this.table.rowManager.checkPlaceholder(); - }, - - rowDelete: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - } - - this._rebindRow(action.component, newRow); - - this.table.rowManager.checkPlaceholder(); - }, - - rowMove: function(action){ - var after = (action.data.posFrom - action.data.posTo) > 0; - - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after); - - this.table.rowManager.regenerateRowPositions(); - this.table.rowManager.reRenderInPosition(); - }, -}; - -var defaultRedoers = { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.newValue); - action.component.cellRendered(); - }, - - rowAdd: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - } - - this._rebindRow(action.component, newRow); - - this.table.rowManager.checkPlaceholder(); - }, - - rowDelete:function(action){ - action.component.deleteActual(); - - this.table.rowManager.checkPlaceholder(); - }, - - rowMove: function(action){ - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after); - - this.table.rowManager.regenerateRowPositions(); - this.table.rowManager.reRenderInPosition(); - }, -}; - -class History extends Module{ - - constructor(table){ - super(table); - - this.history = []; - this.index = -1; - - this.registerTableOption("history", false); //enable edit history - } - - initialize(){ - if(this.table.options.history){ - this.subscribe("cell-value-updated", this.cellUpdated.bind(this)); - this.subscribe("cell-delete", this.clearComponentHistory.bind(this)); - this.subscribe("row-delete", this.rowDeleted.bind(this)); - this.subscribe("rows-wipe", this.clear.bind(this)); - this.subscribe("row-added", this.rowAdded.bind(this)); - this.subscribe("row-move", this.rowMoved.bind(this)); - } - - this.registerTableFunction("undo", this.undo.bind(this)); - this.registerTableFunction("redo", this.redo.bind(this)); - this.registerTableFunction("getHistoryUndoSize", this.getHistoryUndoSize.bind(this)); - this.registerTableFunction("getHistoryRedoSize", this.getHistoryRedoSize.bind(this)); - this.registerTableFunction("clearHistory", this.clear.bind(this)); - } - - rowMoved(from, to, after){ - this.action("rowMove", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after}); - } - - rowAdded(row, data, pos, index){ - this.action("rowAdd", row, {data:data, pos:pos, index:index}); - } - - rowDeleted(row){ - var index, rows; - - if(this.table.options.groupBy){ - - rows = row.getComponent().getGroup()._getSelf().rows; - index = rows.indexOf(row); - - if(index){ - index = rows[index-1]; - } - }else { - index = row.table.rowManager.getRowIndex(row); - - if(index){ - index = row.table.rowManager.rows[index-1]; - } - } - - this.action("rowDelete", row, {data:row.getData(), pos:!index, index:index}); - } - - cellUpdated(cell){ - this.action("cellEdit", cell, {oldValue:cell.oldValue, newValue:cell.value}); - } - - clear(){ - this.history = []; - this.index = -1; - } - - action(type, component, data){ - this.history = this.history.slice(0, this.index + 1); - - this.history.push({ - type:type, - component:component, - data:data, - }); - - this.index ++; - } - - getHistoryUndoSize(){ - return this.index + 1; - } - - getHistoryRedoSize(){ - return this.history.length - (this.index + 1); - } - - clearComponentHistory(component){ - var index = this.history.findIndex(function(item){ - return item.component === component; - }); - - if(index > -1){ - this.history.splice(index, 1); - if(index <= this.index){ - this.index--; - } - - this.clearComponentHistory(component); - } - } - - undo(){ - if(this.index > -1){ - let action = this.history[this.index]; - - History.undoers[action.type].call(this, action); - - this.index--; - - this.dispatchExternal("historyUndo", action.type, action.component.getComponent(), action.data); - - return true; - }else { - console.warn(this.options("history") ? "History Undo Error - No more history to undo" : "History module not enabled"); - return false; - } - } - - redo(){ - if(this.history.length-1 > this.index){ - - this.index++; - - let action = this.history[this.index]; - - History.redoers[action.type].call(this, action); - - this.dispatchExternal("historyRedo", action.type, action.component.getComponent(), action.data); - - return true; - }else { - console.warn(this.options("history") ? "History Redo Error - No more history to redo" : "History module not enabled"); - return false; - } - } - - //rebind rows to new element after deletion - _rebindRow(oldRow, newRow){ - this.history.forEach(function(action){ - if(action.component instanceof Row){ - if(action.component === oldRow){ - action.component = newRow; - } - }else if(action.component instanceof Cell){ - if(action.component.row === oldRow){ - var field = action.component.column.getField(); - - if(field){ - action.component = newRow.getCell(field); - } - - } - } - }); - } -} - -History.moduleName = "history"; - -//load defaults -History.undoers = defaultUndoers; -History.redoers = defaultRedoers; - -class HtmlTableImport extends Module{ - - constructor(table){ - super(table); - - this.fieldIndex = []; - this.hasIndex = false; - } - - initialize(){ - this.tableElementCheck(); - } - - tableElementCheck(){ - if(this.table.originalElement && this.table.originalElement.tagName === "TABLE"){ - if(this.table.originalElement.childNodes.length){ - this.parseTable(); - }else { - console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."); - } - } - } - - parseTable(){ - var element = this.table.originalElement, - options = this.table.options, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = []; - - this.hasIndex = false; - - this.dispatchExternal("htmlImporting"); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for Tabulator inline options - this._extractOptions(element, options); - - if(headers.length){ - this._extractHeaders(headers, rows); - }else { - this._generateBlankHeaders(headers, rows); - } - - //iterate through table rows and build data set - for(var index = 0; index < rows.length; index++){ - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the don't exist in table - if(!this.hasIndex){ - item[options.index] = index; - } - - for(var i = 0; i < cells.length; i++){ - var cell = cells[i]; - if(typeof this.fieldIndex[i] !== "undefined"){ - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - options.data = data; - - this.dispatchExternal("htmlImported"); - } - - //extract tabulator attribute options - _extractOptions(element, options, defaultOptions){ - var attributes = element.attributes; - var optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options); - var optionsList = {}; - - optionsArr.forEach((item) => { - optionsList[item.toLowerCase()] = item; - }); - - for(var index in attributes){ - var attrib = attributes[index]; - var name; - - if(attrib && typeof attrib == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0){ - name = attrib.name.replace("tabulator-", ""); - - if(typeof optionsList[name] !== "undefined"){ - options[optionsList[name]] = this._attribValue(attrib.value); - } - } - } - } - - //get value of attribute - _attribValue(value){ - if(value === "true"){ - return true; - } - - if(value === "false"){ - return false; - } - - return value; - } - - //find column if it has already been defined - _findCol(title){ - var match = this.table.options.columns.find((column) => { - return column.title === title; - }); - - return match || false; - } - - //extract column from headers - _extractHeaders(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width; - - if(col){ - exists = true; - }else { - col = {title:header.textContent.trim()}; - } - - if(!col.field) { - col.field = header.textContent.trim().toLowerCase().replaceAll(" ", "_"); - } - - width = header.getAttribute("width"); - - if(width && !col.width) { - col.width = width; - } - - //check for Tabulator inline options - this._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults); - - this.fieldIndex[index] = col.field; - - if(col.field == this.table.options.index){ - this.hasIndex = true; - } - - if(!exists){ - this.table.options.columns.push(col); - } - - } - } - - //generate blank headers - _generateBlankHeaders(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - col = {title:"", field:"col" + index}; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if(width){ - col.width = width; - } - - this.table.options.columns.push(col); - } - } -} - -HtmlTableImport.moduleName = "htmlTableImport"; - -function csvImporter(input){ - var data = [], - row = 0, - col = 0, - inQuote = false; - - //Iterate over each character - for (let index = 0; index < input.length; index++) { - let char = input[index], - nextChar = input[index+1]; - - //Initialize empty row - if(!data[row]){ - data[row] = []; - } - - //Initialize empty column - if(!data[row][col]){ - data[row][col] = ""; - } - - //Handle quotation mark inside string - if (char == '"' && inQuote && nextChar == '"') { - data[row][col] += char; - index++; - continue; - } - - //Begin / End Quote - if (char == '"') { - inQuote = !inQuote; - continue; - } - - //Next column (if not in quote) - if (char == ',' && !inQuote) { - col++; - continue; - } - - //New row if new line and not in quote (CRLF) - if (char == '\r' && nextChar == '\n' && !inQuote) { - col = 0; - row++; - index++; - continue; - } - - //New row if new line and not in quote (CR or LF) - if ((char == '\r' || char == '\n') && !inQuote) { - col = 0; - row++; - continue; - } - - //Normal Character, append to column - data[row][col] += char; - } - - return data; -} - -function json$1(input){ - try { - return JSON.parse(input); - } catch(e) { - console.warn("JSON Import Error - File contents is invalid JSON", e); - return Promise.reject(); - } -} - -function arrayImporter(input){ - return input; -} - -var defaultImporters = { - csv:csvImporter, - json:json$1, - array:arrayImporter, -}; - -class Import extends Module{ - - constructor(table){ - super(table); - - this.registerTableOption("importFormat"); - this.registerTableOption("importReader", "text"); - } - - initialize(){ - this.registerTableFunction("import", this.importFromFile.bind(this)); - - if(this.table.options.importFormat){ - this.subscribe("data-loading", this.loadDataCheck.bind(this), 10); - this.subscribe("data-load", this.loadData.bind(this), 10); - } - } - - loadDataCheck(data){ - return this.table.options.importFormat && (typeof data === "string" || (Array.isArray(data) && data.length && Array.isArray(data))); - } - - loadData(data, params, config, silent, previousData){ - return this.importData(this.lookupImporter(), data) - .then(this.structureData.bind(this)) - .catch((err) => { - console.error("Import Error:", err || "Unable to import data"); - return Promise.reject(err); - }); - } - - lookupImporter(importFormat){ - var importer; - - if(!importFormat){ - importFormat = this.table.options.importFormat; - } - - if(typeof importFormat === "string"){ - importer = Import.importers[importFormat]; - }else { - importer = importFormat; - } - - if(!importer){ - console.error("Import Error - Importer not found:", importFormat); - } - - return importer; - } - - importFromFile(importFormat, extension){ - var importer = this.lookupImporter(importFormat); - - if(importer){ - return this.pickFile(extension) - .then(this.importData.bind(this, importer)) - .then(this.structureData.bind(this)) - .then(this.setData.bind(this)) - .catch((err) => { - console.error("Import Error:", err || "Unable to import file"); - return Promise.reject(err); - }); - } - } - - pickFile(extensions){ - return new Promise((resolve, reject) => { - var input = document.createElement("input"); - input.type = "file"; - input.accept = extensions; - - input.addEventListener("change", (e) => { - var file = input.files[0], - reader = new FileReader(); - - switch(this.table.options.importReader){ - case "buffer": - reader.readAsArrayBuffer(file); - break; - - case "binary": - reader.readAsBinaryString(file); - break; - - case "url": - reader.readAsDataURL(file); - break; - - case "text": - default: - reader.readAsText(file); - } - - reader.onload = (e) => { - resolve(reader.result); - }; - - reader.onerror = (e) => { - console.warn("File Load Error - Unable to read file"); - reject(); - }; - }); - - input.click(); - }); - } - - importData(importer, fileContents){ - var data = importer.call(this.table, fileContents); - - if(data instanceof Promise){ - return data; - }else { - return data ? Promise.resolve(data) : Promise.reject(); - } - } - - structureData(parsedData){ - var data = []; - - if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){ - if(this.table.options.autoColumns){ - data = this.structureArrayToObject(parsedData); - }else { - data = this.structureArrayToColumns(parsedData); - } - - return data; - }else { - return parsedData; - } - } - - structureArrayToObject(parsedData){ - var columns = parsedData.shift(); - - var data = parsedData.map((values) => { - var row = {}; - - columns.forEach((key, i) => { - row[key] = values[i]; - }); - - return row; - }); - - return data; - } - - structureArrayToColumns(parsedData){ - var data = [], - columns = this.table.getColumns(); - - //remove first row if it is the column names - if(columns[0] && parsedData[0][0]){ - if(columns[0].getDefinition().title === parsedData[0][0]){ - parsedData.shift(); - } - } - - //convert row arrays to objects - parsedData.forEach((rowData) => { - var row = {}; - - rowData.forEach((value, index) => { - var column = columns[index]; - - if(column){ - row[column.getField()] = value; - } - }); - - data.push(row); - }); - - return data; - } - - setData(data){ - return this.table.setData(data); - } -} - -Import.moduleName = "import"; - -//load defaults -Import.importers = defaultImporters; - -class Interaction extends Module{ - - constructor(table){ - super(table); - - this.eventMap = { - //row events - rowClick:"row-click", - rowDblClick:"row-dblclick", - rowContext:"row-contextmenu", - rowMouseEnter:"row-mouseenter", - rowMouseLeave:"row-mouseleave", - rowMouseOver:"row-mouseover", - rowMouseOut:"row-mouseout", - rowMouseMove:"row-mousemove", - rowMouseDown:"row-mousedown", - rowMouseUp:"row-mouseup", - rowTap:"row", - rowDblTap:"row", - rowTapHold:"row", - - //cell events - cellClick:"cell-click", - cellDblClick:"cell-dblclick", - cellContext:"cell-contextmenu", - cellMouseEnter:"cell-mouseenter", - cellMouseLeave:"cell-mouseleave", - cellMouseOver:"cell-mouseover", - cellMouseOut:"cell-mouseout", - cellMouseMove:"cell-mousemove", - cellMouseDown:"cell-mousedown", - cellMouseUp:"cell-mouseup", - cellTap:"cell", - cellDblTap:"cell", - cellTapHold:"cell", - - //column header events - headerClick:"column-click", - headerDblClick:"column-dblclick", - headerContext:"column-contextmenu", - headerMouseEnter:"column-mouseenter", - headerMouseLeave:"column-mouseleave", - headerMouseOver:"column-mouseover", - headerMouseOut:"column-mouseout", - headerMouseMove:"column-mousemove", - headerMouseDown:"column-mousedown", - headerMouseUp:"column-mouseup", - headerTap:"column", - headerDblTap:"column", - headerTapHold:"column", - - //group header - groupClick:"group-click", - groupDblClick:"group-dblclick", - groupContext:"group-contextmenu", - groupMouseEnter:"group-mouseenter", - groupMouseLeave:"group-mouseleave", - groupMouseOver:"group-mouseover", - groupMouseOut:"group-mouseout", - groupMouseMove:"group-mousemove", - groupMouseDown:"group-mousedown", - groupMouseUp:"group-mouseup", - groupTap:"group", - groupDblTap:"group", - groupTapHold:"group", - }; - - this.subscribers = {}; - - this.touchSubscribers = {}; - - this.columnSubscribers = {}; - - this.touchWatchers = { - row:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - cell:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - column:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - group:{ - tap:null, - tapDbl:null, - tapHold:null, - } - }; - - this.registerColumnOption("headerClick"); - this.registerColumnOption("headerDblClick"); - this.registerColumnOption("headerContext"); - this.registerColumnOption("headerMouseEnter"); - this.registerColumnOption("headerMouseLeave"); - this.registerColumnOption("headerMouseOver"); - this.registerColumnOption("headerMouseOut"); - this.registerColumnOption("headerMouseMove"); - this.registerColumnOption("headerMouseDown"); - this.registerColumnOption("headerMouseUp"); - this.registerColumnOption("headerTap"); - this.registerColumnOption("headerDblTap"); - this.registerColumnOption("headerTapHold"); - - this.registerColumnOption("cellClick"); - this.registerColumnOption("cellDblClick"); - this.registerColumnOption("cellContext"); - this.registerColumnOption("cellMouseEnter"); - this.registerColumnOption("cellMouseLeave"); - this.registerColumnOption("cellMouseOver"); - this.registerColumnOption("cellMouseOut"); - this.registerColumnOption("cellMouseMove"); - this.registerColumnOption("cellMouseDown"); - this.registerColumnOption("cellMouseUp"); - this.registerColumnOption("cellTap"); - this.registerColumnOption("cellDblTap"); - this.registerColumnOption("cellTapHold"); - - } - - initialize(){ - this.initializeExternalEvents(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("cell-dblclick", this.cellContentsSelectionFixer.bind(this)); - this.subscribe("scroll-horizontal", this.clearTouchWatchers.bind(this)); - this.subscribe("scroll-vertical", this.clearTouchWatchers.bind(this)); - } - - clearTouchWatchers(){ - var types = Object.values(this.touchWatchers); - - types.forEach((type) => { - for(let key in type){ - type[key] = null; - } - }); - } - - cellContentsSelectionFixer(e, cell){ - var range; - - if(this.table.modExists("edit")){ - if (this.table.modules.edit.currentCell === cell){ - return; //prevent instant selection of editor content - } - } - - e.preventDefault(); - - try{ - if (document.selection) { // IE - range = document.body.createTextRange(); - range.moveToElementText(cell.getElement()); - range.select(); - } else if (window.getSelection) { - range = document.createRange(); - range.selectNode(cell.getElement()); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - } - }catch(e){} - } - - initializeExternalEvents(){ - for(let key in this.eventMap){ - this.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key)); - } - } - - subscriptionChanged(key, added){ - if(added){ - if(!this.subscribers[key]){ - if(this.eventMap[key].includes("-")){ - this.subscribers[key] = this.handle.bind(this, key); - this.subscribe(this.eventMap[key], this.subscribers[key]); - }else { - this.subscribeTouchEvents(key); - } - } - }else { - if(this.eventMap[key].includes("-")){ - if(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){ - this.unsubscribe(this.eventMap[key], this.subscribers[key]); - delete this.subscribers[key]; - } - }else { - this.unsubscribeTouchEvents(key); - } - } - } - - - subscribeTouchEvents(key){ - var type = this.eventMap[key]; - - if(!this.touchSubscribers[type + "-touchstart"]){ - this.touchSubscribers[type + "-touchstart"] = this.handleTouch.bind(this, type, "start"); - this.touchSubscribers[type + "-touchend"] = this.handleTouch.bind(this, type, "end"); - - this.subscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); - this.subscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); - } - - this.subscribers[key] = true; - } - - unsubscribeTouchEvents(key){ - var noTouch = true, - type = this.eventMap[key]; - - if(this.subscribers[key] && !this.subscribedExternal(key)){ - delete this.subscribers[key]; - - for(let i in this.eventMap){ - if(this.eventMap[i] === type){ - if(this.subscribers[i]){ - noTouch = false; - } - } - } - - if(noTouch){ - this.unsubscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); - this.unsubscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); - - delete this.touchSubscribers[type + "-touchstart"]; - delete this.touchSubscribers[type + "-touchend"]; - } - } - } - - initializeColumn(column){ - var def = column.definition; - - for(let key in this.eventMap){ - if(def[key]){ - this.subscriptionChanged(key, true); - - if(!this.columnSubscribers[key]){ - this.columnSubscribers[key] = []; - } - - this.columnSubscribers[key].push(column); - } - } - } - - handle(action, e, component){ - this.dispatchEvent(action, e, component); - } - - handleTouch(type, action, e, component){ - var watchers = this.touchWatchers[type]; - - if(type === "column"){ - type = "header"; - } - - switch(action){ - case "start": - watchers.tap = true; - - clearTimeout(watchers.tapHold); - - watchers.tapHold = setTimeout(() => { - clearTimeout(watchers.tapHold); - watchers.tapHold = null; - - watchers.tap = null; - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - - this.dispatchEvent(type + "TapHold", e, component); - }, 1000); - break; - - case "end": - if(watchers.tap){ - - watchers.tap = null; - this.dispatchEvent(type + "Tap", e, component); - } - - if(watchers.tapDbl){ - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - - this.dispatchEvent(type + "DblTap", e, component); - }else { - watchers.tapDbl = setTimeout(() => { - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - }, 300); - } - - clearTimeout(watchers.tapHold); - watchers.tapHold = null; - break; - } - } - - dispatchEvent(action, e, component){ - var componentObj = component.getComponent(), - callback; - - if(this.columnSubscribers[action]){ - - if(component instanceof Cell){ - callback = component.column.definition[action]; - }else if(component instanceof Column){ - callback = component.definition[action]; - } - - if(callback){ - callback(e, componentObj); - } - } - - this.dispatchExternal(action, e, componentObj); - } -} - -Interaction.moduleName = "interaction"; - -var defaultBindings = { - navPrev:"shift + 9", - navNext:9, - navUp:38, - navDown:40, - navLeft:37, - navRight:39, - scrollPageUp:33, - scrollPageDown:34, - scrollToStart:36, - scrollToEnd:35, - undo:["ctrl + 90", "meta + 90"], - redo:["ctrl + 89", "meta + 89"], - copyToClipboard:["ctrl + 67", "meta + 67"], - - rangeJumpUp:["ctrl + 38", "meta + 38"], - rangeJumpDown:["ctrl + 40", "meta + 40"], - rangeJumpLeft:["ctrl + 37", "meta + 37"], - rangeJumpRight:["ctrl + 39", "meta + 39"], - rangeExpandUp:"shift + 38", - rangeExpandDown:"shift + 40", - rangeExpandLeft:"shift + 37", - rangeExpandRight:"shift + 39", - rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"], - rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"], - rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"], - rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"], -}; - -var defaultActions = { - keyBlock:function(e){ - e.stopPropagation(); - e.preventDefault(); - }, - scrollPageUp:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop - rowManager.element.clientHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos >= 0){ - rowManager.element.scrollTop = newPos; - }else { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - } - - this.table.element.focus(); - }, - scrollPageDown:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop + rowManager.element.clientHeight, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos <= scrollMax){ - rowManager.element.scrollTop = newPos; - }else { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - - }, - scrollToStart:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev:function(e){ - this.dispatch("keybinding-nav-prev", e); - }, - - navNext:function(e){ - this.dispatch("keybinding-nav-next", e); - }, - - navLeft:function(e){ - this.dispatch("keybinding-nav-left", e); - }, - - navRight:function(e){ - this.dispatch("keybinding-nav-right", e); - }, - - navUp:function(e){ - this.dispatch("keybinding-nav-up", e); - }, - - navDown:function(e){ - this.dispatch("keybinding-nav-down", e); - }, - - rangeJumpLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", true, false); - }, - rangeJumpRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", true, false); - }, - rangeJumpUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", true, false); - }, - rangeJumpDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", true, false); - }, - rangeExpandLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", false, true); - }, - rangeExpandRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", false, true); - }, - rangeExpandUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", false, true); - }, - rangeExpandDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", false, true); - }, - rangeExpandJumpLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", true, true); - }, - rangeExpandJumpRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", true, true); - }, - rangeExpandJumpUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", true, true); - }, - rangeExpandJumpDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", true, true); - }, - - undo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard:function(e){ - if(!this.table.modules.edit.currentCell){ - if(this.table.modExists("clipboard", true)){ - this.table.modules.clipboard.copy(false, true); - } - } - }, -}; - -class Keybindings extends Module{ - - constructor(table){ - super(table); - - this.watchKeys = null; - this.pressedKeys = null; - this.keyupBinding = false; - this.keydownBinding = false; - - this.registerTableOption("keybindings", {}); //array for keybindings - this.registerTableOption("tabEndNewRow", false); //create new row when tab to end of table - } - - initialize(){ - var bindings = this.table.options.keybindings, - mergedBindings = {}; - - this.watchKeys = {}; - this.pressedKeys = []; - - if(bindings !== false){ - Object.assign(mergedBindings, Keybindings.bindings); - Object.assign(mergedBindings, bindings); - - this.mapBindings(mergedBindings); - this.bindEvents(); - } - - this.subscribe("table-destroy", this.clearBindings.bind(this)); - } - - mapBindings(bindings){ - for(let key in bindings){ - if(Keybindings.actions[key]){ - if(bindings[key]){ - if(typeof bindings[key] !== "object"){ - bindings[key] = [bindings[key]]; - } - - bindings[key].forEach((binding) => { - var bindingList = Array.isArray(binding) ? binding : [binding]; - - bindingList.forEach((item) => { - this.mapBinding(key, item); - }); - }); - } - }else { - console.warn("Key Binding Error - no such action:", key); - } - } - } - - mapBinding(action, symbolsList){ - var binding = { - action: Keybindings.actions[action], - keys: [], - ctrl: false, - shift: false, - meta: false, - }; - - var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+"); - - symbols.forEach((symbol) => { - switch(symbol){ - case "ctrl": - binding.ctrl = true; - break; - - case "shift": - binding.shift = true; - break; - - case "meta": - binding.meta = true; - break; - - default: - symbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol); - binding.keys.push(symbol); - - if(!this.watchKeys[symbol]){ - this.watchKeys[symbol] = []; - } - - this.watchKeys[symbol].push(binding); - } - }); - } - - bindEvents(){ - var self = this; - - this.keyupBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - self.pressedKeys.push(code); - - bindings.forEach(function(binding){ - self.checkBinding(e, binding); - }); - } - }; - - this.keydownBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - var index = self.pressedKeys.indexOf(code); - - if(index > -1){ - self.pressedKeys.splice(index, 1); - } - } - }; - - this.table.element.addEventListener("keydown", this.keyupBinding); - - this.table.element.addEventListener("keyup", this.keydownBinding); - } - - clearBindings(){ - if(this.keyupBinding){ - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if(this.keydownBinding){ - this.table.element.removeEventListener("keyup", this.keydownBinding); - } - } - - checkBinding(e, binding){ - var match = true; - - if(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){ - binding.keys.forEach((key) => { - var index = this.pressedKeys.indexOf(key); - - if(index == -1){ - match = false; - } - }); - - if(match){ - binding.action.call(this, e); - } - - return true; - } - - return false; - } -} - -Keybindings.moduleName = "keybindings"; - -//load defaults -Keybindings.bindings = defaultBindings; -Keybindings.actions = defaultActions; - -class Menu extends Module{ - - constructor(table){ - super(table); - - this.menuContainer = null; - this.nestedMenuBlock = false; - - this.currentComponent = null; - this.rootPopup = null; - - this.columnSubscribers = {}; - - this.registerTableOption("menuContainer", undefined); //deprecated - - this.registerTableOption("rowContextMenu", false); - this.registerTableOption("rowClickMenu", false); - this.registerTableOption("rowDblClickMenu", false); - this.registerTableOption("groupContextMenu", false); - this.registerTableOption("groupClickMenu", false); - this.registerTableOption("groupDblClickMenu", false); - - this.registerColumnOption("headerContextMenu"); - this.registerColumnOption("headerClickMenu"); - this.registerColumnOption("headerDblClickMenu"); - this.registerColumnOption("headerMenu"); - this.registerColumnOption("headerMenuIcon"); - this.registerColumnOption("contextMenu"); - this.registerColumnOption("clickMenu"); - this.registerColumnOption("dblClickMenu"); - - } - - initialize(){ - this.deprecatedOptionsCheck(); - this.initializeRowWatchers(); - this.initializeGroupWatchers(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - deprecatedOptionsCheck(){ - if(!this.deprecationCheck("menuContainer", "popupContainer")){ - this.table.options.popupContainer = this.table.options.menuContainer; - } - } - - initializeRowWatchers(){ - if(this.table.options.rowContextMenu){ - this.subscribe("row-contextmenu", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu)); - this.table.on("rowTapHold", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu)); - } - - if(this.table.options.rowClickMenu){ - this.subscribe("row-click", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu)); - } - - if(this.table.options.rowDblClickMenu){ - this.subscribe("row-dblclick", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu)); - } - } - - initializeGroupWatchers(){ - if(this.table.options.groupContextMenu){ - this.subscribe("group-contextmenu", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu)); - this.table.on("groupTapHold", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu)); - } - - if(this.table.options.groupClickMenu){ - this.subscribe("group-click", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu)); - } - - if(this.table.options.groupDblClickMenu){ - this.subscribe("group-dblclick", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu)); - } - } - - initializeColumn(column){ - var def = column.definition; - - //handle column events - if(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){ - this.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, "headerContextMenu"); - this.subscribe("column-contextmenu", this.columnSubscribers.headerContextMenu); - this.table.on("headerTapHold", this.loadMenuTableColumnEvent.bind(this, "headerContextMenu")); - } - - if(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){ - this.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, "headerClickMenu"); - this.subscribe("column-click", this.columnSubscribers.headerClickMenu); - } - - if(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){ - this.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, "headerDblClickMenu"); - this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickMenu); - } - - if(def.headerMenu){ - this.initializeColumnHeaderMenu(column); - } - - //handle cell events - if(def.contextMenu && !this.columnSubscribers.contextMenu){ - this.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, "contextMenu"); - this.subscribe("cell-contextmenu", this.columnSubscribers.contextMenu); - this.table.on("cellTapHold", this.loadMenuTableCellEvent.bind(this, "contextMenu")); - } - - if(def.clickMenu && !this.columnSubscribers.clickMenu){ - this.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, "clickMenu"); - this.subscribe("cell-click", this.columnSubscribers.clickMenu); - } - - if(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){ - this.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, "dblClickMenu"); - this.subscribe("cell-dblclick", this.columnSubscribers.dblClickMenu); - } - } - - initializeColumnHeaderMenu(column){ - var icon = column.definition.headerMenuIcon, - headerMenuEl; - - headerMenuEl = document.createElement("span"); - headerMenuEl.classList.add("tabulator-header-popup-button"); - - if(icon){ - if(typeof icon === "function"){ - icon = icon(column.getComponent()); - } - - if(icon instanceof HTMLElement){ - headerMenuEl.appendChild(icon); - }else { - headerMenuEl.innerHTML = icon; - } - }else { - headerMenuEl.innerHTML = "⋮"; - } - - headerMenuEl.addEventListener("click", (e) => { - e.stopPropagation(); - e.preventDefault(); - - this.loadMenuEvent(column.definition.headerMenu, e, column); - }); - - column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild); - } - - loadMenuTableCellEvent(option, e, cell){ - if(cell._cell){ - cell = cell._cell; - } - - if(cell.column.definition[option]){ - this.loadMenuEvent(cell.column.definition[option], e, cell); - } - } - - loadMenuTableColumnEvent(option, e, column){ - if(column._column){ - column = column._column; - } - - if(column.definition[option]){ - this.loadMenuEvent(column.definition[option], e, column); - } - } - - loadMenuEvent(menu, e, component){ - if(component._group){ - component = component._group; - }else if(component._row){ - component = component._row; - } - - menu = typeof menu == "function" ? menu.call(this.table, e, component.getComponent()) : menu; - - this.loadMenu(e, component, menu); - } - - loadMenu(e, component, menu, parentEl, parentPopup){ - var touch = !(e instanceof MouseEvent), - menuEl = document.createElement("div"), - popup; - - menuEl.classList.add("tabulator-menu"); - - if(!touch){ - e.preventDefault(); - } - - //abort if no menu set - if(!menu || !menu.length){ - return; - } - - if(!parentEl){ - if(this.nestedMenuBlock){ - //abort if child menu already open - if(this.rootPopup){ - return; - } - }else { - this.nestedMenuBlock = setTimeout(() => { - this.nestedMenuBlock = false; - }, 100); - } - - if(this.rootPopup){ - this.rootPopup.hide(); - } - - this.rootPopup = popup = this.popup(menuEl); - - }else { - popup = parentPopup.child(menuEl); - } - - menu.forEach((item) => { - var itemEl = document.createElement("div"), - label = item.label, - disabled = item.disabled; - - if(item.separator){ - itemEl.classList.add("tabulator-menu-separator"); - }else { - itemEl.classList.add("tabulator-menu-item"); - - if(typeof label == "function"){ - label = label.call(this.table, component.getComponent()); - } - - if(label instanceof Node){ - itemEl.appendChild(label); - }else { - itemEl.innerHTML = label; - } - - if(typeof disabled == "function"){ - disabled = disabled.call(this.table, component.getComponent()); - } - - if(disabled){ - itemEl.classList.add("tabulator-menu-item-disabled"); - itemEl.addEventListener("click", (e) => { - e.stopPropagation(); - }); - }else { - if(item.menu && item.menu.length){ - itemEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.loadMenu(e, component, item.menu, itemEl, popup); - }); - }else { - if(item.action){ - itemEl.addEventListener("click", (e) => { - item.action(e, component.getComponent()); - }); - } - } - } - - if(item.menu && item.menu.length){ - itemEl.classList.add("tabulator-menu-item-submenu"); - } - } - - menuEl.appendChild(itemEl); - }); - - menuEl.addEventListener("click", (e) => { - if(this.rootPopup){ - this.rootPopup.hide(); - } - }); - - popup.show(parentEl || e); - - if(popup === this.rootPopup){ - this.rootPopup.hideOnBlur(() => { - this.rootPopup = null; - - if(this.currentComponent){ - this.dispatch("menu-closed", menu, popup); - this.dispatchExternal("menuClosed", this.currentComponent.getComponent()); - this.currentComponent = null; - } - }); - - this.currentComponent = component; - - this.dispatch("menu-opened", menu, popup); - this.dispatchExternal("menuOpened", component.getComponent()); - } - } -} - -Menu.moduleName = "menu"; - -class MoveColumns extends Module{ - - constructor(table){ - super(table); - - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the destination column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - this.touchMove = false; - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - - this.registerTableOption("movableColumns", false); //enable movable columns - } - - createPlaceholderElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; - } - - initialize(){ - if(this.table.options.movableColumns){ - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("alert-show", this.abortMove.bind(this)); - } - } - - abortMove(){ - clearTimeout(this.checkTimeout); - } - - initializeColumn(column){ - var self = this, - config = {}, - colEl; - - if(!column.modules.frozen && !column.isGroup){ - colEl = column.getElement(); - - config.mousemove = function(e){ - if(column.parent === self.moving.parent){ - if((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){ - if(self.toCol !== column || !self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - }else { - if(self.toCol !== column || self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function(e){ - self.touchMove = false; - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - self.bindTouchEvents(column); - } - - column.modules.moveColumn = config; - } - - bindTouchEvents(column){ - var colEl = column.getElement(), - startXMove = false, //shifting center position of the cell - nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast; - - colEl.addEventListener("touchstart", (e) => { - this.checkTimeout = setTimeout(() => { - this.touchMove = true; - nextCol = column.nextColumn(); - nextColWidth = nextCol ? nextCol.getWidth()/2 : 0; - prevCol = column.prevColumn(); - prevColWidth = prevCol ? prevCol.getWidth()/2 : 0; - nextColWidthLast = 0; - prevColWidthLast = 0; - startXMove = false; - - this.startMove(e, column); - }, this.checkPeriod); - }, {passive: true}); - - colEl.addEventListener("touchmove", (e) => { - var diff, moveToCol; - - if(this.moving){ - this.moveHover(e); - - if(!startXMove){ - startXMove = e.touches[0].pageX; - } - - diff = e.touches[0].pageX - startXMove; - - if(diff > 0){ - if(nextCol && diff - nextColWidthLast > nextColWidth){ - moveToCol = nextCol; - - if(moveToCol !== column){ - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling); - this.moveColumn(moveToCol, true); - } - } - }else { - if(prevCol && -diff - prevColWidthLast > prevColWidth){ - moveToCol = prevCol; - - if(moveToCol !== column){ - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement()); - this.moveColumn(moveToCol, false); - } - } - } - - if(moveToCol){ - nextCol = moveToCol.nextColumn(); - nextColWidthLast = nextColWidth; - nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0; - prevCol = moveToCol.prevColumn(); - prevColWidthLast = prevColWidth; - prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0; - } - } - }, {passive: true}); - - colEl.addEventListener("touchend", (e) => { - if(this.checkTimeout){ - clearTimeout(this.checkTimeout); - } - if(this.moving){ - this.endMove(e); - } - }); - } - - startMove(e, column){ - var element = column.getElement(), - headerElement = this.table.columnManager.getContentsElement(), - headersElement = this.table.columnManager.getHeadersElement(); - - this.moving = column; - this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - headerElement.appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + "px"; - - if(!this.touchMove){ - this._bindMouseMove(); - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - } - - this.moveHover(e); - } - - _bindMouseMove(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - } - - _unbindMouseMove(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - } - - moveColumn(column, after){ - var movingCells = this.moving.getCells(); - - this.toCol = column; - this.toColAfter = after; - - if(after){ - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(true); - - if(cellEl.parentNode && movingCells[i]){ - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - } - }); - }else { - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(true); - - if(cellEl.parentNode && movingCells[i]){ - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - } - }); - } - } - - endMove(e){ - if(e.which === 1 || this.touchMove){ - this._unbindMouseMove(); - - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toCol){ - this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - if(!this.touchMove){ - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - } - } - } - - moveHover(e){ - var columnHolder = this.table.columnManager.getContentsElement(), - scrollLeft = columnHolder.scrollLeft, - xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft, - scrollPos; - - this.hoverElement.style.left = (xPos - this.startX) + "px"; - - if(xPos - scrollLeft < this.autoScrollMargin){ - if(!this.autoScrollTimeout){ - this.autoScrollTimeout = setTimeout(() => { - scrollPos = Math.max(0,scrollLeft-5); - this.table.rowManager.getElement().scrollLeft = scrollPos; - this.autoScrollTimeout = false; - }, 1); - } - } - - if(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){ - if(!this.autoScrollTimeout){ - this.autoScrollTimeout = setTimeout(() => { - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5); - this.table.rowManager.getElement().scrollLeft = scrollPos; - this.autoScrollTimeout = false; - }, 1); - } - } - } -} - -MoveColumns.moduleName = "moveColumn"; - -class MoveRows extends Module{ - - constructor(table){ - super(table); - - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating row header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving row - this.toRow = false; //destination row - this.toRowAfter = false; //position of moving row relative to the destination row - this.hasHandle = false; //row has handle instead of fully movable row - this.startY = 0; //starting Y position within header element - this.startX = 0; //starting X position within header element - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - this.tableRowDropEvent = false; - - this.touchMove = false; - - this.connection = false; - this.connectionSelectorsTables = false; - this.connectionSelectorsElements = false; - this.connectionElements = []; - this.connections = []; - - this.connectedTable = false; - this.connectedRow = false; - - this.registerTableOption("movableRows", false); //enable movable rows - this.registerTableOption("movableRowsConnectedTables", false); //tables for movable rows to be connected to - this.registerTableOption("movableRowsConnectedElements", false); //other elements for movable rows to be connected to - this.registerTableOption("movableRowsSender", false); - this.registerTableOption("movableRowsReceiver", "insert"); - - this.registerColumnOption("rowHandle"); - } - - createPlaceholderElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.classList.add("tabulator-row-placeholder"); - - return el; - } - - initialize(){ - if(this.table.options.movableRows){ - this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables; - this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements; - - this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements; - - this.subscribe("cell-init", this.initializeCell.bind(this)); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("row-init", this.initializeRow.bind(this)); - } - } - - initializeGroupHeader(group){ - var self = this, - config = {}; - - //inter table drag drop - config.mouseup = function(e){ - self.tableRowDrop(e, group); - }.bind(self); - - //same table drag drop - config.mousemove = function(e){ - var rowEl; - - if(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){ - if(self.toRow !== group || !self.toRowAfter){ - rowEl = group.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(group, true); - } - }else { - if(self.toRow !== group || self.toRowAfter){ - rowEl = group.getElement(); - if(rowEl.previousSibling){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(group, false); - } - } - } - }.bind(self); - - group.modules.moveRow = config; - } - - initializeRow(row){ - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function(e){ - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function(e){ - var rowEl = row.getElement(); - - if(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){ - if(self.toRow !== row || !self.toRowAfter){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - }else { - if(self.toRow !== row || self.toRowAfter){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - - if(!this.hasHandle){ - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(row, row.getElement()); - } - - row.modules.moveRow = config; - } - - initializeColumn(column){ - if(column.definition.rowHandle && this.table.options.movableRows !== false){ - this.hasHandle = true; - } - } - - initializeCell(cell){ - if(cell.column.definition.rowHandle && this.table.options.movableRows !== false){ - var self = this, - cellEl = cell.getElement(true); - - cellEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(cell.row, cellEl); - } - } - - bindTouchEvents(row, element){ - var startYMove = false, //shifting center position of the cell - nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast; - - element.addEventListener("touchstart", (e) => { - this.checkTimeout = setTimeout(() => { - this.touchMove = true; - nextRow = row.nextRow(); - nextRowHeight = nextRow ? nextRow.getHeight()/2 : 0; - prevRow = row.prevRow(); - prevRowHeight = prevRow ? prevRow.getHeight()/2 : 0; - nextRowHeightLast = 0; - prevRowHeightLast = 0; - startYMove = false; - - this.startMove(e, row); - }, this.checkPeriod); - }, {passive: true}); - this.moving, this.toRow, this.toRowAfter; - element.addEventListener("touchmove", (e) => { - - var diff, moveToRow; - - if(this.moving){ - e.preventDefault(); - - this.moveHover(e); - - if(!startYMove){ - startYMove = e.touches[0].pageY; - } - - diff = e.touches[0].pageY - startYMove; - - if(diff > 0){ - if(nextRow && diff - nextRowHeightLast > nextRowHeight){ - moveToRow = nextRow; - - if(moveToRow !== row){ - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling); - this.moveRow(moveToRow, true); - } - } - }else { - if(prevRow && -diff - prevRowHeightLast > prevRowHeight){ - moveToRow = prevRow; - - if(moveToRow !== row){ - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement()); - this.moveRow(moveToRow, false); - } - } - } - - if(moveToRow){ - nextRow = moveToRow.nextRow(); - nextRowHeightLast = nextRowHeight; - nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0; - prevRow = moveToRow.prevRow(); - prevRowHeightLast = prevRowHeight; - prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0; - } - } - }); - - element.addEventListener("touchend", (e) => { - if(this.checkTimeout){ - clearTimeout(this.checkTimeout); - } - if(this.moving){ - this.endMove(e); - this.touchMove = false; - } - }); - } - - _bindMouseMove(){ - this.table.rowManager.getDisplayRows().forEach((row) => { - if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){ - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - } - - _unbindMouseMove(){ - this.table.rowManager.getDisplayRows().forEach((row) => { - if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){ - row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - } - - startMove(e, row){ - var element = row.getElement(); - - this.setStartPosition(e, row); - - this.moving = row; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if(!this.connection){ - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - }else { - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if(this.connection){ - document.body.appendChild(this.hoverElement); - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - this.hoverElement.style.width = this.table.element.clientWidth + "px"; - this.hoverElement.style.whiteSpace = "nowrap"; - this.hoverElement.style.overflow = "hidden"; - this.hoverElement.style.pointerEvents = "none"; - }else { - this.table.rowManager.getTableElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - - this._bindMouseMove(); - } - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.dispatchExternal("rowMoving", row.getComponent()); - - this.moveHover(e); - } - - setStartPosition(e, row){ - var pageX = this.touchMove ? e.touches[0].pageX : e.pageX, - pageY = this.touchMove ? e.touches[0].pageY : e.pageY, - element, position; - - element = row.getElement(); - if(this.connection){ - position = element.getBoundingClientRect(); - - this.startX = position.left - pageX + window.pageXOffset; - this.startY = position.top - pageY + window.pageYOffset; - }else { - this.startY = (pageY - element.getBoundingClientRect().top); - } - } - - endMove(e){ - if(!e || e.which === 1 || this.touchMove){ - this._unbindMouseMove(); - - if(!this.connection){ - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - } - - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toRow){ - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - }else { - this.dispatchExternal("rowMoveCancelled", this.moving.getComponent()); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if(this.connection){ - this.table.element.classList.remove("tabulator-movingrow-sending"); - this.disconnectFromTables(); - } - } - } - - moveRow(row, after){ - this.toRow = row; - this.toRowAfter = after; - } - - moveHover(e){ - if(this.connection){ - this.moveHoverConnections.call(this, e); - }else { - this.moveHoverTable.call(this, e); - } - } - - moveHoverTable(e){ - var rowHolder = this.table.rowManager.getElement(), - scrollTop = rowHolder.scrollTop, - yPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop; - - this.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + "px"; - } - - moveHoverConnections(e){ - this.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + "px"; - this.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + "px"; - } - - elementRowDrop(e, element, row){ - this.dispatchExternal("movableRowsElementDrop", e, element, row ? row.getComponent() : false); - } - - //establish connection with other tables - connectToTables(row){ - var connectionTables; - - if(this.connectionSelectorsTables){ - connectionTables = this.commsConnections(this.connectionSelectorsTables); - - this.dispatchExternal("movableRowsSendingStart", connectionTables); - - this.commsSend(this.connectionSelectorsTables, "moveRow", "connect", { - row:row, - }); - } - - if(this.connectionSelectorsElements){ - - this.connectionElements = []; - - if(!Array.isArray(this.connectionSelectorsElements)){ - this.connectionSelectorsElements = [this.connectionSelectorsElements]; - } - - this.connectionSelectorsElements.forEach((query) => { - if(typeof query === "string"){ - this.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))); - }else { - this.connectionElements.push(query); - } - }); - - this.connectionElements.forEach((element) => { - var dropEvent = (e) => { - this.elementRowDrop(e, element, this.moving); - }; - - element.addEventListener("mouseup", dropEvent); - element.tabulatorElementDropEvent = dropEvent; - - element.classList.add("tabulator-movingrow-receiving"); - }); - } - } - - //disconnect from other tables - disconnectFromTables(){ - var connectionTables; - - if(this.connectionSelectorsTables){ - connectionTables = this.commsConnections(this.connectionSelectorsTables); - - this.dispatchExternal("movableRowsSendingStop", connectionTables); - - this.commsSend(this.connectionSelectorsTables, "moveRow", "disconnect"); - } - - this.connectionElements.forEach((element) => { - element.classList.remove("tabulator-movingrow-receiving"); - element.removeEventListener("mouseup", element.tabulatorElementDropEvent); - delete element.tabulatorElementDropEvent; - }); - } - - //accept incomming connection - connect(table, row){ - if(!this.connectedTable){ - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - this.table.rowManager.getDisplayRows().forEach((row) => { - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - this.tableRowDropEvent = this.tableRowDrop.bind(this); - - this.table.element.addEventListener("mouseup", this.tableRowDropEvent); - - this.dispatchExternal("movableRowsReceivingStart", row, table); - - return true; - }else { - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } - } - - //close incoming connection - disconnect(table){ - if(table === this.connectedTable){ - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - this.table.rowManager.getDisplayRows().forEach((row) =>{ - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - this.table.element.removeEventListener("mouseup", this.tableRowDropEvent); - - this.dispatchExternal("movableRowsReceivingStop", table); - }else { - console.warn("Move Row Error - trying to disconnect from non connected table"); - } - } - - dropComplete(table, row, success){ - var sender = false; - - if(success){ - - switch(typeof this.table.options.movableRowsSender){ - case "string": - sender = this.senders[this.table.options.movableRowsSender]; - break; - - case "function": - sender = this.table.options.movableRowsSender; - break; - } - - if(sender){ - sender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table); - }else { - if(this.table.options.movableRowsSender){ - console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender); - } - } - - this.dispatchExternal("movableRowsSent", this.moving.getComponent(), row ? row.getComponent() : undefined, table); - }else { - this.dispatchExternal("movableRowsSentFailed", this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); - } - - tableRowDrop(e, row){ - var receiver = false, - success = false; - - e.stopImmediatePropagation(); - - switch(typeof this.table.options.movableRowsReceiver){ - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if(receiver){ - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - }else { - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver); - } - - if(success){ - this.dispatchExternal("movableRowsReceived", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - }else { - this.dispatchExternal("movableRowsReceivedFailed", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.commsSend(this.connectedTable, "moveRow", "dropcomplete", { - row:row, - success:success, - }); - } - - commsReceived(table, action, data){ - switch(action){ - case "connect": - return this.connect(table, data.row); - - case "disconnect": - return this.disconnect(table); - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - } - } -} - -MoveRows.prototype.receivers = { - insert:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData()); - return true; - }, - - update:function(fromRow, toRow, fromTable){ - if(toRow){ - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace:function(fromRow, toRow, fromTable){ - if(toRow){ - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - }, -}; - -MoveRows.prototype.senders = { - delete:function(fromRow, toRow, toTable){ - fromRow.delete(); - } -}; - -MoveRows.moduleName = "moveRow"; - -var defaultMutators = {}; - -class Mutator extends Module{ - - constructor(table){ - super(table); - - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of mutation types - this.enabled = true; - - this.registerColumnOption("mutator"); - this.registerColumnOption("mutatorParams"); - this.registerColumnOption("mutatorData"); - this.registerColumnOption("mutatorDataParams"); - this.registerColumnOption("mutatorEdit"); - this.registerColumnOption("mutatorEditParams"); - this.registerColumnOption("mutatorClipboard"); - this.registerColumnOption("mutatorClipboardParams"); - this.registerColumnOption("mutateLink"); - } - - initialize(){ - this.subscribe("cell-value-changing", this.transformCell.bind(this)); - this.subscribe("cell-value-changed", this.mutateLink.bind(this)); - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("row-data-init-before", this.rowDataChanged.bind(this)); - this.subscribe("row-data-changing", this.rowDataChanged.bind(this)); - } - - rowDataChanged(row, tempData, updatedData){ - return this.transformRow(tempData, "data", updatedData); - } - - //initialize column mutator - initializeColumn(column){ - var match = false, - config = {}; - - this.allowedTypes.forEach((type) => { - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if(column.definition[key]){ - mutator = this.lookupMutator(column.definition[key]); - - if(mutator){ - match = true; - - config[key] = { - mutator:mutator, - params: column.definition[key + "Params"] || {}, - }; - } - } - }); - - if(match){ - column.modules.mutate = config; - } - } - - lookupMutator(value){ - var mutator = false; - - //set column mutator - switch(typeof value){ - case "string": - if(Mutator.mutators[value]){ - mutator = Mutator.mutators[value]; - }else { - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; - } - - //apply mutator to row - transformRow(data, type, updatedData){ - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if(this.enabled){ - - this.table.columnManager.traverse((column) => { - var mutator, params, component; - - if(column.modules.mutate){ - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if(mutator){ - value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data); - - if((type == "data" && !updatedData)|| typeof value !== "undefined"){ - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; - } - - //apply mutator to new cell value - transformCell(cell, value){ - if(cell.column.modules.mutate){ - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, - tempData = {}; - - if(mutator){ - tempData = Object.assign(tempData, cell.row.getData()); - cell.column.setFieldValue(tempData, value); - return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); - } - } - - return value; - } - - mutateLink(cell){ - var links = cell.column.definition.mutateLink; - - if(links){ - if(!Array.isArray(links)){ - links = [links]; - } - - links.forEach((link) => { - var linkCell = cell.row.getCell(link); - - if(linkCell){ - linkCell.setValue(linkCell.getValue(), true, true); - } - }); - } - } - - enable(){ - this.enabled = true; - } - - disable(){ - this.enabled = false; - } -} - -Mutator.moduleName = "mutator"; - -//load defaults -Mutator.mutators = defaultMutators; - -function rows(pageSize, currentRow, currentPage, totalRows, totalPages){ - var el = document.createElement("span"), - showingEl = document.createElement("span"), - valueEl = document.createElement("span"), - ofEl = document.createElement("span"), - totalEl = document.createElement("span"), - rowsEl = document.createElement("span"); - - this.table.modules.localize.langBind("pagination|counter|showing", (value) => { - showingEl.innerHTML = value; - }); - - this.table.modules.localize.langBind("pagination|counter|of", (value) => { - ofEl.innerHTML = value; - }); - - this.table.modules.localize.langBind("pagination|counter|rows", (value) => { - rowsEl.innerHTML = value; - }); - - if(totalRows){ - valueEl.innerHTML = " " + currentRow + "-" + Math.min((currentRow + pageSize - 1), totalRows) + " "; - - totalEl.innerHTML = " " + totalRows + " "; - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(ofEl); - el.appendChild(totalEl); - el.appendChild(rowsEl); - }else { - valueEl.innerHTML = " 0 "; - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(rowsEl); - } - - return el; -} - -function pages(pageSize, currentRow, currentPage, totalRows, totalPages){ - - var el = document.createElement("span"), - showingEl = document.createElement("span"), - valueEl = document.createElement("span"), - ofEl = document.createElement("span"), - totalEl = document.createElement("span"), - rowsEl = document.createElement("span"); - - this.table.modules.localize.langBind("pagination|counter|showing", (value) => { - showingEl.innerHTML = value; - }); - - valueEl.innerHTML = " " + currentPage + " "; - - this.table.modules.localize.langBind("pagination|counter|of", (value) => { - ofEl.innerHTML = value; - }); - - totalEl.innerHTML = " " + totalPages + " "; - - this.table.modules.localize.langBind("pagination|counter|pages", (value) => { - rowsEl.innerHTML = value; - }); - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(ofEl); - el.appendChild(totalEl); - el.appendChild(rowsEl); - - return el; -} - -var defaultPageCounters = { - rows:rows, - pages:pages, -}; - -class Page extends Module{ - - constructor(table){ - super(table); - - this.mode = "local"; - this.progressiveLoad = false; - - this.element = null; - this.pageCounterElement = null; - this.pageCounter = null; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.remoteRowCountEstimate = null; - - this.initialLoad = true; - this.dataChanging = false; //flag to check if data is being changed by this module - - this.pageSizes = []; - - this.registerTableOption("pagination", false); //set pagination type - this.registerTableOption("paginationMode", "local"); //local or remote pagination - this.registerTableOption("paginationSize", false); //set number of rows to a page - this.registerTableOption("paginationInitialPage", 1); //initial page to show on load - this.registerTableOption("paginationCounter", false); // set pagination counter - this.registerTableOption("paginationCounterElement", false); // set pagination counter - this.registerTableOption("paginationButtonCount", 5); // set count of page button - this.registerTableOption("paginationSizeSelector", false); //add pagination size selector element - this.registerTableOption("paginationElement", false); //element to hold pagination numbers - // this.registerTableOption("paginationDataSent", {}); //pagination data sent to the server - // this.registerTableOption("paginationDataReceived", {}); //pagination data received from the server - this.registerTableOption("paginationAddRow", "page"); //add rows on table or page - - this.registerTableOption("progressiveLoad", false); //progressive loading - this.registerTableOption("progressiveLoadDelay", 0); //delay between requests - this.registerTableOption("progressiveLoadScrollMargin", 0); //margin before scroll begins - - this.registerTableFunction("setMaxPage", this.setMaxPage.bind(this)); - this.registerTableFunction("setPage", this.setPage.bind(this)); - this.registerTableFunction("setPageToRow", this.userSetPageToRow.bind(this)); - this.registerTableFunction("setPageSize", this.userSetPageSize.bind(this)); - this.registerTableFunction("getPageSize", this.getPageSize.bind(this)); - this.registerTableFunction("previousPage", this.previousPage.bind(this)); - this.registerTableFunction("nextPage", this.nextPage.bind(this)); - this.registerTableFunction("getPage", this.getPage.bind(this)); - this.registerTableFunction("getPageMax", this.getPageMax.bind(this)); - - //register component functions - this.registerComponentFunction("row", "pageTo", this.setPageToRow.bind(this)); - } - - initialize(){ - if(this.table.options.pagination){ - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("row-added", this.rowsUpdated.bind(this)); - this.subscribe("data-processed", this.initialLoadComplete.bind(this)); - this.subscribe("table-built", this.calculatePageSizes.bind(this)); - this.subscribe("footer-redraw", this.footerRedraw.bind(this)); - - if(this.table.options.paginationAddRow == "page"){ - this.subscribe("row-adding-position", this.rowAddingPosition.bind(this)); - } - - if(this.table.options.paginationMode === "remote"){ - this.subscribe("data-params", this.remotePageParams.bind(this)); - this.subscribe("data-loaded", this._parseRemoteData.bind(this)); - } - - if(this.table.options.progressiveLoad){ - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } - - this.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40); - this.registerDisplayHandler(this.getRows.bind(this), 50); - - this.createElements(); - this.initializePageCounter(); - this.initializePaginator(); - }else if(this.table.options.progressiveLoad){ - this.subscribe("data-params", this.remotePageParams.bind(this)); - this.subscribe("data-loaded", this._parseRemoteData.bind(this)); - this.subscribe("table-built", this.calculatePageSizes.bind(this)); - this.subscribe("data-processed", this.initialLoadComplete.bind(this)); - - this.initializeProgressive(this.table.options.progressiveLoad); - - if(this.table.options.progressiveLoad === "scroll"){ - this.subscribe("scroll-vertical", this.scrollVertical.bind(this)); - } - } - } - - rowAddingPosition(row, top){ - var rowManager = this.table.rowManager, - displayRows = rowManager.getDisplayRows(), - index; - - if(top){ - if(displayRows.length){ - index = displayRows[0]; - }else { - if(rowManager.activeRows.length){ - index = rowManager.activeRows[rowManager.activeRows.length-1]; - top = false; - } - } - }else { - if(displayRows.length){ - index = displayRows[displayRows.length - 1]; - top = displayRows.length < this.size ? false : true; - } - } - - return {index, top}; - } - - calculatePageSizes(){ - var testElRow, testElCell; - - if(this.table.options.paginationSize){ - this.size = this.table.options.paginationSize; - }else { - testElRow = document.createElement("div"); - testElRow.classList.add("tabulator-row"); - testElRow.style.visibility = "hidden"; - - testElCell = document.createElement("div"); - testElCell.classList.add("tabulator-cell"); - testElCell.innerHTML = "Page Row Test"; - - testElRow.appendChild(testElCell); - - this.table.rowManager.getTableElement().appendChild(testElRow); - - this.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight); - - this.table.rowManager.getTableElement().removeChild(testElRow); - } - - this.dispatchExternal("pageSizeChanged", this.size); - - this.generatePageSizeSelectList(); - } - - initialLoadComplete(){ - this.initialLoad = false; - } - - remotePageParams(data, config, silent, params){ - if(!this.initialLoad){ - if((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){ - this.reset(true); - } - } - - //configure request params - params.page = this.page; - - //set page size if defined - if(this.size){ - params.size = this.size; - } - - return params; - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - userSetPageToRow(row){ - if(this.table.options.pagination){ - row = this.table.rowManager.findRow(row); - - if(row){ - return this.setPageToRow(row); - } - } - - return Promise.reject(); - } - - userSetPageSize(size){ - if(this.table.options.pagination){ - this.setPageSize(size); - return this.setPage(1); - }else { - return false; - } - } - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - scrollVertical(top, dir){ - var element, diff, margin; - if(!dir && !this.table.dataLoader.loading){ - element = this.table.rowManager.getElement(); - diff = element.scrollHeight - element.clientHeight - top; - margin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2); - - if(diff < margin){ - this.nextPage() - .catch(() => {}); //consume the exception thrown when on the last page - } - } - } - - restOnRenderBefore(rows, renderInPosition){ - if(!renderInPosition){ - if(this.mode === "local"){ - this.reset(); - } - } - - return rows; - } - - rowsUpdated(){ - this.refreshData(true, "all"); - } - - createElements(){ - var button; - - this.element = document.createElement("span"); - this.element.classList.add("tabulator-paginator"); - - this.pagesElement = document.createElement("span"); - this.pagesElement.classList.add("tabulator-pages"); - - button = document.createElement("button"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); - - if(this.table.options.paginationSizeSelector){ - this.pageSizeSelect = document.createElement("select"); - this.pageSizeSelect.classList.add("tabulator-page-size"); - } - } - - generatePageSizeSelectList(){ - var pageSizes = []; - - if(this.pageSizeSelect){ - - if(Array.isArray(this.table.options.paginationSizeSelector)){ - pageSizes = this.table.options.paginationSizeSelector; - this.pageSizes = pageSizes; - - if(this.pageSizes.indexOf(this.size) == -1){ - pageSizes.unshift(this.size); - } - }else { - - if(this.pageSizes.indexOf(this.size) == -1){ - pageSizes = []; - - for (let i = 1; i < 5; i++){ - pageSizes.push(this.size * i); - } - - this.pageSizes = pageSizes; - }else { - pageSizes = this.pageSizes; - } - } - - while(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild); - - pageSizes.forEach((item) => { - var itemEl = document.createElement("option"); - itemEl.value = item; - - if(item === true){ - this.langBind("pagination|all", function(value){ - itemEl.innerHTML = value; - }); - }else { - itemEl.innerHTML = item; - } - - - - this.pageSizeSelect.appendChild(itemEl); - }); - - this.pageSizeSelect.value = this.size; - } - } - - initializePageCounter(){ - var counter = this.table.options.paginationCounter, - pageCounter = null; - - if(counter){ - if(typeof counter === "function"){ - pageCounter = counter; - }else { - pageCounter = Page.pageCounters[counter]; - } - - if(pageCounter){ - this.pageCounter = pageCounter; - - this.pageCounterElement = document.createElement("span"); - this.pageCounterElement.classList.add("tabulator-page-counter"); - }else { - console.warn("Pagination Error - No such page counter found: ", counter); - } - } - } - - //setup pagination - initializePaginator(hidden){ - var pageSelectLabel, paginationCounterHolder; - - if(!hidden){ - //build pagination element - - //bind localizations - this.langBind("pagination|first", (value) => { - this.firstBut.innerHTML = value; - }); - - this.langBind("pagination|first_title", (value) => { - this.firstBut.setAttribute("aria-label", value); - this.firstBut.setAttribute("title", value); - }); - - this.langBind("pagination|prev", (value) => { - this.prevBut.innerHTML = value; - }); - - this.langBind("pagination|prev_title", (value) => { - this.prevBut.setAttribute("aria-label", value); - this.prevBut.setAttribute("title", value); - }); - - this.langBind("pagination|next", (value) => { - this.nextBut.innerHTML = value; - }); - - this.langBind("pagination|next_title", (value) => { - this.nextBut.setAttribute("aria-label", value); - this.nextBut.setAttribute("title", value); - }); - - this.langBind("pagination|last", (value) => { - this.lastBut.innerHTML = value; - }); - - this.langBind("pagination|last_title", (value) => { - this.lastBut.setAttribute("aria-label", value); - this.lastBut.setAttribute("title", value); - }); - - //click bindings - this.firstBut.addEventListener("click", () => { - this.setPage(1); - }); - - this.prevBut.addEventListener("click", () => { - this.previousPage(); - }); - - this.nextBut.addEventListener("click", () => { - this.nextPage(); - }); - - this.lastBut.addEventListener("click", () => { - this.setPage(this.max); - }); - - if(this.table.options.paginationElement){ - this.element = this.table.options.paginationElement; - } - - if(this.pageSizeSelect){ - pageSelectLabel = document.createElement("label"); - - this.langBind("pagination|page_size", (value) => { - this.pageSizeSelect.setAttribute("aria-label", value); - this.pageSizeSelect.setAttribute("title", value); - pageSelectLabel.innerHTML = value; - }); - - this.element.appendChild(pageSelectLabel); - this.element.appendChild(this.pageSizeSelect); - - this.pageSizeSelect.addEventListener("change", (e) => { - this.setPageSize(this.pageSizeSelect.value == "true" ? true : this.pageSizeSelect.value); - this.setPage(1); - }); - } - - //append to DOM - this.element.appendChild(this.firstBut); - this.element.appendChild(this.prevBut); - this.element.appendChild(this.pagesElement); - this.element.appendChild(this.nextBut); - this.element.appendChild(this.lastBut); - - if(!this.table.options.paginationElement){ - if(this.table.options.paginationCounter){ - - if(this.table.options.paginationCounterElement){ - if(this.table.options.paginationCounterElement instanceof HTMLElement){ - this.table.options.paginationCounterElement.appendChild(this.pageCounterElement); - }else if(typeof this.table.options.paginationCounterElement === "string"){ - paginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement); - - if(paginationCounterHolder){ - paginationCounterHolder.appendChild(this.pageCounterElement); - }else { - console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:", this.table.options.paginationCounterElement); - } - } - }else { - this.footerAppend(this.pageCounterElement); - } - - } - - this.footerAppend(this.element); - } - - this.page = this.table.options.paginationInitialPage; - this.count = this.table.options.paginationButtonCount; - } - - //set default values - this.mode = this.table.options.paginationMode; - } - - initializeProgressive(mode){ - this.initializePaginator(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; - } - - trackChanges(){ - this.dispatch("page-changed"); - } - - //calculate maximum page from number of rows - setMaxRows(rowCount){ - if(!rowCount){ - this.max = 1; - }else { - this.max = this.size === true ? 1 : Math.ceil(rowCount/this.size); - } - - if(this.page > this.max){ - this.page = this.max; - } - } - - //reset to first page without triggering action - reset(force){ - if(!this.initialLoad){ - if(this.mode == "local" || force){ - this.page = 1; - this.trackChanges(); - } - } - } - - //set the maximum page - setMaxPage(max){ - - max = parseInt(max); - - this.max = max || 1; - - if(this.page > this.max){ - this.page = this.max; - this.trigger(); - } - } - - //set current page number - setPage(page){ - switch(page){ - case "first": - return this.setPage(1); - - case "prev": - return this.previousPage(); - - case "next": - return this.nextPage(); - - case "last": - return this.setPage(this.max); - } - - page = parseInt(page); - - if((page > 0 && page <= this.max) || this.mode !== "local"){ - this.page = page; - - this.trackChanges(); - - return this.trigger(); - }else { - console.warn("Pagination Error - Requested page is out of range of 1 - " + this.max + ":", page); - return Promise.reject(); - } - } - - setPageToRow(row){ - var rows = this.displayRows(-1); - var index = rows.indexOf(row); - - if(index > -1){ - var page = this.size === true ? 1 : Math.ceil((index + 1) / this.size); - - return this.setPage(page); - }else { - console.warn("Pagination Error - Requested row is not visible"); - return Promise.reject(); - } - } - - setPageSize(size){ - if(size !== true){ - size = parseInt(size); - } - - if(size > 0){ - this.size = size; - this.dispatchExternal("pageSizeChanged", size); - } - - if(this.pageSizeSelect){ - // this.pageSizeSelect.value = size; - this.generatePageSizeSelectList(); - } - - this.trackChanges(); - } - - _setPageCounter(totalRows, size, currentRow){ - var content; - - if(this.pageCounter){ - - if(this.mode === "remote"){ - size = this.size; - currentRow = ((this.page - 1) * this.size) + 1; - totalRows = this.remoteRowCountEstimate; - } - - content = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max); - - switch(typeof content){ - case "object": - if(content instanceof Node){ - - //clear previous cell contents - while(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild); - - this.pageCounterElement.appendChild(content); - }else { - this.pageCounterElement.innerHTML = ""; - - if(content != null){ - console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:", content); - } - } - break; - case "undefined": - this.pageCounterElement.innerHTML = ""; - break; - default: - this.pageCounterElement.innerHTML = content; - } - } - } - - //setup the pagination buttons - _setPageButtons(){ - let leftSize = Math.floor((this.count-1) / 2); - let rightSize = Math.ceil((this.count-1) / 2); - let min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1); - let max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max); - - while(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild); - - if(this.page == 1){ - this.firstBut.disabled = true; - this.prevBut.disabled = true; - }else { - this.firstBut.disabled = false; - this.prevBut.disabled = false; - } - - if(this.page == this.max){ - this.lastBut.disabled = true; - this.nextBut.disabled = true; - }else { - this.lastBut.disabled = false; - this.nextBut.disabled = false; - } - - for(let i = min; i <= max; i++){ - if(i>0 && i <= this.max){ - this.pagesElement.appendChild(this._generatePageButton(i)); - } - } - - this.footerRedraw(); - } - - _generatePageButton(page){ - var button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if(page == this.page){ - button.classList.add("active"); - } - - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - - this.langBind("pagination|page_title", (value) => { - button.setAttribute("aria-label", value + " " + page); - button.setAttribute("title", value + " " + page); - }); - - button.setAttribute("data-page", page); - button.textContent = page; - - button.addEventListener("click", (e) => { - this.setPage(page); - }); - - return button; - } - - //previous page - previousPage(){ - if(this.page > 1){ - this.page--; - - this.trackChanges(); - - return this.trigger(); - - }else { - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - return Promise.reject(); - } - } - - //next page - nextPage(){ - if(this.page < this.max){ - this.page++; - - this.trackChanges(); - - return this.trigger(); - - }else { - if(!this.progressiveLoad){ - console.warn("Pagination Error - Next page would be greater than maximum page of " + this.max + ":", this.max + 1); - } - return Promise.reject(); - } - } - - //return current page number - getPage(){ - return this.page; - } - - //return max page number - getPageMax(){ - return this.max; - } - - getPageSize(size){ - return this.size; - } - - getMode(){ - return this.mode; - } - - //return appropriate rows for current page - getRows(data){ - var actualRowPageSize = 0, - output, start, end, actualStartRow; - - var actualRows = data.filter((row) => { - return row.type === "row"; - }); - - if(this.mode == "local"){ - output = []; - - this.setMaxRows(data.length); - - if(this.size === true){ - start = 0; - end = data.length; - }else { - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - } - - this._setPageButtons(); - - for(let i = start; i < end; i++){ - let row = data[i]; - - if(row){ - output.push(row); - - if(row.type === "row"){ - if(!actualStartRow){ - actualStartRow = row; - } - - actualRowPageSize++; - } - } - } - - this._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0); - - return output; - }else { - this._setPageButtons(); - this._setPageCounter(actualRows.length); - - return data.slice(0); - } - } - - trigger(){ - var left; - - switch(this.mode){ - case "local": - left = this.table.rowManager.scrollLeft; - - this.refreshData(); - this.table.rowManager.scrollHorizontal(left); - - this.dispatchExternal("pageLoaded", this.getPage()); - - return Promise.resolve(); - - case "remote": - this.dataChanging = true; - return this.reloadData(null) - .finally(() => { - this.dataChanging = false; - }); - - case "progressive_load": - case "progressive_scroll": - return this.reloadData(null, true); - - default: - console.warn("Pagination Error - no such pagination mode:", this.mode); - return Promise.reject(); - } - } - - _parseRemoteData(data){ - var margin; - - if(typeof data.last_page === "undefined"){ - console.warn("Remote Pagination Error - Server response missing '" + (this.options("dataReceiveParams").last_page || "last_page") + "' property"); - } - - if(data.data){ - this.max = parseInt(data.last_page) || 1; - - this.remoteRowCountEstimate = typeof data.last_row !== "undefined" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0)); - - if(this.progressiveLoad){ - switch(this.mode){ - case "progressive_load": - - if(this.page == 1){ - this.table.rowManager.setData(data.data, false, this.page == 1); - }else { - this.table.rowManager.addRows(data.data); - } - - if(this.page < this.max){ - setTimeout(() => { - this.nextPage(); - }, this.table.options.progressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data); - - this.table.rowManager.setData(data, this.page !== 1, this.page == 1); - - margin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2); - - if(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){ - if(this.page < this.max){ - setTimeout(() => { - this.nextPage(); - }); - } - } - break; - } - - return false; - }else { - // left = this.table.rowManager.scrollLeft; - this.dispatchExternal("pageLoaded", this.getPage()); - // this.table.rowManager.scrollHorizontal(left); - // this.table.columnManager.scrollHorizontal(left); - } - - }else { - console.warn("Remote Pagination Error - Server response missing '" + (this.options("dataReceiveParams").data || "data") + "' property"); - } - - return data.data; - } - - //handle the footer element being redrawn - footerRedraw(){ - var footer = this.table.footerManager.containerElement; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - }else { - this.pagesElement.style.display = ''; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - } - } - } -} - -Page.moduleName = "page"; - -//load defaults -Page.pageCounters = defaultPageCounters; - -// read persistance information from storage -var defaultReaders = { - local:function(id, type){ - var data = localStorage.getItem(id + "-" + type); - - return data ? JSON.parse(data) : false; - }, - cookie:function(id, type){ - var cookie = document.cookie, - key = id + "-" + type, - cookiePos = cookie.indexOf(key + "="), - end, data; - - //if cookie exists, decode and load column data into tabulator - if(cookiePos > -1){ - cookie = cookie.slice(cookiePos); - - end = cookie.indexOf(";"); - - if(end > -1){ - cookie = cookie.slice(0, end); - } - - data = cookie.replace(key + "=", ""); - } - - return data ? JSON.parse(data) : false; - } -}; - -//write persistence information to storage -var defaultWriters = { - local:function(id, type, data){ - localStorage.setItem(id + "-" + type, JSON.stringify(data)); - }, - cookie:function(id, type, data){ - var expireDate = new Date(); - - expireDate.setDate(expireDate.getDate() + 10000); - - document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString(); - } -}; - -class Persistence extends Module{ - - constructor(table){ - super(table); - - this.mode = ""; - this.id = ""; - // this.persistProps = ["field", "width", "visible"]; - this.defWatcherBlock = false; - this.config = {}; - this.readFunc = false; - this.writeFunc = false; - - this.registerTableOption("persistence", false); - this.registerTableOption("persistenceID", ""); //key for persistent storage - this.registerTableOption("persistenceMode", true); //mode for storing persistence information - this.registerTableOption("persistenceReaderFunc", false); //function for handling persistence data reading - this.registerTableOption("persistenceWriterFunc", false); //function for handling persistence data writing - } - - // Test for whether localStorage is available for use. - localStorageTest() { - var testKey = "_tabulator_test"; - - try { - window.localStorage.setItem( testKey, testKey); - window.localStorage.removeItem( testKey ); - return true; - } catch(e) { - return false; - } - } - - //setup parameters - initialize(){ - if(this.table.options.persistence){ - //determine persistent layout storage type - var mode = this.table.options.persistenceMode, - id = this.table.options.persistenceID, - retrievedData; - - this.mode = mode !== true ? mode : (this.localStorageTest() ? "local" : "cookie"); - - if(this.table.options.persistenceReaderFunc){ - if(typeof this.table.options.persistenceReaderFunc === "function"){ - this.readFunc = this.table.options.persistenceReaderFunc; - }else { - if(Persistence.readers[this.table.options.persistenceReaderFunc]){ - this.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc]; - }else { - console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc); - } - } - }else { - if(Persistence.readers[this.mode]){ - this.readFunc = Persistence.readers[this.mode]; - }else { - console.warn("Persistence Read Error - invalid reader set", this.mode); - } - } - - if(this.table.options.persistenceWriterFunc){ - if(typeof this.table.options.persistenceWriterFunc === "function"){ - this.writeFunc = this.table.options.persistenceWriterFunc; - }else { - if(Persistence.writers[this.table.options.persistenceWriterFunc]){ - this.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc]; - }else { - console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc); - } - } - }else { - if(Persistence.writers[this.mode]){ - this.writeFunc = Persistence.writers[this.mode]; - }else { - console.warn("Persistence Write Error - invalid writer set", this.mode); - } - } - - //set storage tag - this.id = "tabulator-" + (id || (this.table.element.getAttribute("id") || "")); - - this.config = { - sort:this.table.options.persistence === true || this.table.options.persistence.sort, - filter:this.table.options.persistence === true || this.table.options.persistence.filter, - headerFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter, - group:this.table.options.persistence === true || this.table.options.persistence.group, - page:this.table.options.persistence === true || this.table.options.persistence.page, - columns:this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns, - }; - - //load pagination data if needed - if(this.config.page){ - retrievedData = this.retrieveData("page"); - - if(retrievedData){ - if(typeof retrievedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)){ - this.table.options.paginationSize = retrievedData.paginationSize; - } - - if(typeof retrievedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)){ - this.table.options.paginationInitialPage = retrievedData.paginationInitialPage; - } - } - } - - //load group data if needed - if(this.config.group){ - retrievedData = this.retrieveData("group"); - - if(retrievedData){ - if(typeof retrievedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)){ - this.table.options.groupBy = retrievedData.groupBy; - } - if(typeof retrievedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)){ - this.table.options.groupStartOpen = retrievedData.groupStartOpen; - } - if(typeof retrievedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)){ - this.table.options.groupHeader = retrievedData.groupHeader; - } - } - } - - if(this.config.columns){ - this.table.options.columns = this.load("columns", this.table.options.columns); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-show", this.save.bind(this, "columns")); - this.subscribe("column-hide", this.save.bind(this, "columns")); - this.subscribe("column-moved", this.save.bind(this, "columns")); - } - - this.subscribe("table-built", this.tableBuilt.bind(this), 0); - - this.subscribe("table-redraw", this.tableRedraw.bind(this)); - - this.subscribe("filter-changed", this.eventSave.bind(this, "filter")); - this.subscribe("filter-changed", this.eventSave.bind(this, "headerFilter")); - this.subscribe("sort-changed", this.eventSave.bind(this, "sort")); - this.subscribe("group-changed", this.eventSave.bind(this, "group")); - this.subscribe("page-changed", this.eventSave.bind(this, "page")); - this.subscribe("column-resized", this.eventSave.bind(this, "columns")); - this.subscribe("column-width", this.eventSave.bind(this, "columns")); - this.subscribe("layout-refreshed", this.eventSave.bind(this, "columns")); - } - - this.registerTableFunction("getColumnLayout", this.getColumnLayout.bind(this)); - this.registerTableFunction("setColumnLayout", this.setColumnLayout.bind(this)); - } - - eventSave(type){ - if(this.config[type]){ - this.save(type); - } - } - - tableBuilt(){ - var sorters, filters, headerFilters; - - if(this.config.sort){ - sorters = this.load("sort"); - - if(!sorters === false){ - this.table.options.initialSort = sorters; - } - } - - if(this.config.filter){ - filters = this.load("filter"); - - if(!filters === false){ - this.table.options.initialFilter = filters; - } - } - if(this.config.headerFilter){ - headerFilters = this.load("headerFilter"); - - if(!headerFilters === false){ - this.table.options.initialHeaderFilter = headerFilters; - } - } - - } - - tableRedraw(force){ - if(force && this.config.columns){ - this.save("columns"); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - getColumnLayout(){ - return this.parseColumns(this.table.columnManager.getColumns()); - } - - setColumnLayout(layout){ - this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true)); - return true; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumn(column){ - var def, keys; - - if(this.config.columns){ - this.defWatcherBlock = true; - - def = column.getDefinition(); - - keys = this.config.columns === true ? Object.keys(def) : this.config.columns; - - keys.forEach((key)=>{ - var props = Object.getOwnPropertyDescriptor(def, key); - var value = def[key]; - - if(props){ - Object.defineProperty(def, key, { - set: (newValue) => { - value = newValue; - - if(!this.defWatcherBlock){ - this.save("columns"); - } - - if(props.set){ - props.set(newValue); - } - }, - get:() => { - if(props.get){ - props.get(); - } - return value; - } - }); - } - }); - - this.defWatcherBlock = false; - } - } - - //load saved definitions - load(type, current){ - var data = this.retrieveData(type); - - if(current){ - data = data ? this.mergeDefinition(current, data) : current; - } - - return data; - } - - //retrieve data from memory - retrieveData(type){ - return this.readFunc ? this.readFunc(this.id, type) : false; - } - - //merge old and new column definitions - mergeDefinition(oldCols, newCols, mergeAllNew){ - var output = []; - - newCols = newCols || []; - - newCols.forEach((column, to) => { - var from = this._findColumn(oldCols, column), - keys; - - if(from){ - if(mergeAllNew){ - keys = Object.keys(column); - }else if(this.config.columns === true || this.config.columns == undefined){ - keys = Object.keys(from); - keys.push("width"); - }else { - keys = this.config.columns; - } - - keys.forEach((key)=>{ - if(key !== "columns" && typeof column[key] !== "undefined"){ - from[key] = column[key]; - } - }); - - if(from.columns){ - from.columns = this.mergeDefinition(from.columns, column.columns); - } - - output.push(from); - } - }); - - oldCols.forEach((column, i) => { - var from = this._findColumn(newCols, column); - - if (!from) { - if(output.length>i){ - output.splice(i, 0, column); - }else { - output.push(column); - } - } - }); - - return output; - } - - //find matching columns - _findColumn(columns, subject){ - var type = subject.columns ? "group" : (subject.field ? "field" : "object"); - - return columns.find(function(col){ - switch(type){ - case "group": - return col.title === subject.title && col.columns.length === subject.columns.length; - - case "field": - return col.field === subject.field; - - case "object": - return col === subject; - } - }); - } - - //save data - save(type){ - var data = {}; - - switch(type){ - case "columns": - data = this.parseColumns(this.table.columnManager.getColumns()); - break; - - case "filter": - data = this.table.modules.filter.getFilters(); - break; - - case "headerFilter": - data = this.table.modules.filter.getHeaderFilters(); - break; - - case "sort": - data = this.validateSorters(this.table.modules.sort.getSort()); - break; - - case "group": - data = this.getGroupConfig(); - break; - - case "page": - data = this.getPageConfig(); - break; - } - - if(this.writeFunc){ - this.writeFunc(this.id, type, data); - } - - } - - //ensure sorters contain no function data - validateSorters(data){ - data.forEach(function(item){ - item.column = item.field; - delete item.field; - }); - - return data; - } - - getGroupConfig(){ - var data = {}; - - if(this.config.group){ - if(this.config.group === true || this.config.group.groupBy){ - data.groupBy = this.table.options.groupBy; - } - - if(this.config.group === true || this.config.group.groupStartOpen){ - data.groupStartOpen = this.table.options.groupStartOpen; - } - - if(this.config.group === true || this.config.group.groupHeader){ - data.groupHeader = this.table.options.groupHeader; - } - } - - return data; - } - - getPageConfig(){ - var data = {}; - - if(this.config.page){ - if(this.config.page === true || this.config.page.size){ - data.paginationSize = this.table.modules.page.getPageSize(); - } - - if(this.config.page === true || this.config.page.page){ - data.paginationInitialPage = this.table.modules.page.getPage(); - } - } - - return data; - } - - - //parse columns for data to store - parseColumns(columns){ - var definitions = [], - excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"]; - - columns.forEach((column) => { - var defStore = {}, - colDef = column.getDefinition(), - keys; - - if(column.isGroup){ - defStore.title = colDef.title; - defStore.columns = this.parseColumns(column.getColumns()); - }else { - defStore.field = column.getField(); - - if(this.config.columns === true || this.config.columns == undefined){ - keys = Object.keys(colDef); - keys.push("width"); - keys.push("visible"); - }else { - keys = this.config.columns; - } - - keys.forEach((key)=>{ - switch(key){ - case "width": - defStore.width = column.getWidth(); - break; - case "visible": - defStore.visible = column.visible; - break; - - default: - if(typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1){ - defStore[key] = colDef[key]; - } - } - }); - } - - definitions.push(defStore); - }); - - return definitions; - } -} - -Persistence.moduleName = "persistence"; - -Persistence.moduleInitOrder = -10; - -//load defaults -Persistence.readers = defaultReaders; -Persistence.writers = defaultWriters; - -class Popup$1 extends Module{ - - constructor(table){ - super(table); - - this.columnSubscribers = {}; - - this.registerTableOption("rowContextPopup", false); - this.registerTableOption("rowClickPopup", false); - this.registerTableOption("rowDblClickPopup", false); - this.registerTableOption("groupContextPopup", false); - this.registerTableOption("groupClickPopup", false); - this.registerTableOption("groupDblClickPopup", false); - - this.registerColumnOption("headerContextPopup"); - this.registerColumnOption("headerClickPopup"); - this.registerColumnOption("headerDblClickPopup"); - this.registerColumnOption("headerPopup"); - this.registerColumnOption("headerPopupIcon"); - this.registerColumnOption("contextPopup"); - this.registerColumnOption("clickPopup"); - this.registerColumnOption("dblClickPopup"); - - this.registerComponentFunction("cell", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("column", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("row", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("group", "popup", this._componentPopupCall.bind(this)); - - } - - initialize(){ - this.initializeRowWatchers(); - this.initializeGroupWatchers(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - _componentPopupCall(component, contents, position){ - this.loadPopupEvent(contents, null, component, position); - } - - initializeRowWatchers(){ - if(this.table.options.rowContextPopup){ - this.subscribe("row-contextmenu", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup)); - this.table.on("rowTapHold", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup)); - } - - if(this.table.options.rowClickPopup){ - this.subscribe("row-click", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup)); - } - - if(this.table.options.rowDblClickPopup){ - this.subscribe("row-dblclick", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup)); - } - } - - initializeGroupWatchers(){ - if(this.table.options.groupContextPopup){ - this.subscribe("group-contextmenu", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup)); - this.table.on("groupTapHold", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup)); - } - - if(this.table.options.groupClickPopup){ - this.subscribe("group-click", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup)); - } - - if(this.table.options.groupDblClickPopup){ - this.subscribe("group-dblclick", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup)); - } - } - - initializeColumn(column){ - var def = column.definition; - - //handle column events - if(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){ - this.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, "headerContextPopup"); - this.subscribe("column-contextmenu", this.columnSubscribers.headerContextPopup); - this.table.on("headerTapHold", this.loadPopupTableColumnEvent.bind(this, "headerContextPopup")); - } - - if(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){ - this.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerClickPopup"); - this.subscribe("column-click", this.columnSubscribers.headerClickPopup); - - - }if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){ - this.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerDblClickPopup"); - this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickPopup); - } - - if(def.headerPopup){ - this.initializeColumnHeaderPopup(column); - } - - //handle cell events - if(def.contextPopup && !this.columnSubscribers.contextPopup){ - this.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, "contextPopup"); - this.subscribe("cell-contextmenu", this.columnSubscribers.contextPopup); - this.table.on("cellTapHold", this.loadPopupTableCellEvent.bind(this, "contextPopup")); - } - - if(def.clickPopup && !this.columnSubscribers.clickPopup){ - this.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, "clickPopup"); - this.subscribe("cell-click", this.columnSubscribers.clickPopup); - } - - if(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){ - this.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, "dblClickPopup"); - this.subscribe("cell-click", this.columnSubscribers.dblClickPopup); - } - } - - initializeColumnHeaderPopup(column){ - var icon = column.definition.headerPopupIcon, - headerPopupEl; - - headerPopupEl = document.createElement("span"); - headerPopupEl.classList.add("tabulator-header-popup-button"); - - if(icon){ - if(typeof icon === "function"){ - icon = icon(column.getComponent()); - } - - if(icon instanceof HTMLElement){ - headerPopupEl.appendChild(icon); - }else { - headerPopupEl.innerHTML = icon; - } - }else { - headerPopupEl.innerHTML = "⋮"; - } - - headerPopupEl.addEventListener("click", (e) => { - e.stopPropagation(); - e.preventDefault(); - - this.loadPopupEvent(column.definition.headerPopup, e, column); - }); - - column.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild); - } - - loadPopupTableCellEvent(option, e, cell){ - if(cell._cell){ - cell = cell._cell; - } - - if(cell.column.definition[option]){ - this.loadPopupEvent(cell.column.definition[option], e, cell); - } - } - - loadPopupTableColumnEvent(option, e, column){ - if(column._column){ - column = column._column; - } - - if(column.definition[option]){ - this.loadPopupEvent(column.definition[option], e, column); - } - } - - loadPopupEvent(contents, e, component, position){ - var renderedCallback; - - function onRendered(callback){ - renderedCallback = callback; - } - - if(component._group){ - component = component._group; - }else if(component._row){ - component = component._row; - } - - contents = typeof contents == "function" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents; - - this.loadPopup(e, component, contents, renderedCallback, position); - } - - loadPopup(e, component, contents, renderedCallback, position){ - var touch = !(e instanceof MouseEvent), - contentsEl, popup; - - if(contents instanceof HTMLElement){ - contentsEl = contents; - }else { - contentsEl = document.createElement("div"); - contentsEl.innerHTML = contents; - } - - contentsEl.classList.add("tabulator-popup"); - - contentsEl.addEventListener("click", (e) =>{ - e.stopPropagation(); - }); - - if(!touch){ - e.preventDefault(); - } - - popup = this.popup(contentsEl); - - if(typeof renderedCallback === "function"){ - popup.renderCallback(renderedCallback); - } - - if(e){ - popup.show(e); - }else { - popup.show(component.getElement(), position || "center"); - } - - - popup.hideOnBlur(() => { - this.dispatchExternal("popupClosed", component.getComponent()); - }); - - - - this.dispatchExternal("popupOpened", component.getComponent()); - } -} - -Popup$1.moduleName = "popup"; - -class Print extends Module{ - - constructor(table){ - super(table); - - this.element = false; - this.manualBlock = false; - this.beforeprintEventHandler = null; - this.afterprintEventHandler = null; - - this.registerTableOption("printAsHtml", false); //enable print as html - this.registerTableOption("printFormatter", false); //printing page formatter - this.registerTableOption("printHeader", false); //page header contents - this.registerTableOption("printFooter", false); //page footer contents - this.registerTableOption("printStyled", true); //enable print as html styling - this.registerTableOption("printRowRange", "visible"); //restrict print to visible rows only - this.registerTableOption("printConfig", {}); //print config options - - this.registerColumnOption("print"); - this.registerColumnOption("titlePrint"); - } - - initialize(){ - if(this.table.options.printAsHtml){ - this.beforeprintEventHandler = this.replaceTable.bind(this); - this.afterprintEventHandler = this.cleanup.bind(this); - - window.addEventListener("beforeprint", this.beforeprintEventHandler ); - window.addEventListener("afterprint", this.afterprintEventHandler); - this.subscribe("table-destroy", this.destroy.bind(this)); - } - - this.registerTableFunction("print", this.printFullscreen.bind(this)); - } - - destroy(){ - if(this.table.options.printAsHtml){ - window.removeEventListener( "beforeprint", this.beforeprintEventHandler ); - window.removeEventListener( "afterprint", this.afterprintEventHandler ); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - replaceTable(){ - if(!this.manualBlock){ - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-table"); - - this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print")); - - this.table.element.style.display = "none"; - - this.table.element.parentNode.insertBefore(this.element, this.table.element); - } - } - - cleanup(){ - document.body.classList.remove("tabulator-print-fullscreen-hide"); - - if(this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - this.table.element.style.display = ""; - } - } - - printFullscreen(visible, style, config){ - var scrollX = window.scrollX, - scrollY = window.scrollY, - headerEl = document.createElement("div"), - footerEl = document.createElement("div"), - tableEl = this.table.modules.export.generateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, "print"), - headerContent, footerContent; - - this.manualBlock = true; - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-fullscreen"); - - if(this.table.options.printHeader){ - headerEl.classList.add("tabulator-print-header"); - - headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader; - - if(typeof headerContent == "string"){ - headerEl.innerHTML = headerContent; - }else { - headerEl.appendChild(headerContent); - } - - this.element.appendChild(headerEl); - } - - this.element.appendChild(tableEl); - - if(this.table.options.printFooter){ - footerEl.classList.add("tabulator-print-footer"); - - footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter; - - - if(typeof footerContent == "string"){ - footerEl.innerHTML = footerContent; - }else { - footerEl.appendChild(footerContent); - } - - this.element.appendChild(footerEl); - } - - document.body.classList.add("tabulator-print-fullscreen-hide"); - document.body.appendChild(this.element); - - if(this.table.options.printFormatter){ - this.table.options.printFormatter(this.element, tableEl); - } - - window.print(); - - this.cleanup(); - - window.scrollTo(scrollX, scrollY); - - this.manualBlock = false; - } -} - -Print.moduleName = "print"; - -class ReactiveData extends Module{ - - constructor(table){ - super(table); - - this.data = false; - this.blocked = false; //block reactivity while performing update - this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with - this.currentVersion = 0; - - this.registerTableOption("reactiveData", false); //enable data reactivity - } - - initialize(){ - if(this.table.options.reactiveData){ - this.subscribe("cell-value-save-before", this.block.bind(this, "cellsave")); - this.subscribe("cell-value-save-after", this.unblock.bind(this, "cellsave")); - this.subscribe("row-data-save-before", this.block.bind(this, "rowsave")); - this.subscribe("row-data-save-after", this.unblock.bind(this, "rowsave")); - this.subscribe("row-data-init-after", this.watchRow.bind(this)); - this.subscribe("data-processing", this.watchData.bind(this)); - this.subscribe("table-destroy", this.unwatchData.bind(this)); - } - } - - watchData(data){ - var self = this, - version; - - this.currentVersion ++; - - version = this.currentVersion; - - this.unwatchData(); - - this.data = data; - - //override array push function - this.origFuncs.push = data.push; - - Object.defineProperty(this.data, "push", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-push"); - - args.forEach((arg) => { - self.table.rowManager.addRowActual(arg, false); - }); - - result = self.origFuncs.push.apply(data, arguments); - - self.unblock("data-push"); - } - - return result; - } - }); - - //override array unshift function - this.origFuncs.unshift = data.unshift; - - Object.defineProperty(this.data, "unshift", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-unshift"); - - args.forEach((arg) => { - self.table.rowManager.addRowActual(arg, true); - }); - - result = self.origFuncs.unshift.apply(data, arguments); - - self.unblock("data-unshift"); - } - - return result; - } - }); - - - //override array shift function - this.origFuncs.shift = data.shift; - - Object.defineProperty(this.data, "shift", { - enumerable: false, - configurable: true, - value: function(){ - var row, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-shift"); - - if(self.data.length){ - row = self.table.rowManager.getRowFromDataObject(self.data[0]); - - if(row){ - row.deleteActual(); - } - } - - result = self.origFuncs.shift.call(data); - - self.unblock("data-shift"); - } - - return result; - } - }); - - //override array pop function - this.origFuncs.pop = data.pop; - - Object.defineProperty(this.data, "pop", { - enumerable: false, - configurable: true, - value: function(){ - var row, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-pop"); - - if(self.data.length){ - row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]); - - if(row){ - row.deleteActual(); - } - } - - result = self.origFuncs.pop.call(data); - - self.unblock("data-pop"); - } - - return result; - } - }); - - - //override array splice function - this.origFuncs.splice = data.splice; - - Object.defineProperty(this.data, "splice", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - start = args[0] < 0 ? data.length + args[0] : args[0], - end = args[1], - newRows = args[2] ? args.slice(2) : false, - startRow, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-splice"); - //add new rows - if(newRows){ - startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false; - - if(startRow){ - newRows.forEach((rowData) => { - self.table.rowManager.addRowActual(rowData, true, startRow, true); - }); - }else { - newRows = newRows.slice().reverse(); - - newRows.forEach((rowData) => { - self.table.rowManager.addRowActual(rowData, true, false, true); - }); - } - } - - //delete removed rows - if(end !== 0){ - var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end); - - oldRows.forEach((rowData, i) => { - var row = self.table.rowManager.getRowFromDataObject(rowData); - - if(row){ - row.deleteActual(i !== oldRows.length - 1); - } - }); - } - - if(newRows || end !== 0){ - self.table.rowManager.reRenderInPosition(); - } - - result = self.origFuncs.splice.apply(data, arguments); - - self.unblock("data-splice"); - } - - return result ; - } - }); - } - - unwatchData(){ - if(this.data !== false){ - for(var key in this.origFuncs){ - Object.defineProperty(this.data, key, { - enumerable: true, - configurable:true, - writable:true, - value: this.origFuncs.key, - }); - } - } - } - - watchRow(row){ - var data = row.getData(); - - for(var key in data){ - this.watchKey(row, data, key); - } - - if(this.table.options.dataTree){ - this.watchTreeChildren(row); - } - } - - watchTreeChildren (row){ - var self = this, - childField = row.getData()[this.table.options.dataTreeChildField], - origFuncs = {}; - - if(childField){ - - origFuncs.push = childField.push; - - Object.defineProperty(childField, "push", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-push"); - - var result = origFuncs.push.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-push"); - } - - return result; - } - }); - - origFuncs.unshift = childField.unshift; - - Object.defineProperty(childField, "unshift", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-unshift"); - - var result = origFuncs.unshift.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-unshift"); - } - - return result; - } - }); - - origFuncs.shift = childField.shift; - - Object.defineProperty(childField, "shift", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-shift"); - - var result = origFuncs.shift.call(childField); - this.rebuildTree(row); - - self.unblock("tree-shift"); - } - - return result; - } - }); - - origFuncs.pop = childField.pop; - - Object.defineProperty(childField, "pop", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-pop"); - - var result = origFuncs.pop.call(childField); - this.rebuildTree(row); - - self.unblock("tree-pop"); - } - - return result; - } - }); - - origFuncs.splice = childField.splice; - - Object.defineProperty(childField, "splice", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-splice"); - - var result = origFuncs.splice.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-splice"); - } - - return result; - } - }); - } - } - - rebuildTree(row){ - this.table.modules.dataTree.initializeRow(row); - this.table.modules.dataTree.layoutRow(row); - this.table.rowManager.refreshActiveData("tree", false, true); - } - - watchKey(row, data, key){ - var self = this, - props = Object.getOwnPropertyDescriptor(data, key), - value = data[key], - version = this.currentVersion; - - Object.defineProperty(data, key, { - set: (newValue) => { - value = newValue; - if(!self.blocked && version === self.currentVersion){ - self.block("key"); - - var update = {}; - update[key] = newValue; - row.updateData(update); - - self.unblock("key"); - } - - if(props.set){ - props.set(newValue); - } - }, - get:() => { - - if(props.get){ - props.get(); - } - - return value; - } - }); - } - - unwatchRow(row){ - var data = row.getData(); - - for(var key in data){ - Object.defineProperty(data, key, { - value:data[key], - }); - } - } - - block(key){ - if(!this.blocked){ - this.blocked = key; - } - } - - unblock(key){ - if(this.blocked === key){ - this.blocked = false; - } - } -} - -ReactiveData.moduleName = "reactiveData"; - -class ResizeColumns extends Module{ - - constructor(table){ - super(table); - - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.latestX = false; - this.handle = null; - this.initialNextColumn = null; - this.nextColumn = null; - - this.initialized = false; - this.registerColumnOption("resizable", true); - this.registerTableOption("resizableColumnFit", false); - } - - initialize(){ - this.subscribe("column-rendered", this.layoutColumnHeader.bind(this)); - } - - initializeEventWatchers(){ - if(!this.initialized){ - - this.subscribe("cell-rendered", this.layoutCellHandles.bind(this)); - this.subscribe("cell-delete", this.deInitializeComponent.bind(this)); - - this.subscribe("cell-height", this.resizeHandle.bind(this)); - this.subscribe("column-moved", this.columnLayoutUpdated.bind(this)); - - this.subscribe("column-hide", this.deInitializeColumn.bind(this)); - this.subscribe("column-show", this.columnLayoutUpdated.bind(this)); - this.subscribe("column-width", this.columnWidthUpdated.bind(this)); - - this.subscribe("column-delete", this.deInitializeComponent.bind(this)); - this.subscribe("column-height", this.resizeHandle.bind(this)); - - this.initialized = true; - } - } - - - layoutCellHandles(cell){ - if(cell.row.type === "row"){ - this.deInitializeComponent(cell); - this.initializeColumn("cell", cell, cell.column, cell.element); - } - } - - layoutColumnHeader(column){ - if(column.definition.resizable){ - this.initializeEventWatchers(); - this.deInitializeComponent(column); - this.initializeColumn("header", column, column, column.element); - } - } - - columnLayoutUpdated(column){ - var prev = column.prevColumn(); - - this.reinitializeColumn(column); - - if(prev){ - this.reinitializeColumn(prev); - } - } - - columnWidthUpdated(column){ - if(column.modules.frozen){ - if(this.table.modules.frozenColumns.leftColumns.includes(column)){ - this.table.modules.frozenColumns.leftColumns.forEach((col) => { - this.reinitializeColumn(col); - }); - }else if(this.table.modules.frozenColumns.rightColumns.includes(column)){ - this.table.modules.frozenColumns.rightColumns.forEach((col) => { - this.reinitializeColumn(col); - }); - } - } - } - - frozenColumnOffset(column){ - var offset = false; - - if(column.modules.frozen){ - offset = column.modules.frozen.marginValue; - - if(column.modules.frozen.position === "left"){ - offset += column.getWidth() - 3; - }else { - if(offset){ - offset -= 3; - } - } - } - - return offset !== false ? offset + "px" : false; - } - - reinitializeColumn(column){ - var frozenOffset = this.frozenColumnOffset(column); - - column.cells.forEach((cell) => { - if(cell.modules.resize && cell.modules.resize.handleEl){ - if(frozenOffset){ - cell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset; - cell.modules.resize.handleEl.style["z-index"] = 11; - } - - cell.element.after(cell.modules.resize.handleEl); - } - }); - - if(column.modules.resize && column.modules.resize.handleEl){ - if(frozenOffset){ - column.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset; - } - - column.element.after(column.modules.resize.handleEl); - } - } - - initializeColumn(type, component, column, element){ - var self = this, - variableHeight = false, - mode = column.definition.resizable, - config = {}, - nearestColumn = column.getLastColumn(); - - //set column resize mode - if(type === "header"){ - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - config = {variableHeight:variableHeight}; - } - - if((mode === true || mode == type) && this._checkResizability(nearestColumn)){ - - var handle = document.createElement('span'); - handle.className = "tabulator-col-resize-handle"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var handleDown = function(e){ - self.startColumn = column; - self.initialNextColumn = self.nextColumn = nearestColumn.nextColumn(); - self._mouseDown(e, nearestColumn, handle); - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, {passive: true}); - - //resize column on double click - handle.addEventListener("dblclick", (e) => { - var oldWidth = nearestColumn.getWidth(); - - e.stopPropagation(); - nearestColumn.reinitializeWidth(true); - - if(oldWidth !== nearestColumn.getWidth()){ - self.dispatch("column-resized", nearestColumn); - self.table.externalEvents.dispatch("columnResized", nearestColumn.getComponent()); - } - }); - - if(column.modules.frozen){ - handle.style.position = "sticky"; - handle.style[column.modules.frozen.position] = this.frozenColumnOffset(column); - } - - config.handleEl = handle; - - if(element.parentNode && column.visible){ - element.after(handle); - } - } - - component.modules.resize = config; - } - - deInitializeColumn(column){ - this.deInitializeComponent(column); - - column.cells.forEach((cell) => { - this.deInitializeComponent(cell); - }); - } - - deInitializeComponent(component){ - var handleEl; - - if(component.modules.resize){ - handleEl = component.modules.resize.handleEl; - - if(handleEl && handleEl.parentElement){ - handleEl.parentElement.removeChild(handleEl); - } - } - } - - resizeHandle(component, height){ - if(component.modules.resize && component.modules.resize.handleEl){ - component.modules.resize.handleEl.style.height = height; - } - } - - _checkResizability(column){ - return column.definition.resizable; - } - - _mouseDown(e, column, handle){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - var x = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX, - startDiff = x - self.startX, - moveDiff = x - self.latestX, - blockedBefore, blockedAfter; - - self.latestX = x; - - if(self.table.rtl){ - startDiff = -startDiff; - moveDiff = -moveDiff; - } - - blockedBefore = column.width == column.minWidth || column.width == column.maxWidth; - - column.setWidth(self.startWidth + startDiff); - - blockedAfter = column.width == column.minWidth || column.width == column.maxWidth; - - if(moveDiff < 0){ - self.nextColumn = self.initialNextColumn; - } - - if(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){ - let colWidth = self.nextColumn.getWidth(); - - if(moveDiff > 0){ - if(colWidth <= self.nextColumn.minWidth){ - self.nextColumn = self.nextColumn.nextColumn(); - } - } - - if(self.nextColumn){ - self.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff); - } - } - - self.table.columnManager.rerenderColumns(true); - - if(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - } - - function mouseUp(e){ - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = false; - } - - if(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - - document.body.removeEventListener("mouseup", mouseUp); - document.body.removeEventListener("mousemove", mouseMove); - - handle.removeEventListener("touchmove", mouseMove); - handle.removeEventListener("touchend", mouseUp); - - self.table.element.classList.remove("tabulator-block-select"); - - if(self.startWidth !== column.getWidth()){ - self.table.columnManager.verticalAlignHeaders(); - - self.dispatch("column-resized", column); - self.table.externalEvents.dispatch("columnResized", column.getComponent()); - } - } - - e.stopPropagation(); //prevent resize from interfering with movable columns - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = true; - } - - self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX; - self.latestX = self.startX; - self.startWidth = column.getWidth(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); - handle.addEventListener("touchmove", mouseMove, {passive: true}); - handle.addEventListener("touchend", mouseUp); - } -} - -ResizeColumns.moduleName = "resizeColumns"; - -class ResizeRows extends Module{ - - constructor(table){ - super(table); - - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; - - this.registerTableOption("resizableRows", false); //resizable rows - } - - initialize(){ - if(this.table.options.resizableRows){ - this.subscribe("row-layout-after", this.initializeRow.bind(this)); - } - } - - initializeRow(row){ - var self = this, - rowEl = row.getElement(); - - var handle = document.createElement('div'); - handle.className = "tabulator-row-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-row-resize-handle prev"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var handleDown = function(e){ - self.startRow = row; - self._mouseDown(e, row, handle); - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, {passive: true}); - - prevHandle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var prevHandleDown = function(e){ - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if(prevRow){ - self.startRow = prevRow; - self._mouseDown(e, prevRow, prevHandle); - } - }; - - prevHandle.addEventListener("mousedown",prevHandleDown); - prevHandle.addEventListener("touchstart",prevHandleDown, {passive: true}); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); - } - - _mouseDown(e, row, handle){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY)); - } - - function mouseUp(e){ - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - document.body.removeEventListener("mouseup", mouseMove); - document.body.removeEventListener("mousemove", mouseMove); - - handle.removeEventListener("touchmove", mouseMove); - handle.removeEventListener("touchend", mouseUp); - - self.table.element.classList.remove("tabulator-block-select"); - - self.dispatchExternal("rowResized", row.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfering with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY; - self.startHeight = row.getHeight(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); - - handle.addEventListener("touchmove", mouseMove, {passive: true}); - handle.addEventListener("touchend", mouseUp); - } -} - -ResizeRows.moduleName = "resizeRows"; - -class ResizeTable extends Module{ - - constructor(table){ - super(table); - - this.binding = false; - this.visibilityObserver = false; - this.resizeObserver = false; - this.containerObserver = false; - - this.tableHeight = 0; - this.tableWidth = 0; - this.containerHeight = 0; - this.containerWidth = 0; - - this.autoResize = false; - - this.visible = false; - - this.initialized = false; - this.initialRedraw = false; - - this.registerTableOption("autoResize", true); //auto resize table - } - - initialize(){ - if(this.table.options.autoResize){ - var table = this.table, - tableStyle; - - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - - if(table.element.parentNode){ - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - if(typeof IntersectionObserver !== "undefined" && typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual"){ - - this.initializeVisibilityObserver(); - - this.autoResize = true; - - this.resizeObserver = new ResizeObserver((entry) => { - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){ - this.tableHeight = nodeHeight; - this.tableWidth = nodeWidth; - - if(table.element.parentNode){ - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - this.redrawTable(); - } - } - }); - - this.resizeObserver.observe(table.element); - - tableStyle = window.getComputedStyle(table.element); - - if(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))){ - - this.containerObserver = new ResizeObserver((entry) => { - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){ - this.containerHeight = nodeHeight; - this.containerWidth = nodeWidth; - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - } - - this.redrawTable(); - } - }); - - this.containerObserver.observe(this.table.element.parentNode); - } - - this.subscribe("table-resize", this.tableResized.bind(this)); - - }else { - this.binding = function(){ - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - table.columnManager.rerenderColumns(true); - table.redraw(); - } - }; - - window.addEventListener("resize", this.binding); - } - - this.subscribe("table-destroy", this.clearBindings.bind(this)); - } - } - - initializeVisibilityObserver(){ - this.visibilityObserver = new IntersectionObserver((entries) => { - this.visible = entries[0].isIntersecting; - - if(!this.initialized){ - this.initialized = true; - this.initialRedraw = !this.visible; - }else { - if(this.visible){ - this.redrawTable(this.initialRedraw); - this.initialRedraw = false; - } - } - }); - - this.visibilityObserver.observe(this.table.element); - } - - redrawTable(force){ - if(this.initialized && this.visible){ - this.table.columnManager.rerenderColumns(true); - this.table.redraw(force); - } - } - - tableResized(){ - this.table.rowManager.redraw(); - } - - clearBindings(){ - if(this.binding){ - window.removeEventListener("resize", this.binding); - } - - if(this.resizeObserver){ - this.resizeObserver.unobserve(this.table.element); - } - - if(this.visibilityObserver){ - this.visibilityObserver.unobserve(this.table.element); - } - - if(this.containerObserver){ - this.containerObserver.unobserve(this.table.element.parentNode); - } - } -} - -ResizeTable.moduleName = "resizeTable"; - -class ResponsiveLayout extends Module{ - - constructor(table){ - super(table); - - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; - this.collapseHandleColumn = false; - - this.registerTableOption("responsiveLayout", false); //responsive layout flags - this.registerTableOption("responsiveLayoutCollapseStartOpen", true); //start showing collapsed data - this.registerTableOption("responsiveLayoutCollapseUseFormatters", true); //responsive layout collapse formatter - this.registerTableOption("responsiveLayoutCollapseFormatter", false); //responsive layout collapse formatter - - this.registerColumnOption("responsive"); - } - - //generate responsive columns list - initialize(){ - if(this.table.options.responsiveLayout){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("column-show", this.updateColumnVisibility.bind(this)); - this.subscribe("column-hide", this.updateColumnVisibility.bind(this)); - this.subscribe("columns-loaded", this.initializeResponsivity.bind(this)); - this.subscribe("column-moved", this.initializeResponsivity.bind(this)); - this.subscribe("column-add", this.initializeResponsivity.bind(this)); - this.subscribe("column-delete", this.initializeResponsivity.bind(this)); - - this.subscribe("table-redrawing", this.tableRedraw.bind(this)); - - if(this.table.options.responsiveLayout === "collapse"){ - this.subscribe("row-data-changed", this.generateCollapsedRowContent.bind(this)); - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-layout", this.layoutRow.bind(this)); - } - } - } - - tableRedraw(force){ - if(["fitColumns", "fitDataStretch"].indexOf(this.layoutMode()) === -1){ - if(!force){ - this.update(); - } - } - } - - initializeResponsivity(){ - var columns = []; - - this.mode = this.table.options.responsiveLayout; - this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData; - this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen; - this.hiddenColumns = []; - - //determine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach((column, i) => { - if(column.modules.responsive){ - if(column.modules.responsive.order && column.modules.responsive.visible){ - column.modules.responsive.index = i; - columns.push(column); - - if(!column.visible && this.mode === "collapse"){ - this.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort((a, b) => { - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || (b.modules.responsive.index - a.modules.responsive.index); - }); - - this.columns = columns; - - if(this.mode === "collapse"){ - this.generateCollapsedContent(); - } - - //assign collapse column - for (let col of this.table.columnManager.columnsByIndex){ - if(col.definition.formatter == "responsiveCollapse"){ - this.collapseHandleColumn = col; - break; - } - } - - if(this.collapseHandleColumn){ - if(this.hiddenColumns.length){ - this.collapseHandleColumn.show(); - }else { - this.collapseHandleColumn.hide(); - } - } - } - - //define layout information - initializeColumn(column){ - var def = column.getDefinition(); - - column.modules.responsive = {order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible:def.visible === false ? false : true}; - } - - initializeRow(row){ - var el; - - if(row.type !== "calc"){ - el = document.createElement("div"); - el.classList.add("tabulator-responsive-collapse"); - - row.modules.responsiveLayout = { - element:el, - open:this.collapseStartOpen, - }; - - if(!this.collapseStartOpen){ - el.style.display = 'none'; - } - } - } - - layoutRow(row){ - var rowEl = row.getElement(); - - if(row.modules.responsiveLayout){ - rowEl.appendChild(row.modules.responsiveLayout.element); - this.generateCollapsedRowContent(row); - } - } - - //update column visibility - updateColumnVisibility(column, responsiveToggle){ - if(!responsiveToggle && column.modules.responsive){ - column.modules.responsive.visible = column.visible; - this.initializeResponsivity(); - } - } - - hideColumn(column){ - var colCount = this.hiddenColumns.length; - - column.hide(false, true); - - if(this.mode === "collapse"){ - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - - if(this.collapseHandleColumn && !colCount){ - this.collapseHandleColumn.show(); - } - } - } - - showColumn(column){ - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if(this.mode === "collapse"){ - index = this.hiddenColumns.indexOf(column); - - if(index > -1){ - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - - if(this.collapseHandleColumn && !this.hiddenColumns.length){ - this.collapseHandleColumn.hide(); - } - } - } - - //redraw columns to fit space - update(){ - var working = true; - - while(working){ - - let width = this.table.modules.layout.getMode() == "fitColumns" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth(); - - let diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width; - - if(diff < 0){ - //table is too wide - let column = this.columns[this.index]; - - if(column){ - this.hideColumn(column); - this.index ++; - }else { - working = false; - } - - }else { - - //table has spare space - let column = this.columns[this.index -1]; - - if(column){ - if(diff > 0){ - if(diff >= column.getWidth()){ - this.showColumn(column); - this.index --; - }else { - working = false; - } - }else { - working = false; - } - }else { - working = false; - } - } - - if(!this.table.rowManager.activeRowsCount){ - this.table.rowManager.renderEmptyScroll(); - } - } - } - - generateCollapsedContent(){ - var rows = this.table.rowManager.getDisplayRows(); - - rows.forEach((row) => { - this.generateCollapsedRowContent(row); - }); - } - - generateCollapsedRowContent(row){ - var el, contents; - - if(row.modules.responsiveLayout){ - el = row.modules.responsiveLayout.element; - - while(el.firstChild) el.removeChild(el.firstChild); - - contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - if(contents){ - el.appendChild(contents); - } - } - } - - generateCollapsedRowData(row){ - var data = row.getData(), - output = [], - mockCellComponent; - - this.hiddenColumns.forEach((column) => { - var value = column.getFieldValue(data); - - if(column.definition.title && column.field){ - if(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){ - - mockCellComponent = { - value:false, - data:{}, - getValue:function(){ - return value; - }, - getData:function(){ - return data; - }, - getType:function(){ - return "cell"; - }, - getElement:function(){ - return document.createElement("div"); - }, - getRow:function(){ - return row.getComponent(); - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - }, - }; - - function onRendered(callback){ - callback(); - } - - output.push({ - field: column.field, - title: column.definition.title, - value: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered) - }); - }else { - output.push({ - field: column.field, - title: column.definition.title, - value: value - }); - } - } - }); - - return output; - } - - formatCollapsedData(data){ - var list = document.createElement("table"); - - data.forEach(function(item){ - var row = document.createElement("tr"); - var titleData = document.createElement("td"); - var valueData = document.createElement("td"); - var node_content; - - var titleHighlight = document.createElement("strong"); - titleData.appendChild(titleHighlight); - this.langBind("columns|" + item.field, function(text){ - titleHighlight.innerHTML = text || item.title; - }); - - if(item.value instanceof Node){ - node_content = document.createElement("div"); - node_content.appendChild(item.value); - valueData.appendChild(node_content); - }else { - valueData.innerHTML = item.value; - } - - row.appendChild(titleData); - row.appendChild(valueData); - list.appendChild(row); - }, this); - - return Object.keys(data).length ? list : ""; - } -} - -ResponsiveLayout.moduleName = "responsiveLayout"; - -class SelectRow extends Module{ - - constructor(table){ - super(table); - - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows - this.headerCheckboxElement = null; // hold header select element - - this.registerTableOption("selectableRows", "highlight"); //highlight rows on hover - this.registerTableOption("selectableRowsRangeMode", "drag"); //highlight rows on hover - this.registerTableOption("selectableRowsRollingSelection", true); //roll selection once maximum number of selectable rows is reached - this.registerTableOption("selectableRowsPersistence", true); // maintain selection when table view is updated - this.registerTableOption("selectableRowsCheck", function(data, row){return true;}); //check whether row is selectable - - this.registerTableFunction("selectRow", this.selectRows.bind(this)); - this.registerTableFunction("deselectRow", this.deselectRows.bind(this)); - this.registerTableFunction("toggleSelectRow", this.toggleRow.bind(this)); - this.registerTableFunction("getSelectedRows", this.getSelectedRows.bind(this)); - this.registerTableFunction("getSelectedData", this.getSelectedData.bind(this)); - - //register component functions - this.registerComponentFunction("row", "select", this.selectRows.bind(this)); - this.registerComponentFunction("row", "deselect", this.deselectRows.bind(this)); - this.registerComponentFunction("row", "toggleSelect", this.toggleRow.bind(this)); - this.registerComponentFunction("row", "isSelected", this.isRowSelected.bind(this)); - } - - initialize(){ - - this.deprecatedOptionsCheck(); - - if(this.table.options.selectableRows === "highlight" && this.table.options.selectableRange){ - this.table.options.selectableRows = false; - } - - if(this.table.options.selectableRows !== false){ - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-deleting", this.rowDeleted.bind(this)); - this.subscribe("rows-wipe", this.clearSelectionData.bind(this)); - this.subscribe("rows-retrieve", this.rowRetrieve.bind(this)); - - if(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){ - this.subscribe("data-refreshing", this.deselectRows.bind(this)); - } - } - } - - deprecatedOptionsCheck(){ - this.deprecationCheck("selectable", "selectableRows", true); - this.deprecationCheck("selectableRollingSelection", "selectableRowsRollingSelection", true); - this.deprecationCheck("selectableRangeMode", "selectableRowsRangeMode", true); - this.deprecationCheck("selectablePersistence", "selectableRowsPersistence", true); - this.deprecationCheck("selectableCheck", "selectableRowsCheck", true); - } - - rowRetrieve(type, prevValue){ - return type === "selected" ? this.selectedRows : prevValue; - } - - rowDeleted(row){ - this._deselectRow(row, true); - } - - clearSelectionData(silent){ - var prevSelected = this.selectedRows.length; - - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if(prevSelected && silent !== true){ - this._rowSelectionChanged(); - } - } - - initializeRow(row){ - var self = this, - selectable = self.checkRowSelectability(row), - element = row.getElement(); - - // trigger end of row selection - var endSelect = function(){ - - setTimeout(function(){ - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - row.modules.select = {selected:false}; - - element.classList.toggle("tabulator-selectable", selectable); - element.classList.toggle("tabulator-unselectable", !selectable); - - //set row selection class - if(self.checkRowSelectability(row)){ - if(self.table.options.selectableRows && self.table.options.selectableRows != "highlight"){ - if(self.table.options.selectableRowsRangeMode === "click"){ - element.addEventListener("click", this.handleComplexRowClick.bind(this, row)); - }else { - element.addEventListener("click", function(e){ - if(!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()){ - self.table._clearSelection(); - } - - if(!self.selecting){ - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function(e){ - if(e.shiftKey){ - self.table._clearSelection(); - - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function(e){ - if(self.selecting){ - self.table._clearSelection(); - self.toggleRow(row); - - if(self.selectPrev[1] == row){ - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function(e){ - if(self.selecting){ - self.table._clearSelection(); - self.selectPrev.unshift(row); - } - }); - } - } - } - } - - handleComplexRowClick(row, e){ - if(e.shiftKey){ - this.table._clearSelection(); - this.lastClickedRow = this.lastClickedRow || row; - - var lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow); - var rowIdx = this.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = this.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if(e.ctrlKey || e.metaKey){ - toggledRows.forEach((toggledRow)=>{ - if(toggledRow !== this.lastClickedRow){ - - if(this.table.options.selectableRows !== true && !this.isRowSelected(row)){ - if(this.selectedRows.length < this.table.options.selectableRows){ - this.toggleRow(toggledRow); - } - }else { - this.toggleRow(toggledRow); - } - } - }); - this.lastClickedRow = row; - }else { - this.deselectRows(undefined, true); - - if(this.table.options.selectableRows !== true){ - if(toggledRows.length > this.table.options.selectableRows){ - toggledRows = toggledRows.slice(0, this.table.options.selectableRows); - } - } - - this.selectRows(toggledRows); - } - this.table._clearSelection(); - } - else if(e.ctrlKey || e.metaKey){ - this.toggleRow(row); - this.lastClickedRow = row; - }else { - this.deselectRows(undefined, true); - this.selectRows(row); - this.lastClickedRow = row; - } - } - - checkRowSelectability(row){ - if(row && row.type === "row"){ - return this.table.options.selectableRowsCheck.call(this.table, row.getComponent()); - } - - return false; - } - - //toggle row selection - toggleRow(row){ - if(this.checkRowSelectability(row)){ - if(row.modules.select && row.modules.select.selected){ - this._deselectRow(row); - }else { - this._selectRow(row); - } - } - } - - //select a number of rows - selectRows(rows){ - var changes = [], - rowMatch, change; - - switch(typeof rows){ - case "undefined": - rowMatch = this.table.rowManager.rows; - break; - - case "number": - rowMatch = this.table.rowManager.findRow(rows); - break; - - case "string": - rowMatch = this.table.rowManager.findRow(rows); - - if(!rowMatch){ - rowMatch = this.table.rowManager.getRows(rows); - } - break; - - default: - rowMatch = rows; - break; - } - - if(Array.isArray(rowMatch)){ - if(rowMatch.length){ - rowMatch.forEach((row) => { - change = this._selectRow(row, true, true); - - if(change){ - changes.push(change); - } - }); - - this._rowSelectionChanged(false, changes); - } - }else { - if(rowMatch){ - this._selectRow(rowMatch, false, true); - } - } - } - - //select an individual row - _selectRow(rowInfo, silent, force){ - //handle max row count - if(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){ - if(this.selectedRows.length >= this.table.options.selectableRows){ - if(this.table.options.selectableRowsRollingSelection){ - this._deselectRow(this.selectedRows[0]); - }else { - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if(row){ - if(this.selectedRows.indexOf(row) == -1){ - row.getElement().classList.add("tabulator-selected"); - if(!row.modules.select){ - row.modules.select = {}; - } - - row.modules.select.selected = true; - if(row.modules.select.checkboxEl){ - row.modules.select.checkboxEl.checked = true; - } - - this.selectedRows.push(row); - - if(this.table.options.dataTreeSelectPropagate){ - this.childRowSelection(row, true); - } - - this.dispatchExternal("rowSelected", row.getComponent()); - - this._rowSelectionChanged(silent, row); - - return row; - } - }else { - if(!silent){ - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } - } - - isRowSelected(row){ - return this.selectedRows.indexOf(row) !== -1; - } - - //deselect a number of rows - deselectRows(rows, silent){ - var changes = [], - rowMatch, change; - - switch(typeof rows){ - case "undefined": - rowMatch = Object.assign([], this.selectedRows); - break; - - case "number": - rowMatch = this.table.rowManager.findRow(rows); - break; - - case "string": - rowMatch = this.table.rowManager.findRow(rows); - - if(!rowMatch){ - rowMatch = this.table.rowManager.getRows(rows); - } - break; - - default: - rowMatch = rows; - break; - } - - if(Array.isArray(rowMatch)){ - if(rowMatch.length){ - rowMatch.forEach((row) => { - change = this._deselectRow(row, true, true); - - if(change){ - changes.push(change); - } - }); - - this._rowSelectionChanged(silent, [], changes); - } - }else { - if(rowMatch){ - this._deselectRow(rowMatch, silent, true); - } - } - } - - //deselect an individual row - _deselectRow(rowInfo, silent){ - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index, element; - - if(row){ - index = self.selectedRows.findIndex(function(selectedRow){ - return selectedRow == row; - }); - - if(index > -1){ - - element = row.getElement(); - - if(element){ - element.classList.remove("tabulator-selected"); - } - - if(!row.modules.select){ - row.modules.select = {}; - } - - row.modules.select.selected = false; - if(row.modules.select.checkboxEl){ - row.modules.select.checkboxEl.checked = false; - } - self.selectedRows.splice(index, 1); - - if(this.table.options.dataTreeSelectPropagate){ - this.childRowSelection(row, false); - } - - this.dispatchExternal("rowDeselected", row.getComponent()); - - self._rowSelectionChanged(silent, undefined, row); - - return row; - } - }else { - if(!silent){ - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } - } - - getSelectedData(){ - var data = []; - - this.selectedRows.forEach(function(row){ - data.push(row.getData()); - }); - - return data; - } - - getSelectedRows(){ - var rows = []; - - this.selectedRows.forEach(function(row){ - rows.push(row.getComponent()); - }); - - return rows; - } - - _rowSelectionChanged(silent, selected = [], deselected = []){ - if(this.headerCheckboxElement){ - if(this.selectedRows.length === 0){ - this.headerCheckboxElement.checked = false; - this.headerCheckboxElement.indeterminate = false; - } else if(this.table.rowManager.rows.length === this.selectedRows.length){ - this.headerCheckboxElement.checked = true; - this.headerCheckboxElement.indeterminate = false; - } else { - this.headerCheckboxElement.indeterminate = true; - this.headerCheckboxElement.checked = false; - } - } - - if(!silent){ - if(!Array.isArray(selected)){ - selected = [selected]; - } - - selected = selected.map(row => row.getComponent()); - - if(!Array.isArray(deselected)){ - deselected = [deselected]; - } - - deselected = deselected.map(row => row.getComponent()); - - this.dispatchExternal("rowSelectionChanged", this.getSelectedData(), this.getSelectedRows(), selected, deselected); - } - } - - registerRowSelectCheckbox (row, element) { - if(!row._row.modules.select){ - row._row.modules.select = {}; - } - - row._row.modules.select.checkboxEl = element; - } - - registerHeaderSelectCheckbox (element) { - this.headerCheckboxElement = element; - } - - childRowSelection(row, select){ - var children = this.table.modules.dataTree.getChildren(row, true); - - if(select){ - for(let child of children){ - this._selectRow(child, true); - } - }else { - for(let child of children){ - this._deselectRow(child, true); - } - } - } -} - -SelectRow.moduleName = "selectRow"; - -//sort numbers -function number$1(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var decimal = params.decimalSeparator; - var thousand = params.thousandSeparator; - var emptyAlign = 0; - - a = String(a); - b = String(b); - - if(thousand){ - a = a.split(thousand).join(""); - b = b.split(thousand).join(""); - } - - if(decimal){ - a = a.split(decimal).join("."); - b = b.split(decimal).join("."); - } - - a = parseFloat(a); - b = parseFloat(b); - - //handle non numeric values - if(isNaN(a)){ - emptyAlign = isNaN(b) ? 0 : -1; - }else if(isNaN(b)){ - emptyAlign = 1; - }else { - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} - -//sort strings -function string(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if(!a){ - emptyAlign = !b ? 0 : -1; - }else if(!b){ - emptyAlign = 1; - }else { - //compare valid values - switch(typeof params.locale){ - case "boolean": - if(params.locale){ - locale = this.langLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} - -//sort datetime -function datetime$2(a, b, aRow, bRow, column, dir, params){ - var DT = window.DateTime || luxon.DateTime; - var format = params.format || "dd/MM/yyyy HH:mm:ss", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - if(typeof DT != "undefined"){ - if(!DT.isDateTime(a)){ - if(format === "iso"){ - a = DT.fromISO(String(a)); - }else { - a = DT.fromFormat(String(a), format); - } - } - - if(!DT.isDateTime(b)){ - if(format === "iso"){ - b = DT.fromISO(String(b)); - }else { - b = DT.fromFormat(String(b), format); - } - } - - if(!a.isValid){ - emptyAlign = !b.isValid ? 0 : -1; - }else if(!b.isValid){ - emptyAlign = 1; - }else { - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - - }else { - console.error("Sort Error - 'datetime' sorter is dependant on luxon.js"); - } -} - -//sort date -function date$1(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "dd/MM/yyyy"; - } - - return datetime$2.call(this, a, b, aRow, bRow, column, dir, params); -} - -//sort times -function time$1(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "HH:mm"; - } - - return datetime$2.call(this, a, b, aRow, bRow, column, dir, params); -} - -//sort booleans -function boolean(a, b, aRow, bRow, column, dir, params){ - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; -} - -//sort if element contains any data -function array(a, b, aRow, bRow, column, dir, params){ - var type = params.type || "length", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - function calc(value){ - var result; - - switch(type){ - case "length": - result = value.length; - break; - - case "sum": - result = value.reduce(function(c, d){ - return c + d; - }); - break; - - case "max": - result = Math.max.apply(null, value) ; - break; - - case "min": - result = Math.min.apply(null, value) ; - break; - - case "avg": - result = value.reduce(function(c, d){ - return c + d; - }) / value.length; - break; - } - - return result; - } - - //handle non array values - if(!Array.isArray(a)){ - emptyAlign = !Array.isArray(b) ? 0 : -1; - }else if(!Array.isArray(b)){ - emptyAlign = 1; - }else { - return calc(b) - calc(a); - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} - -//sort if element contains any data -function exists(a, b, aRow, bRow, column, dir, params){ - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; -} - -//sort alpha numeric strings -function alphanum(as, bs, aRow, bRow, column, dir, params){ - var a, b, a1, b1, i= 0, L, rx = /(\d+)|(\D+)/g, rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if(!as && as!== 0){ - emptyAlign = !bs && bs!== 0 ? 0 : -1; - }else if(!bs && bs!== 0){ - emptyAlign = 1; - }else { - - if(isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if(a === b) return 0; - if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while(i < L){ - a1= a[i]; - b1= b[i++]; - if(a1 !== b1){ - if(isFinite(a1) && isFinite(b1)){ - if(a1.charAt(0) === "0") a1 = "." + a1; - if(b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } - else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} - -var defaultSorters = { - number:number$1, - string:string, - date:date$1, - time:time$1, - datetime:datetime$2, - boolean:boolean, - array:array, - exists:exists, - alphanum:alphanum -}; - -class Sort extends Module{ - - constructor(table){ - super(table); - - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render - - this.registerTableOption("sortMode", "local"); //local or remote sorting - - this.registerTableOption("initialSort", false); //initial sorting criteria - this.registerTableOption("columnHeaderSortMulti", true); //multiple or single column sorting - this.registerTableOption("sortOrderReverse", false); //reverse internal sort ordering - this.registerTableOption("headerSortElement", "
    "); //header sort element - this.registerTableOption("headerSortClickElement", "header"); //element which triggers sort when clicked - - this.registerColumnOption("sorter"); - this.registerColumnOption("sorterParams"); - - this.registerColumnOption("headerSort", true); - this.registerColumnOption("headerSortStartingDir"); - this.registerColumnOption("headerSortTristate"); - - } - - initialize(){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("table-built", this.tableBuilt.bind(this)); - this.registerDataHandler(this.sort.bind(this), 20); - - this.registerTableFunction("setSort", this.userSetSort.bind(this)); - this.registerTableFunction("getSorters", this.getSort.bind(this)); - this.registerTableFunction("clearSort", this.clearSort.bind(this)); - - if(this.table.options.sortMode === "remote"){ - this.subscribe("data-params", this.remoteSortParams.bind(this)); - } - } - - tableBuilt(){ - if(this.table.options.initialSort){ - this.setSort(this.table.options.initialSort); - } - } - - remoteSortParams(data, config, silent, params){ - var sorters = this.getSort(); - - sorters.forEach((item) => { - delete item.column; - }); - - params.sort = sorters; - - return params; - } - - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - userSetSort(sortList, dir){ - this.setSort(sortList, dir); - // this.table.rowManager.sorterRefresh(); - this.refreshSort(); - } - - clearSort(){ - this.clear(); - // this.table.rowManager.sorterRefresh(); - this.refreshSort(); - } - - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - //initialize column header for sorting - initializeColumn(column){ - var sorter = false, - colEl, - arrowEl; - - switch(typeof column.definition.sorter){ - case "string": - if(Sort.sorters[column.definition.sorter]){ - sorter = Sort.sorters[column.definition.sorter]; - }else { - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter:sorter, dir:"none", - params:column.definition.sorterParams || {}, - startingDir:column.definition.headerSortStartingDir || "asc", - tristate: column.definition.headerSortTristate, - }; - - if(column.definition.headerSort !== false){ - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-col-sorter"); - - switch(this.table.options.headerSortClickElement){ - case "icon": - arrowEl.classList.add("tabulator-col-sorter-element"); - break; - case "header": - colEl.classList.add("tabulator-col-sorter-element"); - break; - default: - colEl.classList.add("tabulator-col-sorter-element"); - break; - } - - switch(this.table.options.headerSortElement){ - case "function": - //do nothing - break; - - case "object": - arrowEl.appendChild(this.table.options.headerSortElement); - break; - - default: - arrowEl.innerHTML = this.table.options.headerSortElement; - } - - //create sorter arrow - column.titleHolderElement.appendChild(arrowEl); - - column.modules.sort.element = arrowEl; - - this.setColumnHeaderSortIcon(column, "none"); - - if(this.table.options.headerSortClickElement === "icon"){ - arrowEl.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - } - - //sort on click - (this.table.options.headerSortClickElement === "icon" ? arrowEl : colEl).addEventListener("click", (e) => { - var dir = "", - sorters=[], - match = false; - - if(column.modules.sort){ - if(column.modules.sort.tristate){ - if(column.modules.sort.dir == "none"){ - dir = column.modules.sort.startingDir; - }else { - if(column.modules.sort.dir == column.modules.sort.startingDir){ - dir = column.modules.sort.dir == "asc" ? "desc" : "asc"; - }else { - dir = "none"; - } - } - }else { - switch(column.modules.sort.dir){ - case "asc": - dir = "desc"; - break; - - case "desc": - dir = "asc"; - break; - - default: - dir = column.modules.sort.startingDir; - } - } - - if (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = this.getSort(); - - match = sorters.findIndex((sorter) => { - return sorter.field === column.getField(); - }); - - if(match > -1){ - sorters[match].dir = dir; - - match = sorters.splice(match, 1)[0]; - if(dir != "none"){ - sorters.push(match); - } - }else { - if(dir != "none"){ - sorters.push({column:column, dir:dir}); - } - } - - //add to existing sort - this.setSort(sorters); - }else { - if(dir == "none"){ - this.clear(); - }else { - //sort by column only - this.setSort(column, dir); - } - - } - - // this.table.rowManager.sorterRefresh(!this.sortList.length); - this.refreshSort(); - } - }); - } - } - - refreshSort(){ - if(this.table.options.sortMode === "remote"){ - this.reloadData(null, false, false); - }else { - this.refreshData(true); - } - - //TODO - Persist left position of row manager - // left = this.scrollLeft; - // this.scrollHorizontal(left); - } - - //check if the sorters have changed since last use - hasChanged(){ - var changed = this.changed; - this.changed = false; - return changed; - } - - //return current sorters - getSort(){ - var self = this, - sorters = []; - - self.sortList.forEach(function(item){ - if(item.column){ - sorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir}); - } - }); - - return sorters; - } - - //change sort list and trigger sort - setSort(sortList, dir){ - var self = this, - newSortList = []; - - if(!Array.isArray(sortList)){ - sortList = [{column: sortList, dir:dir}]; - } - - sortList.forEach(function(item){ - var column; - - column = self.table.columnManager.findColumn(item.column); - - if(column){ - item.column = column; - newSortList.push(item); - self.changed = true; - }else { - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - - }); - - self.sortList = newSortList; - - this.dispatch("sort-changed"); - } - - //clear sorters - clear(){ - this.setSort([]); - } - - //find appropriate sorter for column - findSorter(column){ - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, value; - - if(row){ - row = row.getData(); - field = column.getField(); - - if(field){ - - value = column.getFieldValue(row); - - switch(typeof value){ - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if(!isNaN(value) && value !== ""){ - sorter = "number"; - }else { - if(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){ - sorter = "alphanum"; - } - } - break; - } - } - } - - return Sort.sorters[sorter]; - } - - //work through sort list sorting data - sort(data){ - var self = this, - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList, - sortListActual = [], - rowComponents = []; - - if(this.subscribedExternal("dataSorting")){ - this.dispatchExternal("dataSorting", self.getSort()); - } - - self.clearColumnHeaders(); - - if(this.table.options.sortMode !== "remote"){ - - //build list of valid sorters and trigger column specific callbacks before sort begins - sortList.forEach(function(item, i){ - var sortObj; - - if(item.column){ - sortObj = item.column.modules.sort; - - if(sortObj){ - - //if no sorter has been defined, take a guess - if(!sortObj.sorter){ - sortObj.sorter = self.findSorter(item.column); - } - - item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params; - - sortListActual.push(item); - } - - self.setColumnHeader(item.column, item.dir); - } - }); - - //sort data - if (sortListActual.length) { - self._sortItems(data, sortListActual); - } - - }else { - sortList.forEach(function(item, i){ - self.setColumnHeader(item.column, item.dir); - }); - } - - if(this.subscribedExternal("dataSorted")){ - data.forEach((row) => { - rowComponents.push(row.getComponent()); - }); - - this.dispatchExternal("dataSorted", self.getSort(), rowComponents); - } - - return data; - } - - //clear sort arrows on columns - clearColumnHeaders(){ - this.table.columnManager.getRealColumns().forEach((column) => { - if(column.modules.sort){ - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - this.setColumnHeaderSortIcon(column, "none"); - } - }); - } - - //set the column header sort direction - setColumnHeader(column, dir){ - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir === "asc" ? "ascending" : "descending"); - this.setColumnHeaderSortIcon(column, dir); - } - - setColumnHeaderSortIcon(column, dir){ - var sortEl = column.modules.sort.element, - arrowEl; - - if(column.definition.headerSort && typeof this.table.options.headerSortElement === "function"){ - while(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild); - - arrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir); - - if(typeof arrowEl === "object"){ - sortEl.appendChild(arrowEl); - }else { - sortEl.innerHTML = arrowEl; - } - } - } - - //sort each item in sort list - _sortItems(data, sortList){ - var sorterCount = sortList.length - 1; - - data.sort((a, b) => { - var result; - - for(var i = sorterCount; i>= 0; i--){ - let sortItem = sortList[i]; - - result = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); - - if(result !== 0){ - break; - } - } - - return result; - }); - } - - //process individual rows for a sort function on active data - _sortRow(a, b, column, dir, params){ - var el1Comp, el2Comp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); - } -} - -Sort.moduleName = "sort"; - -//load defaults -Sort.sorters = defaultSorters; - -class RangeComponent { - constructor(range) { - this._range = range; - - return new Proxy(this, { - get: function (target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - } else { - return target._range.table.componentFunctionBinder.handle("range", target._range, name); - } - }, - }); - } - - getElement() { - return this._range.element; - } - - getData() { - return this._range.getData(); - } - - getCells() { - return this._range.getCells(true); - } - - getStructuredCells() { - return this._range.getStructuredCells(); - } - - getRows() { - return this._range.getRows().map((row) => row.getComponent()); - } - - getColumns() { - return this._range.getColumns().map((column) => column.getComponent()); - } - - getBounds() { - return this._range.getBounds(); - } - - getTopEdge() { - return this._range.top; - } - - getBottomEdge() { - return this._range.bottom; - } - - getLeftEdge() { - return this._range.left; - } - - getRightEdge() { - return this._range.right; - } - - setBounds(start, end){ - if(this._range.destroyedGuard("setBounds")){ - this._range.setBounds(start ? start._cell : start, end ? end._cell : end); - } - } - - setStartBound(start){ - if(this._range.destroyedGuard("setStartBound")){ - this._range.setEndBound(start ? start._cell : start); - this._range.rangeManager.layoutElement(); - } - } - - setEndBound(end){ - if(this._range.destroyedGuard("setEndBound")){ - this._range.setEndBound(end ? end._cell : end); - this._range.rangeManager.layoutElement(); - } - } - - clearValues(){ - if(this._range.destroyedGuard("clearValues")){ - this._range.clearValues(); - } - } - - remove(){ - if(this._range.destroyedGuard("remove")){ - this._range.destroy(true); - } - } -} - -class Range extends CoreFeature{ - constructor(table, rangeManager, start, end) { - super(table); - - this.rangeManager = rangeManager; - this.element = null; - this.initialized = false; - this.initializing = { - start:false, - end:false, - }; - this.destroyed = false; - - this.top = 0; - this.bottom = 0; - this.left = 0; - this.right = 0; - - this.table = table; - this.start = {row:0, col:0}; - this.end = {row:0, col:0}; - - if(this.rangeManager.rowHeader){ - this.left = 1; - this.right = 1; - this.start.col = 1; - this.end.col = 1; - } - - this.initElement(); - - setTimeout(() => { - this.initBounds(start, end); - }); - } - - initElement(){ - this.element = document.createElement("div"); - this.element.classList.add("tabulator-range"); - } - - initBounds(start, end){ - this._updateMinMax(); - - if(start){ - this.setBounds(start, end || start); - } - } - - /////////////////////////////////// - /////// Boundary Setup /////// - /////////////////////////////////// - - setStart(row, col) { - if(this.start.row !== row || this.start.col !== col){ - this.start.row = row; - this.start.col = col; - - this.initializing.start = true; - this._updateMinMax(); - } - } - - setEnd(row, col) { - if(this.end.row !== row || this.end.col !== col){ - this.end.row = row; - this.end.col = col; - - this.initializing.end = true; - this._updateMinMax(); - } - } - - setBounds(start, end, visibleRows){ - if(start){ - this.setStartBound(start); - } - - this.setEndBound(end || start); - this.rangeManager.layoutElement(visibleRows); - } - - setStartBound(element){ - var row, col; - - if (element.type === "column") { - if(this.rangeManager.columnSelection){ - this.setStart(0, element.getPosition() - 1); - } - }else { - row = element.row.position - 1; - col = element.column.getPosition() - 1; - - if (element.column === this.rangeManager.rowHeader) { - this.setStart(row, 1); - } else { - this.setStart(row, col); - } - } - } - - setEndBound(element){ - var rowsCount = this._getTableRows().length, - row, col, isRowHeader; - - if (element.type === "column") { - if(this.rangeManager.columnSelection){ - if (this.rangeManager.selecting === "column") { - this.setEnd(rowsCount - 1, element.getPosition() - 1); - } else if (this.rangeManager.selecting === "cell") { - this.setEnd(0, element.getPosition() - 1); - } - } - }else { - row = element.row.position - 1; - col = element.column.getPosition() - 1; - isRowHeader = element.column === this.rangeManager.rowHeader; - - if (this.rangeManager.selecting === "row") { - this.setEnd(row, this._getTableColumns().length - 1); - } else if (this.rangeManager.selecting !== "row" && isRowHeader) { - this.setEnd(row, 0); - } else if (this.rangeManager.selecting === "column") { - this.setEnd(rowsCount - 1, col); - } else { - this.setEnd(row, col); - } - } - } - - _updateMinMax() { - this.top = Math.min(this.start.row, this.end.row); - this.bottom = Math.max(this.start.row, this.end.row); - this.left = Math.min(this.start.col, this.end.col); - this.right = Math.max(this.start.col, this.end.col); - - if(this.initialized){ - this.dispatchExternal("rangeChanged", this.getComponent()); - }else { - if(this.initializing.start && this.initializing.end){ - this.initialized = true; - this.dispatchExternal("rangeAdded", this.getComponent()); - } - } - } - - _getTableColumns() { - return this.table.columnManager.getVisibleColumnsByIndex(); - } - - _getTableRows() { - return this.table.rowManager.getDisplayRows(); - } - - /////////////////////////////////// - /////// Rendering /////// - /////////////////////////////////// - - layout() { - var _vDomTop = this.table.rowManager.renderer.vDomTop, - _vDomBottom = this.table.rowManager.renderer.vDomBottom, - _vDomLeft = this.table.columnManager.renderer.leftCol, - _vDomRight = this.table.columnManager.renderer.rightCol, - top, bottom, left, right, topLeftCell, bottomRightCell; - - if (_vDomTop == null) { - _vDomTop = 0; - } - - if (_vDomBottom == null) { - _vDomBottom = Infinity; - } - - if (_vDomLeft == null) { - _vDomLeft = 0; - } - - if (_vDomRight == null) { - _vDomRight = Infinity; - } - - if (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) { - top = Math.max(this.top, _vDomTop); - bottom = Math.min(this.bottom, _vDomBottom); - left = Math.max(this.left, _vDomLeft); - right = Math.min(this.right, _vDomRight); - - topLeftCell = this.rangeManager.getCell(top, left); - bottomRightCell = this.rangeManager.getCell(bottom, right); - - this.element.classList.add("tabulator-range-active"); - // this.element.classList.toggle("tabulator-range-active", this === this.rangeManager.activeRange); - - this.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + "px"; - this.element.style.top = topLeftCell.row.getElement().offsetTop + "px"; - this.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + "px"; - this.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + "px"; - } - } - - atTopLeft(cell) { - return cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left; - } - - atBottomRight(cell) { - return cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right; - } - - occupies(cell) { - return this.occupiesRow(cell.row) && this.occupiesColumn(cell.column); - } - - occupiesRow(row) { - return this.top <= row.position - 1 && row.position - 1 <= this.bottom; - } - - occupiesColumn(col) { - return this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right; - } - - overlaps(left, top, right, bottom) { - if ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){ - return false; - } - - return true; - } - - getData() { - var data = [], - rows = this.getRows(), - columns = this.getColumns(); - - rows.forEach((row) => { - var rowData = row.getData(), - result = {}; - - columns.forEach((column) => { - result[column.field] = rowData[column.field]; - }); - - data.push(result); - }); - - return data; - } - - getCells(structured, component) { - var cells = [], - rows = this.getRows(), - columns = this.getColumns(); - - if (structured) { - cells = rows.map((row) => { - var arr = []; - - row.getCells().forEach((cell) => { - if (columns.includes(cell.column)) { - arr.push(component ? cell.getComponent() : cell); - } - }); - - return arr; - }); - } else { - rows.forEach((row) => { - row.getCells().forEach((cell) => { - if (columns.includes(cell.column)) { - cells.push(component ? cell.getComponent() : cell); - } - }); - }); - } - - return cells; - } - - getStructuredCells() { - return this.getCells(true, true); - } - - getRows() { - return this._getTableRows().slice(this.top, this.bottom + 1); - } - - getColumns() { - return this._getTableColumns().slice(this.left, this.right + 1); - } - - clearValues(){ - var cells = this.getCells(); - var clearValue = this.table.options.selectableRangeClearCellsValue; - - this.table.blockRedraw(); - - cells.forEach((cell) => { - cell.setValue(clearValue); - }); - - this.table.restoreRedraw(); - - } - - getBounds(component){ - var cells = this.getCells(false, component), - output = { - start:null, - end:null, - }; - - if(cells.length){ - output.start = cells[0]; - output.end = cells[cells.length - 1]; - }else { - console.warn("No bounds defined on range"); - } - - return output; - } - - getComponent() { - if (!this.component) { - this.component = new RangeComponent(this); - } - return this.component; - } - - destroy(notify) { - this.destroyed = true; - - this.element.remove(); - - if(notify){ - this.rangeManager.rangeRemoved(this); - } - - if(this.initialized){ - this.dispatchExternal("rangeRemoved", this.getComponent()); - } - } - - destroyedGuard(func){ - if(this.destroyed){ - console.warn("You cannot call the " + func + " function on a destroyed range"); - } - - return !this.destroyed; - } -} - -class SelectRange extends Module { - constructor(table) { - super(table); - - this.selecting = "cell"; - this.mousedown = false; - this.ranges = []; - this.overlay = null; - this.rowHeader = null; - this.layoutChangeTimeout = null; - this.columnSelection = false; - this.rowSelection = false; - this.maxRanges = 0; - this.activeRange = false; - this.blockKeydown = false; - - this.keyDownEvent = this._handleKeyDown.bind(this); - this.mouseUpEvent = this._handleMouseUp.bind(this); - - this.registerTableOption("selectableRange", false); //enable selectable range - this.registerTableOption("selectableRangeColumns", false); //enable selectable range - this.registerTableOption("selectableRangeRows", false); //enable selectable range - this.registerTableOption("selectableRangeClearCells", false); //allow clearing of active range - this.registerTableOption("selectableRangeClearCellsValue", undefined); //value for cleared active range - - this.registerTableFunction("getRangesData", this.getRangesData.bind(this)); - this.registerTableFunction("getRanges", this.getRanges.bind(this)); - this.registerTableFunction("addRange", this.addRangeFromComponent.bind(this)); - - this.registerComponentFunction("cell", "getRanges", this.cellGetRanges.bind(this)); - this.registerComponentFunction("row", "getRanges", this.rowGetRanges.bind(this)); - this.registerComponentFunction("column", "getRanges", this.colGetRanges.bind(this)); - } - - /////////////////////////////////// - /////// Initialization /////// - /////////////////////////////////// - - initialize() { - if (this.options("selectableRange")) { - if(!this.options("selectableRows")){ - - this.maxRanges = this.options("selectableRange"); - - this.initializeTable(); - this.initializeWatchers(); - }else { - console.warn("SelectRange functionality cannot be used in conjunction with row selection"); - } - } - } - - - initializeTable() { - this.overlay = document.createElement("div"); - this.overlay.classList.add("tabulator-range-overlay"); - - this.rangeContainer = document.createElement("div"); - this.rangeContainer.classList.add("tabulator-range-container"); - - this.activeRangeCellElement = document.createElement("div"); - this.activeRangeCellElement.classList.add("tabulator-range-cell-active"); - - this.overlay.appendChild(this.rangeContainer); - this.overlay.appendChild(this.activeRangeCellElement); - - this.table.rowManager.element.addEventListener("keydown", this.keyDownEvent); - - this.resetRanges(); - - this.table.rowManager.element.appendChild(this.overlay); - this.table.columnManager.element.setAttribute("tabindex", 0); - this.table.element.classList.add("tabulator-ranges"); - } - - initializeWatchers() { - this.columnSelection = this.options("selectableRangeColumns"); - this.rowSelection = this.options("selectableRangeRows"); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-mousedown", this.handleColumnMouseDown.bind(this)); - this.subscribe("column-mousemove", this.handleColumnMouseMove.bind(this)); - this.subscribe("column-resized", this.handleColumnResized.bind(this)); - this.subscribe("column-width", this.layoutChange.bind(this)); - this.subscribe("column-height", this.layoutChange.bind(this)); - this.subscribe("column-resized", this.layoutChange.bind(this)); - this.subscribe("columns-loaded", this.updateHeaderColumn.bind(this)); - - this.subscribe("cell-height", this.layoutChange.bind(this)); - this.subscribe("cell-rendered", this.renderCell.bind(this)); - this.subscribe("cell-mousedown", this.handleCellMouseDown.bind(this)); - this.subscribe("cell-mousemove", this.handleCellMouseMove.bind(this)); - this.subscribe("cell-click", this.handleCellClick.bind(this)); - this.subscribe("cell-editing", this.handleEditingCell.bind(this)); - - this.subscribe("page-changed", this.redraw.bind(this)); - - this.subscribe("scroll-vertical", this.layoutChange.bind(this)); - this.subscribe("scroll-horizontal", this.layoutChange.bind(this)); - - this.subscribe("data-destroy", this.tableDestroyed.bind(this)); - this.subscribe("data-processed", this.resetRanges.bind(this)); - - this.subscribe("table-layout", this.layoutElement.bind(this)); - this.subscribe("table-redraw", this.redraw.bind(this)); - this.subscribe("table-destroy", this.tableDestroyed.bind(this)); - - this.subscribe("edit-editor-clear", this.finishEditingCell.bind(this)); - this.subscribe("edit-blur", this.restoreFocus.bind(this)); - - this.subscribe("keybinding-nav-prev", this.keyNavigate.bind(this, "left")); - this.subscribe("keybinding-nav-next", this.keyNavigate.bind(this, "right")); - this.subscribe("keybinding-nav-left", this.keyNavigate.bind(this, "left")); - this.subscribe("keybinding-nav-right", this.keyNavigate.bind(this, "right")); - this.subscribe("keybinding-nav-up", this.keyNavigate.bind(this, "up")); - this.subscribe("keybinding-nav-down", this.keyNavigate.bind(this, "down")); - this.subscribe("keybinding-nav-range", this.keyNavigateRange.bind(this)); - } - - - initializeColumn(column) { - if(this.columnSelection && column.definition.headerSort && this.options("headerSortClickElement") !== "icon"){ - console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."); - } - - if (column.modules.edit) ; - } - - updateHeaderColumn(){ - if(this.rowSelection){ - this.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0]; - - if(this.rowHeader){ - this.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + " tabulator-range-row-header"; - - if(this.rowHeader.definition.headerSort){ - console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"); - } - - if(this.rowHeader.definition.editor){ - console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior"); - } - } - } - } - - /////////////////////////////////// - /////// Table Functions /////// - /////////////////////////////////// - - getRanges(){ - return this.ranges.map((range) => range.getComponent()); - } - - getRangesData() { - return this.ranges.map((range) => range.getData()); - } - - addRangeFromComponent(start, end){ - start = start ? start._cell : null; - end = end ? end._cell : null; - - return this.addRange(start, end); - } - - /////////////////////////////////// - /////// Component Functions /////// - /////////////////////////////////// - - cellGetRanges(cell){ - var ranges = []; - - if (cell.column === this.rowHeader) { - ranges = this.ranges.filter((range) => range.occupiesRow(cell.row)); - } else { - ranges = this.ranges.filter((range) => range.occupies(cell)); - } - - return ranges.map((range) => range.getComponent()); - } - - rowGetRanges(row){ - var ranges = this.ranges.filter((range) => range.occupiesRow(row)); - - return ranges.map((range) => range.getComponent()); - } - - colGetRanges(col){ - var ranges = this.ranges.filter((range) => range.occupiesColumn(col)); - - return ranges.map((range) => range.getComponent()); - } - - /////////////////////////////////// - ////////// Event Handlers ///////// - /////////////////////////////////// - - _handleMouseUp(e){ - this.mousedown = false; - document.removeEventListener("mouseup", this.mouseUpEvent); - } - - _handleKeyDown(e) { - if (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) { - if (e.key === "Enter") { - // is editing a cell? - if (this.table.modules.edit && this.table.modules.edit.currentCell) { - return; - } - - this.table.modules.edit.editCell(this.getActiveCell()); - - e.preventDefault(); - } - - if ((e.key === "Backspace" || e.key === "Delete") && this.options("selectableRangeClearCells")) { - if(this.activeRange){ - this.activeRange.clearValues(); - } - } - } - } - - initializeFocus(cell){ - var range; - - try{ - if (document.selection) { // IE - range = document.body.createTextRange(); - range.moveToElementText(cell.getElement()); - range.select(); - } else if (window.getSelection) { - range = document.createRange(); - range.selectNode(cell.getElement()); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - } - }catch(e){} - } - - restoreFocus(element){ - this.table.rowManager.element.focus(); - - return true; - } - - /////////////////////////////////// - ////// Column Functionality /////// - /////////////////////////////////// - - handleColumnResized(column) { - var selected; - - if (this.selecting !== "column" && this.selecting !== "all") { - return; - } - - selected = this.ranges.some((range) => range.occupiesColumn(column)); - - if (!selected) { - return; - } - - this.ranges.forEach((range) => { - var selectedColumns = range.getColumns(true); - - selectedColumns.forEach((selectedColumn) => { - if (selectedColumn !== column) { - selectedColumn.setWidth(column.width); - } - }); - }); - } - - handleColumnMouseDown(event, column) { - if (event.button === 2 && (this.selecting === "column" || this.selecting === "all") && this.activeRange.occupiesColumn(column)) { - return; - } - - this.mousedown = true; - - document.addEventListener("mouseup", this.mouseUpEvent); - - this.newSelection(event, column); - } - - handleColumnMouseMove(e, column) { - if (column === this.rowHeader || !this.mousedown || this.selecting === 'all') { - return; - } - - this.activeRange.setBounds(false, column, true); - } - - /////////////////////////////////// - //////// Cell Functionality /////// - /////////////////////////////////// - - renderCell(cell) { - var el = cell.getElement(), - rangeIdx = this.ranges.findIndex((range) => range.occupies(cell)); - - el.classList.toggle("tabulator-range-selected", rangeIdx !== -1); - el.classList.toggle("tabulator-range-only-cell-selected", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) && this.ranges[0].atBottomRight(cell)); - - el.dataset.range = rangeIdx; - } - - handleCellMouseDown(event, cell) { - if (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === "row" || this.selecting === "all") && this.activeRange.occupiesRow(cell.row)))) { - return; - } - - this.mousedown = true; - - document.addEventListener("mouseup", this.mouseUpEvent); - - this.newSelection(event, cell); - } - - handleCellMouseMove(e, cell) { - if (!this.mousedown || this.selecting === "all") { - return; - } - - this.activeRange.setBounds(false, cell, true); - } - - handleCellClick(e, cell){ - this.initializeFocus(cell); - } - - handleEditingCell(cell) { - if(this.activeRange){ - this.activeRange.setBounds(cell); - } - } - - finishEditingCell() { - this.blockKeydown = true; - this.table.rowManager.element.focus(); - - setTimeout(() => { - this.blockKeydown = false; - }, 10); - } - - /////////////////////////////////// - /////// Navigation /////// - /////////////////////////////////// - - keyNavigate(dir, e){ - if(this.navigate(false, false, dir)){ - e.preventDefault(); - } - } - - keyNavigateRange(e, dir, jump, expand){ - if(this.navigate(jump, expand, dir)){ - e.preventDefault(); - } - } - - navigate(jump, expand, dir) { - var moved = false, - range, rangeEdge, nextRow, nextCol, row, column; - - // Don't navigate while editing - if (this.table.modules.edit && this.table.modules.edit.currentCell) { - return false; - } - - // If there are more than 1 range, use the active range and destroy the others - if (this.ranges.length > 1) { - this.ranges = this.ranges.filter((range) => { - if (range === this.activeRange) { - range.setEnd(range.start.row, range.start.col); - return true; - } - range.destroy(); - return false; - }); - } - - range = this.activeRange; - - rangeEdge = expand ? range.end : range.start; - nextRow = rangeEdge.row; - nextCol = rangeEdge.col; - - if(jump){ - switch(dir){ - case "left": - nextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col); - break; - case "right": - nextCol = this.findJumpCellRight(range.start.row, rangeEdge.col); - break; - case "up": - nextRow = this.findJumpCellUp(rangeEdge.row, range.start.col); - break; - case "down": - nextRow = this.findJumpCellDown(rangeEdge.row, range.start.col); - break; - } - }else { - if(expand){ - if ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) { - return; - } - } - - switch(dir){ - case "left": - nextCol = Math.max(nextCol - 1, 0); - break; - case "right": - nextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1); - break; - case "up": - nextRow = Math.max(nextRow - 1, 0); - break; - case "down": - nextRow = Math.min(nextRow + 1, this.getTableRows().length - 1); - break; - } - } - - moved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row; - - if(!expand){ - range.setStart(nextRow, nextCol); - } - - range.setEnd(nextRow, nextCol); - - if(!expand){ - this.selecting = "cell"; - } - - if (moved) { - row = this.getRowByRangePos(range.end.row); - column = this.getColumnByRangePos(range.end.col); - - if ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) { - column.getComponent().scrollTo(undefined, false); - } else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) { - row.getComponent().scrollTo(undefined, false); - } else { - // Use faster autoScroll when the elements are on the DOM - this.autoScroll(range, row.getElement(), column.getElement()); - } - - this.layoutElement(); - - return true; - } - } - - rangeRemoved(removed){ - this.ranges = this.ranges.filter((range) => range !== removed); - - if(this.activeRange === removed){ - if(this.ranges.length){ - this.activeRange = this.ranges[this.ranges.length - 1]; - }else { - this.addRange(); - } - } - - this.layoutElement(); - } - - findJumpCell(cells, reverse, emptyStart, emptySide){ - var nextCell; - - if(reverse){ - cells = cells.reverse(); - } - - for(let currentCell of cells){ - let currentValue = currentCell.getValue(); - - if(emptyStart){ - nextCell = currentCell; - if(currentValue){ - break; - } - }else { - if(emptySide){ - nextCell = currentCell; - - if(currentValue){ - break; - } - }else { - if(currentValue){ - nextCell = currentCell; - }else { - break; - } - } - } - } - - return nextCell; - } - - findJumpCellLeft(rowPos, colPos){ - var row = this.getRowByRangePos(rowPos), - cells = row.cells.filter((cell) => cell.column.visible), - isStartingCellEmpty = !cells[colPos].getValue(), - isLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false, - jumpCol = colPos, - targetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos), - nextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty); - - if(nextCell){ - jumpCol = nextCell.column.getPosition() - 1; - } - - return jumpCol; - } - - findJumpCellRight(rowPos, colPos){ - var row = this.getRowByRangePos(rowPos), - cells = row.cells.filter((cell) => cell.column.visible), - isStartingCellEmpty = !cells[colPos].getValue(), - isRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false, - jumpCol = colPos, - nextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty); - - if(nextCell){ - jumpCol = nextCell.column.getPosition() - 1; - } - - return jumpCol; - } - - findJumpCellUp(rowPos, colPos) { - var column = this.getColumnByRangePos(colPos), - cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)), - isStartingCellEmpty = !cells[rowPos].getValue(), - isTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false, - jumpRow = rowPos, - nextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty); - - if(nextCell){ - jumpRow = nextCell.row.position - 1; - } - - return jumpRow; - } - - findJumpCellDown(rowPos, colPos) { - var column = this.getColumnByRangePos(colPos), - cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)), - isStartingCellEmpty = !cells[rowPos].getValue(), - isBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false, - jumpRow = rowPos, - nextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty); - - if(nextCell){ - jumpRow = nextCell.row.position - 1; - } - - return jumpRow; - } - - /////////////////////////////////// - /////// Selection /////// - /////////////////////////////////// - newSelection(event, element) { - var range; - - if (element.type === "column") { - if(!this.columnSelection){ - return; - } - - if (element === this.rowHeader) { - range = this.resetRanges(); - this.selecting = "all"; - - var topLeftCell, bottomRightCell = this.getCell(-1, -1); - - if(this.rowHeader){ - topLeftCell = this.getCell(0, 1); - }else { - topLeftCell = this.getCell(0, 0); - } - - range.setBounds(topLeftCell, bottomRightCell); - return; - } else { - this.selecting = "column"; - } - } else if (element.column === this.rowHeader) { - this.selecting = "row"; - } else { - this.selecting = "cell"; - } - - if (event.shiftKey) { - this.activeRange.setBounds(false, element); - } else if (event.ctrlKey) { - this.addRange().setBounds(element); - } else { - this.resetRanges().setBounds(element); - } - } - - autoScroll(range, row, column) { - var tableHolder = this.table.rowManager.element, - rowHeader, rect, view, withinHorizontalView, withinVerticalView; - - if (typeof row === 'undefined') { - row = this.getRowByRangePos(range.end.row).getElement(); - } - - if (typeof column === 'undefined') { - column = this.getColumnByRangePos(range.end.col).getElement(); - } - - if (this.rowHeader) { - rowHeader = this.rowHeader.getElement(); - } - - rect = { - left: column.offsetLeft, - right: column.offsetLeft + column.offsetWidth, - top: row.offsetTop, - bottom: row.offsetTop + row.offsetHeight, - }; - - view = { - left: tableHolder.scrollLeft, - right: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth), - top: tableHolder.scrollTop, - bottom: tableHolder.scrollTop + tableHolder.offsetHeight - this.table.rowManager.scrollbarWidth, - }; - - if (rowHeader) { - view.left += rowHeader.offsetWidth; - } - - withinHorizontalView = view.left < rect.left && rect.left < view.right && view.left < rect.right && rect.right < view.right; - - withinVerticalView = view.top < rect.top && rect.top < view.bottom && view.top < rect.bottom && rect.bottom < view.bottom; - - if (!withinHorizontalView) { - if (rect.left < view.left) { - tableHolder.scrollLeft = rect.left; - if (rowHeader) { - tableHolder.scrollLeft -= rowHeader.offsetWidth; - } - } else if (rect.right > view.right) { - tableHolder.scrollLeft = rect.right - tableHolder.clientWidth; - } - } - - if (!withinVerticalView) { - if (rect.top < view.top) { - tableHolder.scrollTop = rect.top; - } else if (rect.bottom > view.bottom) { - tableHolder.scrollTop = rect.bottom - tableHolder.clientHeight; - } - } - } - - - /////////////////////////////////// - /////// Layout /////// - /////////////////////////////////// - - layoutChange(){ - this.overlay.style.visibility = "hidden"; - clearTimeout(this.layoutChangeTimeout); - this.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200); - } - - redraw(force) { - if (force) { - this.selecting = 'cell'; - this.resetRanges(); - this.layoutElement(); - } - } - - layoutElement(visibleRows) { - var rows; - - if (visibleRows) { - rows = this.table.rowManager.getVisibleRows(true); - } else { - rows = this.table.rowManager.getRows(); - } - - rows.forEach((row) => { - if (row.type === "row") { - this.layoutRow(row); - row.cells.forEach((cell) => this.renderCell(cell)); - } - }); - - this.getTableColumns().forEach((column) => { - this.layoutColumn(column); - }); - - this.layoutRanges(); - } - - layoutRow(row) { - var el = row.getElement(), - selected = false, - occupied = this.ranges.some((range) => range.occupiesRow(row)); - - if (this.selecting === "row") { - selected = occupied; - } else if (this.selecting === "all") { - selected = true; - } - - el.classList.toggle("tabulator-range-selected", selected); - el.classList.toggle("tabulator-range-highlight", occupied); - } - - layoutColumn(column) { - var el = column.getElement(), - selected = false, - occupied = this.ranges.some((range) => range.occupiesColumn(column)); - - if (this.selecting === "column") { - selected = occupied; - } else if (this.selecting === "all") { - selected = true; - } - - el.classList.toggle("tabulator-range-selected", selected); - el.classList.toggle("tabulator-range-highlight", occupied); - } - - layoutRanges() { - var activeCell; - - if (!this.table.initialized) { - return; - } - - activeCell = this.getActiveCell(); - - if (!activeCell) { - return; - } - - this.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + "px"; - this.activeRangeCellElement.style.top = activeCell.row.getElement().offsetTop + "px"; - this.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + "px"; - this.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + "px"; - - this.ranges.forEach((range) => range.layout()); - - this.overlay.style.visibility = "visible"; - } - - - /////////////////////////////////// - /////// Helper Functions /////// - /////////////////////////////////// - - getCell(rowIdx, colIdx) { - var row; - - if (colIdx < 0) { - colIdx = this.getTableColumns().length + colIdx; - if (colIdx < 0) { - return null; - } - } - - if (rowIdx < 0) { - rowIdx = this.getTableRows().length + rowIdx; - } - - row = this.table.rowManager.getRowFromPosition(rowIdx + 1); - - return row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null; - } - - - getActiveCell() { - return this.getCell(this.activeRange.start.row, this.activeRange.start.col); - } - - getRowByRangePos(pos) { - return this.getTableRows()[pos]; - } - - getColumnByRangePos(pos) { - return this.getTableColumns()[pos]; - } - - getTableRows() { - return this.table.rowManager.getDisplayRows(); - } - - getTableColumns() { - return this.table.columnManager.getVisibleColumnsByIndex(); - } - - addRange(start, end) { - var range; - - if(this.maxRanges !== true && this.ranges.length >= this.maxRanges){ - this.ranges.shift().destroy(); - } - - range = new Range(this.table, this, start, end); - - this.activeRange = range; - this.ranges.push(range); - this.rangeContainer.appendChild(range.element); - - return range; - } - - resetRanges() { - var range, cell; - - this.ranges.forEach((range) => range.destroy()); - this.ranges = []; - - range = this.addRange(); - - if(this.table.rowManager.activeRows.length){ - cell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0]; - - if(cell){ - range.setBounds(cell); - this.initializeFocus(cell); - } - } - - return range; - } - - tableDestroyed(){ - document.removeEventListener("mouseup", this.mouseUpEvent); - this.table.rowManager.element.removeEventListener("keydown", this.keyDownEvent); - } - - selectedRows(component) { - return component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows(); - } - - selectedColumns(component) { - return component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns(); - } -} - -SelectRange.moduleName = "selectRange"; - -class Tooltip extends Module{ - - constructor(table){ - super(table); - - this.tooltipSubscriber = null, - this.headerSubscriber = null, - - this.timeout = null; - this.popupInstance = null; - - this.registerTableOption("tooltipGenerationMode", undefined); //deprecated - this.registerTableOption("tooltipDelay", 300); - - this.registerColumnOption("tooltip"); - this.registerColumnOption("headerTooltip"); - } - - initialize(){ - this.deprecatedOptionsCheck(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - deprecatedOptionsCheck(){ - this.deprecationCheckMsg("tooltipGenerationMode", "This option is no longer needed as tooltips are always generated on hover now"); - } - - initializeColumn(column){ - if(column.definition.headerTooltip && !this.headerSubscriber){ - this.headerSubscriber = true; - - this.subscribe("column-mousemove", this.mousemoveCheck.bind(this, "headerTooltip")); - this.subscribe("column-mouseout", this.mouseoutCheck.bind(this, "headerTooltip")); - } - - if(column.definition.tooltip && !this.tooltipSubscriber){ - this.tooltipSubscriber = true; - - this.subscribe("cell-mousemove", this.mousemoveCheck.bind(this, "tooltip")); - this.subscribe("cell-mouseout", this.mouseoutCheck.bind(this, "tooltip")); - } - } - - mousemoveCheck(action, e, component){ - var tooltip = action === "tooltip" ? component.column.definition.tooltip : component.definition.headerTooltip; - - if(tooltip){ - this.clearPopup(); - this.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay); - } - } - - mouseoutCheck(action, e, component){ - if(!this.popupInstance){ - this.clearPopup(); - } - } - - clearPopup(action, e, component){ - clearTimeout(this.timeout); - this.timeout = null; - - if(this.popupInstance){ - this.popupInstance.hide(); - } - } - - loadTooltip(e, component, tooltip){ - var contentsEl, renderedCallback, coords; - - function onRendered(callback){ - renderedCallback = callback; - } - - if(typeof tooltip === "function"){ - tooltip = tooltip(e, component.getComponent(), onRendered); - } - - if(tooltip instanceof HTMLElement){ - contentsEl = tooltip; - }else { - contentsEl = document.createElement("div"); - - if(tooltip === true){ - if(component instanceof Cell){ - tooltip = component.value; - }else { - if(component.definition.field){ - this.langBind("columns|" + component.definition.field, (value) => { - contentsEl.innerHTML = tooltip = value || component.definition.title; - }); - }else { - tooltip = component.definition.title; - } - } - } - - contentsEl.innerHTML = tooltip; - } - - if(tooltip || tooltip === 0 || tooltip === false){ - contentsEl.classList.add("tabulator-tooltip"); - - contentsEl.addEventListener("mousemove", e => e.preventDefault()); - - this.popupInstance = this.popup(contentsEl); - - if(typeof renderedCallback === "function"){ - this.popupInstance.renderCallback(renderedCallback); - } - - coords = this.popupInstance.containerEventCoords(e); - - this.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => { - this.dispatchExternal("TooltipClosed", component.getComponent()); - this.popupInstance = null; - }); - - this.dispatchExternal("TooltipOpened", component.getComponent()); - } - } -} - -Tooltip.moduleName = "tooltip"; - -var defaultValidators = { - //is integer - integer: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - value = Number(value); - - return !isNaN(value) && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - value = Number(value); - - return !isNaN(value) && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return isNaN(value); - }, - - //must be alphanumeric - alphanumeric: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - var reg = new RegExp(/^[a-z0-9]+$/i); - - return reg.test(value); - }, - - //maximum value - max: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) >= parameters; - }, - - //starts with value - starts: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).toLowerCase().startsWith(String(parameters).toLowerCase()); - }, - - //ends with value - ends: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).toLowerCase().endsWith(String(parameters).toLowerCase()); - }, - - - //minimum string length - minLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - if(typeof parameters == "string"){ - parameters = parameters.split("|"); - } - - return parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function(row){ - var data = row.getData(); - - if(data !== cellData){ - if(value == column.getFieldValue(data)){ - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required:function(cell, value, parameters){ - return value !== "" && value !== null && typeof value !== "undefined"; - }, -}; - -class Validate extends Module{ - - constructor(table){ - super(table); - - this.invalidCells = []; - - this.registerTableOption("validationMode", "blocking"); - - this.registerColumnOption("validator"); - - this.registerTableFunction("getInvalidCells", this.getInvalidCells.bind(this)); - this.registerTableFunction("clearCellValidation", this.userClearCellValidation.bind(this)); - this.registerTableFunction("validate", this.userValidate.bind(this)); - - this.registerComponentFunction("cell", "isValid", this.cellIsValid.bind(this)); - this.registerComponentFunction("cell", "clearValidation", this.clearValidation.bind(this)); - this.registerComponentFunction("cell", "validate", this.cellValidate.bind(this)); - - this.registerComponentFunction("column", "validate", this.columnValidate.bind(this)); - this.registerComponentFunction("row", "validate", this.rowValidate.bind(this)); - } - - - initialize(){ - this.subscribe("cell-delete", this.clearValidation.bind(this)); - this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); - - this.subscribe("edit-success", this.editValidate.bind(this)); - this.subscribe("edit-editor-clear", this.editorClear.bind(this)); - this.subscribe("edit-edited-clear", this.editedClear.bind(this)); - } - - /////////////////////////////////// - ///////// Event Handling ////////// - /////////////////////////////////// - - editValidate(cell, value, previousValue){ - var valid = this.table.options.validationMode !== "manual" ? this.validate(cell.column.modules.validate, cell, value) : true; - - // allow time for editor to make render changes then style cell - if(valid !== true){ - setTimeout(() => { - cell.getElement().classList.add("tabulator-validation-fail"); - this.dispatchExternal("validationFailed", cell.getComponent(), value, valid); - }); - } - - return valid; - } - - editorClear(cell, cancelled){ - if(cancelled){ - if(cell.column.modules.validate){ - this.cellValidate(cell); - } - } - - cell.getElement().classList.remove("tabulator-validation-fail"); - } - - editedClear(cell){ - if(cell.modules.validate){ - cell.modules.validate.invalid = false; - } - } - - /////////////////////////////////// - ////////// Cell Functions ///////// - /////////////////////////////////// - - cellIsValid(cell){ - return cell.modules.validate ? (cell.modules.validate.invalid || true) : true; - } - - cellValidate(cell){ - return this.validate(cell.column.modules.validate, cell, cell.getValue()); - } - - /////////////////////////////////// - ///////// Column Functions //////// - /////////////////////////////////// - - columnValidate(column){ - var invalid = []; - - column.cells.forEach((cell) => { - if(this.cellValidate(cell) !== true){ - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - } - - /////////////////////////////////// - ////////// Row Functions ////////// - /////////////////////////////////// - - rowValidate(row){ - var invalid = []; - - row.cells.forEach((cell) => { - if(this.cellValidate(cell) !== true){ - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - - userClearCellValidation(cells){ - if(!cells){ - cells = this.getInvalidCells(); - } - - if(!Array.isArray(cells)){ - cells = [cells]; - } - - cells.forEach((cell) => { - this.clearValidation(cell._getSelf()); - }); - } - - userValidate(cells){ - var output = []; - - //clear row data - this.table.rowManager.rows.forEach((row) => { - row = row.getComponent(); - - var valid = row.validate(); - - if(valid !== true){ - output = output.concat(valid); - } - }); - - return output.length ? output : true; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnCheck(column){ - if(typeof column.definition.validator !== "undefined"){ - this.initializeColumn(column); - } - } - - //validate - initializeColumn(column){ - var self = this, - config = [], - validator; - - if(column.definition.validator){ - - if(Array.isArray(column.definition.validator)){ - column.definition.validator.forEach((item) => { - validator = self._extractValidator(item); - - if(validator){ - config.push(validator); - } - }); - - }else { - validator = this._extractValidator(column.definition.validator); - - if(validator){ - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } - } - - _extractValidator(value){ - var type, params, pos; - - switch(typeof value){ - case "string": - pos = value.indexOf(':'); - - if(pos > -1){ - type = value.substring(0,pos); - params = value.substring(pos+1); - }else { - type = value; - } - - return this._buildValidator(type, params); - - case "function": - return this._buildValidator(value); - - case "object": - return this._buildValidator(value.type, value.parameters); - } - } - - _buildValidator(type, params){ - - var func = typeof type == "function" ? type : Validate.validators[type]; - - if(!func){ - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - }else { - return { - type:typeof type == "function" ? "function" : type, - func:func, - params:params, - }; - } - } - - validate(validators, cell, value){ - var self = this, - failedValidators = [], - invalidIndex = this.invalidCells.indexOf(cell); - - if(validators){ - validators.forEach((item) => { - if(!item.func.call(self, cell.getComponent(), value, item.params)){ - failedValidators.push({ - type:item.type, - parameters:item.params - }); - } - }); - } - - if(!cell.modules.validate){ - cell.modules.validate = {}; - } - - if(!failedValidators.length){ - cell.modules.validate.invalid = false; - cell.getElement().classList.remove("tabulator-validation-fail"); - - if(invalidIndex > -1){ - this.invalidCells.splice(invalidIndex, 1); - } - }else { - cell.modules.validate.invalid = failedValidators; - - if(this.table.options.validationMode !== "manual"){ - cell.getElement().classList.add("tabulator-validation-fail"); - } - - if(invalidIndex == -1){ - this.invalidCells.push(cell); - } - } - - return failedValidators.length ? failedValidators : true; - } - - getInvalidCells(){ - var output = []; - - this.invalidCells.forEach((cell) => { - output.push(cell.getComponent()); - }); - - return output; - } - - clearValidation(cell){ - var invalidIndex; - - if(cell.modules.validate && cell.modules.validate.invalid){ - - cell.getElement().classList.remove("tabulator-validation-fail"); - cell.modules.validate.invalid = false; - - invalidIndex = this.invalidCells.indexOf(cell); - - if(invalidIndex > -1){ - this.invalidCells.splice(invalidIndex, 1); - } - } - } -} - -Validate.moduleName = "validate"; - -//load defaults -Validate.validators = defaultValidators; - -var modules = /*#__PURE__*/Object.freeze({ - __proto__: null, - AccessorModule: Accessor, - AjaxModule: Ajax, - ClipboardModule: Clipboard, - ColumnCalcsModule: ColumnCalcs, - DataTreeModule: DataTree, - DownloadModule: Download, - EditModule: Edit$1, - ExportModule: Export, - FilterModule: Filter, - FormatModule: Format, - FrozenColumnsModule: FrozenColumns, - FrozenRowsModule: FrozenRows, - GroupRowsModule: GroupRows, - HistoryModule: History, - HtmlTableImportModule: HtmlTableImport, - ImportModule: Import, - InteractionModule: Interaction, - KeybindingsModule: Keybindings, - MenuModule: Menu, - MoveColumnsModule: MoveColumns, - MoveRowsModule: MoveRows, - MutatorModule: Mutator, - PageModule: Page, - PersistenceModule: Persistence, - PopupModule: Popup$1, - PrintModule: Print, - ReactiveDataModule: ReactiveData, - ResizeColumnsModule: ResizeColumns, - ResizeRowsModule: ResizeRows, - ResizeTableModule: ResizeTable, - ResponsiveLayoutModule: ResponsiveLayout, - SelectRowModule: SelectRow, - SortModule: Sort, - SelectRangeModule: SelectRange, - TooltipModule: Tooltip, - ValidateModule: Validate -}); - -var defaultOptions = { - - debugEventsExternal:false, //flag to console log events - debugEventsInternal:false, //flag to console log events - debugInvalidOptions:true, //allow toggling of invalid option warnings - debugInvalidComponentFuncs:true, //allow toggling of invalid component warnings - debugInitialization:true, //allow toggling of pre initialization function call warnings - debugDeprecation:true, //allow toggling of deprecation warnings - - height:false, //height of tabulator - minHeight:false, //minimum height of tabulator - maxHeight:false, //maximum height of tabulator - - columnHeaderVertAlign:"top", //vertical alignment of column headers - - popupContainer:false, - - columns:[],//store for colum header info - columnDefaults:{}, //store column default props - - data:false, //default starting data - - autoColumns:false, //build columns from data row structure - autoColumnsDefinitions:false, - - nestedFieldSeparator:".", //separator for nested data - - footerElement:false, //hold footer element - - index:"id", //filed for row index - - textDirection:"auto", - - addRowPos:"bottom", //position to insert blank rows, top|bottom - - headerVisible:true, //hide header - - renderVertical:"virtual", - renderHorizontal:"basic", - renderVerticalBuffer:0, // set virtual DOM buffer size - - scrollToRowPosition:"top", - scrollToRowIfVisible:true, - - scrollToColumnPosition:"left", - scrollToColumnIfVisible:true, - - rowFormatter:false, - rowFormatterPrint:null, - rowFormatterClipboard:null, - rowFormatterHtmlOutput:null, - - rowHeight:null, - - placeholder:false, - - dataLoader:true, - dataLoaderLoading:false, - dataLoaderError:false, - dataLoaderErrorTimeout:3000, - - dataSendParams:{}, - - dataReceiveParams:{}, -}; - -class OptionsList { - constructor(table, msgType, defaults = {}){ - this.table = table; - this.msgType = msgType; - this.registeredDefaults = Object.assign({}, defaults); - } - - register(option, value){ - this.registeredDefaults[option] = value; - } - - generate(defaultOptions, userOptions = {}){ - var output = Object.assign({}, this.registeredDefaults), - warn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true; - - Object.assign(output, defaultOptions); - - for (let key in userOptions){ - if(!output.hasOwnProperty(key)){ - if(warn){ - console.warn("Invalid " + this.msgType + " option:", key); - } - - output[key] = userOptions.key; - } - } - - - for (let key in output){ - if(key in userOptions){ - output[key] = userOptions[key]; - }else { - if(Array.isArray(output[key])){ - output[key] = Object.assign([], output[key]); - }else if(typeof output[key] === "object" && output[key] !== null){ - output[key] = Object.assign({}, output[key]); - }else if (typeof output[key] === "undefined"){ - delete output[key]; - } - } - } - - return output; - } -} - -class Renderer extends CoreFeature{ - constructor(table){ - super(table); - - this.elementVertical = table.rowManager.element; - this.elementHorizontal = table.columnManager.element; - this.tableElement = table.rowManager.tableElement; - - this.verticalFillMode = "fit"; // used by row manager to determine how to size the render area ("fit" - fits container to the contents, "fill" - fills the container without resizing it) - } - - - /////////////////////////////////// - /////// Internal Bindings ///////// - /////////////////////////////////// - - initialize(){ - //initialize core functionality - } - - clearRows(){ - //clear down existing rows layout - } - - clearColumns(){ - //clear down existing columns layout - } - - - reinitializeColumnWidths(columns){ - //resize columns to fit data - } - - - renderRows(){ - //render rows from a clean slate - } - - renderColumns(){ - //render columns from a clean slate - } - - rerenderRows(callback){ - // rerender rows and keep position - if(callback){ - callback(); - } - } - - rerenderColumns(update, blockRedraw){ - //rerender columns - } - - renderRowCells(row){ - //render the cells in a row - } - - rerenderRowCells(row, force){ - //rerender the cells in a row - } - - scrollColumns(left, dir){ - //handle horizontal scrolling - } - - scrollRows(top, dir){ - //handle vertical scrolling - } - - resize(){ - //container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION) - } - - scrollToRow(row){ - //scroll to a specific row - } - - scrollToRowNearestTop(row){ - //determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom - } - - visibleRows(includingBuffer){ - //return the visible rows - return []; - } - - /////////////////////////////////// - //////// Helper Functions ///////// - /////////////////////////////////// - - rows(){ - return this.table.rowManager.getDisplayRows(); - } - - styleRow(row, index){ - var rowEl = row.getElement(); - - if(index % 2){ - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - }else { - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } - } - - /////////////////////////////////// - /////// External Triggers ///////// - /////// (DO NOT OVERRIDE) ///////// - /////////////////////////////////// - - clear(){ - //clear down existing layout - this.clearRows(); - this.clearColumns(); - } - - render(){ - //render from a clean slate - this.renderRows(); - this.renderColumns(); - } - - rerender(callback){ - // rerender and keep position - this.rerenderRows(); - this.rerenderColumns(); - } - - scrollToRowPosition(row, position, ifVisible){ - var rowIndex = this.rows().indexOf(row), - rowEl = row.getElement(), - offset = 0; - - return new Promise((resolve, reject) => { - if(rowIndex > -1){ - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToRowIfVisible; - } - - //check row visibility - if(!ifVisible){ - if(Helpers.elVisible(rowEl)){ - offset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top; - - if(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){ - resolve(); - return false; - } - } - } - - if(typeof position === "undefined"){ - position = this.table.options.scrollToRowPosition; - } - - if(position === "nearest"){ - position = this.scrollToRowNearestTop(row) ? "top" : "bottom"; - } - - //scroll to row - this.scrollToRow(row); - - //align to correct position - switch(position){ - case "middle": - case "center": - - if(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){ - this.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2); - }else { - this.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2); - } - - break; - - case "bottom": - - if(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){ - this.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; - }else { - this.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight; - } - - break; - - case "top": - this.elementVertical.scrollTop = rowEl.offsetTop; - break; - } - - resolve(); - - }else { - console.warn("Scroll Error - Row not visible"); - reject("Scroll Error - Row not visible"); - } - }); - } -} - -class BasicHorizontal extends Renderer{ - constructor(table){ - super(table); - } - - renderRowCells(row, inFragment) { - const rowFrag = document.createDocumentFragment(); - row.cells.forEach((cell) => { - rowFrag.appendChild(cell.getElement()); - }); - row.element.appendChild(rowFrag); - - if(!inFragment){ - row.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - } - - reinitializeColumnWidths(columns){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - } -} - -class VirtualDomHorizontal extends Renderer{ - constructor(table){ - super(table); - - this.leftCol = 0; - this.rightCol = 0; - this.scrollLeft = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - - this.fitDataColAvg = 0; - - this.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen - - this.visibleRows = null; - - this.initialized = false; - this.isFitData = false; - - this.columns = []; - } - - initialize(){ - this.compatibilityCheck(); - this.layoutCheck(); - this.vertScrollListen(); - } - - compatibilityCheck(){ - if(this.options("layout") == "fitDataTable"){ - console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"); - } - - if(this.options("responsiveLayout")){ - console.warn("Horizontal Virtual DOM is not compatible with responsive columns"); - } - - if(this.options("rtl")){ - console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction"); - } - } - - layoutCheck(){ - this.isFitData = this.options("layout").startsWith('fitData'); - } - - vertScrollListen(){ - this.subscribe("scroll-vertical", this.clearVisRowCache.bind(this)); - this.subscribe("data-refreshed", this.clearVisRowCache.bind(this)); - } - - clearVisRowCache(){ - this.visibleRows = null; - } - - ////////////////////////////////////// - ///////// Public Functions /////////// - ////////////////////////////////////// - - renderColumns(row, force){ - this.dataChange(); - } - - - scrollColumns(left, dir){ - if(this.scrollLeft != left){ - this.scrollLeft = left; - - this.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer)); - } - } - - calcWindowBuffer(){ - var buffer = this.elementVertical.clientWidth; - - this.table.columnManager.columnsByIndex.forEach((column) => { - if(column.visible){ - var width = column.getWidth(); - - if(width > buffer){ - buffer = width; - } - } - }); - - this.windowBuffer = buffer * 2; - } - - rerenderColumns(update, blockRedraw){ - var old = { - cols:this.columns, - leftCol:this.leftCol, - rightCol:this.rightCol, - }, - colPos = 0; - - if(update && !this.initialized){ - return; - } - - this.clear(); - - this.calcWindowBuffer(); - - this.scrollLeft = this.elementVertical.scrollLeft; - - this.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer; - this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer; - - this.table.columnManager.columnsByIndex.forEach((column) => { - var config = {}, - width; - - if(column.visible){ - if(!column.modules.frozen){ - width = column.getWidth(); - - config.leftPos = colPos; - config.rightPos = colPos + width; - - config.width = width; - - if (this.isFitData) { - config.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true; - } - - if((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){ - //column is visible - - if(this.leftCol == -1){ - this.leftCol = this.columns.length; - this.vDomPadLeft = colPos; - } - - this.rightCol = this.columns.length; - }else { - // column is hidden - if(this.leftCol !== -1){ - this.vDomPadRight += width; - } - } - - this.columns.push(column); - - column.modules.vdomHoz = config; - - colPos += width; - } - } - }); - - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - - this.initialized = true; - - if(!blockRedraw){ - if(!update || this.reinitChanged(old)){ - this.reinitializeRows(); - } - } - - this.elementVertical.scrollLeft = this.scrollLeft; - } - - renderRowCells(row){ - if(this.initialized){ - this.initializeRow(row); - }else { - const rowFrag = document.createDocumentFragment(); - row.cells.forEach((cell) => { - rowFrag.appendChild(cell.getElement()); - }); - row.element.appendChild(rowFrag); - - row.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - } - - rerenderRowCells(row, force){ - this.reinitializeRow(row, force); - } - - reinitializeColumnWidths(columns){ - for(let i = this.leftCol; i <= this.rightCol; i++){ - this.columns[i].reinitializeWidth(); - } - } - - ////////////////////////////////////// - //////// Internal Rendering ////////// - ////////////////////////////////////// - - deinitialize(){ - this.initialized = false; - } - - clear(){ - this.columns = []; - - this.leftCol = -1; - this.rightCol = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - } - - dataChange(){ - var change = false, - row, rowEl; - - if(this.isFitData){ - this.table.columnManager.columnsByIndex.forEach((column) => { - if(!column.definition.width && column.visible){ - change = true; - } - }); - - if(change && this.table.rowManager.getDisplayRows().length){ - this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer; - - row = this.chain("rows-sample", [1], [], () => { - return this.table.rowManager.getDisplayRows(); - })[0]; - - if(row){ - rowEl = row.getElement(); - - row.generateCells(); - - this.tableElement.appendChild(rowEl); - - for(let colEnd = 0; colEnd < row.cells.length; colEnd++){ - let cell = row.cells[colEnd]; - rowEl.appendChild(cell.getElement()); - - cell.column.reinitializeWidth(); - } - - rowEl.parentNode.removeChild(rowEl); - - this.rerenderColumns(false, true); - } - } - }else { - if(this.options("layout") === "fitColumns"){ - this.layoutRefresh(); - this.rerenderColumns(false, true); - } - } - } - - reinitChanged(old){ - var match = true; - - if(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){ - return true; - } - - old.cols.forEach((col, i) => { - if(col !== this.columns[i]){ - match = false; - } - }); - - return !match; - } - - reinitializeRows(){ - var visibleRows = this.getVisibleRows(), - otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row)); - - visibleRows.forEach((row) => { - this.reinitializeRow(row, true); - }); - - otherRows.forEach((row) =>{ - row.deinitialize(); - }); - } - - getVisibleRows(){ - if (!this.visibleRows){ - this.visibleRows = this.table.rowManager.getVisibleRows(); - } - - return this.visibleRows; - } - - scroll(diff){ - this.vDomScrollPosLeft += diff; - this.vDomScrollPosRight += diff; - - if(Math.abs(diff) > (this.windowBuffer / 2)){ - this.rerenderColumns(); - }else { - if(diff > 0){ - //scroll right - this.addColRight(); - this.removeColLeft(); - }else { - //scroll left - this.addColLeft(); - this.removeColRight(); - } - } - } - - colPositionAdjust (start, end, diff){ - for(let i = start; i < end; i++){ - let column = this.columns[i]; - - column.modules.vdomHoz.leftPos += diff; - column.modules.vdomHoz.rightPos += diff; - } - } - - addColRight(){ - var changes = false, - working = true; - - while(working){ - - let column = this.columns[this.rightCol + 1]; - - if(column){ - if(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling); - cell.cellRendered(); - } - }); - - this.fitDataColActualWidthCheck(column); - - this.rightCol++; // Don't move this below the >= check below - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.rightCol = this.rightCol; - } - }); - - if(this.rightCol >= (this.columns.length - 1)){ - this.vDomPadRight = 0; - }else { - this.vDomPadRight -= column.getWidth(); - } - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - } - } - - addColLeft(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.leftCol - 1]; - - if(column){ - if(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement()); - cell.cellRendered(); - } - }); - - this.leftCol--; // don't move this below the <= check below - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.leftCol = this.leftCol; - } - }); - - if(this.leftCol <= 0){ // replicating logic in addColRight - this.vDomPadLeft = 0; - }else { - this.vDomPadLeft -= column.getWidth(); - } - - let diff = this.fitDataColActualWidthCheck(column); - - if(diff){ - this.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff; - this.vDomPadRight -= diff; - } - - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - } - } - - removeColRight(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.rightCol]; - - if(column){ - if(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - - try { - row.getElement().removeChild(cell.getElement()); - } catch (ex) { - console.warn("Could not removeColRight", ex.message); - } - } - }); - - this.vDomPadRight += column.getWidth(); - this.rightCol --; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.rightCol = this.rightCol; - } - }); - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - } - } - - removeColLeft(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.leftCol]; - - if(column){ - if(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - - try { - row.getElement().removeChild(cell.getElement()); - } catch (ex) { - console.warn("Could not removeColLeft", ex.message); - } - } - }); - - this.vDomPadLeft += column.getWidth(); - this.leftCol ++; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.leftCol = this.leftCol; - } - }); - }else { - working = false; - } - }else { - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - } - } - - fitDataColActualWidthCheck(column){ - var newWidth, widthDiff; - - if(column.modules.vdomHoz.fitDataCheck){ - column.reinitializeWidth(); - - newWidth = column.getWidth(); - widthDiff = newWidth - column.modules.vdomHoz.width; - - if(widthDiff){ - column.modules.vdomHoz.rightPos += widthDiff; - column.modules.vdomHoz.width = newWidth; - this.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff); - } - - column.modules.vdomHoz.fitDataCheck = false; - } - - return widthDiff; - } - - initializeRow(row){ - if(row.type !== "group"){ - row.modules.vdomHoz = { - leftCol:this.leftCol, - rightCol:this.rightCol, - }; - - if(this.table.modules.frozenColumns){ - this.table.modules.frozenColumns.leftColumns.forEach((column) => { - this.appendCell(row, column); - }); - } - - for(let i = this.leftCol; i <= this.rightCol; i++){ - this.appendCell(row, this.columns[i]); - } - - if(this.table.modules.frozenColumns){ - this.table.modules.frozenColumns.rightColumns.forEach((column) => { - this.appendCell(row, column); - }); - } - } - } - - appendCell(row, column){ - if(column && column.visible){ - let cell = row.getCell(column); - - row.getElement().appendChild(cell.getElement()); - cell.cellRendered(); - } - } - - reinitializeRow(row, force){ - if(row.type !== "group"){ - if(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){ - - var rowEl = row.getElement(); - while(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild); - - this.initializeRow(row); - } - } - } -} - -class ColumnManager extends CoreFeature { - - constructor (table){ - super(table); - - this.blockHozScrollEvent = false; - this.headersElement = null; - this.contentsElement = null; - this.element = null ; //containing element - this.columns = []; // column definition object - this.columnsByIndex = []; //columns by index - this.columnsByField = {}; //columns by field - this.scrollLeft = 0; - this.optionsList = new OptionsList(this.table, "column definition", defaultColumnOptions); - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing - this.redrawBlockUpdate = null; //store latest redraw update only status - - this.renderer = null; - } - - ////////////// Setup Functions ///////////////// - - initialize(){ - this.initializeRenderer(); - - this.headersElement = this.createHeadersElement(); - this.contentsElement = this.createHeaderContentsElement(); - this.element = this.createHeaderElement(); - - this.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild); - this.element.insertBefore(this.contentsElement, this.element.firstChild); - - this.initializeScrollWheelWatcher(); - - this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); - this.subscribe("scrollbar-vertical", this.padVerticalScrollbar.bind(this)); - } - - padVerticalScrollbar(width){ - if(this.table.rtl){ - this.headersElement.style.marginLeft = width + "px"; - }else { - this.headersElement.style.marginRight = width + "px"; - } - } - - initializeRenderer(){ - var renderClass; - - var renderers = { - "virtual": VirtualDomHorizontal, - "basic": BasicHorizontal, - }; - - if(typeof this.table.options.renderHorizontal === "string"){ - renderClass = renderers[this.table.options.renderHorizontal]; - }else { - renderClass = this.table.options.renderHorizontal; - } - - if(renderClass){ - this.renderer = new renderClass(this.table, this.element, this.tableElement); - this.renderer.initialize(); - }else { - console.error("Unable to find matching renderer:", this.table.options.renderHorizontal); - } - } - - - createHeadersElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - el.setAttribute("role", "row"); - - return el; - } - - createHeaderContentsElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-header-contents"); - el.setAttribute("role", "rowgroup"); - - return el; - } - - createHeaderElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - el.setAttribute("role", "rowgroup"); - - if(!this.table.options.headerVisible){ - el.classList.add("tabulator-header-hidden"); - } - - return el; - } - - //return containing element - getElement(){ - return this.element; - } - - //return containing contents element - getContentsElement(){ - return this.contentsElement; - } - - - //return header containing element - getHeadersElement(){ - return this.headersElement; - } - - //scroll horizontally to match table body - scrollHorizontal(left){ - this.contentsElement.scrollLeft = left; - - this.scrollLeft = left; - - this.renderer.scrollColumns(left); - } - - initializeScrollWheelWatcher(){ - this.contentsElement.addEventListener("wheel", (e) => { - var left; - - if(e.deltaX){ - left = this.contentsElement.scrollLeft + e.deltaX; - - this.table.rowManager.scrollHorizontal(left); - this.table.columnManager.scrollHorizontal(left); - } - }); - } - - ///////////// Column Setup Functions ///////////// - generateColumnsFromRowData(data){ - var cols = [], - definitions = this.table.options.autoColumnsDefinitions, - row, sorter; - - if(data && data.length){ - - row = data[0]; - - for(var key in row){ - let col = { - field:key, - title:key, - }; - - let value = row[key]; - - switch(typeof value){ - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - case "object": - if(Array.isArray(value)){ - sorter = "array"; - }else { - sorter = "string"; - } - break; - - default: - if(!isNaN(value) && value !== ""){ - sorter = "number"; - }else { - if(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){ - sorter = "alphanum"; - }else { - sorter = "string"; - } - } - break; - } - - col.sorter = sorter; - - cols.push(col); - } - - if(definitions){ - - switch(typeof definitions){ - case "function": - this.table.options.columns = definitions.call(this.table, cols); - break; - - case "object": - if(Array.isArray(definitions)){ - cols.forEach((col) => { - var match = definitions.find((def) => { - return def.field === col.field; - }); - - if(match){ - Object.assign(col, match); - } - }); - - }else { - cols.forEach((col) => { - if(definitions[col.field]){ - Object.assign(col, definitions[col.field]); - } - }); - } - - this.table.options.columns = cols; - break; - } - }else { - this.table.options.columns = cols; - } - - this.setColumns(this.table.options.columns); - } - } - - setColumns(cols, row){ - while(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild); - - this.columns = []; - this.columnsByIndex = []; - this.columnsByField = {}; - - this.dispatch("columns-loading"); - - cols.forEach((def, i) => { - this._addColumn(def); - }); - - this._reIndexColumns(); - - this.dispatch("columns-loaded"); - - this.rerenderColumns(false, true); - - this.redraw(true); - } - - _addColumn(definition, before, nextToColumn){ - var column = new Column(definition, this), - colEl = column.getElement(), - index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; - - if(nextToColumn && index > -1){ - var topColumn = nextToColumn.getTopColumn(); - var parentIndex = this.columns.indexOf(topColumn); - var nextEl = topColumn.getElement(); - - if(before){ - this.columns.splice(parentIndex, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl); - }else { - this.columns.splice(parentIndex + 1, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - }else { - if(before){ - this.columns.unshift(column); - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - }else { - this.columns.push(column); - this.headersElement.appendChild(column.getElement()); - } - } - - column.columnRendered(); - - return column; - } - - registerColumnField(col){ - if(col.definition.field){ - this.columnsByField[col.definition.field] = col; - } - } - - registerColumnPosition(col){ - this.columnsByIndex.push(col); - } - - _reIndexColumns(){ - this.columnsByIndex = []; - - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); - } - - //ensure column headers take up the correct amount of space in column groups - verticalAlignHeaders(){ - var minHeight = 0; - - if(!this.redrawBlock){ - - this.headersElement.style.height=""; - - this.columns.forEach((column) => { - column.clearVerticalAlign(); - }); - - this.columns.forEach((column) => { - var height = column.getHeight(); - - if(height > minHeight){ - minHeight = height; - } - }); - - this.headersElement.style.height = minHeight + "px"; - - this.columns.forEach((column) => { - column.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight); - }); - - this.table.rowManager.adjustTableSize(); - } - } - - //////////////// Column Details ///////////////// - findColumn(subject){ - var columns; - - if(typeof subject == "object"){ - - if(subject instanceof Column){ - //subject is column element - return subject; - }else if(subject instanceof ColumnComponent){ - //subject is public column component - return subject._getSelf() || false; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - - columns = []; - - this.columns.forEach((column) => { - columns.push(column); - columns = columns.concat(column.getColumns(true)); - }); - - //subject is a HTML element of the column header - let match = columns.find((column) => { - return column.element === subject; - }); - - return match || false; - } - - }else { - //subject should be treated as the field name of the column - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - return false; - } - - getColumnByField(field){ - return this.columnsByField[field]; - } - - getColumnsByFieldRoot(root){ - var matches = []; - - Object.keys(this.columnsByField).forEach((field) => { - var fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field; - if(fieldRoot === root){ - matches.push(this.columnsByField[field]); - } - }); - - return matches; - } - - getColumnByIndex(index){ - return this.columnsByIndex[index]; - } - - getFirstVisibleColumn(){ - var index = this.columnsByIndex.findIndex((col) => { - return col.visible; - }); - - return index > -1 ? this.columnsByIndex[index] : false; - } - - getVisibleColumnsByIndex() { - return this.columnsByIndex.filter((col) => col.visible); - } - - getColumns(){ - return this.columns; - } - - findColumnIndex(column){ - return this.columnsByIndex.findIndex((col) => { - return column === col; - }); - } - - //return all columns that are not groups - getRealColumns(){ - return this.columnsByIndex; - } - - //traverse across columns and call action - traverse(callback){ - this.columnsByIndex.forEach((column,i) =>{ - callback(column, i); - }); - } - - //get definitions of actual columns - getDefinitions(active){ - var output = []; - - this.columnsByIndex.forEach((column) => { - if(!active || (active && column.visible)){ - output.push(column.getDefinition()); - } - }); - - return output; - } - - //get full nested definition tree - getDefinitionTree(){ - var output = []; - - this.columns.forEach((column) => { - output.push(column.getDefinition(true)); - }); - - return output; - } - - getComponents(structured){ - var output = [], - columns = structured ? this.columns : this.columnsByIndex; - - columns.forEach((column) => { - output.push(column.getComponent()); - }); - - return output; - } - - getWidth(){ - var width = 0; - - this.columnsByIndex.forEach((column) => { - if(column.visible){ - width += column.getWidth(); - } - }); - - return width; - } - - moveColumn(from, to, after){ - to.element.parentNode.insertBefore(from.element, to.element); - - if(after){ - to.element.parentNode.insertBefore(to.element, from.element); - } - - this.moveColumnActual(from, to, after); - - this.verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); - } - - moveColumnActual(from, to, after){ - if(from.parent.isGroup){ - this._moveColumnInArray(from.parent.columns, from, to, after); - }else { - this._moveColumnInArray(this.columns, from, to, after); - } - - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - this.rerenderColumns(true); - - this.dispatch("column-moved", from, to, after); - - if(this.subscribedExternal("columnMoved")){ - this.dispatchExternal("columnMoved", from.getComponent(), this.table.columnManager.getComponents()); - } - } - - _moveColumnInArray(columns, from, to, after, updateRows){ - var fromIndex = columns.indexOf(from), - toIndex, rows = []; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if(after){ - toIndex = toIndex+1; - } - - }else { - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if(updateRows){ - - rows = this.chain("column-moving-rows", [from, to, after], null, []) || []; - - rows = rows.concat(this.table.rowManager.rows); - - rows.forEach(function(row){ - if(row.cells.length){ - var cell = row.cells.splice(fromIndex, 1)[0]; - row.cells.splice(toIndex, 0, cell); - } - }); - - } - } - } - - scrollToColumn(column, position, ifVisible){ - var left = 0, - offset = column.getLeftOffset(), - adjust = 0, - colEl = column.getElement(); - - - return new Promise((resolve, reject) => { - - if(typeof position === "undefined"){ - position = this.table.options.scrollToColumnPosition; - } - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToColumnIfVisible; - } - - if(column.visible){ - - //align to correct position - switch(position){ - case "middle": - case "center": - adjust = -this.element.clientWidth / 2; - break; - - case "right": - adjust = colEl.clientWidth - this.headersElement.clientWidth; - break; - } - - //check column visibility - if(!ifVisible){ - if(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){ - return false; - } - } - - //calculate scroll position - left = offset + adjust; - - left = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0); - - this.table.rowManager.scrollHorizontal(left); - this.scrollHorizontal(left); - - resolve(); - }else { - console.warn("Scroll Error - Column not visible"); - reject("Scroll Error - Column not visible"); - } - - }); - } - - //////////////// Cell Management ///////////////// - generateCells(row){ - var cells = []; - - this.columnsByIndex.forEach((column) => { - cells.push(column.generateCell(row)); - }); - - return cells; - } - - //////////////// Column Management ///////////////// - getFlexBaseWidth(){ - var totalWidth = this.table.element.clientWidth, //table element width - fixedWidth = 0; - - //adjust for vertical scrollbar if present - if(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){ - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - this.columnsByIndex.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width || 0; - - minWidth = parseInt(column.minWidth); - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width) ; - }else { - colWidth = parseInt(width); - } - }else { - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - } - }); - - return fixedWidth; - } - - addColumn(definition, before, nextToColumn){ - return new Promise((resolve, reject) => { - var column = this._addColumn(definition, before, nextToColumn); - - this._reIndexColumns(); - - this.dispatch("column-add", definition, before, nextToColumn); - - if(this.layoutMode() != "fitColumns"){ - column.reinitializeWidth(); - } - - this.redraw(true); - - this.table.rowManager.reinitialize(); - - this.rerenderColumns(); - - resolve(column); - }); - } - - //remove column from system - deregisterColumn(column){ - var field = column.getField(), - index; - - //remove from field list - if(field){ - delete this.columnsByField[field]; - } - - //remove from index list - index = this.columnsByIndex.indexOf(column); - - if(index > -1){ - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - index = this.columns.indexOf(column); - - if(index > -1){ - this.columns.splice(index, 1); - } - - this.verticalAlignHeaders(); - - this.redraw(); - } - - rerenderColumns(update, silent){ - if(!this.redrawBlock){ - this.renderer.rerenderColumns(update, silent); - }else { - if(update === false || (update === true && this.redrawBlockUpdate === null)){ - this.redrawBlockUpdate = update; - } - } - } - - blockRedraw(){ - this.redrawBlock = true; - this.redrawBlockUpdate = null; - } - - restoreRedraw(){ - this.redrawBlock = false; - this.verticalAlignHeaders(); - this.renderer.rerenderColumns(this.redrawBlockUpdate); - - } - - //redraw columns - redraw(force){ - if(Helpers.elVisible(this.element)){ - this.verticalAlignHeaders(); - } - - if(force){ - this.table.rowManager.resetScroll(); - this.table.rowManager.reinitialize(); - } - - if(!this.confirm("table-redrawing", force)){ - this.layoutRefresh(force); - } - - this.dispatch("table-redraw", force); - - this.table.footerManager.redraw(); - } -} - -class BasicVertical extends Renderer{ - constructor(table){ - super(table); - - this.verticalFillMode = "fill"; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.scrollTop = 0; - this.scrollLeft = 0; - } - - clearRows(){ - var element = this.tableElement; - - // element.children.detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - element.scrollTop = 0; - element.scrollLeft = 0; - - element.style.minWidth = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - } - - renderRows() { - var element = this.tableElement, - onlyGroupHeaders = true, - tableFrag = document.createDocumentFragment(), - rows = this.rows(); - - rows.forEach((row, index) => { - this.styleRow(row, index); - row.initialize(false, true); - - if (row.type !== "group") { - onlyGroupHeaders = false; - } - - tableFrag.appendChild(row.getElement()); - }); - - element.appendChild(tableFrag); - - rows.forEach((row) => { - row.rendered(); - - if(!row.heightInitialized) { - row.calcHeight(true); - } - }); - - rows.forEach((row) => { - if(!row.heightInitialized) { - row.setCellHeight(); - } - }); - - if(onlyGroupHeaders){ - element.style.minWidth = this.table.columnManager.getWidth() + "px"; - }else { - element.style.minWidth = ""; - } - } - - - rerenderRows(callback){ - this.clearRows(); - - if(callback){ - callback(); - } - - this.renderRows(); - - if(!this.rows().length){ - this.table.rowManager.tableEmpty(); - } - } - - scrollToRowNearestTop(row){ - var rowTop = Helpers.elOffset(row.getElement()).top; - - return !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop)); - } - - scrollToRow(row){ - var rowEl = row.getElement(); - - this.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop; - } - - visibleRows(includingBuffer){ - return this.rows(); - } - -} - -class VirtualDomVertical extends Renderer{ - constructor(table){ - super(table); - - this.verticalFillMode = "fill"; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - this.vDomBottom = 0; //hold position for last rendered row in the virtual DOM - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed - } - - ////////////////////////////////////// - ///////// Public Functions /////////// - ////////////////////////////////////// - - clearRows(){ - var element = this.tableElement; - - // element.children.detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - element.style.paddingTop = ""; - element.style.paddingBottom = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - - this.elementVertical.scrollTop = 0; - this.elementVertical.scrollLeft = 0; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomTop = 0; - this.vDomBottom = 0; - this.vDomTopPad = 0; - this.vDomBottomPad = 0; - this.vDomScrollPosTop = 0; - this.vDomScrollPosBottom = 0; - } - - renderRows(){ - this._virtualRenderFill(); - } - - rerenderRows(callback){ - var scrollTop = this.elementVertical.scrollTop; - var topRow = false; - var topOffset = false; - - var left = this.table.rowManager.scrollLeft; - - var rows = this.rows(); - - for(var i = this.vDomTop; i <= this.vDomBottom; i++){ - - if(rows[i]){ - var diff = scrollTop - rows[i].getElement().offsetTop; - - if(topOffset === false || Math.abs(diff) < topOffset){ - topOffset = diff; - topRow = i; - }else { - break; - } - } - } - - rows.forEach((row) => { - row.deinitializeHeight(); - }); - - if(callback){ - callback(); - } - - if(this.rows().length){ - this._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0); - }else { - this.clear(); - this.table.rowManager.tableEmpty(); - } - - this.scrollColumns(left); - } - - scrollColumns(left){ - this.table.rowManager.scrollHorizontal(left); - } - - scrollRows(top, dir){ - var topDiff = top - this.vDomScrollPosTop; - var bottomDiff = top - this.vDomScrollPosBottom; - var margin = this.vDomWindowBuffer * 2; - var rows = this.rows(); - - this.scrollTop = top; - - if(-topDiff > margin || bottomDiff > margin){ - //if big scroll redraw table; - var left = this.table.rowManager.scrollLeft; - this._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length)); - this.scrollColumns(left); - }else { - - if(dir){ - //scrolling up - if(topDiff < 0){ - this._addTopRow(rows, -topDiff); - } - - if(bottomDiff < 0){ - //hide bottom row if needed - if(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){ - this._removeBottomRow(rows, -bottomDiff); - }else { - this.vDomScrollPosBottom = this.scrollTop; - } - } - }else { - - if(bottomDiff >= 0){ - this._addBottomRow(rows, bottomDiff); - } - - //scrolling down - if(topDiff >= 0){ - //hide top row if needed - if(this.scrollTop > this.vDomWindowBuffer){ - this._removeTopRow(rows, topDiff); - }else { - this.vDomScrollPosTop = this.scrollTop; - } - } - } - } - } - - resize(){ - this.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight; - } - - scrollToRowNearestTop(row){ - var rowIndex = this.rows().indexOf(row); - - return !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex)); - } - - scrollToRow(row){ - var index = this.rows().indexOf(row); - - if(index > -1){ - this._virtualRenderFill(index, true); - } - } - - visibleRows(includingBuffer){ - var topEdge = this.elementVertical.scrollTop, - bottomEdge = this.elementVertical.clientHeight + topEdge, - topFound = false, - topRow = 0, - bottomRow = 0, - rows = this.rows(); - - if(includingBuffer){ - topRow = this.vDomTop; - bottomRow = this.vDomBottom; - }else { - for(var i = this.vDomTop; i <= this.vDomBottom; i++){ - if(rows[i]){ - if(!topFound){ - if((topEdge - rows[i].getElement().offsetTop) >= 0){ - topRow = i; - }else { - topFound = true; - - if(bottomEdge - rows[i].getElement().offsetTop >= 0){ - bottomRow = i; - }else { - break; - } - } - }else { - if(bottomEdge - rows[i].getElement().offsetTop >= 0){ - bottomRow = i; - }else { - break; - } - } - } - } - } - - return rows.slice(topRow, bottomRow + 1); - } - - ////////////////////////////////////// - //////// Internal Rendering ////////// - ////////////////////////////////////// - - //full virtual render - _virtualRenderFill(position, forceMove, offset) { - var element = this.tableElement, - holder = this.elementVertical, - topPad = 0, - rowsHeight = 0, - rowHeight = 0, - heightOccupied = 0, - topPadHeight = 0, - i = 0, - rows = this.rows(), - rowsCount = rows.length, - index = 0, - row, - rowFragment, - renderedRows = [], - totalRowsRendered = 0, - rowsToRender = 0, - fixedHeight = this.table.rowManager.fixedHeight, - containerHeight = this.elementVertical.clientHeight, - avgRowHeight = this.table.options.rowHeight, - resized = true; - - position = position || 0; - - offset = offset || 0; - - if(!position){ - this.clear(); - }else { - while(element.firstChild) element.removeChild(element.firstChild); - - //check if position is too close to bottom of table - heightOccupied = (rowsCount - position + 1) * this.vDomRowHeight; - - if(heightOccupied < containerHeight){ - position -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight); - if(position < 0){ - position = 0; - } - } - - //calculate initial pad - topPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position); - position -= topPad; - } - - if(rowsCount && Helpers.elVisible(this.elementVertical)){ - this.vDomTop = position; - this.vDomBottom = position -1; - - if(fixedHeight || this.table.options.maxHeight) { - if(avgRowHeight) { - rowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight); - } - rowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender)); - } - else { - rowsToRender = rowsCount; - } - - while(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) { - renderedRows = []; - rowFragment = document.createDocumentFragment(); - - i = 0; - - while ((i < rowsToRender) && this.vDomBottom < rowsCount -1) { - index = this.vDomBottom + 1, - row = rows[index]; - - this.styleRow(row, index); - - row.initialize(false, true); - if(!row.heightInitialized && !this.table.options.rowHeight){ - row.clearCellHeight(); - } - - rowFragment.appendChild(row.getElement()); - renderedRows.push(row); - this.vDomBottom ++; - i++; - } - - if(!renderedRows.length){ - break; - } - - element.appendChild(rowFragment); - - // NOTE: The next 3 loops are separate on purpose - // This is to batch up the dom writes and reads which drastically improves performance - - renderedRows.forEach((row) => { - row.rendered(); - - if(!row.heightInitialized) { - row.calcHeight(true); - } - }); - - renderedRows.forEach((row) => { - if(!row.heightInitialized) { - row.setCellHeight(); - } - }); - - renderedRows.forEach((row) => { - rowHeight = row.getHeight(); - - if(totalRowsRendered < topPad){ - topPadHeight += rowHeight; - }else { - rowsHeight += rowHeight; - } - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - totalRowsRendered++; - }); - - resized = this.table.rowManager.adjustTableSize(); - containerHeight = this.elementVertical.clientHeight; - if(resized && (fixedHeight || this.table.options.maxHeight)) - { - avgRowHeight = rowsHeight / totalRowsRendered; - rowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight))); - } - } - - if(!position){ - this.vDomTopPad = 0; - //adjust row height to match average of rendered elements - this.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered); - this.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1); - - this.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight; - }else { - this.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset; - this.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = this.vDomTopPad+"px"; - element.style.paddingBottom = this.vDomBottomPad+"px"; - - if(forceMove){ - this.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0); - } - - this.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight); - - //adjust for horizontal scrollbar if present (and not at top of table) - if(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){ - this.scrollTop += this.elementVertical.offsetHeight - containerHeight; - } - - this.vDomScrollPosTop = this.scrollTop; - this.vDomScrollPosBottom = this.scrollTop; - - holder.scrollTop = this.scrollTop; - - this.dispatch("render-virtual-fill"); - } - } - - _addTopRow(rows, fillableSpace){ - var table = this.tableElement, - addedRows = [], - paddingAdjust = 0, - index = this.vDomTop -1, - i = 0, - working = true; - - while(working){ - if(this.vDomTop){ - let row = rows[index], - rowHeight, initialized; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - initialized = row.initialized; - - if(fillableSpace >= rowHeight){ - - this.styleRow(row, index); - table.insertBefore(row.getElement(), table.firstChild); - - if(!row.initialized || !row.heightInitialized){ - addedRows.push(row); - } - - row.initialize(); - - if(!initialized){ - rowHeight = row.getElement().offsetHeight; - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - } - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - this.vDomTop--; - index--; - i++; - - }else { - working = false; - } - - }else { - working = false; - } - - }else { - working = false; - } - } - - for (let row of addedRows){ - row.clearCellHeight(); - } - - this._quickNormalizeRowHeight(addedRows); - - if(paddingAdjust){ - this.vDomTopPad -= paddingAdjust; - - if(this.vDomTopPad < 0){ - this.vDomTopPad = index * this.vDomRowHeight; - } - - if(index < 1){ - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop -= paddingAdjust; - } - } - - _removeTopRow(rows, fillableSpace){ - var removableRows = [], - paddingAdjust = 0, - i = 0, - working = true; - - while(working){ - let row = rows[this.vDomTop], - rowHeight; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - - if(fillableSpace >= rowHeight){ - this.vDomTop++; - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - removableRows.push(row); - i++; - }else { - working = false; - } - }else { - working = false; - } - } - - for (let row of removableRows){ - let rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - } - - if(paddingAdjust){ - this.vDomTopPad += paddingAdjust; - this.tableElement.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer; - } - } - - _addBottomRow(rows, fillableSpace){ - var table = this.tableElement, - addedRows = [], - paddingAdjust = 0, - index = this.vDomBottom + 1, - i = 0, - working = true; - - while(working){ - let row = rows[index], - rowHeight, initialized; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - initialized = row.initialized; - - if(fillableSpace >= rowHeight){ - - this.styleRow(row, index); - table.appendChild(row.getElement()); - - if(!row.initialized || !row.heightInitialized){ - addedRows.push(row); - } - - row.initialize(); - - if(!initialized){ - rowHeight = row.getElement().offsetHeight; - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - } - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - this.vDomBottom++; - index++; - i++; - }else { - working = false; - } - }else { - working = false; - } - } - - for (let row of addedRows){ - row.clearCellHeight(); - } - - this._quickNormalizeRowHeight(addedRows); - - if(paddingAdjust){ - this.vDomBottomPad -= paddingAdjust; - - if(this.vDomBottomPad < 0 || index == rows.length -1){ - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom += paddingAdjust; - } - } - - _removeBottomRow(rows, fillableSpace){ - var removableRows = [], - paddingAdjust = 0, - i = 0, - working = true; - - while(working){ - let row = rows[this.vDomBottom], - rowHeight; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - - if(fillableSpace >= rowHeight){ - this.vDomBottom --; - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - removableRows.push(row); - i++; - }else { - working = false; - } - }else { - working = false; - } - } - - for (let row of removableRows){ - let rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - } - - if(paddingAdjust){ - this.vDomBottomPad += paddingAdjust; - - if(this.vDomBottomPad < 0){ - this.vDomBottomPad = 0; - } - - this.tableElement.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom -= paddingAdjust; - } - } - - _quickNormalizeRowHeight(rows){ - for(let row of rows){ - row.calcHeight(); - } - - for(let row of rows){ - row.setCellHeight(); - } - } -} - -class RowManager extends CoreFeature{ - - constructor(table){ - super(table); - - this.element = this.createHolderElement(); //containing element - this.tableElement = this.createTableElement(); //table element - this.heightFixer = this.createTableElement(); //table element - this.placeholder = null; //placeholder element - this.placeholderContents = null; //placeholder element - - this.firstRender = false; //handle first render - this.renderMode = "virtual"; //current rendering mode - this.fixedHeight = false; //current rendering mode - - this.rows = []; //hold row data objects - this.activeRowsPipeline = []; //hold calculation of active rows - this.activeRows = []; //rows currently available to on display in the table - this.activeRowsCount = 0; //count of active rows - - this.displayRows = []; //rows currently on display in the table - this.displayRowsCount = 0; //count of display rows - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing - this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed - this.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed - - this.dataPipeline = []; //hold data pipeline tasks - this.displayPipeline = []; //hold data display pipeline tasks - - this.scrollbarWidth = 0; - - this.renderer = null; - } - - //////////////// Setup Functions ///////////////// - - createHolderElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-tableholder"); - el.setAttribute("tabindex", 0); - // el.setAttribute("role", "rowgroup"); - - return el; - } - - createTableElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - el.setAttribute("role", "rowgroup"); - - return el; - } - - initializePlaceholder(){ - var placeholder = this.table.options.placeholder; - - if(typeof placeholder === "function"){ - placeholder = placeholder.call(this.table); - } - - placeholder = this.chain("placeholder", [placeholder], placeholder, placeholder) || placeholder; - - //configure placeholder element - if(placeholder){ - let el = document.createElement("div"); - el.classList.add("tabulator-placeholder"); - - if(typeof placeholder == "string"){ - let contents = document.createElement("div"); - contents.classList.add("tabulator-placeholder-contents"); - contents.innerHTML = placeholder; - - el.appendChild(contents); - - this.placeholderContents = contents; - - }else if(typeof HTMLElement !== "undefined" && placeholder instanceof HTMLElement){ - - el.appendChild(placeholder); - this.placeholderContents = placeholder; - }else { - console.warn("Invalid placeholder provided, must be string or HTML Element", placeholder); - - this.el = null; - } - - this.placeholder = el; - } - } - - //return containing element - getElement(){ - return this.element; - } - - //return table element - getTableElement(){ - return this.tableElement; - } - - initialize(){ - this.initializePlaceholder(); - this.initializeRenderer(); - - //initialize manager - this.element.appendChild(this.tableElement); - - this.firstRender = true; - - //scroll header along with table body - this.element.addEventListener("scroll", () => { - var left = this.element.scrollLeft, - leftDir = this.scrollLeft > left, - top = this.element.scrollTop, - topDir = this.scrollTop > top; - - //handle horizontal scrolling - if(this.scrollLeft != left){ - this.scrollLeft = left; - - this.dispatch("scroll-horizontal", left, leftDir); - this.dispatchExternal("scrollHorizontal", left, leftDir); - - this._positionPlaceholder(); - } - - //handle vertical scrolling - if(this.scrollTop != top){ - this.scrollTop = top; - - this.renderer.scrollRows(top, topDir); - - this.dispatch("scroll-vertical", top, topDir); - this.dispatchExternal("scrollVertical", top, topDir); - } - }); - } - - ////////////////// Row Manipulation ////////////////// - findRow(subject){ - if(typeof subject == "object"){ - if(subject instanceof Row){ - //subject is row element - return subject; - }else if(subject instanceof RowComponent){ - //subject is public row component - return subject._getSelf() || false; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - //subject is a HTML element of the row - let match = this.rows.find((row) => { - return row.getElement() === subject; - }); - - return match || false; - }else if(subject === null){ - return false; - } - }else if(typeof subject == "undefined"){ - return false; - }else { - //subject should be treated as the index of the row - let match = this.rows.find((row) => { - return row.data[this.table.options.index] == subject; - }); - - return match || false; - } - - //catch all for any other type of input - return false; - } - - getRowFromDataObject(data){ - var match = this.rows.find((row) => { - return row.data === data; - }); - - return match || false; - } - - getRowFromPosition(position){ - return this.getDisplayRows().find((row) => { - return row.getPosition() === position && row.isDisplayed(); - }); - } - - scrollToRow(row, position, ifVisible){ - return this.renderer.scrollToRowPosition(row, position, ifVisible); - } - - ////////////////// Data Handling ////////////////// - setData(data, renderInPosition, columnsChanged){ - return new Promise((resolve, reject)=>{ - if(renderInPosition && this.getDisplayRows().length){ - if(this.table.options.pagination){ - this._setDataActual(data, true); - }else { - this.reRenderInPosition(() => { - this._setDataActual(data); - }); - } - }else { - if(this.table.options.autoColumns && columnsChanged && this.table.initialized){ - this.table.columnManager.generateColumnsFromRowData(data); - } - this.resetScroll(); - - this._setDataActual(data); - } - - resolve(); - }); - } - - _setDataActual(data, renderInPosition){ - this.dispatchExternal("dataProcessing", data); - - this._wipeElements(); - - if(Array.isArray(data)){ - this.dispatch("data-processing", data); - - data.forEach((def, i) => { - if(def && typeof def === "object"){ - var row = new Row(def, this); - this.rows.push(row); - }else { - console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); - } - }); - - this.refreshActiveData(false, false, renderInPosition); - - this.dispatch("data-processed", data); - this.dispatchExternal("dataProcessed", data); - }else { - console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data); - } - } - - _wipeElements(){ - this.dispatch("rows-wipe"); - - this.destroy(); - - this.adjustTableSize(); - - this.dispatch("rows-wiped"); - } - - destroy(){ - this.rows.forEach((row) => { - row.wipe(); - }); - - this.rows = []; - this.activeRows = []; - this.activeRowsPipeline = []; - this.activeRowsCount = 0; - this.displayRows = []; - this.displayRowsCount = 0; - } - - deleteRow(row, blockRedraw){ - var allIndex = this.rows.indexOf(row), - activeIndex = this.activeRows.indexOf(row); - - if(activeIndex > -1){ - this.activeRows.splice(activeIndex, 1); - } - - if(allIndex > -1){ - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator((rows) => { - var displayIndex = rows.indexOf(row); - - if(displayIndex > -1){ - rows.splice(displayIndex, 1); - } - }); - - if(!blockRedraw){ - this.reRenderInPosition(); - } - - this.regenerateRowPositions(); - - this.dispatchExternal("rowDeleted", row.getComponent()); - - if(!this.displayRowsCount){ - this.tableEmpty(); - } - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.getData()); - } - } - - addRow(data, pos, index, blockRedraw){ - var row = this.addRowActual(data, pos, index, blockRedraw); - return row; - } - - //add multiple rows - addRows(data, pos, index, refreshDisplayOnly){ - var rows = []; - - return new Promise((resolve, reject) => { - pos = this.findAddRowPos(pos); - - if(!Array.isArray(data)){ - data = [data]; - } - - if((typeof index == "undefined" && pos) || (typeof index !== "undefined" && !pos)){ - data.reverse(); - } - - data.forEach((item, i) => { - var row = this.addRow(item, pos, index, true); - rows.push(row); - this.dispatch("row-added", row, item, pos, index); - }); - - this.refreshActiveData(refreshDisplayOnly ? "displayPipeline" : false, false, true); - - this.regenerateRowPositions(); - - if(this.displayRowsCount){ - this._clearPlaceholder(); - } - - resolve(rows); - }); - } - - findAddRowPos(pos){ - if(typeof pos === "undefined"){ - pos = this.table.options.addRowPos; - } - - if(pos === "pos"){ - pos = true; - } - - if(pos === "bottom"){ - pos = false; - } - - return pos; - } - - addRowActual(data, pos, index, blockRedraw){ - var row = data instanceof Row ? data : new Row(data || {}, this), - top = this.findAddRowPos(pos), - allIndex = -1, - activeIndex, chainResult; - - if(!index){ - chainResult = this.chain("row-adding-position", [row, top], null, {index, top}); - - index = chainResult.index; - top = chainResult.top; - } - - if(typeof index !== "undefined"){ - index = this.findRow(index); - } - - index = this.chain("row-adding-index", [row, index, top], null, index); - - if(index){ - allIndex = this.rows.indexOf(index); - } - - if(index && allIndex > -1){ - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function(rows){ - var displayIndex = rows.indexOf(index); - - if(displayIndex > -1){ - rows.splice((top ? displayIndex : displayIndex + 1), 0, row); - } - }); - - if(activeIndex > -1){ - this.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row); - } - - this.rows.splice((top ? allIndex : allIndex + 1), 0, row); - - }else { - - if(top){ - - this.displayRowIterator(function(rows){ - rows.unshift(row); - }); - - this.activeRows.unshift(row); - this.rows.unshift(row); - }else { - this.displayRowIterator(function(rows){ - rows.push(row); - }); - - this.activeRows.push(row); - this.rows.push(row); - } - } - - this.setActiveRows(this.activeRows); - - this.dispatchExternal("rowAdded", row.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - - if(!blockRedraw){ - this.reRenderInPosition(); - } - - return row; - } - - moveRow(from, to, after){ - this.dispatch("row-move", from, to, after); - - this.moveRowActual(from, to, after); - - this.regenerateRowPositions(); - - this.dispatch("row-moved", from, to, after); - this.dispatchExternal("rowMoved", from.getComponent()); - } - - moveRowActual(from, to, after){ - this.moveRowInArray(this.rows, from, to, after); - this.moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator((rows) => { - this.moveRowInArray(rows, from, to, after); - }); - - this.dispatch("row-moving", from, to, after); - } - - moveRowInArray(rows, from, to, after){ - var fromIndex, toIndex, start, end; - - if(from !== to){ - - fromIndex = rows.indexOf(from); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if(after){ - rows.splice(toIndex+1, 0, from); - }else { - rows.splice(toIndex, 0, from); - } - - }else { - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - if(rows === this.getDisplayRows()){ - - start = fromIndex < toIndex ? fromIndex : toIndex; - end = toIndex > fromIndex ? toIndex : fromIndex +1; - - for(let i = start; i <= end; i++){ - if(rows[i]){ - this.styleRow(rows[i], i); - } - } - } - } - } - - clearData(){ - this.setData([]); - } - - getRowIndex(row){ - return this.findRowIndex(row, this.rows); - } - - getDisplayRowIndex(row){ - var index = this.getDisplayRows().indexOf(row); - return index > -1 ? index : false; - } - - nextDisplayRow(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - nextRow = false; - - - if(index !== false && index < this.displayRowsCount -1){ - nextRow = this.getDisplayRows()[index+1]; - } - - if(nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")){ - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; - } - - prevDisplayRow(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if(index){ - prevRow = this.getDisplayRows()[index-1]; - } - - if(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")){ - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; - } - - findRowIndex(row, list){ - var rowIndex; - - row = this.findRow(row); - - if(row){ - rowIndex = list.indexOf(row); - - if(rowIndex > -1){ - return rowIndex; - } - } - - return false; - } - - getData(active, transform){ - var output = [], - rows = this.getRows(active); - - rows.forEach(function(row){ - if(row.type == "row"){ - output.push(row.getData(transform || "data")); - } - }); - - return output; - } - - getComponents(active){ - var output = [], - rows = this.getRows(active); - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - return output; - } - - getDataCount(active){ - var rows = this.getRows(active); - - return rows.length; - } - - scrollHorizontal(left){ - this.scrollLeft = left; - this.element.scrollLeft = left; - - this.dispatch("scroll-horizontal", left); - } - - registerDataPipelineHandler(handler, priority){ - if(typeof priority !== "undefined"){ - this.dataPipeline.push({handler, priority}); - this.dataPipeline.sort((a, b) => { - return a.priority - b.priority; - }); - }else { - console.error("Data pipeline handlers must have a priority in order to be registered"); - } - } - - registerDisplayPipelineHandler(handler, priority){ - if(typeof priority !== "undefined"){ - this.displayPipeline.push({handler, priority}); - this.displayPipeline.sort((a, b) => { - return a.priority - b.priority; - }); - }else { - console.error("Display pipeline handlers must have a priority in order to be registered"); - } - } - - //set active data set - refreshActiveData(handler, skipStage, renderInPosition){ - var table = this.table, - stage = "", - index = 0, - cascadeOrder = ["all", "dataPipeline", "display", "displayPipeline", "end"]; - - if(!this.table.destroyed){ - if(typeof handler === "function"){ - index = this.dataPipeline.findIndex((item) => { - return item.handler === handler; - }); - - if(index > -1){ - stage = "dataPipeline"; - - if(skipStage){ - if(index == this.dataPipeline.length - 1){ - stage = "display"; - }else { - index++; - } - } - }else { - index = this.displayPipeline.findIndex((item) => { - return item.handler === handler; - }); - - if(index > -1){ - stage = "displayPipeline"; - - if(skipStage){ - if(index == this.displayPipeline.length - 1){ - stage = "end"; - }else { - index++; - } - } - }else { - console.error("Unable to refresh data, invalid handler provided", handler); - return; - } - } - }else { - stage = handler || "all"; - index = 0; - } - - if(this.redrawBlock){ - if(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){ - this.redrawBlockRestoreConfig = { - handler: handler, - skipStage: skipStage, - renderInPosition: renderInPosition, - stage:stage, - index:index, - }; - } - - return; - }else { - if(Helpers.elVisible(this.element)){ - if(renderInPosition){ - this.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition)); - }else { - this.refreshPipelines(handler, stage, index, renderInPosition); - - if(!handler){ - this.table.columnManager.renderer.renderColumns(); - } - - this.renderTable(); - - if(table.options.layoutColumnsOnNewData){ - this.table.columnManager.redraw(true); - } - } - }else { - this.refreshPipelines(handler, stage, index, renderInPosition); - } - - this.dispatch("data-refreshed"); - } - } - } - - refreshPipelines(handler, stage, index, renderInPosition){ - this.dispatch("data-refreshing"); - - if(!handler || !this.activeRowsPipeline[0]){ - this.activeRowsPipeline[0] = this.rows.slice(0); - } - - //cascade through data refresh stages - switch(stage){ - case "all": - //handle case where all data needs refreshing - - case "dataPipeline": - for(let i = index; i < this.dataPipeline.length; i++){ - let result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0)); - - this.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0); - } - - this.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]); - - case "display": - index = 0; - this.resetDisplayRows(); - - case "displayPipeline": - for(let i = index; i < this.displayPipeline.length; i++){ - let result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition); - - this.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i); - } - - case "end": - //case to handle scenario when trying to skip past end stage - this.regenerateRowPositions(); - } - - if(this.getDisplayRows().length){ - this._clearPlaceholder(); - } - } - - //regenerate row positions - regenerateRowPositions(){ - var rows = this.getDisplayRows(); - var index = 1; - - rows.forEach((row) => { - if (row.type === "row"){ - row.setPosition(index); - index++; - } - }); - } - - setActiveRows(activeRows){ - this.activeRows = this.activeRows = Object.assign([], activeRows); - this.activeRowsCount = this.activeRows.length; - } - - //reset display rows array - resetDisplayRows(){ - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - } - - //set display row pipeline data - setDisplayRows(displayRows, index){ - this.displayRows[index] = displayRows; - - if(index == this.displayRows.length -1){ - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; - } - } - - getDisplayRows(index){ - if(typeof index == "undefined"){ - return this.displayRows.length ? this.displayRows[this.displayRows.length -1] : []; - }else { - return this.displayRows[index] || []; - } - } - - getVisibleRows(chain, viewable){ - var rows = Object.assign([], this.renderer.visibleRows(!viewable)); - - if(chain){ - rows = this.chain("rows-visible", [viewable], rows, rows); - } - - return rows; - } - - //repeat action across display rows - displayRowIterator(callback){ - this.activeRowsPipeline.forEach(callback); - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; - } - - //return only actual rows (not group headers etc) - getRows(type){ - var rows = []; - - switch(type){ - case "active": - rows = this.activeRows; - break; - - case "display": - rows = this.table.rowManager.getDisplayRows(); - break; - - case "visible": - rows = this.getVisibleRows(false, true); - break; - - default: - rows = this.chain("rows-retrieve", type, null, this.rows) || this.rows; - } - - return rows; - } - - ///////////////// Table Rendering ///////////////// - //trigger rerender of table in current position - reRenderInPosition(callback){ - if(this.redrawBlock){ - if(callback){ - callback(); - }else { - this.redrawBlockRenderInPosition = true; - } - }else { - this.dispatchExternal("renderStarted"); - - this.renderer.rerenderRows(callback); - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.scrollBarCheck(); - - this.dispatchExternal("renderComplete"); - } - } - - scrollBarCheck(){ - var scrollbarWidth = 0; - - //adjust for vertical scrollbar moving table when present - if(this.element.scrollHeight > this.element.clientHeight){ - scrollbarWidth = this.element.offsetWidth - this.element.clientWidth; - } - - if(scrollbarWidth !== this.scrollbarWidth){ - this.scrollbarWidth = scrollbarWidth; - this.dispatch("scrollbar-vertical", scrollbarWidth); - } - } - - initializeRenderer(){ - var renderClass; - - var renderers = { - "virtual": VirtualDomVertical, - "basic": BasicVertical, - }; - - if(typeof this.table.options.renderVertical === "string"){ - renderClass = renderers[this.table.options.renderVertical]; - }else { - renderClass = this.table.options.renderVertical; - } - - if(renderClass){ - this.renderMode = this.table.options.renderVertical; - - this.renderer = new renderClass(this.table, this.element, this.tableElement); - this.renderer.initialize(); - - if((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){ - this.fixedHeight = true; - }else { - this.fixedHeight = false; - } - }else { - console.error("Unable to find matching renderer:", this.table.options.renderVertical); - } - } - - getRenderMode(){ - return this.renderMode; - } - - renderTable(){ - this.dispatchExternal("renderStarted"); - - this.element.scrollTop = 0; - - this._clearTable(); - - if(this.displayRowsCount){ - this.renderer.renderRows(); - - if(this.firstRender){ - this.firstRender = false; - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.layoutRefresh(true); - } - }else { - this.renderEmptyScroll(); - } - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.dispatch("table-layout"); - - if(!this.displayRowsCount){ - this._showPlaceholder(); - } - - this.scrollBarCheck(); - - this.dispatchExternal("renderComplete"); - } - - //show scrollbars on empty table div - renderEmptyScroll(){ - if(this.placeholder){ - this.tableElement.style.display = "none"; - }else { - this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px"; - // this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; - } - } - - _clearTable(){ - this._clearPlaceholder(); - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.renderer.clearRows(); - } - - tableEmpty(){ - this.renderEmptyScroll(); - this._showPlaceholder(); - } - - checkPlaceholder(){ - if(this.displayRowsCount){ - this._clearPlaceholder(); - }else { - this.tableEmpty(); - } - } - - _showPlaceholder(){ - if(this.placeholder){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.parentNode.removeChild(this.placeholder); - } - - this.initializePlaceholder(); - - this.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - - this.getElement().appendChild(this.placeholder); - this._positionPlaceholder(); - - this.adjustTableSize(); - } - } - - _clearPlaceholder(){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.parentNode.removeChild(this.placeholder); - } - - // clear empty table placeholder min - this.tableElement.style.minWidth = ""; - this.tableElement.style.display = ""; - } - - _positionPlaceholder(){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.style.width = this.table.columnManager.getWidth() + "px"; - this.placeholderContents.style.width = this.table.rowManager.element.clientWidth + "px"; - this.placeholderContents.style.marginLeft = this.scrollLeft + "px"; - } - } - - styleRow(row, index){ - var rowEl = row.getElement(); - - if(index % 2){ - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - }else { - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } - } - - //normalize height of active rows - normalizeHeight(){ - this.activeRows.forEach(function(row){ - row.normalizeHeight(); - }); - } - - //adjust the height of the table holder to fit in the Tabulator element - adjustTableSize(){ - let initialHeight = this.element.clientHeight, minHeight; - let resized = false; - - if(this.renderer.verticalFillMode === "fill"){ - let otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0)); - - if(this.fixedHeight){ - minHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + "px"; - - const height = "calc(100% - " + otherHeight + "px)"; - this.element.style.minHeight = minHeight || "calc(100% - " + otherHeight + "px)"; - this.element.style.height = height; - this.element.style.maxHeight = height; - } else { - this.element.style.height = ""; - this.element.style.height = - this.table.element.clientHeight - otherHeight + "px"; - this.element.scrollTop = this.scrollTop; - } - - this.renderer.resize(); - - //check if the table has changed size when dealing with variable height tables - if(!this.fixedHeight && initialHeight != this.element.clientHeight){ - resized = true; - if(this.subscribed("table-resize")){ - this.dispatch("table-resize"); - }else { - this.redraw(); - } - } - - this.scrollBarCheck(); - } - - this._positionPlaceholder(); - return resized; - } - - //reinitialize all rows - reinitialize(){ - this.rows.forEach(function(row){ - row.reinitialize(true); - }); - } - - //prevent table from being redrawn - blockRedraw (){ - this.redrawBlock = true; - this.redrawBlockRestoreConfig = false; - } - - //restore table redrawing - restoreRedraw (){ - this.redrawBlock = false; - - if(this.redrawBlockRestoreConfig){ - this.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition); - - this.redrawBlockRestoreConfig = false; - }else { - if(this.redrawBlockRenderInPosition){ - this.reRenderInPosition(); - } - } - - this.redrawBlockRenderInPosition = false; - } - - //redraw table - redraw (force){ - this.adjustTableSize(); - this.table.tableWidth = this.table.element.clientWidth; - - if(!force){ - this.reRenderInPosition(); - this.scrollHorizontal(this.scrollLeft); - }else { - this.renderTable(); - } - } - - resetScroll(){ - this.element.scrollLeft = 0; - this.element.scrollTop = 0; - - if(this.table.browser === "ie"){ - var event = document.createEvent("Event"); - event.initEvent("scroll", false, true); - this.element.dispatchEvent(event); - }else { - this.element.dispatchEvent(new Event('scroll')); - } - } -} - -class FooterManager extends CoreFeature{ - - constructor(table){ - super(table); - - this.active = false; - this.element = this.createElement(); //containing element - this.containerElement = this.createContainerElement(); //containing element - this.external = false; - } - - initialize(){ - this.initializeElement(); - } - - createElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; - } - - - createContainerElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-footer-contents"); - - this.element.appendChild(el); - - return el; - } - - initializeElement(){ - if(this.table.options.footerElement){ - - switch(typeof this.table.options.footerElement){ - case "string": - if(this.table.options.footerElement[0] === "<"){ - this.containerElement.innerHTML = this.table.options.footerElement; - }else { - this.external = true; - this.containerElement = document.querySelector(this.table.options.footerElement); - } - break; - - default: - this.element = this.table.options.footerElement; - break; - } - } - } - - getElement(){ - return this.element; - } - - append(element){ - this.activate(); - - this.containerElement.appendChild(element); - this.table.rowManager.adjustTableSize(); - } - - prepend(element){ - this.activate(); - - this.element.insertBefore(element, this.element.firstChild); - this.table.rowManager.adjustTableSize(); - } - - remove(element){ - element.parentNode.removeChild(element); - this.deactivate(); - } - - deactivate(force){ - if(!this.element.firstChild || force){ - if(!this.external){ - this.element.parentNode.removeChild(this.element); - } - this.active = false; - } - } - - activate(){ - if(!this.active){ - this.active = true; - if(!this.external){ - this.table.element.appendChild(this.getElement()); - this.table.element.style.display = ''; - } - } - } - - redraw(){ - this.dispatch("footer-redraw"); - } -} - -class InteractionManager extends CoreFeature { - - constructor (table){ - super(table); - - this.el = null; - - this.abortClasses = ["tabulator-headers", "tabulator-table"]; - - this.previousTargets = {}; - - this.listeners = [ - "click", - "dblclick", - "contextmenu", - "mouseenter", - "mouseleave", - "mouseover", - "mouseout", - "mousemove", - "mouseup", - "mousedown", - "touchstart", - "touchend", - ]; - - this.componentMap = { - "tabulator-cell":"cell", - "tabulator-row":"row", - "tabulator-group":"group", - "tabulator-col":"column", - }; - - this.pseudoTrackers = { - "row":{ - subscriber:null, - target:null, - }, - "cell":{ - subscriber:null, - target:null, - }, - "group":{ - subscriber:null, - target:null, - }, - "column":{ - subscriber:null, - target:null, - }, - }; - - this.pseudoTracking = false; - } - - initialize(){ - this.el = this.table.element; - - this.buildListenerMap(); - this.bindSubscriptionWatchers(); - } - - buildListenerMap(){ - var listenerMap = {}; - - this.listeners.forEach((listener) => { - listenerMap[listener] = { - handler:null, - components:[], - }; - }); - - this.listeners = listenerMap; - } - - bindPseudoEvents(){ - Object.keys(this.pseudoTrackers).forEach((key) => { - this.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key); - this.subscribe(key + "-mouseover", this.pseudoTrackers[key].subscriber); - }); - - this.pseudoTracking = true; - } - - pseudoMouseEnter(key, e, target){ - if(this.pseudoTrackers[key].target !== target){ - - if(this.pseudoTrackers[key].target){ - this.dispatch(key + "-mouseleave", e, this.pseudoTrackers[key].target); - } - - this.pseudoMouseLeave(key, e); - - this.pseudoTrackers[key].target = target; - - this.dispatch(key + "-mouseenter", e, target); - } - } - - pseudoMouseLeave(key, e){ - var leaveList = Object.keys(this.pseudoTrackers), - linkedKeys = { - "row":["cell"], - "cell":["row"], - }; - - leaveList = leaveList.filter((item) => { - var links = linkedKeys[key]; - return item !== key && (!links || (links && !links.includes(item))); - }); - - - leaveList.forEach((key) => { - var target = this.pseudoTrackers[key].target; - - if(this.pseudoTrackers[key].target){ - this.dispatch(key + "-mouseleave", e, target); - - this.pseudoTrackers[key].target = null; - } - }); - } - - - bindSubscriptionWatchers(){ - var listeners = Object.keys(this.listeners), - components = Object.values(this.componentMap); - - for(let comp of components){ - for(let listener of listeners){ - let key = comp + "-" + listener; - - this.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener)); - } - } - - this.subscribe("table-destroy", this.clearWatchers.bind(this)); - } - - subscriptionChanged(component, key, added){ - var listener = this.listeners[key].components, - index = listener.indexOf(component), - changed = false; - - if(added){ - if(index === -1){ - listener.push(component); - changed = true; - } - }else { - if(!this.subscribed(component + "-" + key)){ - if(index > -1){ - listener.splice(index, 1); - changed = true; - } - } - } - - if((key === "mouseenter" || key === "mouseleave") && !this.pseudoTracking){ - this.bindPseudoEvents(); - } - - if(changed){ - this.updateEventListeners(); - } - } - - updateEventListeners(){ - for(let key in this.listeners){ - let listener = this.listeners[key]; - - if(listener.components.length){ - if(!listener.handler){ - listener.handler = this.track.bind(this, key); - this.el.addEventListener(key, listener.handler); - // this.el.addEventListener(key, listener.handler, {passive: true}) - } - }else { - if(listener.handler){ - this.el.removeEventListener(key, listener.handler); - listener.handler = null; - } - } - } - } - - track(type, e){ - var path = (e.composedPath && e.composedPath()) || e.path; - - var targets = this.findTargets(path); - targets = this.bindComponents(type, targets); - - this.triggerEvents(type, e, targets); - - if(this.pseudoTracking && (type == "mouseover" || type == "mouseleave") && !Object.keys(targets).length){ - this.pseudoMouseLeave("none", e); - } - } - - findTargets(path){ - var targets = {}; - - let componentMap = Object.keys(this.componentMap); - - for (let el of path) { - let classList = el.classList ? [...el.classList] : []; - - let abort = classList.filter((item) => { - return this.abortClasses.includes(item); - }); - - if(abort.length){ - break; - } - - let elTargets = classList.filter((item) => { - return componentMap.includes(item); - }); - - for (let target of elTargets) { - if(!targets[this.componentMap[target]]){ - targets[this.componentMap[target]] = el; - } - } - } - - if(targets.group && targets.group === targets.row){ - delete targets.row; - } - - return targets; - } - - bindComponents(type, targets){ - //ensure row component is looked up before cell - var keys = Object.keys(targets).reverse(), - listener = this.listeners[type], - matches = {}, - targetMatches = {}; - - for(let key of keys){ - let component, - target = targets[key], - previousTarget = this.previousTargets[key]; - - if(previousTarget && previousTarget.target === target){ - component = previousTarget.component; - }else { - switch(key){ - case "row": - case "group": - if(listener.components.includes("row") || listener.components.includes("cell") || listener.components.includes("group")){ - let rows = this.table.rowManager.getVisibleRows(true); - - component = rows.find((row) => { - return row.getElement() === target; - }); - - if(targets["row"] && targets["row"].parentNode && targets["row"].parentNode.closest(".tabulator-row")){ - targets[key] = false; - } - } - break; - - case "column": - if(listener.components.includes("column")){ - component = this.table.columnManager.findColumn(target); - } - break; - - case "cell": - if(listener.components.includes("cell")){ - if(matches["row"] instanceof Row){ - component = matches["row"].findCell(target); - }else { - if(targets["row"]){ - console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"); - } - } - } - break; - } - } - - if(component){ - matches[key] = component; - targetMatches[key] = { - target:target, - component:component, - }; - } - } - - this.previousTargets = targetMatches; - - return matches; - } - - triggerEvents(type, e, targets){ - var listener = this.listeners[type]; - - for(let key in targets){ - if(targets[key] && listener.components.includes(key)){ - this.dispatch(key + "-" + type, e, targets[key]); - } - } - } - - clearWatchers(){ - for(let key in this.listeners){ - let listener = this.listeners[key]; - - if(listener.handler){ - this.el.removeEventListener(key, listener.handler); - listener.handler = null; - } - } - } -} - -class ComponentFunctionBinder{ - - constructor(table){ - this.table = table; - - this.bindings = {}; - } - - bind(type, funcName, handler){ - if(!this.bindings[type]){ - this.bindings[type] = {}; - } - - if(this.bindings[type][funcName]){ - console.warn("Unable to bind component handler, a matching function name is already bound", type, funcName, handler); - }else { - this.bindings[type][funcName] = handler; - } - } - - handle(type, component, name){ - if(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){ - return this.bindings[type][name].bind(null, component); - }else { - if(name !== "then" && typeof name === "string" && !name.startsWith("_")){ - if(this.table.options.debugInvalidComponentFuncs){ - console.error("The " + type + " component does not have a " + name + " function, have you checked that you have the correct Tabulator module installed?"); - } - } - } - } -} - -class DataLoader extends CoreFeature{ - constructor(table){ - super(table); - - this.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request - this.loading = false; - } - - initialize(){} - - load(data, params, config, replace, silent, columnsChanged){ - var requestNo = ++this.requestOrder; - - if(this.table.destroyed){ - return Promise.resolve(); - } - - this.dispatchExternal("dataLoading", data); - - //parse json data to array - if (data && (data.indexOf("{") == 0 || data.indexOf("[") == 0)){ - data = JSON.parse(data); - } - - if(this.confirm("data-loading", [data, params, config, silent])){ - this.loading = true; - - if(!silent){ - this.alertLoader(); - } - - //get params for request - params = this.chain("data-params", [data, config, silent], params || {}, params || {}); - - params = this.mapParams(params, this.table.options.dataSendParams); - - var result = this.chain("data-load", [data, params, config, silent], false, Promise.resolve([])); - - return result.then((response) => { - if(!this.table.destroyed){ - if(!Array.isArray(response) && typeof response == "object"){ - response = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams)); - } - - var rowData = this.chain("data-loaded", response, null, response); - - if(requestNo == this.requestOrder){ - this.clearAlert(); - - if(rowData !== false){ - this.dispatchExternal("dataLoaded", rowData); - this.table.rowManager.setData(rowData, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged); - } - }else { - console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made"); - } - }else { - console.warn("Data Load Response Blocked - Table has been destroyed"); - } - }).catch((error) => { - console.error("Data Load Error: ", error); - this.dispatchExternal("dataLoadError", error); - - if(!silent){ - this.alertError(); - } - - setTimeout(() => { - this.clearAlert(); - }, this.table.options.dataLoaderErrorTimeout); - }) - .finally(() => { - this.loading = false; - }); - }else { - this.dispatchExternal("dataLoaded", data); - - if(!data){ - data = []; - } - - this.table.rowManager.setData(data, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged); - return Promise.resolve(); - } - } - - mapParams(params, map){ - var output = {}; - - for(let key in params){ - output[map.hasOwnProperty(key) ? map[key] : key] = params[key]; - } - - return output; - } - - objectInvert(obj){ - var output = {}; - - for(let key in obj){ - output[obj[key]] = key; - } - - return output; - } - - blockActiveLoad(){ - this.requestOrder++; - } - - alertLoader(){ - var shouldLoad = typeof this.table.options.dataLoader === "function" ? this.table.options.dataLoader() : this.table.options.dataLoader; - - if(shouldLoad){ - this.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText("data|loading")); - } - } - - alertError(){ - this.table.alertManager.alert(this.table.options.dataLoaderError || this.langText("data|error"), "error"); - } - - clearAlert(){ - this.table.alertManager.clear(); - } -} - -class ExternalEventBus { - - constructor(table, optionsList, debug){ - this.table = table; - this.events = {}; - this.optionsList = optionsList || {}; - this.subscriptionNotifiers = {}; - - this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); - this.debug = debug; - } - - subscriptionChange(key, callback){ - if(!this.subscriptionNotifiers[key]){ - this.subscriptionNotifiers[key] = []; - } - - this.subscriptionNotifiers[key].push(callback); - - if(this.subscribed(key)){ - this._notifySubscriptionChange(key, true); - } - } - - subscribe(key, callback){ - if(!this.events[key]){ - this.events[key] = []; - } - - this.events[key].push(callback); - - this._notifySubscriptionChange(key, true); - } - - unsubscribe(key, callback){ - var index; - - if(this.events[key]){ - if(callback){ - index = this.events[key].findIndex((item) => { - return item === callback; - }); - - if(index > -1){ - this.events[key].splice(index, 1); - }else { - console.warn("Cannot remove event, no matching event found:", key, callback); - return; - } - }else { - delete this.events[key]; - } - }else { - console.warn("Cannot remove event, no events set on:", key); - return; - } - - this._notifySubscriptionChange(key, false); - } - - subscribed(key){ - return this.events[key] && this.events[key].length; - } - - _notifySubscriptionChange(key, subscribed){ - var notifiers = this.subscriptionNotifiers[key]; - - if(notifiers){ - notifiers.forEach((callback)=>{ - callback(subscribed); - }); - } - } - - _dispatch(){ - var args = Array.from(arguments), - key = args.shift(), - result; - - if(this.events[key]){ - this.events[key].forEach((callback, i) => { - let callResult = callback.apply(this.table, args); - - if(!i){ - result = callResult; - } - }); - } - - return result; - } - - _debugDispatch(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "ExternalEvent:" + args[0]; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._dispatch(...arguments); - } -} - -class InternalEventBus { - - constructor(debug){ - this.events = {}; - this.subscriptionNotifiers = {}; - - this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); - this.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this); - this.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this); - this.debug = debug; - } - - subscriptionChange(key, callback){ - if(!this.subscriptionNotifiers[key]){ - this.subscriptionNotifiers[key] = []; - } - - this.subscriptionNotifiers[key].push(callback); - - if(this.subscribed(key)){ - this._notifySubscriptionChange(key, true); - } - } - - subscribe(key, callback, priority = 10000){ - if(!this.events[key]){ - this.events[key] = []; - } - - this.events[key].push({callback, priority}); - - this.events[key].sort((a, b) => { - return a.priority - b.priority; - }); - - this._notifySubscriptionChange(key, true); - } - - unsubscribe(key, callback){ - var index; - - if(this.events[key]){ - if(callback){ - index = this.events[key].findIndex((item) => { - return item.callback === callback; - }); - - if(index > -1){ - this.events[key].splice(index, 1); - }else { - console.warn("Cannot remove event, no matching event found:", key, callback); - return; - } - } - }else { - console.warn("Cannot remove event, no events set on:", key); - return; - } - - this._notifySubscriptionChange(key, false); - } - - subscribed(key){ - return this.events[key] && this.events[key].length; - } - - _chain(key, args, initialValue, fallback){ - var value = initialValue; - - if(!Array.isArray(args)){ - args = [args]; - } - - if(this.subscribed(key)){ - this.events[key].forEach((subscriber, i) => { - value = subscriber.callback.apply(this, args.concat([value])); - }); - - return value; - }else { - return typeof fallback === "function" ? fallback() : fallback; - } - } - - _confirm(key, args){ - var confirmed = false; - - if(!Array.isArray(args)){ - args = [args]; - } - - if(this.subscribed(key)){ - this.events[key].forEach((subscriber, i) => { - if(subscriber.callback.apply(this, args)){ - confirmed = true; - } - }); - } - - return confirmed; - } - - _notifySubscriptionChange(key, subscribed){ - var notifiers = this.subscriptionNotifiers[key]; - - if(notifiers){ - notifiers.forEach((callback)=>{ - callback(subscribed); - }); - } - } - - _dispatch(){ - var args = Array.from(arguments), - key = args.shift(); - - if(this.events[key]){ - this.events[key].forEach((subscriber) => { - subscriber.callback.apply(this, args); - }); - } - } - - _debugDispatch(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._dispatch(...arguments); - } - - _debugChain(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._chain(...arguments); - } - - _debugConfirm(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._confirm(...arguments); - } -} - -class DeprecationAdvisor extends CoreFeature{ - - constructor(table){ - super(table); - } - - _warnUser(){ - if(this.options("debugDeprecation")){ - console.warn(...arguments); - } - } - - check(oldOption, newOption, convert){ - var msg = ""; - - if(typeof this.options(oldOption) !== "undefined"){ - msg = "Deprecated Setup Option - Use of the %c" + oldOption + "%c option is now deprecated"; - - if(newOption){ - msg = msg + ", Please use the %c" + newOption + "%c option instead"; - this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;'); - - if(convert){ - this.table.options[newOption] = this.table.options[oldOption]; - } - }else { - this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;'); - } - - return false; - }else { - return true; - } - } - - checkMsg(oldOption, msg){ - if(typeof this.options(oldOption) !== "undefined"){ - this._warnUser("%cDeprecated Setup Option - Use of the %c" + oldOption + " %c option is now deprecated, " + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;'); - - return false; - }else { - return true; - } - } - - msg(msg){ - this._warnUser(msg); - } -} - -class TableRegistry { - - static register(table){ - TableRegistry.tables.push(table); - } - - static deregister(table){ - var index = TableRegistry.tables.indexOf(table); - - if(index > -1){ - TableRegistry.tables.splice(index, 1); - } - } - - static lookupTable(query, silent){ - var results = [], - matches, match; - - if(typeof query === "string"){ - matches = document.querySelectorAll(query); - - if(matches.length){ - for(var i = 0; i < matches.length; i++){ - match = TableRegistry.matchElement(matches[i]); - - if(match){ - results.push(match); - } - } - } - - }else if((typeof HTMLElement !== "undefined" && query instanceof HTMLElement) || query instanceof Tabulator){ - match = TableRegistry.matchElement(query); - - if(match){ - results.push(match); - } - }else if(Array.isArray(query)){ - query.forEach(function(item){ - results = results.concat(TableRegistry.lookupTable(item)); - }); - }else { - if(!silent){ - console.warn("Table Connection Error - Invalid Selector", query); - } - } - - return results; - } - - static matchElement(element){ - return TableRegistry.tables.find(function(table){ - return element instanceof Tabulator ? table === element : table.element === element; - }); - } -} - -TableRegistry.tables = []; - -//resize columns to fit data they contain -function fitData(columns, forced){ - if(forced){ - this.table.columnManager.renderer.reinitializeColumnWidths(columns); - } - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } -} - -//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable -function fitDataGeneral(columns, forced){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } -} - -//resize columns to fit data the contain and stretch last column to fill table -function fitDataStretch(columns, forced){ - var colsWidth = 0, - tableWidth = this.table.rowManager.element.clientWidth, - gap = 0, - lastCol = false; - - columns.forEach((column, i) => { - if(!column.widthFixed){ - column.reinitializeWidth(); - } - - if(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){ - lastCol = column; - } - - if(column.visible){ - colsWidth += column.getWidth(); - } - }); - - if(lastCol){ - gap = tableWidth - colsWidth + lastCol.getWidth(); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - lastCol.setWidth(0); - this.table.modules.responsiveLayout.update(); - } - - if(gap > 0){ - lastCol.setWidth(gap); - }else { - lastCol.reinitializeWidth(); - } - }else { - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - } -} - -//resize columns to fit -function fitColumns(columns, forced){ - var totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width - var fixedWidth = 0; //total width of columns with a defined width - var flexWidth = 0; //total width available to flexible columns - var flexGrowUnits = 0; //total number of widthGrow blocks across all columns - var flexColWidth = 0; //desired width of flexible columns - var flexColumns = []; //array of flexible width columns - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - var flexShrinkUnits = 0; //total number of widthShrink blocks across all columns - var overflowWidth = 0; //horizontal overflow width - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps - - function calcWidth(width){ - var colWidth; - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width); - }else { - colWidth = parseInt(width); - } - }else { - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - function scaleColumns(columns, freeSpace, colWidth, shrinkCols){ - var oversizeCols = [], - oversizeSpace = 0, - remainingSpace = 0, - nextColWidth = 0, - remainingFlexGrowUnits = flexGrowUnits, - gap = 0, - changeUnits = 0, - undersizeCols = []; - - function calcGrow(col){ - return (colWidth * (col.column.definition.widthGrow || 1)); - } - - function calcShrink(col){ - return (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0))); - } - - columns.forEach(function(col, i){ - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - if(col.column.minWidth >= width){ - oversizeCols.push(col); - }else { - if(col.column.maxWidth && col.column.maxWidth < width){ - col.width = col.column.maxWidth; - freeSpace -= col.column.maxWidth; - - remainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1); - - if(remainingFlexGrowUnits){ - colWidth = Math.floor(freeSpace/remainingFlexGrowUnits); - } - }else { - undersizeCols.push(col); - changeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1); - } - } - }); - - if(oversizeCols.length){ - oversizeCols.forEach(function(col){ - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace; - - gap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - }else { - gap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace; - - undersizeCols.forEach(function(column){ - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - if(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){ - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - columns.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width; - minWidth = parseInt(column.minWidth); - - if(width){ - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if(column.definition.widthShrink){ - fixedShrinkColumns.push({ - column:column, - width:colWidth > minWidth ? colWidth : minWidth - }); - flexShrinkUnits += column.definition.widthShrink; - } - - }else { - flexColumns.push({ - column:column, - width:0, - }); - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - //calculate available space - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - flexColWidth = Math.floor(flexWidth / flexGrowUnits); - - //generate column widths - gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - if(flexColumns.length && gapFill > 0){ - flexColumns[flexColumns.length-1].width += gapFill; - } - - //calculate space for columns to be shrunk into - flexColumns.forEach(function(col){ - flexWidth -= col.width; - }); - - overflowWidth = Math.abs(gapFill) + flexWidth; - - //shrink oversize columns if there is no available space - if(overflowWidth > 0 && flexShrinkUnits){ - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - if(gapFill && fixedShrinkColumns.length){ - fixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill; - } - - flexColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); - - fixedShrinkColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); -} - -var defaultModes = { - fitData:fitData, - fitDataFill:fitDataGeneral, - fitDataTable:fitDataGeneral, - fitDataStretch:fitDataStretch, - fitColumns:fitColumns , -}; - -class Layout extends Module{ - - constructor(table){ - super(table, "layout"); - - this.mode = null; - - this.registerTableOption("layout", "fitData"); //layout type - this.registerTableOption("layoutColumnsOnNewData", false); //update column widths on setData - - this.registerColumnOption("widthGrow"); - this.registerColumnOption("widthShrink"); - } - - //initialize layout system - initialize(){ - var layout = this.table.options.layout; - - if(Layout.modes[layout]){ - this.mode = layout; - }else { - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - initializeColumn(column){ - if(column.definition.widthGrow){ - column.definition.widthGrow = Number(column.definition.widthGrow); - } - if(column.definition.widthShrink){ - column.definition.widthShrink = Number(column.definition.widthShrink); - } - } - - getMode(){ - return this.mode; - } - - //trigger table layout - layout(dataChanged){ - this.dispatch("layout-refreshing"); - Layout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged); - this.dispatch("layout-refreshed"); - } -} - -Layout.moduleName = "layout"; - -//load defaults -Layout.modes = defaultModes; - -var defaultLangs = { - "default":{ //hold default locale text - "groups":{ - "item":"item", - "items":"items", - }, - "columns":{ - }, - "data":{ - "loading":"Loading", - "error":"Error", - }, - "pagination":{ - "page_size":"Page Size", - "page_title":"Show Page", - "first":"First", - "first_title":"First Page", - "last":"Last", - "last_title":"Last Page", - "prev":"Prev", - "prev_title":"Prev Page", - "next":"Next", - "next_title":"Next Page", - "all":"All", - "counter":{ - "showing": "Showing", - "of": "of", - "rows": "rows", - "pages": "pages", - } - }, - "headerFilters":{ - "default":"filter column...", - "columns":{} - } - }, -}; - -class Localize extends Module{ - - constructor(table){ - super(table); - - this.locale = "default"; //current locale - this.lang = false; //current language - this.bindings = {}; //update events to call when locale is changed - this.langList = {}; - - this.registerTableOption("locale", false); //current system language - this.registerTableOption("langs", {}); - } - - initialize(){ - this.langList = Helpers.deepClone(Localize.langs); - - if(this.table.options.columnDefaults.headerFilterPlaceholder !== false){ - this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder); - } - - for(let locale in this.table.options.langs){ - this.installLang(locale, this.table.options.langs[locale]); - } - - this.setLocale(this.table.options.locale); - - this.registerTableFunction("setLocale", this.setLocale.bind(this)); - this.registerTableFunction("getLocale", this.getLocale.bind(this)); - this.registerTableFunction("getLang", this.getLang.bind(this)); - } - - //set header placeholder - setHeaderFilterPlaceholder(placeholder){ - this.langList.default.headerFilters.default = placeholder; - } - - //setup a lang description object - installLang(locale, lang){ - if(this.langList[locale]){ - this._setLangProp(this.langList[locale], lang); - }else { - this.langList[locale] = lang; - } - } - - _setLangProp(lang, values){ - for(let key in values){ - if(lang[key] && typeof lang[key] == "object"){ - this._setLangProp(lang[key], values[key]); - }else { - lang[key] = values[key]; - } - } - } - - //set current locale - setLocale(desiredLocale){ - desiredLocale = desiredLocale || "default"; - - //fill in any matching language values - function traverseLang(trans, path){ - for(var prop in trans){ - if(typeof trans[prop] == "object"){ - if(!path[prop]){ - path[prop] = {}; - } - traverseLang(trans[prop], path[prop]); - }else { - path[prop] = trans[prop]; - } - } - } - - //determining correct locale to load - if(desiredLocale === true && navigator.language){ - //get local from system - desiredLocale = navigator.language.toLowerCase(); - } - - if(desiredLocale){ - //if locale is not set, check for matching top level locale else use default - if(!this.langList[desiredLocale]){ - let prefix = desiredLocale.split("-")[0]; - - if(this.langList[prefix]){ - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - desiredLocale = prefix; - }else { - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - desiredLocale = "default"; - } - } - } - - this.locale = desiredLocale; - - //load default lang template - this.lang = Helpers.deepClone(this.langList.default || {}); - - if(desiredLocale != "default"){ - traverseLang(this.langList[desiredLocale], this.lang); - } - - this.dispatchExternal("localized", this.locale, this.lang); - - this._executeBindings(); - } - - //get current locale - getLocale(locale){ - return this.locale; - } - - //get lang object for given local or current if none provided - getLang(locale){ - return locale ? this.langList[locale] : this.lang; - } - - //get text for current locale - getText(path, value){ - var fillPath = value ? path + "|" + value : path, - pathArray = fillPath.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - // } - - return text || ""; - } - - //traverse langs object and find localized copy - _getLangElement(path, locale){ - var root = this.lang; - - path.forEach(function(level){ - var rootPath; - - if(root){ - rootPath = root[level]; - - if(typeof rootPath != "undefined"){ - root = rootPath; - }else { - root = false; - } - } - }); - - return root; - } - - //set update binding - bind(path, callback){ - if(!this.bindings[path]){ - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); - } - - //iterate through bindings and trigger updates - _executeBindings(){ - for(let path in this.bindings){ - this.bindings[path].forEach((binding) => { - binding(this.getText(path), this.lang); - }); - } - } -} - -Localize.moduleName = "localize"; - -//load defaults -Localize.langs = defaultLangs; - -class Comms extends Module{ - - constructor(table){ - super(table); - } - - initialize(){ - this.registerTableFunction("tableComms", this.receive.bind(this)); - } - - getConnections(selectors){ - var connections = [], - connection; - - connection = TableRegistry.lookupTable(selectors); - - connection.forEach((con) =>{ - if(this.table !== con){ - connections.push(con); - } - }); - - return connections; - } - - send(selectors, module, action, data){ - var connections = this.getConnections(selectors); - - connections.forEach((connection) => { - connection.tableComms(this.table.element, module, action, data); - }); - - if(!connections.length && selectors){ - console.warn("Table Connection Error - No tables matching selector found", selectors); - } - } - - receive(table, module, action, data){ - if(this.table.modExists(module)){ - return this.table.modules[module].commsReceived(table, action, data); - }else { - console.warn("Inter-table Comms Error - no such module:", module); - } - } -} - -Comms.moduleName = "comms"; - -var coreModules = /*#__PURE__*/Object.freeze({ - __proto__: null, - LayoutModule: Layout, - LocalizeModule: Localize, - CommsModule: Comms -}); - -class ModuleBinder { - - constructor(tabulator, modules){ - this.bindStaticFunctionality(tabulator); - this.bindModules(tabulator, coreModules, true); - - if(modules){ - this.bindModules(tabulator, modules); - } - } - - bindStaticFunctionality(tabulator){ - tabulator.moduleBindings = {}; - - tabulator.extendModule = function(name, property, values){ - if(tabulator.moduleBindings[name]){ - var source = tabulator.moduleBindings[name][property]; - - if(source){ - if(typeof values == "object"){ - for(let key in values){ - source[key] = values[key]; - } - }else { - console.warn("Module Error - Invalid value type, it must be an object"); - } - }else { - console.warn("Module Error - property does not exist:", property); - } - }else { - console.warn("Module Error - module does not exist:", name); - } - }; - - tabulator.registerModule = function(modules){ - if(!Array.isArray(modules)){ - modules = [modules]; - } - - modules.forEach((mod) => { - tabulator.registerModuleBinding(mod); - }); - }; - - tabulator.registerModuleBinding = function(mod){ - tabulator.moduleBindings[mod.moduleName] = mod; - }; - - tabulator.findTable = function(query){ - var results = TableRegistry.lookupTable(query, true); - return Array.isArray(results) && !results.length ? false : results; - }; - - //ensure that module are bound to instantiated function - tabulator.prototype.bindModules = function(){ - var orderedStartMods = [], - orderedEndMods = [], - unOrderedMods = []; - - this.modules = {}; - - for(var name in tabulator.moduleBindings){ - let mod = tabulator.moduleBindings[name]; - let module = new mod(this); - - this.modules[name] = module; - - if(mod.prototype.moduleCore){ - this.modulesCore.push(module); - }else { - if(mod.moduleInitOrder){ - if(mod.moduleInitOrder < 0){ - orderedStartMods.push(module); - }else { - orderedEndMods.push(module); - } - - }else { - unOrderedMods.push(module); - } - } - } - - orderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1); - orderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1); - - this.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods)); - }; - } - - bindModules(tabulator, modules, core){ - var mods = Object.values(modules); - - if(core){ - mods.forEach((mod) => { - mod.prototype.moduleCore = true; - }); - } - - tabulator.registerModule(mods); - } -} - -class Alert extends CoreFeature{ - constructor(table){ - super(table); - - this.element = this._createAlertElement(); - this.msgElement = this._createMsgElement(); - this.type = null; - - this.element.appendChild(this.msgElement); - } - - _createAlertElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-alert"); - return el; - } - - _createMsgElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-alert-msg"); - el.setAttribute("role", "alert"); - return el; - } - - _typeClass(){ - return "tabulator-alert-state-" + this.type; - } - - alert(content, type = "msg"){ - if(content){ - this.clear(); - - this.dispatch("alert-show", type); - - this.type = type; - - while(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild); - - this.msgElement.classList.add(this._typeClass()); - - if(typeof content === "function"){ - content = content(); - } - - if(content instanceof HTMLElement){ - this.msgElement.appendChild(content); - }else { - this.msgElement.innerHTML = content; - } - - this.table.element.appendChild(this.element); - } - } - - clear(){ - this.dispatch("alert-hide", this.type); - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.msgElement.classList.remove(this._typeClass()); - } -} - -class Tabulator { - - constructor(element, options){ - - this.options = {}; - - this.columnManager = null; // hold Column Manager - this.rowManager = null; //hold Row Manager - this.footerManager = null; //holder Footer Manager - this.alertManager = null; //hold Alert Manager - this.vdomHoz = null; //holder horizontal virtual dom - this.externalEvents = null; //handle external event messaging - this.eventBus = null; //handle internal event messaging - this.interactionMonitor = false; //track user interaction - this.browser = ""; //hold current browser type - this.browserSlow = false; //handle reduced functionality for slower browsers - this.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance - this.rtl = false; //check if the table is in RTL mode - this.originalElement = null; //hold original table element if it has been replaced - - this.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions - this.dataLoader = false; //bind component functions - - this.modules = {}; //hold all modules bound to this table - this.modulesCore = []; //hold core modules bound to this table (for initialization purposes) - this.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes) - - this.deprecationAdvisor = new DeprecationAdvisor(this); - this.optionsList = new OptionsList(this, "table constructor"); - - this.initialized = false; - this.destroyed = false; - - if(this.initializeElement(element)){ - - this.initializeCoreSystems(options); - - //delay table creation to allow event bindings immediately after the constructor - setTimeout(() => { - this._create(); - }); - } - - TableRegistry.register(this); //register table for inter-device communication - } - - initializeElement(element){ - if(typeof HTMLElement !== "undefined" && element instanceof HTMLElement){ - this.element = element; - return true; - }else if(typeof element === "string"){ - this.element = document.querySelector(element); - - if(this.element){ - return true; - }else { - console.error("Tabulator Creation Error - no element found matching selector: ", element); - return false; - } - }else { - console.error("Tabulator Creation Error - Invalid element provided:", element); - return false; - } - } - - initializeCoreSystems(options){ - this.columnManager = new ColumnManager(this); - this.rowManager = new RowManager(this); - this.footerManager = new FooterManager(this); - this.dataLoader = new DataLoader(this); - this.alertManager = new Alert(this); - - this.bindModules(); - - this.options = this.optionsList.generate(Tabulator.defaultOptions, options); - - this._clearObjectPointers(); - - this._mapDeprecatedFunctionality(); - - this.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal); - this.eventBus = new InternalEventBus(this.options.debugEventsInternal); - - this.interactionMonitor = new InteractionManager(this); - - this.dataLoader.initialize(); - // this.columnManager.initialize(); - // this.rowManager.initialize(); - this.footerManager.initialize(); - } - - //convert deprecated functionality to new functions - _mapDeprecatedFunctionality(){ - //all previously deprecated functionality removed in the 5.0 release - } - - _clearSelection(){ - - this.element.classList.add("tabulator-block-select"); - - if (window.getSelection) { - if (window.getSelection().empty) { // Chrome - window.getSelection().empty(); - } else if (window.getSelection().removeAllRanges) { // Firefox - window.getSelection().removeAllRanges(); - } - } else if (document.selection) { // IE? - document.selection.empty(); - } - - this.element.classList.remove("tabulator-block-select"); - } - - //create table - _create(){ - this.externalEvents.dispatch("tableBuilding"); - this.eventBus.dispatch("table-building"); - - this._rtlCheck(); - - this._buildElement(); - - this._initializeTable(); - - this._loadInitialData(); - - this.initialized = true; - - this.externalEvents.dispatch("tableBuilt"); - } - - _rtlCheck(){ - var style = window.getComputedStyle(this.element); - - switch(this.options.textDirection){ - case"auto": - if(style.direction !== "rtl"){ - break; - } - - case "rtl": - this.element.classList.add("tabulator-rtl"); - this.rtl = true; - break; - - case "ltr": - this.element.classList.add("tabulator-ltr"); - - default: - this.rtl = false; - } - } - - //clear pointers to objects in default config object - _clearObjectPointers(){ - this.options.columns = this.options.columns.slice(0); - - if(Array.isArray(this.options.data) && !this.options.reactiveData){ - this.options.data = this.options.data.slice(0); - } - } - - //build tabulator element - _buildElement(){ - var element = this.element, - options = this.options, - newElement; - - if(element.tagName === "TABLE"){ - this.originalElement = this.element; - newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - for(var i in attributes){ - if(typeof attributes[i] == "object"){ - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - this.element = element = newElement; - } - - element.classList.add("tabulator"); - element.setAttribute("role", "grid"); - - //empty element - while(element.firstChild) element.removeChild(element.firstChild); - - //set table height - if(options.height){ - options.height = isNaN(options.height) ? options.height : options.height + "px"; - element.style.height = options.height; - } - - //set table min height - if(options.minHeight !== false){ - options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px"; - element.style.minHeight = options.minHeight; - } - - //set table maxHeight - if(options.maxHeight !== false){ - options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px"; - element.style.maxHeight = options.maxHeight; - } - } - - //initialize core systems and modules - _initializeTable(){ - var element = this.element, - options = this.options; - - this.interactionMonitor.initialize(); - - this.columnManager.initialize(); - this.rowManager.initialize(); - - this._detectBrowser(); - - //initialize core modules - this.modulesCore.forEach((mod) => { - mod.initialize(); - }); - - //build table elements - element.appendChild(this.columnManager.getElement()); - element.appendChild(this.rowManager.getElement()); - - if(options.footerElement){ - this.footerManager.activate(); - } - - if(options.autoColumns && options.data){ - - this.columnManager.generateColumnsFromRowData(this.options.data); - } - - //initialize regular modules - this.modulesRegular.forEach((mod) => { - mod.initialize(); - }); - - this.columnManager.setColumns(options.columns); - - this.eventBus.dispatch("table-built"); - } - - _loadInitialData(){ - this.dataLoader.load(this.options.data); - this.columnManager.verticalAlignHeaders(); - } - - //deconstructor - destroy(){ - var element = this.element; - - this.destroyed = true; - - TableRegistry.deregister(this); //deregister table from inter-device communication - - this.eventBus.dispatch("table-destroy"); - - //clear row data - this.rowManager.destroy(); - - //clear DOM - while(element.firstChild) element.removeChild(element.firstChild); - element.classList.remove("tabulator"); - - this.externalEvents.dispatch("tableDestroyed"); - } - - _detectBrowser(){ - var ua = navigator.userAgent||navigator.vendor||window.opera; - - if(ua.indexOf("Trident") > -1){ - this.browser = "ie"; - this.browserSlow = true; - }else if(ua.indexOf("Edge") > -1){ - this.browser = "edge"; - this.browserSlow = true; - }else if(ua.indexOf("Firefox") > -1){ - this.browser = "firefox"; - this.browserSlow = false; - }else if(ua.indexOf("Mac OS") > -1){ - this.browser = "safari"; - this.browserSlow = false; - }else { - this.browser = "other"; - this.browserSlow = false; - } - - this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4)); - } - - initGuard(func, msg){ - var stack, line; - - if(this.options.debugInitialization && !this.initialized){ - if(!func){ - stack = new Error().stack.split("\n"); - - line = stack[0] == "Error" ? stack[2] : stack[1]; - - if(line[0] == " "){ - func = line.trim().split(" ")[1].split(".")[1]; - }else { - func = line.trim().split("@")[0]; - } - } - - console.warn("Table Not Initialized - Calling the " + func + " function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function." + (msg ? " " + msg : "")); - } - - return this.initialized; - } - - ////////////////// Data Handling ////////////////// - //block table redrawing - blockRedraw(){ - this.initGuard(); - - this.eventBus.dispatch("redraw-blocking"); - - this.rowManager.blockRedraw(); - this.columnManager.blockRedraw(); - - this.eventBus.dispatch("redraw-blocked"); - } - - //restore table redrawing - restoreRedraw(){ - this.initGuard(); - - this.eventBus.dispatch("redraw-restoring"); - - this.rowManager.restoreRedraw(); - this.columnManager.restoreRedraw(); - - this.eventBus.dispatch("redraw-restored"); - } - - //load data - setData(data, params, config){ - this.initGuard(false, "To set initial data please use the 'data' property in the table constructor."); - - return this.dataLoader.load(data, params, config, false); - } - - //clear data - clearData(){ - this.initGuard(); - - this.dataLoader.blockActiveLoad(); - this.rowManager.clearData(); - } - - //get table data array - getData(active){ - return this.rowManager.getData(active); - } - - //get table data array count - getDataCount(active){ - return this.rowManager.getDataCount(active); - } - - //replace data, keeping table in position with same sort - replaceData(data, params, config){ - this.initGuard(); - - return this.dataLoader.load(data, params, config, true, true); - } - - //update table data - updateData(data){ - var responses = 0; - - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data && data.length > 0){ - data.forEach((item) => { - var row = this.rowManager.findRow(item[this.options.index]); - - if(row){ - responses++; - - row.updateData(item) - .then(()=>{ - responses--; - - if(!responses){ - resolve(); - } - }) - .catch((e) => { - reject("Update Error - Unable to update row", item, e); - }); - }else { - reject("Update Error - Unable to find row", item); - } - }); - }else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - addData(data, pos, index){ - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data){ - this.rowManager.addRows(data, pos, index) - .then((rows) => { - var output = []; - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - resolve(output); - }); - }else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - //update table data - updateOrAddData(data){ - var rows = [], - responses = 0; - - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data && data.length > 0){ - data.forEach((item) => { - var row = this.rowManager.findRow(item[this.options.index]); - - responses++; - - if(row){ - row.updateData(item) - .then(()=>{ - responses--; - rows.push(row.getComponent()); - - if(!responses){ - resolve(rows); - } - }); - }else { - this.rowManager.addRows(item) - .then((newRows)=>{ - responses--; - rows.push(newRows[0].getComponent()); - - if(!responses){ - resolve(rows); - } - }); - } - }); - }else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - //get row object - getRow(index){ - var row = this.rowManager.findRow(index); - - if(row){ - return row.getComponent(); - }else { - console.warn("Find Error - No matching row found:", index); - return false; - } - } - - //get row object - getRowFromPosition(position){ - var row = this.rowManager.getRowFromPosition(position); - - if(row){ - return row.getComponent(); - }else { - console.warn("Find Error - No matching row found:", position); - return false; - } - } - - //delete row from table - deleteRow(index){ - var foundRows = []; - - this.initGuard(); - - if(!Array.isArray(index)){ - index = [index]; - } - - //find matching rows - for(let item of index){ - let row = this.rowManager.findRow(item, true); - - if(row){ - foundRows.push(row); - }else { - console.error("Delete Error - No matching row found:", item); - return Promise.reject("Delete Error - No matching row found"); - } - } - - //sort rows into correct order to ensure smooth delete from table - foundRows.sort((a, b) => { - return this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1; - }); - - //delete rows - foundRows.forEach((row) =>{ - row.delete(); - }); - - this.rowManager.reRenderInPosition(); - - return Promise.resolve(); - } - - //add row to table - addRow(data, pos, index){ - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - return this.rowManager.addRows(data, pos, index, true) - .then((rows)=>{ - return rows[0].getComponent(); - }); - } - - //update a row if it exists otherwise create it - updateOrAddRow(index, data){ - var row = this.rowManager.findRow(index); - - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - return row.updateData(data) - .then(()=>{ - return row.getComponent(); - }); - }else { - return this.rowManager.addRows(data) - .then((rows)=>{ - return rows[0].getComponent(); - }); - } - } - - //update row data - updateRow(index, data){ - var row = this.rowManager.findRow(index); - - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - return row.updateData(data) - .then(()=>{ - return Promise.resolve(row.getComponent()); - }); - }else { - console.warn("Update Error - No matching row found:", index); - return Promise.reject("Update Error - No matching row found"); - } - } - - //scroll to row in DOM - scrollToRow(index, position, ifVisible){ - var row = this.rowManager.findRow(index); - - if(row){ - return this.rowManager.scrollToRow(row, position, ifVisible); - }else { - console.warn("Scroll Error - No matching row found:", index); - return Promise.reject("Scroll Error - No matching row found"); - } - } - - moveRow(from, to, after){ - var fromRow = this.rowManager.findRow(from); - - this.initGuard(); - - if(fromRow){ - fromRow.moveToRow(to, after); - }else { - console.warn("Move Error - No matching row found:", from); - } - } - - getRows(active){ - return this.rowManager.getComponents(active); - } - - //get position of row in table - getRowPosition(index){ - var row = this.rowManager.findRow(index); - - if(row){ - return row.getPosition(); - }else { - console.warn("Position Error - No matching row found:", index); - return false; - } - } - - /////////////// Column Functions /////////////// - setColumns(definition){ - this.initGuard(false, "To set initial columns please use the 'columns' property in the table constructor"); - - this.columnManager.setColumns(definition); - } - - getColumns(structured){ - return this.columnManager.getComponents(structured); - } - - getColumn(field){ - var column = this.columnManager.findColumn(field); - - if(column){ - return column.getComponent(); - }else { - console.warn("Find Error - No matching column found:", field); - return false; - } - } - - getColumnDefinitions(){ - return this.columnManager.getDefinitionTree(); - } - - showColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - column.show(); - }else { - console.warn("Column Show Error - No matching column found:", field); - return false; - } - } - - hideColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - column.hide(); - }else { - console.warn("Column Hide Error - No matching column found:", field); - return false; - } - } - - toggleColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - if(column.visible){ - column.hide(); - }else { - column.show(); - } - }else { - console.warn("Column Visibility Toggle Error - No matching column found:", field); - return false; - } - } - - addColumn(definition, before, field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - return this.columnManager.addColumn(definition, before, column) - .then((column) => { - return column.getComponent(); - }); - } - - deleteColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - return column.delete(); - }else { - console.warn("Column Delete Error - No matching column found:", field); - return Promise.reject(); - } - } - - updateColumnDefinition(field, definition){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - return column.updateDefinition(definition); - }else { - console.warn("Column Update Error - No matching column found:", field); - return Promise.reject(); - } - } - - moveColumn(from, to, after){ - var fromColumn = this.columnManager.findColumn(from), - toColumn = this.columnManager.findColumn(to); - - this.initGuard(); - - if(fromColumn){ - if(toColumn){ - this.columnManager.moveColumn(fromColumn, toColumn, after); - }else { - console.warn("Move Error - No matching column found:", toColumn); - } - }else { - console.warn("Move Error - No matching column found:", from); - } - } - - //scroll to column in DOM - scrollToColumn(field, position, ifVisible){ - return new Promise((resolve, reject) => { - var column = this.columnManager.findColumn(field); - - if(column){ - return this.columnManager.scrollToColumn(column, position, ifVisible); - }else { - console.warn("Scroll Error - No matching column found:", field); - return Promise.reject("Scroll Error - No matching column found"); - } - }); - } - - //////////// General Public Functions //////////// - //redraw list without updating data - redraw(force){ - this.initGuard(); - - this.columnManager.redraw(force); - this.rowManager.redraw(force); - } - - setHeight(height){ - this.options.height = isNaN(height) ? height : height + "px"; - this.element.style.height = this.options.height; - this.rowManager.initializeRenderer(); - this.rowManager.redraw(true); - } - - //////////////////// Event Bus /////////////////// - - on(key, callback){ - this.externalEvents.subscribe(key, callback); - } - - off(key, callback){ - this.externalEvents.unsubscribe(key, callback); - } - - dispatchEvent(){ - var args = Array.from(arguments); - args.shift(); - - this.externalEvents.dispatch(...arguments); - } - - //////////////////// Alerts /////////////////// - - alert(contents, type){ - this.initGuard(); - - this.alertManager.alert(contents, type); - } - - clearAlert(){ - this.initGuard(); - - this.alertManager.clear(); - } - - ////////////// Extension Management ////////////// - modExists(plugin, required){ - if(this.modules[plugin]){ - return true; - }else { - if(required){ - console.error("Tabulator Module Not Installed: " + plugin); - } - return false; - } - } - - module(key){ - var mod = this.modules[key]; - - if(!mod){ - console.error("Tabulator module not installed: " + key); - } - - return mod; - } -} - -//default setup options -Tabulator.defaultOptions = defaultOptions; - -//bind modules and static functionality -new ModuleBinder(Tabulator); - -//tabulator with all modules installed - -class TabulatorFull extends Tabulator {} - -//bind modules and static functionality -new ModuleBinder(TabulatorFull, modules); - -class PseudoRow { - - constructor (type){ - this.type = type; - this.element = this._createElement(); - } - - _createElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-row"); - return el; - } - - getElement(){ - return this.element; - } - - getComponent(){ - return false; - } - - getData(){ - return {}; - } - - getHeight(){ - return this.element.outerHeight; - } - - initialize(){} - - reinitialize(){} - - normalizeHeight(){} - - generateCells(){} - - reinitializeHeight(){} - - calcHeight(){} - - setCellHeight(){} - - clearCellHeight(){} - - rendered(){} -} - -export { Accessor as AccessorModule, Ajax as AjaxModule, CalcComponent, CellComponent, Clipboard as ClipboardModule, ColumnCalcs as ColumnCalcsModule, ColumnComponent, DataTree as DataTreeModule, Download as DownloadModule, Edit$1 as EditModule, Export as ExportModule, Filter as FilterModule, Format as FormatModule, FrozenColumns as FrozenColumnsModule, FrozenRows as FrozenRowsModule, GroupComponent, GroupRows as GroupRowsModule, History as HistoryModule, HtmlTableImport as HtmlTableImportModule, Import as ImportModule, Interaction as InteractionModule, Keybindings as KeybindingsModule, Menu as MenuModule, Module, MoveColumns as MoveColumnsModule, MoveRows as MoveRowsModule, Mutator as MutatorModule, Page as PageModule, Persistence as PersistenceModule, Popup$1 as PopupModule, Print as PrintModule, PseudoRow, ReactiveData as ReactiveDataModule, Renderer, ResizeColumns as ResizeColumnsModule, ResizeRows as ResizeRowsModule, ResizeTable as ResizeTableModule, ResponsiveLayout as ResponsiveLayoutModule, RowComponent, SelectRange as SelectRangeModule, SelectRow as SelectRowModule, Sort as SortModule, Tabulator, TabulatorFull, Tooltip as TooltipModule, Validate as ValidateModule }; -//# sourceMappingURL=tabulator_esm.js.map diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.js.map b/tmp/tabulator-5.6.1/dist/js/tabulator_esm.js.map deleted file mode 100644 index 80b5a5c..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tabulator_esm.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/Popup.js","../../src/js/core/Module.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/column/Column.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/date.js","../../src/js/modules/Edit/defaults/editors/time.js","../../src/js/modules/Edit/defaults/editors/datetime.js","../../src/js/modules/Edit/List.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/History/History.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/defaults/importers/array.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Popup/Popup.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/SelectRange/RangeComponent.js","../../src/js/modules/SelectRange/Range.js","../../src/js/modules/SelectRange/SelectRange.js","../../src/js/modules/Tooltip/Tooltip.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/defaults/options.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/DeprecationAdvisor.js","../../src/js/core/tools/TableRegistry.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/tools/Alert.js","../../src/js/core/Tabulator.js","../../src/js/core/TabulatorFull.js","../../src/js/core/row/PseudoRow.js"],"sourcesContent":["export default class CoreFeature{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\t}\n\n\t//////////////////////////////////////////\n\t/////////////// DataLoad /////////////////\n\t//////////////////////////////////////////\n\n\treloadData(data, silent, columnsChanged){\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\n\t}\n\n\t//////////////////////////////////////////\n\t///////////// Localization ///////////////\n\t//////////////////////////////////////////\n\n\tlangText(){\n\t\treturn this.table.modules.localize.getText(...arguments);\n\t}\n\n\tlangBind(){\n\t\treturn this.table.modules.localize.bind(...arguments);\n\t}\n\n\tlangLocale(){\n\t\treturn this.table.modules.localize.getLocale(...arguments);\n\t}\n\n\n\t//////////////////////////////////////////\n\t////////// Inter Table Comms /////////////\n\t//////////////////////////////////////////\n\n\tcommsConnections(){\n\t\treturn this.table.modules.comms.getConnections(...arguments);\n\t}\n\n\tcommsSend(){\n\t\treturn this.table.modules.comms.send(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Layout /////////////////\n\t//////////////////////////////////////////\n\n\tlayoutMode(){\n\t\treturn this.table.modules.layout.getMode();\n\t}\n\n\tlayoutRefresh(force){\n\t\treturn this.table.modules.layout.layout(force);\n\t}\n\n\n\t//////////////////////////////////////////\n\t/////////////// Event Bus ////////////////\n\t//////////////////////////////////////////\n\n\tsubscribe(){\n\t\treturn this.table.eventBus.subscribe(...arguments);\n\t}\n\n\tunsubscribe(){\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.table.eventBus.subscribed(key);\n\t}\n\n\tsubscriptionChange(){\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\n\t}\n\n\tdispatch(){\n\t\treturn this.table.eventBus.dispatch(...arguments);\n\t}\n\n\tchain(){\n\t\treturn this.table.eventBus.chain(...arguments);\n\t}\n\n\tconfirm(){\n\t\treturn this.table.eventBus.confirm(...arguments);\n\t}\n\n\tdispatchExternal(){\n\t\treturn this.table.externalEvents.dispatch(...arguments);\n\t}\n\n\tsubscribedExternal(key){\n\t\treturn this.table.externalEvents.subscribed(key);\n\t}\n\n\tsubscriptionChangeExternal(){\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Options /////////////////\n\t//////////////////////////////////////////\n\n\toptions(key){\n\t\treturn this.table.options[key];\n\t}\n\n\tsetOption(key, value){\n\t\tif(typeof value !== \"undefined\"){\n\t\t\tthis.table.options[key] = value;\n\t\t}\n\n\t\treturn this.table.options[key];\n\t}\n\n\t//////////////////////////////////////////\n\t/////////// Deprecation Checks ///////////\n\t//////////////////////////////////////////\n\n\tdeprecationCheck(oldOption, newOption, convert){\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption, convert);\n\t}\n\n\tdeprecationCheckMsg(oldOption, msg){\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\n\t}\n\n\tdeprecationMsg(msg){\n\t\treturn this.table.deprecationAdvisor.msg(msg);\n\t}\n\t//////////////////////////////////////////\n\t//////////////// Modules /////////////////\n\t//////////////////////////////////////////\n\n\tmodule(key){\n\t\treturn this.table.module(key);\n\t}\n}","export default class Helpers{\n\n\tstatic elVisible(el){\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t}\n\n\tstatic elOffset(el){\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t}\n\n\tstatic retrieveNestedData(separator, field, data){\n\t\tvar structure = separator ? field.split(separator) : [field],\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdata = data[structure[i]];\n\n\t\t\toutput = data;\n\n\t\t\tif(!data){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tstatic deepClone(obj, clone, list = []){\n\t\tvar objectProto = {}.__proto__,\n\t\tarrayProto = [].__proto__;\n\n\t\tif (!clone){\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\t\t}\n\n\t\tfor(var i in obj) {\n\t\t\tlet subject = obj[i],\n\t\t\tmatch, copy;\n\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\n\t\t\t\tmatch = list.findIndex((item) => {\n\t\t\t\t\treturn item.subject === subject;\n\t\t\t\t});\n\n\t\t\t\tif(match > -1){\n\t\t\t\t\tclone[i] = list[match].copy;\n\t\t\t\t}else{\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\n\n\t\t\t\t\tlist.unshift({subject, copy});\n\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn clone;\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\nimport Helpers from './Helpers.js';\n\nexport default class Popup extends CoreFeature{\n\tconstructor(table, element, parent){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = element;\n\t\tthis.container = this._lookupContainer();\n\t\t\n\t\tthis.parent = parent;\n\t\t\n\t\tthis.reversedX = false;\n\t\tthis.childPopup = null;\n\t\tthis.blurable = false;\n\t\tthis.blurCallback = null;\n\t\tthis.blurEventsBound = false;\n\t\tthis.renderedCallback = null;\n\t\t\n\t\tthis.visible = false;\n\t\tthis.hideable = true;\n\t\t\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\n\t\t\n\t\tthis.blurEvent = this.hide.bind(this, false);\n\t\tthis.escEvent = this._escapeCheck.bind(this);\n\t\t\n\t\tthis.destroyBinding = this.tableDestroyed.bind(this);\n\t\tthis.destroyed = false;\n\t}\n\t\n\ttableDestroyed(){\n\t\tthis.destroyed = true;\n\t\tthis.hide(true);\n\t}\n\t\n\t_lookupContainer(){\n\t\tvar container = this.table.options.popupContainer;\n\t\t\n\t\tif(typeof container === \"string\"){\n\t\t\tcontainer = document.querySelector(container);\n\t\t\t\n\t\t\tif(!container){\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t\t}\n\t\t}else if (container === true){\n\t\t\tcontainer = this.table.element;\n\t\t}\n\t\t\n\t\tif(container && !this._checkContainerIsParent(container)){\n\t\t\tcontainer = false;\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t}\n\t\t\n\t\tif(!container){\n\t\t\tcontainer = document.body;\n\t\t}\n\t\t\n\t\treturn container;\n\t}\n\t\n\t_checkContainerIsParent(container, element = this.table.element){\n\t\tif(container === element){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\n\t\t}\n\t}\n\t\n\trenderCallback(callback){\n\t\tthis.renderedCallback = callback;\n\t}\n\t\n\tcontainerEventCoords(e){\n\t\tvar touch = !(e instanceof MouseEvent);\n\t\t\n\t\tvar x = touch ? e.touches[0].pageX : e.pageX;\n\t\tvar y = touch ? e.touches[0].pageY : e.pageY;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\tx -= parentOffset.left;\n\t\t\ty -= parentOffset.top;\n\t\t}\n\t\t\n\t\treturn {x, y};\n\t}\n\t\n\telementPositionCoords(element, position = \"right\"){\n\t\tvar offset = Helpers.elOffset(element),\n\t\tcontainerOffset, x, y;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\toffset.left -= containerOffset.left;\n\t\t\toffset.top -= containerOffset.top;\n\t\t}\n\t\t\n\t\tswitch(position){\n\t\t\tcase \"right\":\n\t\t\t\tx = offset.left + element.offsetWidth;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"bottom\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top + element.offsetHeight;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"left\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"top\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"center\":\n\t\t\t\tx = offset.left + (element.offsetWidth / 2);\n\t\t\t\ty = offset.top + (element.offsetHeight / 2);\n\t\t\t\tbreak;\n\t\t\t\n\t\t}\n\t\t\n\t\treturn {x, y, offset};\n\t}\n\t\n\tshow(origin, position){\n\t\tvar x, y, parentEl, parentOffset, coords;\n\t\t\n\t\tif(this.destroyed || this.table.destroyed){\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tif(origin instanceof HTMLElement){\n\t\t\tparentEl = origin;\n\t\t\tcoords = this.elementPositionCoords(origin, position);\n\t\t\t\n\t\t\tparentOffset = coords.offset;\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t}else if(typeof origin === \"number\"){\n\t\t\tparentOffset = {top:0, left:0};\n\t\t\tx = origin;\n\t\t\ty = position;\n\t\t}else{\n\t\t\tcoords = this.containerEventCoords(origin);\n\t\t\t\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t\tthis.reversedX = false;\n\t\t}\n\t\t\n\t\tthis.element.style.top = y + \"px\";\n\t\tthis.element.style.left = x + \"px\";\n\t\t\n\t\tthis.container.appendChild(this.element);\n\t\t\n\t\tif(typeof this.renderedCallback === \"function\"){\n\t\t\tthis.renderedCallback();\n\t\t}\n\t\t\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\n\t\t\n\t\tthis.visible = true;\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\n\t\t\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_fitToScreen(x, y, parentEl, parentOffset, position){\n\t\tvar scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\n\t\t\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\n\t\tif((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\n\t\t\tthis.element.style.left = \"\";\n\t\t\t\n\t\t\tif(parentEl){\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - x) + \"px\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.reversedX = true;\n\t\t}\n\t\t\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\t\tif((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\n\t\t\tif(parentEl){\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"bottom\":\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisVisible(){\n\t\treturn this.visible;\n\t}\n\t\n\thideOnBlur(callback){\n\t\tthis.blurable = true;\n\t\t\n\t\tif(this.visible){\n\t\t\tsetTimeout(() => {\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\n\t\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\n\n\t\t\t\t\tthis.blurEventsBound = true;\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t\t\n\t\t\tthis.blurCallback = callback;\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_escapeCheck(e){\n\t\tif(e.keyCode == 27){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\t\n\tblockHide(){\n\t\tthis.hideable = false;\n\t}\n\t\n\trestoreHide(){\n\t\tthis.hideable = true;\n\t}\n\t\n\thide(silent = false){\n\t\tif(this.visible && this.hideable){\n\t\t\tif(this.blurable && this.blurEventsBound){\n\t\t\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\t\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\twindow.removeEventListener(\"resize\", this.blurEvent);\n\t\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n\t\t\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\n\n\t\t\t\tthis.blurEventsBound = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.childPopup){\n\t\t\t\tthis.childPopup.hide();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.childPopup = null;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.visible = false;\n\t\t\t\n\t\t\tif(this.blurCallback && !silent){\n\t\t\t\tthis.blurCallback();\n\t\t\t}\n\t\t\t\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\tchild(element){\n\t\tif(this.childPopup){\n\t\t\tthis.childPopup.hide();\n\t\t}\n\t\t\n\t\tthis.childPopup = new Popup(this.table, element, this);\n\t\t\n\t\treturn this.childPopup;\n\t}\n}","import CoreFeature from './CoreFeature.js';\nimport Popup from './tools/Popup.js';\n\nclass Module extends CoreFeature{\n\t\n\tconstructor(table, name){\n\t\tsuper(table);\n\t\t\n\t\tthis._handler = null;\n\t}\n\t\n\tinitialize(){\n\t\t// setup module when table is initialized, to be overridden in module\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Options Registration ///////\n\t///////////////////////////////////\n\t\n\tregisterTableOption(key, value){\n\t\tthis.table.optionsList.register(key, value);\n\t}\n\t\n\tregisterColumnOption(key, value){\n\t\tthis.table.columnManager.optionsList.register(key, value);\n\t}\n\t\n\t///////////////////////////////////\n\t/// Public Function Registration ///\n\t///////////////////////////////////\n\t\n\tregisterTableFunction(name, func){\n\t\tif(typeof this.table[name] === \"undefined\"){\n\t\t\tthis.table[name] = (...args) => {\n\t\t\t\tthis.table.initGuard(name);\n\t\t\t\t\n\t\t\t\treturn func(...args);\n\t\t\t};\n\t\t}else{\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name);\n\t\t}\n\t}\n\t\n\tregisterComponentFunction(component, func, handler){\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Data Pipeline //////////\n\t///////////////////////////////////\n\t\n\tregisterDataHandler(handler, priority){\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tregisterDisplayHandler(handler, priority){\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tdisplayRows(adjust){\n\t\tvar index = this.table.rowManager.displayRows.length - 1, \n\t\tlookupIndex;\n\t\t\n\t\tif(this._handler){\n\t\t\tlookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => {\n\t\t\t\treturn item.handler === this._handler;\n\t\t\t});\n\n\t\t\tif(lookupIndex > -1){\n\t\t\t\tindex = lookupIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(adjust){\n\t\t\tindex = index + adjust;\n\t\t}\n\n\t\tif(this._handler){\n\t\t\tif(index > -1){\n\t\t\t\treturn this.table.rowManager.getDisplayRows(index);\n\t\t\t}else{\n\t\t\t\treturn this.activeRows();\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\tactiveRows(){\n\t\treturn this.table.rowManager.activeRows;\n\t}\n\t\n\trefreshData(renderInPosition, handler){\n\t\tif(!handler){\n\t\t\thandler = this._handler;\n\t\t}\n\t\t\n\t\tif(handler){\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Footer Management ////////\n\t///////////////////////////////////\n\t\n\tfooterAppend(element){\n\t\treturn this.table.footerManager.append(element);\n\t}\n\t\n\tfooterPrepend(element){\n\t\treturn this.table.footerManager.prepend(element);\n\t}\n\t\n\tfooterRemove(element){\n\t\treturn this.table.footerManager.remove(element);\n\t} \n\t\n\t///////////////////////////////////\n\t//////// Popups Management ////////\n\t///////////////////////////////////\n\t\n\tpopup(menuEl, menuContainer){\n\t\treturn new Popup(this.table, menuEl, menuContainer);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Alert Management ////////\n\t///////////////////////////////////\n\t\n\talert(content, type){\n\t\treturn this.table.alertManager.alert(content, type);\n\t}\n\t\n\tclearAlert(){\n\t\treturn this.table.alertManager.clear();\n\t}\n\t\n}\n\nexport default Module;","export default {};","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultAccessors from './defaults/accessors.js';\n\nclass Accessor extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n\n\t\tthis.registerColumnOption(\"accessor\");\n\t\tthis.registerColumnOption(\"accessorParams\");\n\t\tthis.registerColumnOption(\"accessorData\");\n\t\tthis.registerColumnOption(\"accessorDataParams\");\n\t\tthis.registerColumnOption(\"accessorDownload\");\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\n\t\tthis.registerColumnOption(\"accessorClipboard\");\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\n\t\tthis.registerColumnOption(\"accessorPrint\");\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\n\t}\n\n\t//initialize column accessor\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\taccessor;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\taccessor:accessor,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.accessor = config;\n\t\t}\n\t}\n\n\tlookupAccessor(value){\n\t\tvar accessor = false;\n\n\t\t//set column accessor\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Accessor.accessors[value]){\n\t\t\t\t\taccessor = Accessor.accessors[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\taccessor = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn accessor;\n\t}\n\n\t//apply accessor to row\n\ttransformRow(row, type){\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\trowComponent = row.getComponent();\n\n\t\t//clone data object with deep copy to isolate internal data from returned result\n\t\tvar data = Helpers.deepClone(row.data || {});\n\n\t\tthis.table.columnManager.traverse(function(column){\n\t\t\tvar value, accessor, params, colComponent;\n\n\t\t\tif(column.modules.accessor){\n\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\t\tif(value != \"undefined\"){\n\t\t\t\t\t\tcolComponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n}\n\n//load defaults\nAccessor.moduleName = \"accessor\";\nAccessor.accessors = defaultAccessors;\n\nexport default Accessor;","export default {\n\tmethod: \"GET\",\n};","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nfunction serializeParams(params){\n\tvar output = generateParamsList(params),\n\tencoded = [];\n\n\toutput.forEach(function(item){\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t});\n\n\treturn encoded.join(\"&\");\n}\n\nexport default function(url, config, params){\n\tif(url){\n\t\tif(params && Object.keys(params).length){\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\n\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n}","export default function(url, config, params){\n\tvar contentType;\n\n\treturn new Promise((resolve, reject) => {\n\t\t//set url\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\n\n\t\t//set body content if not GET request\n\t\tif(config.method.toUpperCase() != \"GET\"){\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\n\t\t\tif(contentType){\n\n\t\t\t\tfor(var key in contentType.headers){\n\t\t\t\t\tif(!config.headers){\n\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif(url){\n\t\t\t//configure headers\n\t\t\tif(typeof config.headers === \"undefined\"){\n\t\t\t\tconfig.headers = {};\n\t\t\t}\n\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\n\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t}\n\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\tif(typeof config.mode === \"undefined\"){\n\t\t\t\tconfig.mode = \"cors\";\n\t\t\t}\n\n\t\t\tif(config.mode == \"cors\"){\n\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\n\t\t\t\t\tconfig.headers[\"Origin\"] = window.location.origin;\n\t\t\t\t}\n \n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//send request\n\t\t\tfetch(url, config)\n\t\t\t\t.then((response)=>{\n\t\t\t\t\tif(response.ok) {\n\t\t\t\t\t\tresponse.json()\n\t\t\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\t}).catch((error)=>{\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error)=>{\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\tresolve([]);\n\t\t}\n\t});\n}","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nexport default {\n\t\"json\":{\n\t\theaders:{\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tbody:function(url, config, params){\n\t\t\treturn JSON.stringify(params);\n\t\t},\n\t},\n\t\"form\":{\n\t\theaders:{\n\t\t},\n\t\tbody:function(url, config, params){\n\n\t\t\tvar output = generateParamsList(params),\n\t\t\tform = new FormData();\n\n\t\t\toutput.forEach(function(item){\n\t\t\t\tform.append(item.key, item.value);\n\t\t\t});\n\n\t\t\treturn form;\n\t\t},\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultConfig from './defaults/config.js';\nimport defaultURLGenerator from './defaults/urlGenerator.js';\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\n\nclass Ajax extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {}; //hold config object for ajax request\n\t\tthis.url = \"\"; //request URL\n\t\tthis.urlGenerator = false;\n\t\tthis.params = false; //request parameters\n\t\t\n\t\tthis.loaderPromise = false;\n\t\t\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\n\t\t\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\n\t\t\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\n\t}\n\t\n\t//initialize setup options\n\tinitialize(){\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\n\t\t\n\t\tif(this.table.options.ajaxURL){\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\n\t\t}\n\n\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\n\t\t\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\n\t}\n\t\n\trequestParams(data, config, silent, params){\n\t\tvar ajaxParams = this.table.options.ajaxParams;\n\t\t\n\t\tif(ajaxParams){\n\t\t\tif(typeof ajaxParams === \"function\"){\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\n\t\t\t}\n\t\t\t\n\t\t\tparams = Object.assign(Object.assign({}, ajaxParams), params);\n\t\t}\t\t\n\t\t\n\t\treturn params;\n\t}\n\t\n\trequestDataCheck(data, params, config, silent){\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\n\t}\n\t\n\trequestData(url, params, config, silent, previousData){\n\t\tvar ajaxConfig;\n\t\t\n\t\tif(!previousData && this.requestDataCheck(url)){\n\t\t\tif(url){\n\t\t\t\tthis.setUrl(url);\n\t\t\t}\n\t\t\t\n\t\t\tajaxConfig = this.generateConfig(config);\n\t\t\t\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\n\t\t}else{\n\t\t\treturn previousData;\n\t\t}\n\t}\n\t\n\tsetDefaultConfig(config = {}){\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\n\n\t\tif(typeof config == \"string\"){\n\t\t\tthis.config.method = config;\n\t\t}else{\n\t\t\tObject.assign(this.config, config);\n\t\t}\n\t}\n\t\n\t//load config object\n\tgenerateConfig(config = {}){\n\t\tvar ajaxConfig = Object.assign({}, this.config);\n\t\t\n\t\tif(typeof config == \"string\"){\n\t\t\tajaxConfig.method = config;\n\t\t}else{\n\t\t\tObject.assign(ajaxConfig, config);\n\t\t}\n\t\t\n\t\treturn ajaxConfig;\n\t}\n\t\n\t//set request url\n\tsetUrl(url){\n\t\tthis.url = url;\n\t}\n\t\n\t//get request url\n\tgetUrl(){\n\t\treturn this.url;\n\t}\n\t\n\t//send ajax request\n\tsendRequest(url, params, config){\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\n\t\t\treturn this.loaderPromise(url, config, params)\n\t\t\t\t.then((data)=>{\n\t\t\t\t\tif(this.table.options.ajaxResponse){\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n}\n\nAjax.moduleName = \"ajax\";\n\n//load defaults\nAjax.defaultConfig = defaultConfig;\nAjax.defaultURLGenerator = defaultURLGenerator;\nAjax.defaultLoaderPromise = defaultLoaderPromise;\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\n\nexport default Ajax;","export default {\n\treplace:function(data){\n\t\treturn this.table.setData(data);\n\t},\n\tupdate:function(data){\n\t\treturn this.table.updateOrAddData(data);\n\t},\n\tinsert:function(data){\n\t\treturn this.table.addData(data);\n\t},\n\trange:function(data){\n\t\tvar rows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, startRow, rowWidth, dataLength;\n\n\t\tdataLength = data.length;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\t\t\t\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\trows = this.table.rowManager.activeRows.slice();\n\t\t\t\tstartRow = rows.indexOf(startCell.row);\n\n\t\t\t\tif(singleCell){\n\t\t\t\t\trowWidth = data.length;\n\t\t\t\t}else{\n\t\t\t\t\trowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(startRow >-1){\n\t\t\t\t\tthis.table.blockRedraw();\n\t\t\t\t\t\n\t\t\t\t\trows = rows.slice(startRow, startRow + rowWidth);\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row, i) => {\n\t\t\t\t\t\trow.updateData(data[i % dataLength]);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.table.restoreRedraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n};","export default {\n\ttable:function(clipboard){\n\t\tvar data = [],\n\t\theaderFindSuccess = true,\n\t\tcolumns = this.table.columnManager.columns,\n\t\tcolumnMap = [],\n\t\trows = [];\n\t\t\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\n\t\tclipboard.forEach(function(row){\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\t\t\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\n\t\t\t\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function(value){\n\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(column){\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t}else{\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//check if column headers are present by field\n\t\t\tif(!headerFindSuccess){\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\t\t\t\t\n\t\t\t\tdata[0].forEach(function(value){\n\t\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t}else{\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(!headerFindSuccess){\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//remove header row if found\n\t\t\tif(headerFindSuccess){\n\t\t\t\tdata.shift();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach(function(item){\n\t\t\t\tvar row = {};\n\t\t\t\t\n\t\t\t\titem.forEach(function(value, i){\n\t\t\t\t\tif(columnMap[i]){\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\trows.push(row);\n\t\t\t});\n\t\t\t\n\t\t\treturn rows;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t},\n\trange:function(clipboard){\n\t\tvar data = [],\n\t\trows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, colWidth, columnMap, startCol;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\t//get data from clipboard into array of columns and rows.\n\t\t\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tclipboard.forEach(function(row){\n\t\t\t\t\tdata.push(row.split(\"\\t\"));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(data.length){\n\t\t\t\t\tcolumnMap = this.table.columnManager.getVisibleColumnsByIndex();\n\t\t\t\t\tstartCol = columnMap.indexOf(startCell.column);\n\n\t\t\t\t\tif(startCol > -1){\n\t\t\t\t\t\tif(singleCell){\n\t\t\t\t\t\t\tcolWidth = data[0].length;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcolWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcolumnMap = columnMap.slice(startCol, startCol + colWidth);\n\n\t\t\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\t\t\tvar row = {};\n\t\t\t\t\t\t\tvar itemLength = item.length;\n\n\t\t\t\t\t\t\tcolumnMap.forEach(function(col, i){\n\t\t\t\t\t\t\t\trow[col.field] = item[i % itemLength];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trows.push(row);\t\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn rows;\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n};","import Module from '../../core/Module.js';\n\nimport defaultPasteActions from './defaults/pasteActions.js';\nimport defaultPasteParsers from './defaults/pasteParsers.js';\n\nclass Clipboard extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = true;\n\t\tthis.pasteParser = function(){};\n\t\tthis.pasteAction = function(){};\n\t\tthis.customSelection = false;\n\t\tthis.rowRange = false;\n\t\tthis.blocked = true; //block copy actions not originating from this command\n\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRECATED - REMOVE in 5.0\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\n\n\t\tthis.registerColumnOption(\"clipboard\");\n\t\tthis.registerColumnOption(\"titleClipboard\");\n\t}\n\n\tinitialize(){\n\t\tthis.mode = this.table.options.clipboard;\n\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\t\tif(this.mode === true || this.mode === \"copy\"){\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\n\t\t\t\tvar plain, html, list;\n\n\t\t\t\tif(!this.blocked){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif(this.customSelection){\n\t\t\t\t\t\tplain = this.customSelection;\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\n\t\t\t\t\t\tlist = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\n\n\t\t\t\t\t\thtml = this.table.modules.export.generateHTMLTable(list);\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\n\n\t\t\t\t\tthis.reset();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(this.mode === true || this.mode === \"paste\"){\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\n\t\t\t\tthis.paste(e);\n\t\t\t});\n\t\t}\n\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\n\t}\n\n\treset(){\n\t\tthis.blocked = true;\n\t\tthis.customSelection = false;\n\t}\n\n\tgeneratePlainContent (list) {\n\t\tvar output = [];\n\n\t\tlist.forEach((row) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach((col) => {\n\t\t\t\tvar value = \"\";\n\n\t\t\t\tif(col){\n\n\t\t\t\t\tif(row.type === \"group\"){\n\t\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t\t}\n\n\t\t\t\t\tif(col.value === null){\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowData.push(value);\n\t\t\t});\n\n\t\t\toutput.push(rowData.join(\"\\t\"));\n\t\t});\n\n\t\treturn output.join(\"\\n\");\n\t}\n\n\tcopy (range, internal) {\n\t\tvar sel, textRange;\n\t\tthis.blocked = false;\n\t\tthis.customSelection = false;\n\t\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents(this.table.element);\n\t\t\t\tsel = window.getSelection();\n\n\t\t\t\tif (sel.toString() && internal) {\n\t\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t\t}\n\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(range);\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\t\ttextRange = document.body.createTextRange();\n\t\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\t\ttextRange.select();\n\t\t\t}\n\n\t\t\tdocument.execCommand('copy');\n\n\t\t\tif (sel) {\n\t\t\t\tsel.removeAllRanges();\n\t\t\t}\n\t\t}\n\t}\n\n\t//PASTE EVENT HANDLING\n\tsetPasteAction(action){\n\n\t\tswitch(typeof action){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\n\n\t\t\t\tif(!this.pasteAction){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteAction = action;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetPasteParser(parser){\n\t\tswitch(typeof parser){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\n\n\t\t\t\tif(!this.pasteParser){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteParser = parser;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpaste(e){\n\t\tvar data, rowData, rows;\n\n\t\tif(this.checkPasteOrigin(e)){\n\n\t\t\tdata = this.getPasteData(e);\n\n\t\t\trowData = this.pasteParser.call(this, data);\n\n\t\t\tif(rowData){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif(this.table.modExists(\"mutator\")){\n\t\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t\t}\n\n\t\t\t\trows = this.pasteAction.call(this, rowData);\n\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\n\t\t\t}\n\t\t}\n\t}\n\n\tmutateData(data){\n\t\tvar output = [];\n\n\t\tif(Array.isArray(data)){\n\t\t\tdata.forEach((row) => {\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t\t});\n\t\t}else{\n\t\t\toutput = data;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\n\tcheckPasteOrigin(e){\n\t\tvar valid = true;\n\t\tvar blocked = this.confirm(\"clipboard-paste\", [e]);\n\n\t\tif(blocked || ![\"DIV\", \"SPAN\"].includes(e.target.tagName)){\n\t\t\tvalid = false;\n\t\t}\n\n\t\treturn valid;\n\t}\n\n\tgetPasteData(e){\n\t\tvar data;\n\n\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\tdata = window.clipboardData.getData('Text');\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\t\tdata = e.clipboardData.getData('text/plain');\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t\t}\n\n\t\treturn data;\n\t}\n}\n\nClipboard.moduleName = \"clipboard\";\n\n//load defaults\nClipboard.pasteActions = defaultPasteActions;\nClipboard.pasteParsers = defaultPasteParsers;\n\nexport default Clipboard;","class CalcComponent{\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n}\n\nexport default CalcComponent;","//public cell object\nexport default class CellComponent {\n\n\tconstructor (cell){\n\t\tthis._cell = cell;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetValue(){\n\t\treturn this._cell.getValue();\n\t}\n\n\tgetOldValue(){\n\t\treturn this._cell.getOldValue();\n\t}\n\n\tgetInitialValue(){\n\t\treturn this._cell.initialValue;\n\t}\n\n\tgetElement(){\n\t\treturn this._cell.getElement();\n\t}\n\n\tgetRow(){\n\t\treturn this._cell.row.getComponent();\n\t}\n\n\tgetData(transform){\n\t\treturn this._cell.row.getData(transform);\n\t}\n\tgetType(){\n\t\treturn \"cell\";\n\t}\n\tgetField(){\n\t\treturn this._cell.column.getField();\n\t}\n\n\tgetColumn(){\n\t\treturn this._cell.column.getComponent();\n\t}\n\n\tsetValue(value, mutate){\n\t\tif(typeof mutate == \"undefined\"){\n\t\t\tmutate = true;\n\t\t}\n\n\t\tthis._cell.setValue(value, mutate);\n\t}\n\n\trestoreOldValue(){\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\n\t}\n\n\trestoreInitialValue(){\n\t\tthis._cell.setValueActual(this._cell.initialValue);\n\t}\n\n\tcheckHeight(){\n\t\tthis._cell.checkHeight();\n\t}\n\n\tgetTable(){\n\t\treturn this._cell.table;\n\t}\n\n\t_getSelf(){\n\t\treturn this._cell;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport CellComponent from './CellComponent.js';\n\nexport default class Cell extends CoreFeature{\n\tconstructor(column, row){\n\t\tsuper(column.table);\n\n\t\tthis.table = column.table;\n\t\tthis.column = column;\n\t\tthis.row = row;\n\t\tthis.element = null;\n\t\tthis.value = null;\n\t\tthis.initialValue;\n\t\tthis.oldValue = null;\n\t\tthis.modules = {};\n\n\t\tthis.height = null;\n\t\tthis.width = null;\n\t\tthis.minWidth = null;\n\n\t\tthis.component = null;\n\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\t\tthis.build();\n\t}\n\n\t//////////////// Setup Functions /////////////////\n\t//generate element\n\tbuild(){\n\t\tthis.generateElement();\n\n\t\tthis.setWidth();\n\n\t\tthis._configureCell();\n\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\t\tthis.initialValue = this.value;\n\t}\n\n\tgenerateElement(){\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = \"tabulator-cell\";\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\n\t}\n\n\t_configureCell(){\n\t\tvar element = this.element,\n\t\tfield = this.column.getField(),\n\t\tvertAligns = {\n\t\t\ttop:\"flex-start\",\n\t\t\tbottom:\"flex-end\",\n\t\t\tmiddle:\"center\",\n\t\t},\n\t\thozAligns = {\n\t\t\tleft:\"flex-start\",\n\t\t\tright:\"flex-end\",\n\t\t\tcenter:\"center\",\n\t\t};\n\n\t\t//set text alignment\n\t\telement.style.textAlign = this.column.hozAlign;\n\n\t\tif(this.column.vertAlign){\n\t\t\telement.style.display = \"inline-flex\";\n\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\n\n\t\t\tif(this.column.hozAlign){\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\n\t\t\t}\n\t\t}\n\n\t\tif(field){\n\t\t\telement.setAttribute(\"tabulator-field\", field);\n\t\t}\n\n\t\t//add class to cell if needed\n\t\tif(this.column.definition.cssClass){\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\telement.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.dispatch(\"cell-init\", this);\n\n\t\t//hide cell if not visible\n\t\tif(!this.column.visible){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//generate cell contents\n\t_generateContents(){\n\t\tvar val;\n\n\t\tval = this.chain(\"cell-format\", this, null, () => {\n\t\t\treturn this.element.innerHTML = this.value;\n\t\t});\n\n\t\tswitch(typeof val){\n\t\t\tcase \"object\":\n\t\t\t\tif(val instanceof Node){\n\n\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\t\t\t\tthis.element.appendChild(val);\n\t\t\t\t}else{\n\t\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\t\tif(val != null){\n\t\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tthis.element.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element.innerHTML = val;\n\t\t}\n\t}\n\n\tcellRendered(){\n\t\tthis.dispatch(\"cell-rendered\", this);\n\t}\n\n\t//////////////////// Getters ////////////////////\n\tgetElement(containerOnly){\n\t\tif(!this.loaded){\n\t\t\tthis.loaded = true;\n\t\t\tif(!containerOnly){\n\t\t\t\tthis.layoutElement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.element;\n\t}\n\n\tgetValue(){\n\t\treturn this.value;\n\t}\n\n\tgetOldValue(){\n\t\treturn this.oldValue;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tsetValue(value, mutate, force){\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\n\n\t\t\tthis.cellRendered();\n\n\t\t\tif(this.column.definition.cellEdited){\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\n\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t}\n\t}\n\n\tsetValueProcessData(value, mutate, force){\n\t\tvar changed = false;\n\n\t\tif(this.value !== value || force){\n\n\t\t\tchanged = true;\n\n\t\t\tif(mutate){\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\n\t\t\t}\n\t\t}\n\n\t\tthis.setValueActual(value);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\n\t\t}\n\n\t\treturn changed;\n\t}\n\n\tsetValueActual(value){\n\t\tthis.oldValue = this.value;\n\n\t\tthis.value = value;\n\n\t\tthis.dispatch(\"cell-value-save-before\", this);\n\n\t\tthis.column.setFieldValue(this.row.data, value);\n\n\t\tthis.dispatch(\"cell-value-save-after\", this);\n\n\t\tif(this.loaded){\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\tlayoutElement(){\n\t\tthis._generateContents();\n\n\t\tthis.dispatch(\"cell-layout\", this);\n\t}\n\n\tsetWidth(){\n\t\tthis.width = this.column.width;\n\t\tthis.element.style.width = this.column.widthStyled;\n\t}\n\n\tclearWidth(){\n\t\tthis.width = \"\";\n\t\tthis.element.style.width = \"\";\n\t}\n\n\tgetWidth(){\n\t\treturn this.width || this.element.offsetWidth;\n\t}\n\n\tsetMinWidth(){\n\t\tthis.minWidth = this.column.minWidth;\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\n\t}\n\n\tsetMaxWidth(){\n\t\tthis.maxWidth = this.column.maxWidth;\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n\t}\n\n\tcheckHeight(){\n\t\t// var height = this.element.css(\"height\");\n\t\tthis.row.reinitializeHeight();\n\t}\n\n\tclearHeight(){\n\t\tthis.element.style.height = \"\";\n\t\tthis.height = null;\n\n\t\tthis.dispatch(\"cell-height\", this, \"\");\n\t}\n\n\tsetHeight(){\n\t\tthis.height = this.row.height;\n\t\tthis.element.style.height = this.row.heightStyled;\n\n\t\tthis.dispatch(\"cell-height\", this, this.row.heightStyled);\n\t}\n\n\tgetHeight(){\n\t\treturn this.height || this.element.offsetHeight;\n\t}\n\n\tshow(){\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n\t}\n\n\thide(){\n\t\tthis.element.style.display = \"none\";\n\t}\n\n\tdelete(){\n\t\tthis.dispatch(\"cell-delete\", this);\n\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.element = false;\n\t\tthis.column.deleteCell(this);\n\t\tthis.row.deleteCell(this);\n\t\tthis.calcs = {};\n\t}\n\n\tgetIndex(){\n\t\treturn this.row.getCellIndex(this);\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new CellComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n}\n","import Column from './Column.js';\n\n//public column object\nexport default class ColumnComponent {\n\tconstructor (column){\n\t\tthis._column = column;\n\t\tthis.type = \"ColumnComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetElement(){\n\t\treturn this._column.getElement();\n\t}\n\n\tgetDefinition(){\n\t\treturn this._column.getDefinition();\n\t}\n\n\tgetField(){\n\t\treturn this._column.getField();\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this._column.getTitleDownload();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._column.cells.forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tisVisible(){\n\t\treturn this._column.visible;\n\t}\n\n\tshow(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.show();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.show();\n\t\t}\n\t}\n\n\thide(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.hide();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.hide();\n\t\t}\n\t}\n\n\ttoggle(){\n\t\tif(this._column.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tdelete(){\n\t\treturn this._column.delete();\n\t}\n\n\tgetSubColumns(){\n\t\tvar output = [];\n\n\t\tif(this._column.columns.length){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\toutput.push(column.getComponent());\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetParentColumn(){\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._column;\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible);\n\t}\n\n\tgetTable(){\n\t\treturn this._column.table;\n\t}\n\n\tmove(to, after){\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\t\tif(toColumn){\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t}\n\n\tgetNextColumn(){\n\t\tvar nextCol = this._column.nextColumn();\n\n\t\treturn nextCol ? nextCol.getComponent() : false;\n\t}\n\n\tgetPrevColumn(){\n\t\tvar prevCol = this._column.prevColumn();\n\n\t\treturn prevCol ? prevCol.getComponent() : false;\n\t}\n\n\tupdateDefinition(updates){\n\t\treturn this._column.updateDefinition(updates);\n\t}\n\n\tgetWidth(){\n\t\treturn this._column.getWidth();\n\t}\n\n\tsetWidth(width){\n\t\tvar result;\n\n\t\tif(width === true){\n\t\t\tresult = this._column.reinitializeWidth(true);\n\t\t}else{\n\t\t\tresult = this._column.setWidth(width);\n\t\t}\n\n\t\tthis._column.table.columnManager.rerenderColumns(true);\n\n\t\treturn result;\n\t}\n}","export default {\n\t\"title\": undefined,\n\t\"field\": undefined,\n\t\"columns\": undefined,\n\t\"visible\": undefined,\n\t\"hozAlign\": undefined,\n\t\"vertAlign\": undefined,\n\t\"width\": undefined,\n\t\"minWidth\": 40,\n\t\"maxWidth\": undefined,\n\t\"maxInitialWidth\": undefined,\n\t\"cssClass\": undefined,\n\t\"variableHeight\": undefined,\n\t\"headerVertical\": undefined,\n\t\"headerHozAlign\": undefined,\n\t\"headerWordWrap\": false,\n\t\"editableTitle\": undefined,\n};","import CoreFeature from '../CoreFeature.js';\nimport ColumnComponent from './ColumnComponent.js';\nimport defaultOptions from './defaults/options.js';\n\nimport Cell from '../cell/Cell.js';\n\nclass Column extends CoreFeature{\n\n\tconstructor(def, parent){\n\t\tsuper(parent.table);\n\n\t\tthis.definition = def; //column definition\n\t\tthis.parent = parent; //hold parent object\n\t\tthis.type = \"column\"; //type of element\n\t\tthis.columns = []; //child columns\n\t\tthis.cells = []; //cells bound to this column\n\t\tthis.element = this.createElement(); //column header element\n\t\tthis.contentElement = false;\n\t\tthis.titleHolderElement = false;\n\t\tthis.titleElement = false;\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\n\t\tthis.isGroup = false;\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\n\t\tthis.vertAlign = \"\"; //vert text alignment\n\n\t\t//multi dimensional filed handling\n\t\tthis.field =\"\";\n\t\tthis.fieldStructure = \"\";\n\t\tthis.getFieldValue = \"\";\n\t\tthis.setFieldValue = \"\";\n\n\t\tthis.titleDownload = null;\n\t\tthis.titleFormatterRendered = false;\n\n\t\tthis.mapDefinitions();\n\n\t\tthis.setField(this.definition.field);\n\n\t\tthis.modules = {}; //hold module variables;\n\n\t\tthis.width = null; //column width\n\t\tthis.widthStyled = \"\"; //column width pre-styled to improve render efficiency\n\t\tthis.maxWidth = null; //column maximum width\n\t\tthis.maxWidthStyled = \"\"; //column maximum pre-styled to improve render efficiency\n\t\tthis.maxInitialWidth = null;\n\t\tthis.minWidth = null; //column minimum width\n\t\tthis.minWidthStyled = \"\"; //column minimum pre-styled to improve render efficiency\n\t\tthis.widthFixed = false; //user has specified a width for this column\n\n\t\tthis.visible = true; //default visible state\n\n\t\tthis.component = null;\n\n\t\t//initialize column\n\t\tif(this.definition.columns){\n\n\t\t\tthis.isGroup = true;\n\n\t\t\tthis.definition.columns.forEach((def, i) => {\n\t\t\t\tvar newCol = new Column(def, this);\n\t\t\t\tthis.attachColumn(newCol);\n\t\t\t});\n\n\t\t\tthis.checkColumnVisibility();\n\t\t}else{\n\t\t\tparent.registerColumnField(this);\n\t\t}\n\n\t\tthis._initialize();\n\t}\n\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.setAttribute(\"role\", \"columnheader\");\n\t\tel.setAttribute(\"aria-sort\", \"none\");\n\n\t\tswitch(this.table.options.columnHeaderVertAlign){\n\t\t\tcase \"middle\":\n\t\t\t\tel.style.justifyContent = \"center\";\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tel.style.justifyContent = \"flex-end\";\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn el;\n\t}\n\n\tcreateGroupElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col-group-cols\");\n\n\t\treturn el;\n\t}\n\n\tmapDefinitions(){\n\t\tvar defaults = this.table.options.columnDefaults;\n\n\t\t//map columnDefaults onto column definitions\n\t\tif(defaults){\n\t\t\tfor(let key in defaults){\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\n\t\t\t\t\tthis.definition[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition);\n\t}\n\n\tcheckDefinition(){\n\t\tObject.keys(this.definition).forEach((key) => {\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetField(field){\n\t\tthis.field = field;\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n\t}\n\n\t//register column position with column manager\n\tregisterColumnPosition(column){\n\t\tthis.parent.registerColumnPosition(column);\n\t}\n\n\t//register column position with column manager\n\tregisterColumnField(column){\n\t\tthis.parent.registerColumnField(column);\n\t}\n\n\t//trigger position registration\n\treRegisterPosition(){\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolumn.reRegisterPosition();\n\t\t\t});\n\t\t}else{\n\t\t\tthis.registerColumnPosition(this);\n\t\t}\n\t}\n\n\t//build header element\n\t_initialize(){\n\t\tvar def = this.definition;\n\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\tif(def.headerVertical){\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\n\n\t\t\tif(def.headerVertical === \"flip\"){\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t\t}\n\t\t}\n\n\t\tthis.contentElement = this._buildColumnHeaderContent();\n\n\t\tthis.element.appendChild(this.contentElement);\n\n\t\tif(this.isGroup){\n\t\t\tthis._buildGroupHeader();\n\t\t}else{\n\t\t\tthis._buildColumnHeader();\n\t\t}\n\n\t\tthis.dispatch(\"column-init\", this);\n\t}\n\n\t//build header element for header\n\t_buildColumnHeader(){\n\t\tvar def = this.definition;\n\n\t\tthis.dispatch(\"column-layout\", this);\n\n\t\t//set column visibility\n\t\tif(typeof def.visible != \"undefined\"){\n\t\t\tif(def.visible){\n\t\t\t\tthis.show(true);\n\t\t\t}else{\n\t\t\t\tthis.hide(true);\n\t\t\t}\n\t\t}\n\n\t\t//assign additional css classes to column header\n\t\tif(def.cssClass){\n\t\t\tvar classNames = def.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tif(def.field){\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t\t}\n\n\t\t//set min width if present\n\t\tthis.setMinWidth(parseInt(def.minWidth));\n\n\t\tif (def.maxInitialWidth) {\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\n\t\t}\n\t\t\n\t\tif(def.maxWidth){\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\n\t\t}\n\n\t\tthis.reinitializeWidth();\n\n\t\t//set horizontal text alignment\n\t\tthis.hozAlign = this.definition.hozAlign;\n\t\tthis.vertAlign = this.definition.vertAlign;\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\t}\n\n\t_buildColumnHeaderContent(){\n\t\tvar contentElement = document.createElement(\"div\");\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\t\tthis.titleHolderElement = document.createElement(\"div\");\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\t\tcontentElement.appendChild(this.titleHolderElement);\n\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\t\treturn contentElement;\n\t}\n\n\t//build title element of column\n\t_buildColumnHeaderTitle(){\n\t\tvar def = this.definition;\n\n\t\tvar titleHolderElement = document.createElement(\"div\");\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\t\t\n\t\tif(def.headerWordWrap){\n\t\t\ttitleHolderElement.classList.add(\"tabulator-col-title-wrap\");\n\t\t}\n\n\t\tif(def.editableTitle){\n\t\t\tvar titleElement = document.createElement(\"input\");\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttitleElement.focus();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"change\", () => {\n\t\t\t\tdef.title = titleElement.value;\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\n\t\t\t});\n\n\t\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\ttitleElement.value = def.title || \" \";\n\t\t\t}\n\n\t\t}else{\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t\t}\n\t\t}\n\n\t\treturn titleHolderElement;\n\t}\n\n\t_formatColumnHeaderTitle(el, title){\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\n\t\t\treturn title;\n\t\t});\n\n\t\tswitch(typeof contents){\n\t\t\tcase \"object\":\n\t\t\t\tif(contents instanceof Node){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = \"\";\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t}\n\n\t//build header element for column group\n\t_buildGroupHeader(){\n\t\tthis.element.classList.add(\"tabulator-col-group\");\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t\t//asign additional css classes to column header\n\t\tif(this.definition.cssClass){\n\t\t\tvar classNames = this.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\n\t\tthis.element.appendChild(this.groupElement);\n\t}\n\n\t//flat field lookup\n\t_getFlatData(data){\n\t\treturn data[this.field];\n\t}\n\n\t//nested field lookup\n\t_getNestedData(data){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdataObj = dataObj[structure[i]];\n\n\t\t\toutput = dataObj;\n\n\t\t\tif(!dataObj){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//flat field set\n\t_setFlatData(data, value){\n\t\tif(this.field){\n\t\t\tdata[this.field] = value;\n\t\t}\n\t}\n\n\t//nested field set\n\t_setNestedData(data, value){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tif(i == length -1){\n\t\t\t\tdataObj[structure[i]] = value;\n\t\t\t}else{\n\t\t\t\tif(!dataObj[structure[i]]){\n\t\t\t\t\tif(typeof value !== \"undefined\"){\n\t\t\t\t\t\tdataObj[structure[i]] = {};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t}\n\t\t}\n\t}\n\n\t//attach column to this group\n\tattachColumn(column){\n\t\tif(this.groupElement){\n\t\t\tthis.columns.push(column);\n\t\t\tthis.groupElement.appendChild(column.getElement());\n\n\t\t\tcolumn.columnRendered();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t\t}\n\t}\n\n\t//vertically align header in column\n\tverticalAlign(alignment, height){\n\n\t\t//calculate height of column header and group holder element\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\t\tthis.element.style.height = parentHeight + \"px\";\n\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\n\n\t\tif(this.isGroup){\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t}\n\n\t\t//vertically align cell contents\n\t\t// if(!this.isGroup && alignment !== \"top\"){\n\t\t// \tif(alignment === \"bottom\"){\n\t\t// \t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t// \t}else{\n\t\t// \t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\n\t\t// \t}\n\t\t// }\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.verticalAlign(alignment);\n\t\t});\n\t}\n\n\t//clear vertical alignment\n\tclearVerticalAlign(){\n\t\tthis.element.style.paddingTop = \"\";\n\t\tthis.element.style.height = \"\";\n\t\tthis.element.style.minHeight = \"\";\n\t\tthis.groupElement.style.minHeight = \"\";\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.clearVerticalAlign();\n\t\t});\n\n\t\tthis.dispatch(\"column-height\", this, \"\");\n\t}\n\n\t//// Retrieve Column Information ////\n\t//return column header element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return column group element\n\tgetGroupElement(){\n\t\treturn this.groupElement;\n\t}\n\n\t//return field name\n\tgetField(){\n\t\treturn this.field;\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this.titleDownload;\n\t}\n\n\t//return the first column in a group\n\tgetFirstColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[0].getFirstColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return the last column in a group\n\tgetLastColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return all columns in a group\n\tgetColumns(traverse){\n\t\tvar columns = [];\n\n\t\tif(traverse){\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumns.push(column);\n\t\t\t\t\t\n\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t});\n\t\t}else{\n\t\t\tcolumns = this.columns;\n\t\t}\n\t\t\n\t\treturn columns;\n\t}\n\n\t//return all columns in a group\n\tgetCells(){\n\t\treturn this.cells;\n\t}\n\n\t//retrieve the top column in a group of columns\n\tgetTopColumn(){\n\t\tif(this.parent.isGroup){\n\t\t\treturn this.parent.getTopColumn();\n\t\t}else{\n\t\t\treturn this;\n\t\t}\n\t}\n\n\t//return column definition object\n\tgetDefinition(updateBranches){\n\t\tvar colDefs = [];\n\n\t\tif(this.isGroup && updateBranches){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t\t});\n\n\t\t\tthis.definition.columns = colDefs;\n\t\t}\n\n\t\treturn this.definition;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tcheckColumnVisibility(){\n\t\tvar visible = false;\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tif(column.visible){\n\t\t\t\tvisible = true;\n\t\t\t}\n\t\t});\n\n\t\tif(visible){\n\t\t\tthis.show();\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t}else{\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//show column\n\tshow(silent, responsiveToggle){\n\t\tif(!this.visible){\n\t\t\tthis.visible = true;\n\n\t\t\tthis.element.style.display = \"\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.show();\n\t\t\t});\n\n\t\t\tif(!this.isGroup && this.width === null){\n\t\t\t\tthis.reinitializeWidth();\n\t\t\t}\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\t//hide column\n\thide(silent, responsiveToggle){\n\t\tif(this.visible){\n\t\t\tthis.visible = false;\n\n\t\t\tthis.element.style.display = \"none\";\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.hide();\n\t\t\t});\n\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\tmatchChildWidths(){\n\t\tvar childWidth = 0;\n\n\t\tif(this.contentElement && this.columns.length){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\tchildWidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveChild(child){\n\t\tvar index = this.columns.indexOf(child);\n\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\n\t\tif(!this.columns.length){\n\t\t\tthis.delete();\n\t\t}\n\t}\n\n\tsetWidth(width){\n\t\tthis.widthFixed = true;\n\t\tthis.setWidthActual(width);\n\t}\n\n\tsetWidthActual(width){\n\t\tif(isNaN(width)){\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\n\t\t}\n\n\t\twidth = Math.max(this.minWidth, width);\n\n\t\tif(this.maxWidth){\n\t\t\twidth = Math.min(this.maxWidth, width);\n\t\t}\n\n\t\tthis.width = width;\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\t\tthis.element.style.width = this.widthStyled;\n\n\t\tif(!this.isGroup){\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.setWidth();\n\t\t\t});\n\t\t}\n\n\t\tif(this.parent.isGroup){\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tthis.dispatch(\"column-width\", this);\n\t}\n\n\tcheckCellHeights(){\n\t\tvar rows = [];\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tif(cell.row.heightInitialized){\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\n\t\t\t\t\trows.push(cell.row);\n\t\t\t\t\tcell.row.clearCellHeight();\n\t\t\t\t}else{\n\t\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.calcHeight();\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.setCellHeight();\n\t\t});\n\t}\n\n\tgetWidth(){\n\t\tvar width = 0;\n\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\twidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\twidth = this.width;\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tgetLeftOffset(){\n\t\tvar offset = this.element.offsetLeft;\n\n\t\tif(this.parent.isGroup){\n\t\t\toffset += this.parent.getLeftOffset();\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tgetHeight(){\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\n\t}\n\n\tsetMinWidth(minWidth){\n\t\tif(this.maxWidth && minWidth > this.maxWidth){\n\t\t\tminWidth = this.maxWidth;\n\n\t\t\tconsole.warn(\"the minWidth (\"+ minWidth + \"px) for column '\" + this.field + \"' cannot be bigger that its maxWidth (\"+ this.maxWidthStyled + \")\");\n\t\t}\n\n\t\tthis.minWidth = minWidth;\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\t\tthis.element.style.minWidth = this.minWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMinWidth();\n\t\t});\n\t}\n\n\tsetMaxWidth(maxWidth){\n\t\tif(this.minWidth && maxWidth < this.minWidth){\n\t\t\tmaxWidth = this.minWidth;\n\n\t\t\tconsole.warn(\"the maxWidth (\"+ maxWidth + \"px) for column '\" + this.field + \"' cannot be smaller that its minWidth (\"+ this.minWidthStyled + \")\");\n\t\t}\n\n\t\tthis.maxWidth = maxWidth;\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMaxWidth();\n\t\t});\n\t}\n\n\tdelete(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(this.isGroup){\n\t\t\t\tthis.columns.forEach(function(column){\n\t\t\t\t\tcolumn.delete();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dispatch(\"column-delete\", this);\n\n\t\t\tvar cellCount = this.cells.length;\n\n\t\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\t\tthis.cells[0].delete();\n\t\t\t}\n\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\n\t\t\tthis.element = false;\n\t\t\tthis.contentElement = false;\n\t\t\tthis.titleElement = false;\n\t\t\tthis.groupElement = false;\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.removeChild(this);\n\t\t\t}\n\n\t\t\tthis.table.columnManager.deregisterColumn(this);\n\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\n\t\t\tthis.dispatch(\"column-deleted\", this);\n\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tcolumnRendered(){\n\t\tif(this.titleFormatterRendered){\n\t\t\tthis.titleFormatterRendered();\n\t\t}\n\n\t\tthis.dispatch(\"column-rendered\", this);\n\t}\n\n\t//////////////// Cell Management /////////////////\n\t//generate cell for this column\n\tgenerateCell(row){\n\t\tvar cell = new Cell(this, row);\n\n\t\tthis.cells.push(cell);\n\n\t\treturn cell;\n\t}\n\n\tnextColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n\t}\n\n\t_nextVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n\t}\n\n\tprevColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n\t}\n\n\t_prevVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n\t}\n\n\treinitializeWidth(force){\n\t\tthis.widthFixed = false;\n\n\t\t//set width if present\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\n\t\t\t// maxInitialWidth ignored here as width specified\n\t\t\tthis.setWidth(this.definition.width);\n\t\t}\n\n\t\tthis.dispatch(\"column-width-fit-before\", this);\n\n\t\tthis.fitToData(force);\n\n\t\tthis.dispatch(\"column-width-fit-after\", this);\n\t}\n\n\t//set column width to maximum cell width for non group columns\n\tfitToData(force){\n\t\tif(this.isGroup){\n\t\t\treturn;\n\t\t}\n\n\t\tif(!this.widthFixed){\n\t\t\tthis.element.style.width = \"\";\n\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tcell.clearWidth();\n\t\t\t});\n\t\t}\n\n\t\tvar maxWidth = this.element.offsetWidth;\n\n\t\tif(!this.width || !this.widthFixed){\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tvar width = cell.getWidth();\n\n\t\t\t\tif(width > maxWidth){\n\t\t\t\t\tmaxWidth = width;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(maxWidth){\n\t\t\t\tvar setTo = maxWidth + 1;\n\t\t\t\tif (this.maxInitialWidth && !force) {\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\n\t\t\t\t}\n\t\t\t\tthis.setWidthActual(setTo);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateDefinition(updates){\n\t\tvar definition;\n\n\t\tif(!this.isGroup){\n\t\t\tif(!this.parent.isGroup){\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\n\t\t\t\t\t.then((column) => {\n\n\t\t\t\t\t\tif(definition.field == this.field){\n\t\t\t\t\t\t\tthis.field = false; //clear field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this.delete()\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t}\n\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new ColumnComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n\n\tgetPosition(){\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1;\n\t}\n}\n\nColumn.defaultOptionList = defaultOptions;\n\nexport default Column;\n","//public row object\nexport default class RowComponent {\n\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\tgetIndex(){\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\n\t}\n\n\tgetPosition(){\n\t\treturn this._row.getPosition();\n\t}\n\n\twatchPosition(callback){\n\t\treturn this._row.watchPosition(callback);\n\t}\n\n\tdelete(){\n\t\treturn this._row.delete();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._row.table.rowManager.scrollToRow(this._row, position, ifVisible);\n\t}\n\n\tmove(to, after){\n\t\tthis._row.moveToRow(to, after);\n\t}\n\n\tupdate(data){\n\t\treturn this._row.updateData(data);\n\t}\n\n\tnormalizeHeight(){\n\t\tthis._row.normalizeHeight(true);\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n\n\treformat(){\n\t\treturn this._row.reinitialize();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetNextRow(){\n\t\tvar row = this._row.nextRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n\n\tgetPrevRow(){\n\t\tvar row = this._row.prevRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport RowComponent from './RowComponent.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Row extends CoreFeature{\n\tconstructor (data, parent, type = \"row\"){\n\t\tsuper(parent.table);\n\t\t\n\t\tthis.parent = parent;\n\t\tthis.data = {};\n\t\tthis.type = type; //type of element\n\t\tthis.element = false;\n\t\tthis.modules = {}; //hold module variables;\n\t\tthis.cells = [];\n\t\tthis.height = 0; //hold element height\n\t\tthis.heightStyled = \"\"; //hold element height pre-styled to improve render efficiency\n\t\tthis.manualHeight = false; //user has manually set row height\n\t\tthis.outerHeight = 0; //hold elements outer height\n\t\tthis.initialized = false; //element has been rendered\n\t\tthis.heightInitialized = false; //element has resized cells to fit\n\t\tthis.position = 0; //store position of element in row list\n\t\tthis.positionWatchers = [];\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.created = false;\n\t\t\n\t\tthis.setData(data);\n\t}\n\t\n\tcreate(){\n\t\tif(!this.created){\n\t\t\tthis.created = true;\n\t\t\tthis.generateElement();\n\t\t}\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\tthis.element = el;\n\t}\n\t\n\tgetElement(){\n\t\tthis.create();\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.createElement();\n\t\tthis.dispatch(\"row-init\", this);\n\t}\n\t\n\tgenerateCells(){\n\t\tthis.cells = this.table.columnManager.generateCells(this);\n\t}\n\t\n\t//functions to setup on first render\n\tinitialize(force, inFragment){\n\t\tthis.create();\n\t\t\n\t\tif(!this.initialized || force){\n\t\t\t\n\t\t\tthis.deleteCells();\n\t\t\t\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-before\", this);\n\t\t\t\n\t\t\tthis.generateCells();\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t\t\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this, inFragment);\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.normalizeHeight();\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout\", this);\n\t\t\t\n\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-after\", this);\n\t\t}else{\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this, inFragment);\n\t\t}\n\t}\n\n\trendered(){\n\t\tthis.cells.forEach((cell) => {\n\t\t\tcell.cellRendered();\n\t\t});\n\t}\n\t\n\treinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.normalizeHeight(true);\n\t\t}\n\t}\n\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tdeinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t}\n\t\n\treinitialize(children){\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(!this.manualHeight){\n\t\t\tthis.height = 0;\n\t\t\tthis.heightStyled = \"\";\n\t\t}\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.initialize(true);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"row-relayout\", this);\n\t}\n\t\n\t//get heights when doing bulk row style calcs in virtual DOM\n\tcalcHeight(force){\n\t\tvar maxHeight = 0,\n\t\tminHeight;\n\t\t\n\t\tif(this.table.options.rowHeight){\n\t\t\tthis.height = this.table.options.rowHeight;\n\t\t}else{\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\t\t\t\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tvar height = cell.getHeight();\n\t\t\t\tif(height > maxHeight){\n\t\t\t\t\tmaxHeight = height;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\n\t\t\t}else{\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n\t\n\t//set of cells\n\tsetCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setHeight();\n\t\t});\n\t\t\n\t\tthis.heightInitialized = true;\n\t}\n\t\n\tclearCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.clearHeight();\n\t\t});\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(force){\n\t\tif(force && !this.table.options.rowHeight){\n\t\t\tthis.clearCellHeight();\n\t\t}\n\t\t\n\t\tthis.calcHeight(force);\n\t\t\n\t\tthis.setCellHeight();\n\t}\n\t\n\t//set height of rows\n\tsetHeight(height, force){\n\t\tif(this.height != height || force){\n\t\t\t\n\t\t\tthis.manualHeight = true;\n\t\t\t\n\t\t\tthis.height = height;\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\t\t\t\n\t\t\tthis.setCellHeight();\n\t\t\t\n\t\t\t// this.outerHeight = this.element.outerHeight();\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\t//return rows outer Width\n\tgetWidth(){\n\t\treturn this.element.offsetWidth;\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\t\n\t//////////////// Data Management /////////////////\n\tsetData(data){\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\n\t\t\n\t\tthis.dispatch(\"row-data-init-after\", this);\n\t}\n\t\n\t//update the rows data\n\tupdateData(updatedData){\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\n\t\ttempData = {},\n\t\tnewRowData;\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof updatedData === \"string\"){\n\t\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\n\t\t\t\n\t\t\tif(this.subscribed(\"row-data-changing\")){\n\t\t\t\ttempData = Object.assign(tempData, this.data);\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\n\t\t\t\n\t\t\t//set data\n\t\t\tfor (let attrname in newRowData) {\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\n\t\t\t\n\t\t\t//update affected cells only\n\t\t\tfor (let attrname in updatedData) {\n\t\t\t\t\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\n\t\t\t\t\n\t\t\t\tcolumns.forEach((column) => {\n\t\t\t\t\tlet cell = this.getCell(column.getField());\n\t\t\t\t\t\n\t\t\t\t\tif(cell){\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\n\t\t\t\t\t\tif(cell.getValue() !== value){\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(visible){\n\t\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//Partial reinitialization if visible\n\t\t\tif(visible){\n\t\t\t\tthis.normalizeHeight(true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.initialized = false;\n\t\t\t\tthis.height = 0;\n\t\t\t\tthis.heightStyled = \"\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\n\t\t\t\n\t\t\t//this.reinitialize();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\tgetData(transform){\n\t\tif(transform){\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\tgetCell(column){\n\t\tvar match = false;\n\t\t\n\t\tcolumn = this.table.columnManager.findColumn(column);\n\t\t\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\tmatch = this.cells.find(function(cell){\n\t\t\treturn cell.column === column;\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetCellIndex(findCell){\n\t\treturn this.cells.findIndex(function(cell){\n\t\t\treturn cell === findCell;\n\t\t});\n\t}\n\t\n\tfindCell(subject){\n\t\treturn this.cells.find((cell) => {\n\t\t\treturn cell.element === subject;\n\t\t});\n\t}\n\t\n\tgetCells(){\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\treturn this.cells;\n\t}\n\t\n\tnextRow(){\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tprevRow(){\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tmoveToRow(to, before){\n\t\tvar toRow = this.table.rowManager.findRow(to);\n\t\t\n\t\tif(toRow){\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t\t}\n\t}\n\t\n\t///////////////////// Actions /////////////////////\n\tdelete(){\n\t\tthis.dispatch(\"row-delete\", this);\n\t\t\n\t\tthis.deleteActual();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\tdeleteActual(blockRedraw){\n\t\tthis.detachModules();\n\t\t\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\t\t\n\t\tthis.deleteCells();\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\tthis.element = false;\n\t\t\n\t\tthis.dispatch(\"row-deleted\", this);\n\t}\n\t\n\tdetachModules(){\n\t\tthis.dispatch(\"row-deleting\", this);\n\t}\n\t\n\tdeleteCells(){\n\t\tvar cellCount = this.cells.length;\n\t\t\n\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\tthis.cells[0].delete();\n\t\t}\n\t}\n\t\n\twipe(){\n\t\tthis.detachModules();\n\t\tthis.deleteCells();\n\t\t\n\t\tif(this.element){\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.modules = {};\n\t}\n\n\tisDisplayed(){\n\t\treturn this.table.rowManager.getDisplayRows().includes(this);\n\t}\n\n\tgetPosition(){\n\t\treturn this.isDisplayed() ? this.position : false;\n\t}\n\n\tsetPosition(position){\n\t\tif(position != this.position){\n\t\t\tthis.position = position;\n\n\t\t\tthis.positionWatchers.forEach((callback) => {\n\t\t\t\tcallback(this.position);\n\t\t\t});\n\t\t}\n\t}\n\n\twatchPosition(callback){\n\t\tthis.positionWatchers.push(callback);\n\n\t\tcallback(this.position);\n\t}\n\t\n\tgetGroup(){\n\t\treturn this.modules.group || false;\n\t}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new RowComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n","export default {\n\t\"avg\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn Number(sum) + Number(value);\n\t\t\t});\n\n\t\t\toutput = output / values.length;\n\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t}\n\n\t\treturn parseFloat(output).toString();\n\t},\n\t\"max\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value > output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"min\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value < output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"sum\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t});\n\t\t}\n\n\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t},\n\t\"concat\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn String(sum) + String(value);\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"count\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tif(value){\n\t\t\t\t\toutput ++;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"unique\":function(values, data, calcParams){\n\t\tvar unique = values.filter((value, index) => {\n\t\t\treturn (values || value === 0) && values.indexOf(value) === index;\n\t\t});\n\n\t\treturn unique.length;\n\t},\n};","import Module from '../../core/Module.js';\n\nimport CalcComponent from './CalcComponent.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\nimport Row from '../../core/row/Row.js';\n\nimport defaultCalculations from './defaults/calculations.js';\n\nclass ColumnCalcs extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.topCalcs = [];\n\t\tthis.botCalcs = [];\n\t\tthis.genColumn = false;\n\t\tthis.topElement = this.createElement();\n\t\tthis.botElement = this.createElement();\n\t\tthis.topRow = false;\n\t\tthis.botRow = false;\n\t\tthis.topInitialized = false;\n\t\tthis.botInitialized = false;\n\t\t\n\t\tthis.blocked = false;\n\t\tthis.recalcAfterBlock = false;\n\t\t\n\t\tthis.registerTableOption(\"columnCalcs\", true);\n\t\t\n\t\tthis.registerColumnOption(\"topCalc\");\n\t\tthis.registerColumnOption(\"topCalcParams\");\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\n\t\tthis.registerColumnOption(\"bottomCalc\");\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-calcs-holder\");\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\n\t\t\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t\t\n\t\tthis.subscribe(\"redraw-blocked\", this.blockRedraw.bind(this));\n\t\tthis.subscribe(\"redraw-restored\", this.restoreRedraw.bind(this));\n\n\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\n\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\t\n\ttableRedraw(force){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t\n\t\tif(force){\n\t\t\tthis.redraw();\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.blocked = true;\n\t\tthis.recalcAfterBlock = false;\n\t}\n\t\n\t\n\trestoreRedraw(){\n\t\tthis.blocked = false;\n\t\t\n\t\tif(this.recalcAfterBlock){\n\t\t\tthis.recalcAfterBlock = false;\n\t\t\tthis.recalcActiveRowsRefresh();\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tuserRecalc(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tblockCheck(){\n\t\tif(this.blocked){\n\t\t\tthis.recalcAfterBlock = true;\n\t\t}\n\t\t\n\t\treturn this.blocked;\n\t}\n\t\n\tvisibleRows(viewable, rows){\n\t\tif(this.topRow){\n\t\t\trows.unshift(this.topRow);\n\t\t}\n\t\t\n\t\tif(this.botRow){\n\t\t\trows.push(this.botRow);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.recalcRowGroup(row);\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRowsRefresh(){\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\n\t\t\tthis.recalcAll();\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRows(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\tcellValueChanged(cell){\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\n\t\t\tif(this.table.options.groupBy){\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\n\t\t\t\t\tthis.recalcActiveRows();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeColumnCheck(column){\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//initialize column calcs\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\tvar config = {\n\t\t\ttopCalcParams:def.topCalcParams || {},\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\n\t\t};\n\t\t\n\t\tif(def.topCalc){\n\t\t\t\n\t\t\tswitch(typeof def.topCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.topCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.topCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeTopRow();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tif(def.bottomCalc){\n\t\t\tswitch(typeof def.bottomCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.botCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.botCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeBottomRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t//dummy functions to handle being mock column manager\n\tregisterColumnField(){}\n\t\n\tremoveCalcs(){\n\t\tvar changed = false;\n\t\t\n\t\tif(this.topInitialized){\n\t\t\tthis.topInitialized = false;\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(this.botInitialized){\n\t\t\tthis.botInitialized = false;\n\t\t\tthis.footerRemove(this.botElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\treinitializeCalcs(){\n\t\tif(this.topCalcs.length){\n\t\t\tthis.initializeTopRow();\n\t\t}\n\n\t\tif(this.botCalcs.length){\n\t\t\tthis.initializeBottomRow();\n\t\t}\n\t}\n\t\n\tinitializeTopRow(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tif(!this.topInitialized){\n\n\t\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\t\tfragment.appendChild(this.topElement);\n\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\t\t\tthis.topInitialized = true;\n\t\t}\n\t}\n\t\n\tinitializeBottomRow(){\n\t\tif(!this.botInitialized){\n\t\t\tthis.footerPrepend(this.botElement);\n\t\t\tthis.botInitialized = true;\n\t\t}\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tif(this.botInitialized && this.botRow){\n\t\t\tthis.botElement.scrollLeft = left;\n\t\t}\n\t}\n\t\n\trecalc(rows){\n\t\tvar data, row;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(this.topInitialized || this.botInitialized){\n\t\t\t\tdata = this.rowsToData(rows);\n\t\t\t\t\n\t\t\t\tif(this.topInitialized){\n\t\t\t\t\tif(this.topRow){\n\t\t\t\t\t\tthis.topRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"top\", data);\n\t\t\t\t\tthis.topRow = row;\n\t\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\n\t\t\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.botInitialized){\n\t\t\t\t\tif(this.botRow){\n\t\t\t\t\t\tthis.botRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"bottom\", data);\n\t\t\t\t\tthis.botRow = row;\n\t\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\n\t\t\t\t\tthis.botElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t\t\t\n\t\t\t\t//set resizable handles\n\t\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcRowGroup(row){\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n\t}\n\t\n\trecalcAll(){\n\t\tif(this.topCalcs.length || this.botCalcs.length){\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\n\t\t\t\t\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\n\t\t\t\t\n\t\t\t\tgroups.forEach((group) => {\n\t\t\t\t\tthis.recalcGroup(group);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcGroup(group){\n\t\tvar data, rowData;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(group){\n\t\t\t\tif(group.calcs){\n\t\t\t\t\tif(group.calcs.bottom){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(group.calcs.top){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"top\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//generate top stats row\n\tgenerateTopRow(rows){\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\n\t}\n\t//generate bottom stats row\n\tgenerateBottomRow(rows){\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n\t}\n\t\n\trowsToData(rows){\n\t\tvar data = [];\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tdata.push(row.getData());\n\t\t\t\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\t\tdata = data.concat(children);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//generate stats row\n\tgenerateRow(pos, data){\n\t\tvar rowData = this.generateRowData(pos, data),\n\t\trow;\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.disable();\n\t\t}\n\t\t\n\t\trow = new Row(rowData, this, \"calc\");\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.enable();\n\t\t}\n\t\t\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\t\t\n\t\trow.component = false;\n\t\t\n\t\trow.getComponent = () => {\n\t\t\tif(!row.component){\n\t\t\t\trow.component = new CalcComponent(row);\n\t\t\t}\n\t\t\t\n\t\t\treturn row.component;\n\t\t};\n\t\t\n\t\trow.generateCells = () => {\n\t\t\t\n\t\t\tvar cells = [];\n\t\t\t\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\t\n\t\t\t\t//set field name of mock column\n\t\t\t\tthis.genColumn.setField(column.getField());\n\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\n\t\t\t\t\n\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\t\tparams:{}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//ensure css class definition is replicated to calculation cell\n\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\n\t\t\t\t\n\t\t\t\t//generate cell and assign to correct column\n\t\t\t\tvar cell = new Cell(this.genColumn, row);\n\t\t\t\tcell.getElement();\n\t\t\t\tcell.column = column;\n\t\t\t\tcell.setWidth();\n\t\t\t\t\n\t\t\t\tcolumn.cells.push(cell);\n\t\t\t\tcells.push(cell);\n\t\t\t\t\n\t\t\t\tif(!column.visible){\n\t\t\t\t\tcell.hide();\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\trow.cells = cells;\n\t\t};\n\t\t\n\t\treturn row;\n\t}\n\t\n\t//generate stats row\n\tgenerateRowData(pos, data){\n\t\tvar rowData = {},\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t\tparams, paramKey;\n\t\t\n\t\tcalcs.forEach(function(column){\n\t\t\tvar values = [];\n\t\t\t\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\n\t\t\t\tdata.forEach(function(item){\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tparamKey = type + \"Params\";\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\t\t\t\t\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowData;\n\t}\n\t\n\thasTopCalcs(){\n\t\treturn\t!!(this.topCalcs.length);\n\t}\n\t\n\thasBottomCalcs(){\n\t\treturn\t!!(this.botCalcs.length);\n\t}\n\t\n\t//handle table redraw\n\tredraw(){\n\t\tif(this.topRow){\n\t\t\tthis.topRow.normalizeHeight(true);\n\t\t}\n\t\tif(this.botRow){\n\t\t\tthis.botRow.normalizeHeight(true);\n\t\t}\n\t}\n\t\n\t//return the calculated\n\tgetResults(){\n\t\tvar results = {},\n\t\tgroups;\n\t\t\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\t\t\t\n\t\t\tgroups.forEach((group) => {\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\n\t\t\t});\n\t\t}else{\n\t\t\tresults = {\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\n\t\t\t};\n\t\t}\n\t\t\n\t\treturn results;\n\t}\n\t\n\t//get results from a group\n\tgetGroupResults(group){\n\t\tvar groupObj = group._getSelf(),\n\t\tsubGroups = group.getSubGroups(),\n\t\tsubGroupResults = {},\n\t\tresults = {};\n\t\t\n\t\tsubGroups.forEach((subgroup) => {\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\n\t\t});\n\t\t\n\t\tresults = {\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\t\tgroups: subGroupResults,\n\t\t};\n\t\t\n\t\treturn results;\n\t}\n\t\n\tadjustForScrollbar(width){\n\t\tif(this.botRow){\n\t\t\tif(this.table.rtl){\n\t\t\t\tthis.botElement.style.paddingLeft = width + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.botElement.style.paddingRight = width + \"px\";\n\t\t\t}\n\t\t}\n\t}\n}\n\nColumnCalcs.moduleName = \"columnCalcs\";\n\n//load defaults\nColumnCalcs.calculations = defaultCalculations;\n\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\n\nimport Row from '../../core/row/Row.js';\n\nimport RowComponent from '../../core/row/RowComponent.js';\n\nclass DataTree extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.indent = 10;\n\t\tthis.field = \"\";\n\t\tthis.collapseEl = null;\n\t\tthis.expandEl = null;\n\t\tthis.branchEl = null;\n\t\tthis.elementField = false;\n\n\t\tthis.startOpen = function(){};\n\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//selecting a parent row selects its children\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.dataTree){\n\t\t\tvar dummyEl = null,\n\t\t\toptions = this.table.options;\n\n\t\t\tthis.field = options.dataTreeChildField;\n\t\t\tthis.indent = options.dataTreeChildIndent;\n\n\t\t\tif(this.options(\"movableRows\")){\n\t\t\t\tconsole.warn(\"The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeBranchElement){\n\n\t\t\t\tif(options.dataTreeBranchElement === true){\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t\t\t}else{\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch-empty\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeCollapseElement){\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.collapseEl.tabIndex = 0;\n\t\t\t\tthis.collapseEl.innerHTML = \"
    \";\n\t\t\t}\n\n\t\t\tif(options.dataTreeExpandElement){\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.expandEl.tabIndex = 0;\n\t\t\t\tthis.expandEl.innerHTML = \"
    \";\n\t\t\t}\n\n\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.bind(this));\n\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\n\t\t}\n\t}\n\n\ttableRedrawing(force){\n\t\tvar rows;\n\n\t\tif(force){\n\t\t\trows = this.table.rowManager.getRows();\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.reinitializeRowChildren(row);\n\t\t\t});\n\t\t}\n\t}\n\n\tinitializeElementField(){\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\n\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\t}\n\t\n\tgetRowChildren(row){\n\t\treturn this.getTreeChildren(row, true);\n\t}\n\n\tcolumnMoving(){\n\t\tvar rows = [];\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\trowDataChanged(row, visible, updatedData){\n\t\tif(this.redrawNeeded(updatedData)){\n\t\t\tthis.initializeRow(row);\n\n\t\t\tif(visible){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tcellValueChanged(cell){\n\t\tvar field = cell.column.getField();\n\n\t\tif(field === this.elementField){\n\t\t\tthis.layoutRow(cell.row);\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar childArray = row.getData()[this.field];\n\t\tvar isArray = Array.isArray(childArray);\n\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t\t}\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t\t}\n\n\t\trow.modules.dataTree = {\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\t\tchildren:children,\n\t\t};\n\t}\n\n\treinitializeRowChildren(row){\n\t\tvar children = this.getTreeChildren(row, false, true);\n\n\t\tchildren.forEach(function(child){\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n\n\tlayoutRow(row){\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t\tel = cell.getElement(),\n\t\tconfig = row.modules.dataTree;\n\n\t\tif(config.branchEl){\n\t\t\tif(config.branchEl.parentNode){\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t\t}\n\t\t\tconfig.branchEl = false;\n\t\t}\n\n\t\tif(config.controlEl){\n\t\t\tif(config.controlEl.parentNode){\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t\t}\n\t\t\tconfig.controlEl = false;\n\t\t}\n\n\t\tthis.generateControlElement(row, el);\n\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\t\tif(config.index){\n\t\t\tif(this.branchEl){\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateControlElement(row, el){\n\t\tvar config = row.modules.dataTree,\n\t\toldControl = config.controlEl;\n\n\t\tel = el || row.getCells()[0].getElement();\n\n\t\tif(config.children !== false){\n\n\t\t\tif(config.open){\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.collapseRow(row);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.expandRow(row);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif(oldControl && oldControl.parentNode === el){\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\n\t\t\t}else{\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetRows(rows){\n\t\tvar output = [];\n\n\t\trows.forEach((row, i) => {\n\t\t\tvar config, children;\n\n\t\t\toutput.push(row);\n\n\t\t\tif(row instanceof Row){\n\n\t\t\t\trow.create();\n\n\t\t\t\tconfig = row.modules.dataTree;\n\n\t\t\t\tif(!config.index && config.children !== false){\n\t\t\t\t\tchildren = this.getChildren(row);\n\n\t\t\t\t\tchildren.forEach((child) => {\n\t\t\t\t\t\tchild.create();\n\t\t\t\t\t\toutput.push(child);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tgetChildren(row, allChildren){\n\t\tvar config = row.modules.dataTree,\n\t\tchildren = [],\n\t\toutput = [];\n\n\t\tif(config.children !== false && (config.open || allChildren)){\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\n\t\t\t\tthis.table.modules.sort.sort(children);\n\t\t\t}\n\n\t\t\tchildren.forEach((child) => {\n\t\t\t\toutput.push(child);\n\n\t\t\t\tvar subChildren = this.getChildren(child);\n\n\t\t\t\tsubChildren.forEach((sub) => {\n\t\t\t\t\toutput.push(sub);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgenerateChildren(row){\n\t\tvar children = [];\n\n\t\tvar childArray = row.getData()[this.field];\n\n\t\tif(!Array.isArray(childArray)){\n\t\t\tchildArray = [childArray];\n\t\t}\n\n\t\tchildArray.forEach((childData) => {\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\n\n\t\t\tchildRow.create();\n\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\t\tchildRow.modules.dataTree.parent = row;\n\n\t\t\tif(childRow.modules.dataTree.children){\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t\t}\n\t\t\tchildren.push(childRow);\n\t\t});\n\n\t\treturn children;\n\t}\n\n\texpandRow(row, silent){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = true;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\tcollapseRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = false;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\ttoggleRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tif(config.open){\n\t\t\t\tthis.collapseRow(row);\n\t\t\t}else{\n\t\t\t\tthis.expandRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowExpanded(row){\n\t\treturn row.modules.dataTree.open;\n\t}\n\n\tgetTreeParent(row){\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n\t}\n\n\tgetTreeParentRoot(row){\n\t\treturn row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\n\t}\n\n\tgetFilteredTreeChildren(row){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [], children;\n\n\t\tif(config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tchildren.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(childRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\trowDelete(row){\n\t\tvar parent = row.modules.dataTree.parent,\n\t\tchildIndex;\n\n\t\tif(parent){\n\t\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t\t}\n\n\t\t\tif(!parent.data[this.field].length){\n\t\t\t\tdelete parent.data[this.field];\n\t\t\t}\n\n\t\t\tthis.initializeRow(parent);\n\t\t\tthis.layoutRow(parent);\n\t\t}\n\n\t\tthis.refreshData(true);\n\t}\n\n\taddTreeChildRow(row, data, top, index){\n\t\tvar childIndex = false;\n\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif(!Array.isArray(row.data[this.field])){\n\t\t\trow.data[this.field] = [];\n\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\n\t\t\t}\n\t\t}\n\n\t\tif(childIndex === false){\n\t\t\tif(top){\n\t\t\t\trow.data[this.field].unshift(data);\n\t\t\t}else{\n\t\t\t\trow.data[this.field].push(data);\n\t\t\t}\n\t\t}\n\n\t\tthis.initializeRow(row);\n\t\tthis.layoutRow(row);\n\n\t\tthis.refreshData(true);\n\t}\n\n\tfindChildIndex(subject, parent){\n\t\tvar match = false;\n\n\t\tif(typeof subject == \"object\"){\n\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\tmatch = subject.data;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\tmatch = subject._getSelf().data;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\tif(parent.modules.dataTree){\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t\t});\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tmatch = match.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else if(subject === null){\n\t\t\t\tmatch = false;\n\t\t\t}\n\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\tmatch = false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tmatch = parent.data[this.field].find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t}\n\n\t\tif(match){\n\n\t\t\tif(Array.isArray(parent.data[this.field])){\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t\t}\n\n\t\t\tif(match == -1){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\t\treturn match;\n\t}\n\n\tgetTreeChildren(row, component, recurse){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [];\n\n\t\tif(config && config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tconfig.children.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\t\tif(recurse){\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetChildField(){\n\t\treturn this.field;\n\t}\n\n\tredrawNeeded(data){\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n\t}\n}\n\nDataTree.moduleName = \"dataTree\";\n\nexport default DataTree;","export default function(list, options = {}, setFileContents){\n\tvar delimiter = options.delimiter ? options.delimiter : \",\",\n\tfileContents = [],\n\theaders = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = [];\n\n\t\tswitch(row.type){\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"header\":\n\t\t\t\trow.columns.forEach((col, i) => {\n\t\t\t\t\tif(col && col.depth === 1){\n\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\n\t\t\t\t\tif(col){\n\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(headers.length){\n\t\tfileContents.unshift(headers.join(delimiter));\n\t}\n\n\tfileContents = fileContents.join(\"\\n\");\n\n\tif(options.bom){\n\t\tfileContents = \"\\ufeff\" + fileContents;\n\t}\n\n\tsetFileContents(fileContents, \"text/csv\");\n}\n","export default function(list, options, setFileContents){\n\tvar fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = {};\n\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif(col){\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\tsetFileContents(fileContents, \"application/json\");\n}","export default function(list, options = {}, setFileContents){\n\tvar header = [],\n\tbody = [],\n\tautoTableParams = {},\n\trowGroupStyles = options.rowGroupStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 12,\n\t\tcellPadding: 6,\n\t\tfillColor: 220,\n\t},\n\trowCalcStyles = options.rowCalcStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 10,\n\t\tcellPadding: 4,\n\t\tfillColor: 232,\n\t},\n\tjsPDFParams = options.jsPDF || {},\n\ttitle = options.title ? options.title : \"\";\n\n\tif(!jsPDFParams.orientation){\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t}\n\n\tif(!jsPDFParams.unit){\n\t\tjsPDFParams.unit = \"pt\";\n\t}\n\n\t//parse row list\n\tlist.forEach((row) => {\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\theader.push(parseRow(row));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tbody.push(parseRow(row));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfunction parseRow(row, styles){\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach((col) =>{\n\t\t\tvar cell;\n\n\t\t\tif(col){\n\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcell = {\n\t\t\t\t\tcontent:col.value,\n\t\t\t\t\tcolSpan:col.width,\n\t\t\t\t\trowSpan:col.height,\n\t\t\t\t};\n\n\t\t\t\tif(styles){\n\t\t\t\t\tcell.styles = styles;\n\t\t\t\t}\n\n\t\t\t\trowData.push(cell);\n\t\t\t}\n\t\t});\n\n\t\treturn rowData;\n\t}\n\n\n\t//configure PDF\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\tif(options.autoTable){\n\t\tif(typeof options.autoTable === \"function\"){\n\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t}else{\n\t\t\tautoTableParams = options.autoTable;\n\t\t}\n\t}\n\n\tif(title){\n\t\tautoTableParams.didDrawPage = function(data) {\n\t\t\tdoc.text(title, 40, 30);\n\t\t};\n\t}\n\n\tautoTableParams.head = header;\n\tautoTableParams.body = body;\n\n\tdoc.autoTable(autoTableParams);\n\n\tif(options.documentProcessing){\n\t\toptions.documentProcessing(doc);\n\t}\n\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n}\n","import CoreFeature from '../../../../core/CoreFeature.js';\n\nexport default function(list, options, setFileContents){\n\tvar self = this,\n\tsheetName = options.sheetName || \"Sheet1\",\n\tworkbook = XLSX.utils.book_new(),\n\ttableFeatures = new CoreFeature(this),\n\tcompression = 'compress' in options ? options.compress : true,\n\twriteOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression},\n\toutput;\n\n\twriteOptions.type = 'binary';\n\n\tworkbook.SheetNames = [];\n\tworkbook.Sheets = {};\n\n\tfunction generateSheet(){\n\t\tvar rows = [],\n\t\tmerges = [],\n\t\tworksheet = {},\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\n\n\t\t//parse row list\n\t\tlist.forEach((row, i) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function(col, j){\n\n\t\t\t\tif(col){\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\n\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\n\t\t\t\t\t\tif(col.height > 1 || col.width > 1){\n\t\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\trowData.push(\"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trows.push(rowData);\n\t\t});\n\n\t\t//convert rows to worksheet\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\tif(merges.length){\n\t\t\tworksheet[\"!merges\"] = merges;\n\t\t}\n\n\t\treturn worksheet;\n\t}\n\n\tif(options.sheetOnly){\n\t\tsetFileContents(generateSheet());\n\t\treturn;\n\t}\n\n\tif(options.sheets){\n\t\tfor(var sheet in options.sheets){\n\n\t\t\tif(options.sheets[sheet] === true){\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t}else{\n\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\n\t\t\t\t\ttype:\"xlsx\",\n\t\t\t\t\toptions:{sheetOnly:true},\n\t\t\t\t\tactive:self.active,\n\t\t\t\t\tintercept:function(data){\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}else{\n\t\tworkbook.SheetNames.push(sheetName);\n\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t}\n\n\tif(options.documentProcessing){\n\t\tworkbook = options.documentProcessing(workbook);\n\t}\n\n\t//convert workbook to binary array\n\tfunction s2ab(s) {\n\t\tvar buf = new ArrayBuffer(s.length);\n\t\tvar view = new Uint8Array(buf);\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\t\treturn buf;\n\t}\n\n\toutput = XLSX.write(workbook, writeOptions);\n\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\n}\n","export default function(list, options, setFileContents){\n\tif(this.modExists(\"export\", true)){\n\t\tsetFileContents(this.modules.export.generateHTMLTable(list), \"text/html\");\n\t}\n}","export default function (list, options, setFileContents) {\n\tconst fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tconst item = {};\n\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(JSON.stringify(item));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\n}","import csv from './downloaders/csv.js';\nimport json from './downloaders/json.js';\nimport pdf from './downloaders/pdf.js';\nimport xlsx from './downloaders/xlsx.js';\nimport html from './downloaders/html.js';\nimport jsonLines from './downloaders/jsonLines.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tjsonLines:jsonLines,\n\tpdf:pdf,\n\txlsx:xlsx,\n\thtml:html,\n};","import Module from '../../core/Module.js';\n\nimport defaultDownloaders from './defaults/downloaders.js';\n\nclass Download extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.registerTableOption(\"downloadEncoder\", function(data, mimeType){\n\t\t\treturn new Blob([data],{type:mimeType});\n\t\t}); //function to manipulate download data\n\t\tthis.registerTableOption(\"downloadReady\", undefined); //warn of function deprecation\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\n\n\t\tthis.registerColumnOption(\"download\");\n\t\tthis.registerColumnOption(\"titleDownload\");\n\t}\n\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"downloadReady\", \"downloadEncoder\");\n\t}\t\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tdownloadToTab(type, filename, options, active){\n\t\tthis.download(type, filename, options, active, true);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\t//trigger file download\n\tdownload(type, filename, options, range, interceptCallback){\n\t\tvar downloadFunc = false;\n\n\t\tfunction buildLink(data, mime){\n\t\t\tif(interceptCallback){\n\t\t\t\tif(interceptCallback === true){\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\n\t\t\t\t}else{\n\t\t\t\t\tinterceptCallback(data);\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\n\t\t\t}\n\t\t}\n\n\t\tif(typeof type == \"function\"){\n\t\t\tdownloadFunc = type;\n\t\t}else{\n\t\t\tif(Download.downloaders[type]){\n\t\t\t\tdownloadFunc = Download.downloaders[type];\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t\t}\n\t\t}\n\n\t\tif(downloadFunc){\n\t\t\tvar list = this.generateExportList(range);\n\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\n\t\t}\n\t}\n\n\tgenerateExportList(range){\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t\t//assign group header formatter\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\n\t\t\tgroupHeader = [groupHeader];\n\t\t}\n\n\t\tlist.forEach((row) => {\n\t\t\tvar group;\n\n\t\t\tif(row.type === \"group\"){\n\t\t\t\tgroup = row.columns[0];\n\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn list;\n\t}\n\n\ttriggerDownload(data, mime, type, filename, newTab){\n\t\tvar element = document.createElement('a'),\n\t\tblob = this.table.options.downloadEncoder(data, mime);\n\n\t\tif(blob){\n\t\t\tif(newTab){\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t\t}else{\n\t\t\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\t\t\t\t\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t\t}else{\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t\t//set file title\n\t\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t\t//trigger download\n\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\telement.click();\n\n\t\t\t\t\t//remove temporary link element\n\t\t\t\t\tdocument.body.removeChild(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\n\t\t}\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"intercept\":\n\t\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDownload.moduleName = \"download\";\n\n//load defaults\nDownload.downloaders = defaultDownloaders;\n\nexport default Download;","export default function maskInput(el, options){\n\tvar mask = options.mask,\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\";\n\n\tfunction fillSymbols(index){\n\t\tvar symbol = mask[index];\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\n\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\tfillSymbols(index+1);\n\t\t}\n\t}\n\n\tel.addEventListener(\"keydown\", (e) => {\n\t\tvar index = el.value.length,\n\t\tchar = e.key;\n\n\t\tif(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){\n\t\t\tif(index >= mask.length){\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\tswitch(mask[index]){\n\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\tif(isNaN(char)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(char !== mask[index]){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", (e) => {\n\t\tif(e.keyCode > 46){\n\t\t\tif(options.maskAutoFill){\n\t\t\t\tfillSymbols(el.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tif(!el.placeholder){\n\t\tel.placeholder = mask;\n\t}\n\n\tif(options.maskAutoFill){\n\t\tfillSymbols(el.value.length);\n\t}\n}","import maskInput from '../../inputMask.js';\n\n//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange(e);\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//resizable text area element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"hybrid\",\n\tvalue = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\tinput = document.createElement(\"textarea\"),\n\tscrollHeight = 0;\n\n\t//create and style input\n\tinput.style.display = \"block\";\n\tinput.style.padding = \"2px\";\n\tinput.style.height = \"100%\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\tinput.style.whiteSpace = \"pre-wrap\";\n\tinput.style.resize = \"none\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = value;\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tinput.scrollHeight;\n\t\t\tinput.style.height = input.scrollHeight + \"px\";\n\t\t\tcell.getRow().normalizeHeight();\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\n\t\t\tsetTimeout(function(){\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t},300);\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\tinput.addEventListener(\"keyup\", function(){\n\n\t\tinput.style.height = \"\";\n\n\t\tvar heightNow = input.scrollHeight;\n\n\t\tinput.style.height = heightNow + \"px\";\n\n\t\tif(heightNow != scrollHeight){\n\t\t\tscrollHeight = heightNow;\n\t\t\tcell.getRow().normalizeHeight();\n\t\t}\n\t});\n\n\tinput.addEventListener(\"keydown\", function(e){\n\n\t\tswitch(e.keyCode){\n\n\t\t\tcase 13:\n\t\t\t\tif(e.shiftKey && editorParams.shiftEnterSubmit){\n\t\t\t\t\tonChange(e);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", \"number\");\n\n\tif(typeof editorParams.max != \"undefined\"){\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\n\tif(typeof editorParams.min != \"undefined\"){\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\n\tif(typeof editorParams.step != \"undefined\"){\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = cellValue;\n\n\tvar blurFunc = function(e){\n\t\tonChange();\n\t};\n\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\t//submit new value on blur\n\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(){\n\t\tvar value = input.value;\n\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\n\t\tif(value !== cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.setAttribute(\"type\", \"range\");\n\t\n\tif (typeof editorParams.max != \"undefined\") {\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\t\n\tif (typeof editorParams.min != \"undefined\") {\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\t\n\tif (typeof editorParams.step != \"undefined\") {\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\t\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value;\n\t\t\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\t\t\n\t\tif(value != cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e){\n\t\tonChange();\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tfunction convertDate(value){\n\t\tvar newDatetime;\n\t\t\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\t\t\n\t\treturn newDatetime.toFormat(\"yyyy-MM-dd\");\n\t}\n\t\n\tinput.type = \"date\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.max){\n\t\tinput.setAttribute(\"max\", inputFormat ? convertDate(editorParams.max) : editorParams.max);\n\t}\n\n\tif(editorParams.min){\n\t\tinput.setAttribute(\"min\", inputFormat ? convertDate(editorParams.min) : editorParams.min);\n\t}\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\t\t\n\t\t\tcellValue = convertDate(cellValue);\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDate;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDate = DT.fromFormat(String(value), \"yyyy-MM-dd\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDate;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDate.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDate.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"time\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"HH:mm\");\n\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\n\tconsole.log(\"val\", cellValue);\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() == \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxTime = DT.fromFormat(String(value), \"hh:mm\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"datetime-local\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"yyyy-MM-dd\") + \"T\" + newDatetime.toFormat(\"HH:mm\");\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDateTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDateTime = DT.fromISO(String(value));\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDateTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDateTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDateTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","import maskInput from './inputMask.js';\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\n\nexport default class Edit{\n\tconstructor(editor, cell, onRendered, success, cancel, editorParams){\n\t\tthis.edit = editor;\n\t\tthis.table = editor.table;\n\t\tthis.cell = cell;\n\t\tthis.params = this._initializeParams(editorParams);\n\t\t\n\t\tthis.data = [];\n\t\tthis.displayItems = [];\n\t\tthis.currentItems = [];\n\t\tthis.focusedItem = null;\n\t\t\n\t\tthis.input = this._createInputElement();\n\t\tthis.listEl = this._createListElement();\n\t\t\n\t\tthis.initialValues = null; \n\t\t\n\t\tthis.isFilter = cell.getType() === \"header\";\n\t\t\n\t\tthis.filterTimeout = null;\n\t\tthis.filtered = false;\n\t\tthis.typing = false;\n\t\t\n\t\tthis.values = []; \n\t\tthis.popup = null; \n\t\t\n\t\tthis.listIteration = 0;\n\t\t\n\t\tthis.lastAction=\"\";\n\t\tthis.filterTerm=\"\";\n\t\t\n\t\tthis.blurable = true;\n\t\t\n\t\tthis.actions = {\n\t\t\tsuccess:success,\n\t\t\tcancel:cancel\n\t\t};\n\t\t\n\t\tthis._deprecatedOptionsCheck();\n\t\tthis._initializeValue();\n\t\t\n\t\tonRendered(this._onRendered.bind(this));\n\t}\n\t\n\t_deprecatedOptionsCheck(){\n\t\tif(this.params.listItemFormatter){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.sortValuesList){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchFunc){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchingPlaceholder){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t}\n\t\n\t_initializeValue(){\n\t\tvar initialValue = this.cell.getValue();\n\t\t\n\t\tif(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\n\t\t\tinitialValue = this.params.defaultValue;\n\t\t}\n\t\t\n\t\tthis.initialValues = this.params.multiselect ? initialValue : [initialValue];\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.input.value = this.initialValues ? this.initialValues.join(\",\") : \"\";\n\t\t\tthis.headerFilterInitialListGen(); \n\t\t}\n\t}\n\t\n\t_onRendered(){\n\t\tvar cellEl = this.cell.getElement();\n\t\t\n\t\tfunction clickStop(e){\n\t\t\te.stopPropagation();\n\t\t}\t\n\t\t\n\t\tif(!this.isFilter){\n\t\t\tthis.input.style.height = \"100%\";\n\t\t\tthis.input.focus({preventScroll: true});\n\t\t}\n\t\t\n\t\t\n\t\tcellEl.addEventListener(\"click\", clickStop);\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tcellEl.removeEventListener(\"click\", clickStop);\n\t\t}, 1000);\n\t\t\n\t\tthis.input.addEventListener(\"mousedown\", this._preventPopupBlur.bind(this));\n\t}\n\t\n\t_createListElement(){\n\t\tvar listEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-list\");\n\t\t\n\t\tlistEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\tlistEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\t\n\t\treturn listEl;\n\t}\n\t\n\t_setListWidth(){\n\t\tvar element = this.isFilter ? this.input : this.cell.getElement();\n\t\t\n\t\tthis.listEl.style.minWidth = element.offsetWidth + \"px\";\n\t\t\n\t\tif(this.params.maxWidth){\n\t\t\tif(this.params.maxWidth === true){\n\t\t\t\tthis.listEl.style.maxWidth = element.offsetWidth + \"px\";\n\t\t\t}else if(typeof this.params.maxWidth === \"number\"){\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t_createInputElement(){\n\t\tvar attribs = this.params.elementAttributes;\n\t\tvar input = document.createElement(\"input\");\n\t\t\n\t\tinput.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\n\t\t\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\t\n\t\tif(!this.params.autocomplete){\n\t\t\tinput.style.cursor = \"default\";\n\t\t\tinput.style.caretColor = \"transparent\";\n\t\t\t// input.readOnly = (this.edit.currentCell != false);\n\t\t}\n\t\t\n\t\tif(attribs && typeof attribs == \"object\"){\n\t\t\tfor (let key in attribs){\n\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + attribs[\"+\" + key]);\n\t\t\t\t}else{\n\t\t\t\t\tinput.setAttribute(key, attribs[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(this.params.mask){\n\t\t\tmaskInput(input, this.params);\n\t\t}\n\t\t\n\t\tthis._bindInputEvents(input);\n\t\t\n\t\treturn input;\n\t}\n\t\n\t_initializeParams(params){\n\t\tvar valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\n\t\tvalueCheck;\n\t\t\n\t\tparams = Object.assign({}, params);\n\t\t\n\t\tparams.verticalNavigation = params.verticalNavigation || \"editor\";\n\t\tparams.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\n\t\tparams.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\n\t\tparams.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\n\t\t\n\t\tparams.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\n\t\t\n\t\tvalueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\n\t\t\n\t\tif(!valueCheck){\n\t\t\tconsole.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\");\n\t\t}else if(valueCheck > 1){\n\t\t\tconsole.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\");\n\t\t}\n\t\t\n\t\tif(params.autocomplete){\n\t\t\tif(params.multiselect){\n\t\t\t\tparams.multiselect = false;\n\t\t\t\tconsole.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\");\n\t\t\t}\n\t\t}else{\n\t\t\tif(params.freetext){\n\t\t\t\tparams.freetext = false;\n\t\t\t\tconsole.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterFunc){\n\t\t\t\tparams.filterFunc = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterRemote){\n\t\t\t\tparams.filterRemote = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.mask){\n\t\t\t\tparams.mask = false;\n\t\t\t\tconsole.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.allowEmpty){\n\t\t\t\tparams.allowEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.listOnEmpty){\n\t\t\t\tparams.listOnEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(params.filterRemote && !(typeof params.valuesLookup === \"function\" || params.valuesURL)){\n\t\t\tparams.filterRemote = false;\n\t\t\tconsole.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\n\t\t}\n\t\treturn params;\n\t}\n\t//////////////////////////////////////\n\t////////// Event Handling ////////////\n\t//////////////////////////////////////\n\t\n\t_bindInputEvents(input){\n\t\tinput.addEventListener(\"focus\", this._inputFocus.bind(this));\n\t\tinput.addEventListener(\"click\", this._inputClick.bind(this));\n\t\tinput.addEventListener(\"blur\", this._inputBlur.bind(this));\n\t\tinput.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\tinput.addEventListener(\"search\", this._inputSearch.bind(this));\n\t\t\n\t\tif(this.params.autocomplete){\n\t\t\tinput.addEventListener(\"keyup\", this._inputKeyUp.bind(this));\n\t\t}\n\t}\n\t\n\t\n\t_inputFocus(e){\n\t\tthis.rebuildOptionsList();\n\t}\n\t\n\t_filter(){\n\t\tif(this.params.filterRemote){\n\t\t\tclearTimeout(this.filterTimeout);\n\t\t\t\n\t\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\t\tthis.rebuildOptionsList();\n\t\t\t}, this.params.filterDelay);\n\t\t}else{\n\t\t\tthis._filterList();\n\t\t}\n\t}\n\t\n\t_inputClick(e){\n\t\te.stopPropagation();\n\t}\n\t\n\t_inputBlur(e){\n\t\tif(this.blurable){\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.hide();\n\t\t\t}else{\n\t\t\t\tthis._resolveValue(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_inputSearch(){\n\t\tthis._clearChoices();\n\t}\n\t\n\t_inputKeyDown(e){\n\t\tswitch(e.keyCode){\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\t\tthis._keyUp(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 40: //down arrow\n\t\t\t\tthis._keyDown(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //right arrow\n\t\t\t\tthis._keySide(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 13: //enter\n\t\t\t\tthis._keyEnter();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27: //escape\n\t\t\t\tthis._keyEsc();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 36: //home\n\t\t\tcase 35: //end\n\t\t\t\tthis._keyHomeEnd(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 9: //tab\n\t\t\t\tthis._keyTab(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keySelectLetter(e);\n\t\t}\n\t}\n\t\n\t_inputKeyUp(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 38: //up arrow\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //up arrow\n\t\t\tcase 40: //right arrow\n\t\t\tcase 13: //enter\n\t\t\tcase 27: //escape\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keyAutoCompLetter(e);\n\t\t}\n\t}\n\t\n\t_preventPopupBlur(){\n\t\tif(this.popup){\n\t\t\tthis.popup.blockHide();\n\t\t}\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.restoreHide();\n\t\t\t}\n\t\t}, 10);\n\t}\n\t\n\t_preventBlur(){\n\t\tthis.blurable = false;\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tthis.blurable = true;\n\t\t}, 10);\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Keyboard Navigation /////////\n\t//////////////////////////////////////\n\t\n\t_keyTab(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyUp(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index > 0){\n\t\t\t\tthis._focusItem(this.displayItems[index - 1]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyDown(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index < this.displayItems.length - 1){\n\t\t\t\tif(index == -1){\n\t\t\t\t\tthis._focusItem(this.displayItems[0]);\n\t\t\t\t}else{\n\t\t\t\t\tthis._focusItem(this.displayItems[index + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keySide(e){\n\t\tif(!this.params.autocomplete){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\t_keyEnter(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyEsc(e){\n\t\tthis._cancel();\n\t}\n\t\n\t_keyHomeEnd(e){\n\t\tif(this.params.autocomplete){\n\t\t\t//prevent table navigation while using input element\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t}\n\t\n\t_keySelectLetter(e){\n\t\tif(!this.params.autocomplete){\n\t\t\t// if(this.edit.currentCell === false){\n\t\t\te.preventDefault();\n\t\t\t// }\n\t\t\t\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\n\t\t\t\tthis._scrollToValue(e.keyCode);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyAutoCompLetter(e){\n\t\tthis._filter();\n\t\tthis.lastAction = \"typing\";\n\t\tthis.typing = true;\n\t}\n\t\n\t\n\t_scrollToValue(char){\n\t\tclearTimeout(this.filterTimeout);\n\t\t\n\t\tvar character = String.fromCharCode(char).toLowerCase();\n\t\tthis.filterTerm += character.toLowerCase();\n\t\t\n\t\tvar match = this.displayItems.find((item) => {\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\n\t\t});\n\t\t\n\t\tif(match){\n\t\t\tthis._focusItem(match);\n\t\t}\n\t\t\n\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\tthis.filterTerm = \"\";\n\t\t}, 800);\n\t}\n\t\n\t_focusItem(item){\n\t\tthis.lastAction = \"focus\";\n\t\t\n\t\tif(this.focusedItem && this.focusedItem.element){\n\t\t\tthis.focusedItem.element.classList.remove(\"focused\");\n\t\t}\n\t\t\n\t\tthis.focusedItem = item;\n\t\t\n\t\tif(item && item.element){\n\t\t\titem.element.classList.add(\"focused\");\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\n\t\t}\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t/////// Data List Generation /////////\n\t//////////////////////////////////////\n\theaderFilterInitialListGen(){\n\t\tthis._generateOptions(true);\n\t}\n\t\n\trebuildOptionsList(){\n\t\tthis._generateOptions()\n\t\t\t.then(this._sortOptions.bind(this))\n\t\t\t.then(this._buildList.bind(this))\n\t\t\t.then(this._showList.bind(this))\n\t\t\t.catch((e) => {\n\t\t\t\tif(!Number.isInteger(e)){\n\t\t\t\t\tconsole.error(\"List generation error\", e);\n\t\t\t\t}\n\t\t\t});\n\t}\n\t\n\t_filterList(){\n\t\tthis._buildList(this._filterOptions());\n\t\tthis._showList();\n\t}\n\t\n\t_generateOptions(silent){\n\t\tvar values = [];\n\t\tvar iteration = ++ this.listIteration;\n\t\t\n\t\tthis.filtered = false;\n\t\t\n\t\tif(this.params.values){\n\t\t\tvalues = this.params.values;\n\t\t}else if (this.params.valuesURL){\n\t\t\tvalues = this._ajaxRequest(this.params.valuesURL, this.input.value);\n\t\t}else{\n\t\t\tif(typeof this.params.valuesLookup === \"function\"){\n\t\t\t\tvalues = this.params.valuesLookup(this.cell, this.input.value);\n\t\t\t}else if(this.params.valuesLookup){\n\t\t\t\tvalues = this._uniqueColumnValues(this.params.valuesLookupField);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(values instanceof Promise){\n\t\t\tif(!silent){\n\t\t\t\tthis._addPlaceholder(this.params.placeholderLoading);\n\t\t\t}\n\t\t\t\n\t\t\treturn values.then()\n\t\t\t\t.then((responseValues) => {\n\t\t\t\t\tif(this.listIteration === iteration){\n\t\t\t\t\t\treturn this._parseList(responseValues);\n\t\t\t\t\t}else{\n\t\t\t\t\t\treturn Promise.reject(iteration);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.resolve(this._parseList(values));\n\t\t}\n\t}\n\t\n\t_addPlaceholder(contents){\n\t\tvar placeholder = document.createElement(\"div\");\n\t\t\n\t\tif(typeof contents === \"function\"){\n\t\t\tcontents = contents(this.cell.getComponent(), this.listEl);\n\t\t}\n\t\t\n\t\tif(contents){\n\t\t\tthis._clearList();\n\t\t\t\n\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\tplaceholder = contents;\n\t\t\t}else{\n\t\t\t\tplaceholder.classList.add(\"tabulator-edit-list-placeholder\");\n\t\t\t\tplaceholder.innerHTML = contents;\n\t\t\t}\n\t\t\t\n\t\t\tthis.listEl.appendChild(placeholder);\n\t\t\t\n\t\t\tthis._showList();\n\t\t}\n\t}\n\t\n\t_ajaxRequest(url, term){\n\t\tvar params = this.params.filterRemote ? {term:term} : {};\n\t\turl = urlBuilder(url, {}, params);\n\t\t\n\t\treturn fetch(url)\n\t\t\t.then((response)=>{\n\t\t\t\tif(response.ok) {\n\t\t\t\t\treturn response.json()\n\t\t\t\t\t\t.catch((error)=>{\n\t\t\t\t\t\t\tconsole.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treturn Promise.reject(response);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error)=>{\n\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \", error);\n\t\t\t\treturn Promise.reject(error);\n\t\t\t});\n\t}\n\t\n\t_uniqueColumnValues(field){\n\t\tvar output = {},\n\t\tdata = this.table.getData(this.params.valuesLookup),\n\t\tcolumn;\n\t\t\n\t\tif(field){\n\t\t\tcolumn = this.table.columnManager.getColumnByField(field);\n\t\t}else{\n\t\t\tcolumn = this.cell.getColumn()._getSelf();\n\t\t}\n\t\t\n\t\tif(column){\n\t\t\tdata.forEach((row) => {\n\t\t\t\tvar val = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\n\t\t\t\t\toutput[val] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\toutput = [];\n\t\t}\n\t\t\n\t\treturn Object.keys(output);\n\t}\n\t\n\t\n\t_parseList(inputValues){\n\t\tvar data = [];\n\t\t\n\t\tif(!Array.isArray(inputValues)){\n\t\t\tinputValues = Object.entries(inputValues).map(([key, value]) => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:key,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\t\n\t\tinputValues.forEach((value) => {\n\t\t\tif(typeof value !== \"object\"){\n\t\t\t\tvalue = {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:value,\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tthis._parseListItem(value, data, 0);\n\t\t});\n\t\t\n\t\tif(!this.currentItems.length && this.params.freetext){\n\t\t\tthis.input.value = this.initialValues;\n\t\t\tthis.typing = true;\n\t\t\tthis.lastAction = \"typing\";\n\t\t}\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\treturn data; \n\t}\n\t\n\t_parseListItem(option, data, level){\n\t\tvar item = {};\n\t\t\n\t\tif(option.options){\n\t\t\titem = this._parseListGroup(option, level + 1);\n\t\t}else{\n\t\t\titem = {\n\t\t\t\tlabel:option.label,\n\t\t\t\tvalue:option.value,\n\t\t\t\titemParams:option.itemParams,\n\t\t\t\telementAttributes: option.elementAttributes,\n\t\t\t\telement:false,\n\t\t\t\tselected:false,\n\t\t\t\tvisible:true,\n\t\t\t\tlevel:level,\n\t\t\t\toriginal:option,\n\t\t\t};\n\t\t\t\n\t\t\tif(this.initialValues && this.initialValues.indexOf(option.value) > -1){\n\t\t\t\tthis._chooseItem(item, true);\n\t\t\t}\n\t\t}\n\t\t\n\t\tdata.push(item);\n\t}\n\t\n\t_parseListGroup(option, level){\n\t\tvar item = {\n\t\t\tlabel:option.label,\n\t\t\tgroup:true,\n\t\t\titemParams:option.itemParams,\n\t\t\telementAttributes:option.elementAttributes,\n\t\t\telement:false,\n\t\t\tvisible:true,\n\t\t\tlevel:level,\n\t\t\toptions:[],\n\t\t\toriginal:option,\n\t\t};\n\t\t\n\t\toption.options.forEach((child) => {\n\t\t\tthis._parseListItem(child, item.options, level);\n\t\t});\n\t\t\n\t\treturn item;\n\t}\n\t\n\t_sortOptions(options){\n\t\tvar sorter;\n\t\t\n\t\tif(this.params.sort){\n\t\t\tsorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\n\t\t\t\n\t\t\tthis._sortGroup(sorter, options);\n\t\t}\n\t\t\n\t\treturn options;\n\t}\n\t\n\t_sortGroup(sorter, options){\n\t\toptions.sort((a,b) => {\n\t\t\treturn sorter(a.label, b.label, a.value, b.value, a.original, b.original);\n\t\t});\n\t\t\n\t\toptions.forEach((option) => {\n\t\t\tif(option.group){\n\t\t\t\tthis._sortGroup(sorter, option.options);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_defaultSortFunction(as, bs){\n\t\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\t\tvar emptyAlign = 0;\n\t\t\n\t\tif(this.params.sort === \"desc\"){\n\t\t\t[as, bs] = [bs, as];\n\t\t}\n\t\t\n\t\t//handle empty values\n\t\tif(!as && as!== 0){\n\t\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t\t}else if(!bs && bs!== 0){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\ta = String(as).toLowerCase();\n\t\t\tb = String(bs).toLowerCase();\n\t\t\tif(a === b) return 0;\n\t\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\ta = a.match(rx);\n\t\t\tb = b.match(rx);\n\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\twhile(i < L){\n\t\t\t\ta1= a[i];\n\t\t\t\tb1= b[i++];\n\t\t\t\tif(a1 !== b1){\n\t\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t}\n\t\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn a.length > b.length;\n\t\t}\n\t\t\n\t\treturn emptyAlign;\n\t}\n\t\n\t_filterOptions(){\n\t\tvar filterFunc = this.params.filterFunc || this._defaultFilterFunc,\n\t\tterm = this.input.value;\n\t\t\n\t\tif(term){\n\t\t\tthis.filtered = true;\n\t\t\t\n\t\t\tthis.data.forEach((item) => {\n\t\t\t\tthis._filterItem(filterFunc, term, item);\n\t\t\t});\n\t\t}else{\n\t\t\tthis.filtered = false;\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\t_filterItem(func, term, item){\n\t\tvar matches = false;\n\t\t\n\t\tif(!item.group){\n\t\t\titem.visible = func(term, item.label, item.value, item.original);\n\t\t}else{\n\t\t\titem.options.forEach((option) => {\n\t\t\t\tif(this._filterItem(func, term, option)){\n\t\t\t\t\tmatches = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\titem.visible = matches;\n\t\t}\n\t\t\n\t\treturn item.visible;\n\t}\n\t\n\t_defaultFilterFunc(term, label, value, item){\n\t\tterm = String(term).toLowerCase();\n\t\t\n\t\tif(label !== null && typeof label !== \"undefined\"){\n\t\t\tif(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\t//////////////////////////////////////\n\t/////////// Display List /////////////\n\t//////////////////////////////////////\n\t\n\t_clearList(){\n\t\twhile(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\n\t\t\n\t\tthis.displayItems = [];\n\t}\n\t\n\t_buildList(data){\n\t\tthis._clearList();\n\t\t\n\t\tdata.forEach((option) => {\n\t\t\tthis._buildItem(option);\n\t\t});\n\t\t\n\t\tif(!this.displayItems.length){\n\t\t\tthis._addPlaceholder(this.params.placeholderEmpty);\n\t\t} \n\t}\n\t\n\t_buildItem(item){\n\t\tvar el = item.element,\n\t\tcontents;\n\t\t\n\t\tif(!this.filtered || item.visible){\n\t\t\t\n\t\t\tif(!el){\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\n\t\t\t\tcontents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\n\t\t\t\t\n\t\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = contents;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-group\");\n\t\t\t\t}else{\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-item\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\n\t\t\t\t\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\n\t\t\t\t\tfor (let key in item.elementAttributes){\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\tel.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.addEventListener(\"click\", this._groupClick.bind(this, item));\n\t\t\t\t}else{\n\t\t\t\t\tel.addEventListener(\"click\", this._itemClick.bind(this, item));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\t\t\t\n\t\t\t\titem.element = el;\n\t\t\t}\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tthis.listEl.appendChild(el);\n\t\t\t\n\t\t\tif(item.group){\n\t\t\t\titem.options.forEach((option) => {\n\t\t\t\t\tthis._buildItem(option);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.displayItems.push(item);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_showList(){\n\t\tvar startVis = this.popup && this.popup.isVisible();\n\t\t\n\t\tif(this.input.parentNode){\n\t\t\tif(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\n\t\t\t\tif(this.popup){\n\t\t\t\t\tthis.popup.hide(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis._setListWidth();\n\t\t\t\n\t\t\tif(!this.popup){\n\t\t\t\tthis.popup = this.edit.popup(this.listEl);\n\t\t\t}\n\t\t\t\n\t\t\tthis.popup.show(this.cell.getElement(), \"bottom\");\n\t\t\t\n\t\t\tif(!startVis){\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.popup.hideOnBlur(this._resolveValue.bind(this, true));\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_styleItem(item){\n\t\tif(item && item.element){\n\t\t\tif(item.selected){\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}else{\n\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// User Interaction ///////////\n\t//////////////////////////////////////\n\t\n\t_itemClick(item, e){\n\t\te.stopPropagation();\n\t\t\n\t\tthis._chooseItem(item);\n\t}\n\t\n\t_groupClick(item, e){\n\t\te.stopPropagation();\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t////// Current Item Management ///////\n\t//////////////////////////////////////\n\t\n\t_cancel(){\n\t\tthis.popup.hide(true);\n\t\tthis.actions.cancel();\n\t}\n\t\n\t_clearChoices(){\n\t\tthis.typing = true;\n\t\t\n\t\tthis.currentItems.forEach((item) => {\n\t\t\titem.selected = false;\n\t\t\tthis._styleItem(item);\n\t\t});\n\t\t\n\t\tthis.currentItems = [];\n\t\t\n\t\tthis.focusedItem = null;\n\t}\n\t\n\t_chooseItem(item, silent){\n\t\tvar index;\n\t\t\n\t\tthis.typing = false;\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\tindex = this.currentItems.indexOf(item);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.currentItems.splice(index, 1);\n\t\t\t\titem.selected = false;\n\t\t\t}else{\n\t\t\t\tthis.currentItems.push(item);\n\t\t\t\titem.selected = true;\n\t\t\t}\n\t\t\t\n\t\t\tthis.input.value = this.currentItems.map(item => item.label).join(\",\");\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t}else{\n\t\t\tthis.currentItems = [item];\n\t\t\titem.selected = true;\n\t\t\t\n\t\t\tthis.input.value = item.label;\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis._resolveValue();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._focusItem(item);\n\t}\n\t\n\t_resolveValue(blur){\n\t\tvar output, initialValue;\n\t\t\n\t\tif(this.popup){\n\t\t\tthis.popup.hide(true);\n\t\t}\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\toutput = this.currentItems.map(item => item.value);\n\t\t}else{\n\t\t\tif(blur && this.params.autocomplete && this.typing){\n\t\t\t\tif(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\n\t\t\t\t\toutput = this.input.value;\n\t\t\t\t}else{\n\t\t\t\t\tthis.actions.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.currentItems[0]){\n\t\t\t\t\toutput = this.currentItems[0].value;\n\t\t\t\t}else{\n\t\t\t\t\tinitialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;\n\t\t\t\t\t\n\t\t\t\t\tif(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\n\t\t\t\t\t\toutput = initialValue;\n\t\t\t\t\t}else{\n\t\t\t\t\t\toutput = this.params.emptyValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(output === \"\"){\n\t\t\toutput = this.params.emptyValue;\n\t\t}\n\t\t\n\t\tthis.actions.success(output);\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.initialValues = output && !Array.isArray(output) ? [output] : output;\n\t\t\tthis.currentItems = [];\n\t\t}\n\t}\n\t\n}\n","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The select editor has been deprecated, please use the new list editor\");\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\n\n\teditorParams.autocomplete = true;\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","//star rating\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar self = this,\n\telement = cell.getElement(),\n\tvalue = cell.getValue(),\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\tstars = [],\n\tstarsHolder = document.createElement(\"div\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\n\t//change star type\n\tfunction starChange(val){\n\t\tstars.forEach(function(star, i){\n\t\t\tif(i < val){\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}else{\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//build stars\n\tfunction buildStar(i){\n\n\t\tvar starHolder = document.createElement(\"span\");\n\t\tvar nextStar = star.cloneNode(true);\n\n\t\tstars.push(nextStar);\n\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tstarChange(i);\n\t\t});\n\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t});\n\n\t\tstarHolder.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tsuccess(i);\n\t\t\telement.blur();\n\t\t});\n\n\t\tstarHolder.appendChild(nextStar);\n\t\tstarsHolder.appendChild(starHolder);\n\n\t}\n\n\t//handle keyboard navigation value change\n\tfunction changeValue(val){\n\t\tvalue = val;\n\t\tstarChange(val);\n\t}\n\n\t//style cell\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\t//style holding element\n\tstarsHolder.style.verticalAlign = \"middle\";\n\tstarsHolder.style.display = \"inline-block\";\n\tstarsHolder.style.padding = \"4px\";\n\n\t//style star\n\tstar.setAttribute(\"width\", size);\n\tstar.setAttribute(\"height\", size);\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//create correct number of stars\n\tfor(var i=1;i<= maxStars;i++){\n\t\tbuildStar(i);\n\t}\n\n\t//ensure value does not exceed number of stars\n\tvalue = Math.min(parseInt(value), maxStars);\n\n\t// set initial styling of stars\n\tstarChange(value);\n\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\n\t\tstarChange(0);\n\t});\n\n\tstarsHolder.addEventListener(\"click\", function(e){\n\t\tsuccess(0);\n\t});\n\n\telement.addEventListener(\"blur\", function(e){\n\t\tcancel();\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\tchangeValue(value + 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\tchangeValue(value - 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 13: //enter\n\t\t\t\tsuccess(value);\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\treturn starsHolder;\n}","//draggable progress bar\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar element = cell.getElement(),\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\n\tpercent = (max - min) / 100,\n\tvalue = cell.getValue() || 0,\n\thandle = document.createElement(\"div\"),\n\tbar = document.createElement(\"div\"),\n\tmouseDrag, mouseDragWidth;\n\n\t//set new value\n\tfunction updateValue(){\n\t\tvar style = window.getComputedStyle(element, null);\n\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\n\t\tsuccess(calcVal);\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\telement.setAttribute(\"aria-label\", value);\n\t}\n\n\t//style handle\n\thandle.style.position = \"absolute\";\n\thandle.style.right = \"0\";\n\thandle.style.top = \"0\";\n\thandle.style.bottom = \"0\";\n\thandle.style.width = \"5px\";\n\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t//style bar\n\tbar.style.display = \"inline-block\";\n\tbar.style.position = \"relative\";\n\t// bar.style.top = \"8px\";\n\t// bar.style.bottom = \"8px\";\n\t// bar.style.left = \"4px\";\n\t// bar.style.marginRight = \"4px\";\n\tbar.style.height = \"100%\";\n\tbar.style.backgroundColor = \"#488CE9\";\n\tbar.style.maxWidth = \"100%\";\n\tbar.style.minWidth = \"0%\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//style cell\n\telement.style.padding = \"4px 4px\";\n\n\t//make sure value is in range\n\tvalue = Math.min(parseFloat(value), max);\n\tvalue = Math.max(parseFloat(value), min);\n\n\t//workout percentage\n\tvalue = Math.round((value - min) / percent);\n\t// bar.style.right = value + \"%\";\n\tbar.style.width = value + \"%\";\n\n\telement.setAttribute(\"aria-valuemin\", min);\n\telement.setAttribute(\"aria-valuemax\", max);\n\n\tbar.appendChild(handle);\n\n\thandle.addEventListener(\"mousedown\", function(e){\n\t\tmouseDrag = e.screenX;\n\t\tmouseDragWidth = bar.offsetWidth;\n\t});\n\n\thandle.addEventListener(\"mouseover\", function(){\n\t\thandle.style.cursor = \"ew-resize\";\n\t});\n\n\telement.addEventListener(\"mousemove\", function(e){\n\t\tif(mouseDrag){\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\n\t\t}\n\t});\n\n\telement.addEventListener(\"mouseup\", function(e){\n\t\tif(mouseDrag){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\n\t\t\tmouseDrag = false;\n\t\t\tmouseDragWidth = false;\n\n\t\t\tupdateValue();\n\t\t}\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 9: //tab\n\t\t\tcase 13: //enter\n\t\t\t\tupdateValue();\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t}\n\t});\n\n\telement.addEventListener(\"blur\", function(){\n\t\tcancel();\n\t});\n\n\treturn bar;\n}","//checkbox\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar value = cell.getValue(),\n\tinput = document.createElement(\"input\"),\n\ttristate = editorParams.tristate,\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\tindetermState = false,\n\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\n\t\n\tinput.setAttribute(\"type\", \"checkbox\");\n\tinput.style.marginTop = \"5px\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = value;\n\t\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\n\t\tindetermState = true;\n\t\tinput.indeterminate = true;\n\t}\n\t\n\tif(this.table.browser != \"firefox\" && this.table.browser != \"safari\"){ //prevent blur issue on mac firefox\n\t\tonRendered(function(){\n\t\t\tif(cell.getType() === \"cell\"){\n\t\t\t\tinput.focus({preventScroll: true});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tinput.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === \"true\" || value === \"True\" || value === 1);\n\t\n\tfunction setValue(blur){\n\t\tvar checkedValue = input.checked;\n\t\t\n\t\tif(trueValueSet && checkedValue){\n\t\t\tcheckedValue = editorParams.trueValue;\n\t\t}else if(falseValueSet && !checkedValue){\n\t\t\tcheckedValue = editorParams.falseValue;\n\t\t}\n\t\t\n\t\tif(tristate){\n\t\t\tif(!blur){\n\t\t\t\tif(input.checked && !indetermState){\n\t\t\t\t\tinput.checked = false;\n\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\tindetermState = true;\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\tindetermState = false;\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(indetermState){\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\treturn checkedValue;\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"change\", function(e){\n\t\tsuccess(setValue());\n\t});\n\n\tinput.addEventListener(\"blur\", function(e){\n\t\tsuccess(setValue(true));\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tif(e.keyCode == 13){\n\t\t\tsuccess(setValue());\n\t\t}\n\t\tif(e.keyCode == 27){\n\t\t\tcancel();\n\t\t}\n\t});\n\t\n\treturn input;\n}","import input from './editors/input.js';\nimport textarea from './editors/textarea.js';\nimport number from './editors/number.js';\nimport range from './editors/range.js';\nimport date from './editors/date.js';\nimport time from './editors/time.js';\nimport datetime from './editors/datetime.js';\nimport select from './editors/select.js';\nimport list from './editors/list.js';\nimport autocomplete from './editors/autocomplete.js';\nimport star from './editors/star.js';\nimport progress from './editors/progress.js';\nimport tickCross from './editors/tickCross.js';\n\nexport default {\n\tinput:input,\n\ttextarea:textarea,\n\tnumber:number,\n\trange:range,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tselect:select,\n\tlist:list,\n\tautocomplete:autocomplete,\n\tstar:star,\n\tprogress:progress,\n\ttickCross:tickCross,\n};","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultEditors from './defaults/editors.js';\n\nclass Edit extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.currentCell = false; //hold currently editing cell\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening\n\t\tthis.recursionBlock = false; //prevent focus recursion\n\t\tthis.invalidEdit = false;\n\t\tthis.editedCells = [];\n\t\t\n\t\tthis.editors = Edit.editors;\n\t\t\n\t\tthis.registerColumnOption(\"editable\");\n\t\tthis.registerColumnOption(\"editor\");\n\t\tthis.registerColumnOption(\"editorParams\");\n\t\t\n\t\tthis.registerColumnOption(\"cellEditing\");\n\t\tthis.registerColumnOption(\"cellEdited\");\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\n\t\t\n\t\tthis.registerTableOption(\"editTriggerEvent\", \"focus\");\n\t\t\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellIsEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.updateCellClass.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-layout\", this.rowEditableCheck.bind(this));\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\n\t\tthis.subscribe(\"clipboard-paste\", this.pasteBlocker.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\n\t\t\n\t\t\n\t\t// this.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\n\t\t// this.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Paste Negation //////////\n\t///////////////////////////////////\n\t\n\tpasteBlocker(e){\n\t\tif(this.currentCell){\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Keybinding Functions ///////\n\t///////////////////////////////////\n\t\n\tkeybindingNavigateNext(e){\n\t\tvar cell = this.currentCell,\n\t\tnewRow = this.options(\"tabEndNewRow\");\n\n\t\tif(cell){\n\t\t\tif(!this.navigateNext(cell, e)){\n\t\t\t\tif(newRow){\n\t\t\t\t\tcell.getElement().firstChild.blur();\n\t\t\t\t\t\n\t\t\t\t\tif(!this.invalidEdit){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(newRow === true){\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnewRow.then(() => {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tcell.getComponent().navigateNext();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Cell Functions //////////\n\t///////////////////////////////////\n\t\n\tcellIsEdited(cell){\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\n\t}\n\t\n\tcellCancelEdit(cell){\n\t\tif(cell === this.currentCell){\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}else{\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tupdateCellClass(cell){\n\t\tif(this.allowEdit(cell)) {\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\n\t\t}\n\t\telse {\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\n\t\t}\n\t}\n\t\n\tclearCellEdited(cells){\n\t\tif(!cells){\n\t\t\tcells = this.table.modules.edit.getEditedCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n\t\n\tnavigatePrev(cell = this.currentCell, e){\n\t\tvar nextCell, prevRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateLeft();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(prevRow){\n\t\t\t\t\tnextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateNext(cell = this.currentCell, e){\n\t\tvar nextCell, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateRight();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(nextRow){\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateLeft(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateRight(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateUp(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateDown(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfindNextEditableCell(row, index){\n\t\tvar nextCell = false;\n\t\t\n\t\tif(index < row.cells.length-1){\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tnextCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindPrevEditableCell(row, index){\n\t\tvar prevCell = false;\n\t\t\n\t\tif(index > 0){\n\t\t\tfor(var i = index-1; i >= 0; i--){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tprevCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn prevCell;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.editor !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\tcolumnDeleteCheck(column){\n\t\tif(this.currentCell && this.currentCell.column === column){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowDeleteCheck(row){\n\t\tif(this.currentCell && this.currentCell.row === row){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowEditableCheck(row){\n\t\trow.getCells().forEach((cell) => {\n\t\t\tif(cell.column.modules.edit && typeof cell.column.modules.edit.check === \"function\"){\n\t\t\t\tthis.updateCellClass(cell);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//initialize column editor\n\tinitializeColumn(column){\n\t\tvar config = {\n\t\t\teditor:false,\n\t\t\tblocked:false,\n\t\t\tcheck:column.definition.editable,\n\t\t\tparams:column.definition.editorParams || {}\n\t\t};\n\t\t\n\t\t//set column editor\n\t\tswitch(typeof column.definition.editor){\n\t\t\tcase \"string\":\n\t\t\t\tif(this.editors[column.definition.editor]){\n\t\t\t\t\tconfig.editor = this.editors[column.definition.editor];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.editor = column.definition.editor;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"boolean\":\n\t\t\t\tif(column.definition.editor === true){\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\n\t\t\t\t\t\tif(this.editors[column.definition.formatter]){\n\t\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(config.editor){\n\t\t\tcolumn.modules.edit = config;\n\t\t}\n\t}\n\t\n\tgetCurrentCell(){\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\n\t}\n\t\n\tclearEditor(cancel){\n\t\tvar cell = this.currentCell,\n\t\tcellEl;\n\t\t\n\t\tthis.invalidEdit = false;\n\t\t\n\t\tif(cell){\n\t\t\tthis.currentCell = false;\n\t\t\t\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\n\t\t\t\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\n\t\t\t\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\n\t\t}\n\t}\n\t\n\tcancelEdit(){\n\t\tif(this.currentCell){\n\t\t\tvar cell = this.currentCell;\n\t\t\tvar component = this.currentCell.getComponent();\n\t\t\t\n\t\t\tthis.clearEditor(true);\n\t\t\tcell.setValueActual(cell.getValue());\n\t\t\tcell.cellRendered();\n\t\t\t\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\n\t\t\t\tcell.row.normalizeHeight(true);\n\t\t\t}\n\t\t\t\n\t\t\tif(cell.column.definition.cellEditCancelled){\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\n\t\t}\n\t}\n\t\n\t//return a formatted value for a cell\n\tbindEditor(cell){\n\t\tif(cell.column.modules.edit){\n\t\t\tvar self = this,\n\t\t\telement = cell.getElement(true);\n\t\t\t\n\t\t\tthis.updateCellClass(cell);\n\t\t\telement.setAttribute(\"tabindex\", 0);\n\t\t\t\n\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif (e.button === 2) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}else{\n\t\t\t\t\tself.mouseClick = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(this.options(\"editTriggerEvent\") === \"dblclick\"){\n\t\t\t\telement.addEventListener(\"dblclick\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\" || this.options(\"editTriggerEvent\") === \"click\"){\n\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\"){\n\t\t\t\telement.addEventListener(\"focus\", function(e){\n\t\t\t\t\tif(!self.recursionBlock){\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfocusCellNoEvent(cell, block){\n\t\tthis.recursionBlock = true;\n\t\t\n\t\tif(!(block && this.table.browser === \"ie\")){\n\t\t\tcell.getElement().focus({preventScroll: true});\n\t\t}\n\t\t\n\t\tthis.recursionBlock = false;\n\t}\n\t\n\teditCell(cell, forceEdit){\n\t\tthis.focusCellNoEvent(cell);\n\t\tthis.edit(cell, false, forceEdit);\n\t}\n\t\n\tfocusScrollAdjust(cell){\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t\trowEl = cell.row.getElement();\n\t\t\t\n\t\t\tif(rowEl.offsetTop < topEdge){\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\n\t\t\t}else{\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0);\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t}\n\t\t\t\n\t\t\tif(cellEl.offsetLeft < leftEdge){\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\n\t\t\t}else{\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tallowEdit(cell) {\n\t\tvar check = cell.column.modules.edit ? true : false;\n\t\t\n\t\tif(cell.column.modules.edit){\n\t\t\tswitch(typeof cell.column.modules.edit.check){\n\t\t\t\tcase \"function\":\n\t\t\t\t\tif(cell.row.initialized){\n\t\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn check;\n\t}\n\t\n\tedit(cell, e, forceEdit){\n\t\tvar self = this,\n\t\tallowEdit = true,\n\t\trendered = function(){},\n\t\telement = cell.getElement(),\n\t\teditFinished = false,\n\t\tcellEditor, component, params;\n\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\t\t\n\t\tif(this.currentCell){\n\t\t\tif(!this.invalidEdit && this.currentCell !== cell){\n\t\t\t\tthis.cancelEdit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t//handle successful value change\n\t\tfunction success(value){\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\n\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\n\n\t\t\t\t\teditFinished = true;\n\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\t\n\t\t\t\t\tif(!cell.modules.edit){\n\t\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.modules.edit.edited = true;\n\t\t\t\t\t\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\n\t\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\t\treturn valid === true;\n\t\t\t\t}else{\n\t\t\t\t\teditFinished = true;\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\teditFinished = false;\n\t\t\t\t\t}, 10);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//handle aborted edit\n\t\tfunction cancel(){\n\t\t\t// editFinished = true;\n\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tself.cancelEdit();\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\trendered = callback;\n\t\t}\n\t\t\n\t\tif(!cell.column.modules.edit.blocked){\n\t\t\tif(e){\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\t\n\t\t\tallowEdit = this.allowEdit(cell);\n\t\t\t\n\t\t\tif(allowEdit || forceEdit){\n\t\t\t\tself.cancelEdit();\n\t\t\t\t\n\t\t\t\tself.currentCell = cell;\n\t\t\t\t\n\t\t\t\tthis.focusScrollAdjust(cell);\n\t\t\t\t\n\t\t\t\tcomponent = cell.getComponent();\n\t\t\t\t\n\t\t\t\tif(this.mouseClick){\n\t\t\t\t\tthis.mouseClick = false;\n\t\t\t\t\t\n\t\t\t\t\tif(cell.column.definition.cellClick){\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(cell.column.definition.cellEditing){\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\n\t\t\t\t\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\t\t\t\t\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\t\t\t\t\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\t\tif(this.currentCell && cellEditor !== false){\n\t\t\t\t\tif(cellEditor instanceof Node){\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\t\t\t\telement.appendChild(cellEditor);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\t\trendered();\n\t\t\t\t\t\t\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\t\tvar children = element.children;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\t\tthis.blur(element);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.blur(element);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tthis.mouseClick = false;\n\t\t\t\tthis.blur(element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.mouseClick = false;\n\t\t\tthis.blur(element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tblur(element){\n\t\tif(!this.confirm(\"edit-blur\", [element]) ){\n\t\t\telement.blur();\n\t\t}\n\t}\n\t\n\tgetEditedCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.editedCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearEdited(cell){\n\t\tvar editIndex;\n\t\t\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\n\t\t\tcell.modules.edit.edited = false;\n\t\t\t\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\n\t\t}\n\t\t\n\t\teditIndex = this.editedCells.indexOf(cell);\n\t\t\n\t\tif(editIndex > -1){\n\t\t\tthis.editedCells.splice(editIndex, 1);\n\t\t}\n\t}\n}\n\nEdit.moduleName = \"edit\";\n\n//load defaults\nEdit.editors = defaultEditors;\n\n\nexport default Edit;\n","class ExportRow{\n\tconstructor(type, columns, component, indent){\n\t\tthis.type = type;\n\t\tthis.columns = columns;\n\t\tthis.component = component || false;\n\t\tthis.indent = indent || 0;\n\t}\n}\n\nexport default ExportRow;","class ExportColumn{\n\tconstructor(value, component, width, height, depth){\n\t\tthis.value = value;\n\t\tthis.component = component || false;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = depth;\n\t}\n}\n\nexport default ExportColumn;","import Module from '../../core/Module.js';\n\nimport ExportRow from './ExportRow.js';\nimport ExportColumn from './ExportColumn.js';\n\nclass Export extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {};\n\t\tthis.cloneTableStyle = true;\n\t\tthis.colVisProp = \"\";\n\t\t\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html output config\n\t\t\n\t\tthis.registerColumnOption(\"htmlOutput\");\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tgenerateExportList(config, style, range, colVisProp){\n\t\tthis.cloneTableStyle = style;\n\t\tthis.config = config || {};\n\t\tthis.colVisProp = colVisProp;\n\n\t\tvar headers, body;\n\t\t\n\t\tif (range === 'range') {\n\t\t\tvar columns = this.table.modules.selectRange.selectedColumns();\n\t\t\theaders = this.config.columnHeaders !== false\n\t\t\t\t? this.headersToExportRows(this.generateColumnGroupHeaders(columns))\n\t\t\t\t: [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true));\n\t\t} else {\n\t\t\theaders = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range));\n\t\t}\n\n\t\treturn headers.concat(body);\n\t}\n\t\n\tgenerateTable(config, style, range, colVisProp){\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\n\t\t\n\t\treturn this.generateTableElement(list);\n\t}\n\t\n\trowLookup(range){\n\t\tvar rows = [];\n\t\t\n\t\tif(typeof range == \"function\"){\n\t\t\trange.call(this.table).forEach((row) =>{\n\t\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tswitch(range){\n\t\t\t\tcase true:\n\t\t\t\tcase \"visible\":\n\t\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"all\":\n\t\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"selected\":\n\t\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"range\":\n\t\t\t\t\trows = this.table.modules.selectRange.selectedRows();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"active\":\n\t\t\t\tdefault:\n\t\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Object.assign([], rows);\n\t}\n\t\n\tgenerateColumnGroupHeaders(columns){\n\t\tvar output = [];\n\t\t\n\t\tif (!columns) {\n\t\t\tcolumns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\t\t}\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\tvar colData = this.processColumnGroup(column);\n\t\t\t\n\t\t\tif(colData){\n\t\t\t\toutput.push(colData);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\t\n\tprocessColumnGroup(column){\n\t\tvar subGroups = column.columns,\n\t\tmaxDepth = 0,\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\t\t\n\t\tvar groupData = {\n\t\t\ttitle:title,\n\t\t\tcolumn:column,\n\t\t\tdepth:1,\n\t\t};\n\t\t\n\t\tif(subGroups.length){\n\t\t\tgroupData.subGroups = [];\n\t\t\tgroupData.width = 0;\n\t\t\t\n\t\t\tsubGroups.forEach((subGroup) => {\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\n\t\t\t\t\n\t\t\t\tif(subGroupData){\n\t\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\n\t\t\t\t\t\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tgroupData.depth += maxDepth;\n\t\t\t\n\t\t\tif(!groupData.width){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.columnVisCheck(column)){\n\t\t\t\tgroupData.width = 1;\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn groupData;\n\t}\n\t\n\tcolumnVisCheck(column){\n\t\tvar visProp = column.definition[this.colVisProp];\n\t\t\n\t\tif(typeof visProp === \"function\"){\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\n\t\t}\n\t\t\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\n\t}\n\t\n\theadersToExportRows(columns){\n\t\tvar headers = [],\n\t\theaderDepth = 0,\n\t\texportRows = [];\n\t\t\n\t\tfunction parseColumnGroup(column, level){\n\t\t\t\n\t\t\tvar depth = headerDepth - level;\n\t\t\t\n\t\t\tif(typeof headers[level] === \"undefined\"){\n\t\t\t\theaders[level] = [];\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\n\t\t\t\n\t\t\theaders[level].push(column);\n\t\t\t\n\t\t\tif(column.height > 1){\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\n\t\t\t\t\t\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\n\t\t\t\t\t\theaders[level + i] = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\theaders[level + i].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.width > 1){\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\n\t\t\t\t\theaders[level].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.subGroups){\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t//calculate maximum header depth\n\t\tcolumns.forEach(function(column){\n\t\t\tif(column.depth > headerDepth){\n\t\t\t\theaderDepth = column.depth;\n\t\t\t}\n\t\t});\n\t\t\n\t\tcolumns.forEach(function(column){\n\t\t\tparseColumnGroup(column,0);\n\t\t});\n\t\t\n\t\theaders.forEach((header) => {\n\t\t\tvar columns = [];\n\t\t\t\n\t\t\theader.forEach((col) => {\n\t\t\t\tif(col){\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t\t}else{\n\t\t\t\t\tcolumns.push(null);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tbodyToExportRows(rows, columns = []){\n\t\tvar exportRows = [];\n\t\t\n\t\tif (columns.length === 0) {\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\t\tcolumns.push(column.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\n\t\trows = rows.filter((row) => {\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn this.config.rowGroups !== false;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\treturn this.config.columnCalcs !== false;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t});\n\t\t\n\t\trows.forEach((row, i) => {\n\t\t\tvar rowData = row.getData(this.colVisProp);\n\t\t\tvar exportCols = [];\n\t\t\tvar indent = 0;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\tindent = row.level;\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\" :\n\t\t\t\tcase \"row\" :\n\t\t\t\t\tcolumns.forEach((col) => {\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tgenerateTableElement(list){\n\t\tvar table = document.createElement(\"table\"),\n\t\theaderEl = document.createElement(\"thead\"),\n\t\tbodyEl = document.createElement(\"tbody\"),\n\t\tstyles = this.lookupTableStyles(),\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t\tsetup = {};\n\t\t\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\t\t\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t\t}\n\t\t\n\t\t//assign group header formatter\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\t\t\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\n\t\t\tsetup.groupHeader = [setup.groupHeader];\n\t\t}\n\t\t\n\t\ttable.classList.add(\"tabulator-print-table\");\n\t\t\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\n\t\t\n\t\tif(list.length > 1000){\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t\t}\n\t\t\n\t\tlist.forEach((row, i) => {\n\t\t\tlet rowEl;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"header\":\n\t\t\t\t\theaderEl.appendChild(this.generateHeaderElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbodyEl.appendChild(this.generateGroupElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbodyEl.appendChild(this.generateCalcElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\n\t\t\t\t\n\t\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\t\tbodyEl.appendChild(rowEl);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(headerEl.innerHTML){\n\t\t\ttable.appendChild(headerEl);\n\t\t}\n\t\t\n\t\ttable.appendChild(bodyEl);\n\t\t\n\t\t\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\t\treturn table;\n\t}\n\t\n\tlookupTableStyles(){\n\t\tvar styles = {};\n\t\t\n\t\t//lookup row styles\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\t\t\t\n\t\t\tif(styles.firstRow){\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn styles;\n\t}\n\t\n\tgenerateHeaderElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trow.columns.forEach((column) => {\n\t\t\tif(column){\n\t\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tcellEl.colSpan = column.width;\n\t\t\t\tcellEl.rowSpan = column.height;\n\t\t\t\t\n\t\t\t\tcellEl.innerHTML = column.value;\n\t\t\t\t\n\t\t\t\tif(this.cloneTableStyle){\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\t\t\n\t\t\t\tif(column.component._column.visible){\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t\t}else{\n\t\t\t\t\tif(column.component._column.definition.width){\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(column.component._column.parent){\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateGroupElement(row, setup, styles){\n\t\t\n\t\tvar rowEl = document.createElement(\"tr\"),\n\t\tcellEl = document.createElement(\"td\"),\n\t\tgroup = row.columns[0];\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}else{\n\t\t\tif(setup.groupHeader !== false){\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t\t\n\t\tcellEl.colSpan = group.width;\n\t\tcellEl.innerHTML = group.value;\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\t\t\n\t\tif(group.component.isVisible()){\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\n\t\trowEl.appendChild(cellEl);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateCalcElement(row, setup, styles){\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateRowElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\trow.columns.forEach((col, i) => {\n\t\t\tif(col){\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t\tcolumn = col.component._column,\n\t\t\t\ttable = this.table,\n\t\t\t\tindex = table.columnManager.findColumnIndex(column),\n\t\t\t\tvalue = col.value,\n\t\t\t\tcellStyle;\n\t\t\t\t\n\t\t\t\tvar cellWrapper = {\n\t\t\t\t\tmodules:{},\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn cellEl;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\treturn row.component.getData();\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn row.component;\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:function(){\n\t\t\t\t\t\treturn table;\n\t\t\t\t\t},\n\t\t\t\t\tgetComponent:function(){\n\t\t\t\t\t\treturn cellWrapper;\n\t\t\t\t\t},\n\t\t\t\t\tcolumn:column,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\n\t\t\t\t}else{\n\t\t\t\t\tswitch(typeof value){\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(value instanceof Node){\n\t\t\t\t\tcellEl.appendChild(value);\n\t\t\t\t}else{\n\t\t\t\t\tcellEl.innerHTML = value;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\n\t\t\t\t\n\t\t\t\tif(cellStyle){\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\n\t\t\t\t\t\n\t\t\t\t\tif(column.definition.align){\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t\t\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(setup.rowFormatter && row.type === \"row\" && this.config.formatCells !== false){\n\t\t\tlet formatComponent = Object.assign(row.component);\n\n\t\t\tformatComponent.getElement = function(){return rowEl;};\n\n\t\t\tsetup.rowFormatter(row.component);\n\t\t}\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateHTMLTable(list){\n\t\tvar holder = document.createElement(\"div\");\n\t\t\n\t\tholder.appendChild(this.generateTableElement(list));\n\t\t\n\t\treturn holder.innerHTML;\n\t}\n\t\n\tgetHtml(visible, style, config, colVisProp){\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\t\t\n\t\treturn this.generateHTMLTable(list);\n\t}\n\t\n\tmapElementStyles(from, to, props){\n\t\tif(this.cloneTableStyle && from && to){\n\t\t\t\n\t\t\tvar lookup = {\n\t\t\t\t\"background-color\" : \"backgroundColor\",\n\t\t\t\t\"color\" : \"fontColor\",\n\t\t\t\t\"width\" : \"width\",\n\t\t\t\t\"font-weight\" : \"fontWeight\",\n\t\t\t\t\"font-family\" : \"fontFamily\",\n\t\t\t\t\"font-size\" : \"fontSize\",\n\t\t\t\t\"text-align\" : \"textAlign\",\n\t\t\t\t\"border-top\" : \"borderTop\",\n\t\t\t\t\"border-left\" : \"borderLeft\",\n\t\t\t\t\"border-right\" : \"borderRight\",\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\n\t\t\t\t\"padding-top\" : \"paddingTop\",\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\n\t\t\t\t\"padding-right\" : \"paddingRight\",\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\n\t\t\t};\n\t\t\t\n\t\t\tif(window.getComputedStyle){\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\n\t\t\t\t\n\t\t\t\tprops.forEach(function(prop){\n\t\t\t\t\tif(!to.style[lookup[prop]]){\n\t\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nExport.moduleName = \"export\";\n\nexport default Export;\n","export default {\n\n\t//equal to\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal == filterVal ? true : false;\n\t},\n\n\t//less than\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal < filterVal ? true : false;\n\t},\n\n\t//less than or equal to\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal <= filterVal ? true : false;\n\t},\n\n\t//greater than\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal > filterVal ? true : false;\n\t},\n\n\t//greater than or equal to\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal >= filterVal ? true : false;\n\t},\n\n\t//not equal to\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal != filterVal ? true : false;\n\t},\n\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\n\n\t\tif(typeof filterVal == \"string\"){\n\t\t\tfilterVal = new RegExp(filterVal);\n\t\t}\n\n\t\treturn filterVal.test(rowVal);\n\t},\n\n\t//contains the string\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//contains the keywords\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\tmatches = [];\n\n\t\tkeywords.forEach((keyword) =>{\n\t\t\tif(value.includes(keyword)){\n\t\t\t\tmatches.push(true);\n\t\t\t}\n\t\t});\n\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\n\t},\n\n\t//starts with the string\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//ends with the string\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(Array.isArray(filterVal)){\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\treturn false;\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultFilters from './defaults/filters.js';\n\nclass Filter extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.filterList = []; //hold filter list\n\t\tthis.headerFilters = {}; //hold column filters\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.changed = false; //has filtering changed since last render\n\t\tthis.tableInitialized = false;\n\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\n\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\n\t\tthis.registerTableOption(\"placeholderHeaderFilter\", false); //placeholder when header filter is empty\n\n\t\tthis.registerColumnOption(\"headerFilter\");\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\n\t\tthis.registerColumnOption(\"headerFilterParams\");\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\n\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\n\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\n\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.subscribe(\"placeholder\", this.generatePlaceholder.bind(this));\n\n\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\n\t\t}\n\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\n\t}\n\n\ttableBuilt(){\n\t\tif(this.table.options.initialFilter){\n\t\t\tthis.setFilter(this.table.options.initialFilter);\n\t\t}\n\n\t\tif(this.table.options.initialHeaderFilter){\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\n\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.tableInitialized = true;\n\t}\n\n\tremoteFilterParams(data, config, silent, params){\n\t\tparams.filter = this.getFilters(true, true);\n\t\treturn params;\n\t}\n\n\tgeneratePlaceholder(text){\n\t\tif(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){\n\t\t\treturn this.table.options.placeholderHeaderFilter;\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t//set standard filters\n\tuserSetFilter(field, type, value, params){\n\t\tthis.setFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\t//set standard filters\n\tuserRefreshFilter(){\n\t\tthis.refreshFilter();\n\t}\n\n\t//add filter to array\n\tuserAddFilter(field, type, value, params){\n\t\tthis.addFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\tuserSetHeaderFilterFocus(field){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterFocus(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tuserGetHeaderFilterValue(field) {\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\treturn this.getHeaderFilterValue(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t}\n\t}\n\n\tuserSetHeaderFilterValue(field, value){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterValue(column, value);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//remove filter from array\n\tuserRemoveFilter(field, type, value){\n\t\tthis.removeFilter(field, type, value);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear filters\n\tuserClearFilter(all){\n\t\tthis.clearFilter(all);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear header filters\n\tuserClearHeaderFilter(){\n\t\tthis.clearHeaderFilter();\n\t\tthis.refreshFilter();\n\t}\n\n\n\t//search for specific row components\n\tsearchRows(field, type, value){\n\t\treturn this.search(\"rows\", field, type, value);\n\t}\n\n\t//search for specific data\n\tsearchData(field, type, value){\n\t\treturn this.search(\"data\", field, type, value);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumnHeaderFilter(column){\n\t\tvar def = column.definition;\n\n\t\tif(def.headerFilter){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\n\t//initialize column header filter\n\tinitializeColumn(column, value){\n\t\tvar self = this,\n\t\tfield = column.getField();\n\n\t\t//handle successfully value change\n\t\tfunction success(value){\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t\ttype = \"\",\n\t\t\tfilterChangeCheck = \"\",\n\t\t\tfilterFunc;\n\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\n\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\n\t\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!filterFunc){\n\t\t\t\t\t\tswitch(filterType){\n\t\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\n\t\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type};\n\t\t\t\t}else{\n\t\t\t\t\tdelete self.headerFilters[field];\n\t\t\t\t}\n\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\t\tself.trackChanges();\n\t\t\t\t\tself.refreshFilter();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tcolumn.modules.filter = {\n\t\t\tsuccess:success,\n\t\t\tattrType:false,\n\t\t\ttagType:false,\n\t\t\temptyFunc:false,\n\t\t};\n\n\t\tthis.generateHeaderFilterElement(column);\n\t}\n\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\n\t\tvar self = this,\n\t\tsuccess = column.modules.filter.success,\n\t\tfield = column.getField(),\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback;\n\n\t\tcolumn.modules.filter.value = initialValue;\n\n\t\t//handle aborted edit\n\t\tfunction cancel(){}\n\n\t\tfunction onRendered(callback){\n\t\t\tonRenderedCallback = callback;\n\t\t}\n\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t\t}\n\n\t\tif(field){\n\n\t\t\t//set empty value function\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\n\t\t\t\treturn !value && value !== 0;\n\t\t\t};\n\n\t\t\tfilterElement = document.createElement(\"div\");\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t\t//set column editor\n\t\t\tswitch(typeof column.definition.headerFilter){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\n\t\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(editor){\n\n\t\t\t\tcellWrapper = {\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn filterElement;\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:() => {\n\t\t\t\t\t\treturn \"header\";\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnormalizeHeight:function(){\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\n\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params);\n\n\t\t\t\tif(!editorElement){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(!(editorElement instanceof Node)){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//set Placeholder Text\n\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : (column.definition.headerFilterPlaceholder || self.langText(\"headerFilters|default\")));\n\t\t\t\t});\n\n\t\t\t\t//focus on element on click\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\teditorElement.focus();\n\t\t\t\t});\n\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\n\t\t\t\t\tvar left = this.table.columnManager.contentsElement.scrollLeft;\n\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft;\n\n\t\t\t\t\tif(left !== headerPos){\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//live update filters as user types\n\t\t\t\ttypingTimer = false;\n\n\t\t\t\tsearchTrigger = function(e){\n\t\t\t\t\tif(typingTimer){\n\t\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t\t}\n\n\t\t\t\t\ttypingTimer = setTimeout(function(){\n\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\n\t\t\t\t};\n\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\n\t\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\n\t\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//prevent input and select elements from propagating click to column sorters etc\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\t\tif(!reinitialize){\n\t\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t\t}\n\n\t\t\t\tif(onRenderedCallback){\n\t\t\t\t\tonRenderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t\t}\n\t}\n\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\thideHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t\t}\n\t\t});\n\t}\n\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\tshowHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//programmatically set focus of header filter\n\tsetHeaderFilterFocus(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\tcolumn.modules.filter.headerElement.focus();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically get value of header filter\n\tgetHeaderFilterValue(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\treturn column.modules.filter.value;\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically set value of header filter\n\tsetHeaderFilterValue(column, value){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\t\tcolumn.modules.filter.success(value);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\treloadHeaderFilter(column){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\trefreshFilter(){\n\t\tif(this.tableInitialized){\n\t\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\t\tthis.reloadData(null, false, false);\n\t\t\t}else{\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\n\t//check if the filters has changed since last use\n\ttrackChanges(){\n\t\tthis.changed = true;\n\t\tthis.dispatch(\"filter-changed\");\n\t}\n\n\t//check if the filters has changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\n\t//set standard filters\n\tsetFilter(field, type, value, params){\n\t\tthis.filterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tthis.addFilter(field);\n\t}\n\n\t//add filter to array\n\taddFilter(field, type, value, params){\n\t\tvar changed = false;\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tthis.filterList.push(filter);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\n\t\tif(changed){\n\t\t\tthis.trackChanges();\n\t\t}\n\t}\n\n\tfindFilter(filter){\n\t\tvar column;\n\n\t\tif(Array.isArray(filter)){\n\t\t\treturn this.findSubFilters(filter);\n\t\t}\n\n\t\tvar filterFunc = false;\n\n\t\tif(typeof filter.field == \"function\"){\n\t\t\tfilterFunc = function(data){\n\t\t\t\treturn filter.field(data, filter.type || {});// pass params to custom filter function\n\t\t\t};\n\t\t}else{\n\n\t\t\tif(Filter.filters[filter.type]){\n\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}\n\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t}\n\n\t\tfilter.func = filterFunc;\n\n\t\treturn filter.func ? filter : false;\n\t}\n\n\tfindSubFilters(filters){\n\t\tvar output = [];\n\n\t\tfilters.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\toutput.push(filter);\n\t\t\t}\n\t\t});\n\n\t\treturn output.length ? output : false;\n\t}\n\n\t//get all filters\n\tgetFilters(all, ajax){\n\t\tvar output = [];\n\n\t\tif(all){\n\t\t\toutput = this.getHeaderFilters();\n\t\t}\n\n\t\tif(ajax){\n\t\t\toutput.forEach(function(item){\n\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\t\treturn output;\n\t}\n\n\t//filter to Object\n\tfiltersToArray(filterList, ajax){\n\t\tvar output = [];\n\n\t\tfilterList.forEach((filter) => {\n\t\t\tvar item;\n\n\t\t\tif(Array.isArray(filter)){\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\n\t\t\t}else{\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value};\n\n\t\t\t\tif(ajax){\n\t\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\t\titem.type = \"function\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//get all filters\n\tgetHeaderFilters(){\n\t\tvar output = [];\n\n\t\tfor(var key in this.headerFilters){\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//remove filter from array\n\tremoveFilter(field, type, value){\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tvar index = -1;\n\n\t\t\tif(typeof filter.field == \"object\"){\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter === element;\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.filterList.splice(index, 1);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear filters\n\tclearFilter(all){\n\t\tthis.filterList = [];\n\n\t\tif(all){\n\t\t\tthis.clearHeaderFilter();\n\t\t}\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear header filters\n\tclearHeaderFilter(){\n\t\tthis.headerFilters = {};\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.headerFilterColumns.forEach((column) => {\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\n\t\t\t\tdelete column.modules.filter.value;\n\t\t\t}\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\t\tthis.reloadHeaderFilter(column);\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//search data and return matching rows\n\tsearch (searchType, field, type, value){\n\t\tvar activeRows = [],\n\t\tfilterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tfilterList.push(filter);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\tvar match = true;\n\n\t\t\tfilterList.forEach((filter) => {\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t\t}\n\n\t\t});\n\n\t\treturn activeRows;\n\t}\n\n\t//filter row array\n\tfilter(rowList, filters){\n\t\tvar activeRows = [],\n\t\tactiveRowComponents = [];\n\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters(true));\n\t\t}\n\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\n\n\t\t\trowList.forEach((row) => {\n\t\t\t\tif(this.filterRow(row)){\n\t\t\t\t\tactiveRows.push(row);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}else{\n\t\t\tactiveRows = rowList.slice(0);\n\t\t}\n\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\n\n\t\t\tactiveRows.forEach((row) => {\n\t\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t\t});\n\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(true), activeRowComponents);\n\t\t}\n\n\t\treturn activeRows;\n\t}\n\n\t//filter individual row\n\tfilterRow(row, filters){\n\t\tvar match = true,\n\t\tdata = row.getData();\n\n\t\tthis.filterList.forEach((filter) => {\n\t\t\tif(!this.filterRecurse(filter, data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\n\t\tfor(var field in this.headerFilters){\n\t\t\tif(!this.headerFilters[field].func(data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\treturn match;\n\t}\n\n\tfilterRecurse(filter, data){\n\t\tvar match = false;\n\n\t\tif(Array.isArray(filter)){\n\t\t\tfilter.forEach((subFilter) => {\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\n\t\t\t\t\tmatch = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tmatch = filter.func(data);\n\t\t}\n\n\t\treturn match;\n\t}\n}\n\nFilter.moduleName = \"filter\";\n\n//load defaults\nFilter.filters = defaultFilters;\n\nexport default Filter;","export default function(cell, formatterParams, onRendered){\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\treturn cell.getValue();\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\tvar floatVal = parseFloat(cell.getValue()),\n\tsign = \"\",\n\tnumber, integer, decimal, rgx, value;\n\n\tvar decimalSym = formatterParams.decimal || \".\";\n\tvar thousandSym = formatterParams.thousand || \",\";\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\n\tvar symbol = formatterParams.symbol || \"\";\n\tvar after = !!formatterParams.symbolAfter;\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\tif(isNaN(floatVal)){\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t}\n\n\tif(floatVal < 0){\n\t\tfloatVal = Math.abs(floatVal);\n\t\tsign = negativeSign;\n\t}\n\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\tnumber = String(number).split(\".\");\n\n\tinteger = number[0];\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\tif (formatterParams.thousand !== false) {\n\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\twhile (rgx.test(integer)){\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t}\n\t}\n\n\tvalue = integer + decimal;\n\t\n\tif(sign === true){\n\t\tvalue = \"(\" + value + \")\";\n\t\treturn after ? value + symbol : symbol + value;\n\t}else{\n\t\treturn after ? sign + value + symbol : sign + symbol + value;\n\t}\n}","import Helpers from '../../../../core/tools/Helpers.js';\n\n\nexport default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\turlPrefix = formatterParams.urlPrefix || \"\",\n\tdownload = formatterParams.download,\n\tlabel = value,\n\tel = document.createElement(\"a\"),\n\tdata;\n\n\tfunction labelTraverse(path, data){\n\t\tvar item = path.shift(),\n\t\tvalue = data[item];\n\t\t\n\t\tif(path.length && typeof value === \"object\"){\n\t\t\treturn labelTraverse(path, value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tif(formatterParams.labelField){\n\t\tdata = cell.getData();\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\n\t}\n\n\tif(formatterParams.label){\n\t\tswitch(typeof formatterParams.label){\n\t\t\tcase \"string\":\n\t\t\t\tlabel = formatterParams.label;\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(label){\n\t\tif(formatterParams.urlField){\n\t\t\tdata = cell.getData();\n\n\t\t\tvalue = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data);\n\t\t}\n\n\t\tif(formatterParams.url){\n\t\t\tswitch(typeof formatterParams.url){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\tif(formatterParams.target){\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t}\n\n\t\tif(formatterParams.download){\n\n\t\t\tif(typeof download == \"function\"){\n\t\t\t\tdownload = download(cell);\n\t\t\t}else{\n\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t}\n\n\t\t\tel.setAttribute(\"download\", download);\n\t\t}\n\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\treturn el;\n\t}else{\n\t\treturn \" \";\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"img\"),\n\tsrc = cell.getValue();\n\n\tif(formatterParams.urlPrefix){\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t}\n\n\tif(formatterParams.urlSuffix){\n\t\tsrc = src + formatterParams.urlSuffix;\n\t}\n\n\tel.setAttribute(\"src\", src);\n\n\tswitch(typeof formatterParams.height){\n\t\tcase \"number\":\n\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.height = formatterParams.height;\n\t\t\tbreak;\n\t}\n\n\tswitch(typeof formatterParams.width){\n\t\tcase \"number\":\n\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.width = formatterParams.width;\n\t\t\tbreak;\n\t}\n\n\tel.addEventListener(\"load\", function(){\n\t\tcell.getRow().normalizeHeight();\n\t});\n\n\treturn el;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tempty = formatterParams.allowEmpty,\n\ttruthy = formatterParams.allowTruthy,\n\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\n\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")))){\n\t\telement.setAttribute(\"aria-checked\", true);\n\t\treturn tick || \"\";\n\t}else{\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\treturn \"\";\n\t\t}else{\n\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\treturn cross || \"\";\n\t\t}\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif(newDatetime.isValid){\n\t\t\tif(formatterParams.timezone){\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\n\t\t\t}\n\n\t\t\treturn newDatetime.toFormat(outputFormat);\n\t\t}else{\n\t\t\tif(invalid === true || !value){\n\t\t\t\treturn value;\n\t\t\t}else if(typeof invalid === \"function\"){\n\t\t\t\treturn invalid(value);\n\t\t\t}else{\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif (newDatetime.isValid){\n\t\t\tif(humanize){\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\n\t\t\t}else{\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar value = cell.getValue();\n\n\tif (typeof formatterParams[value] === \"undefined\") {\n\t\tconsole.warn('Missing display value for ' + value);\n\t\treturn value;\n\t}\n\n\treturn formatterParams[value];\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\tstars = document.createElement(\"span\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\tstarActive = '',\n\tstarInactive = '';\n\n\t//style stars holder\n\tstars.style.verticalAlign = \"middle\";\n\n\t//style star\n\tstar.setAttribute(\"width\", \"14\");\n\tstar.setAttribute(\"height\", \"14\");\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\tfor(var i=1;i<= maxStars;i++){\n\t\tvar nextStar = star.cloneNode(true);\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\tstars.appendChild(nextStar);\n\t}\n\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\telement.setAttribute(\"aria-label\", value);\n\n\treturn stars;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\tel = document.createElement(\"span\"),\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\tcolor = \"#666666\",\n\tpercent, percentValue;\n\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\n\t\treturn;\n\t}\n\n\tel.classList.add(\"tabulator-traffic-light\");\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set color\n\tswitch(typeof colors){\n\t\tcase \"string\":\n\t\t\tcolor = colors;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = colors(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(colors)){\n\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = colors[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n\n\tel.style.backgroundColor = color;\n\n\treturn el;\n}","import CellComponent from '../../../../core/cell/CellComponent.js';\n\nexport default function(cell, formatterParams = {}, onRendered){ //progress bar\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\telement = cell.getElement(),\n\tmax = formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams.min ? formatterParams.min : 0,\n\tlegendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\tpercent, percentValue, color, legend, legendColor;\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set bar color\n\tswitch(typeof formatterParams.color){\n\t\tcase \"string\":\n\t\t\tcolor = formatterParams.color;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = formatterParams.color(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.color)){\n\t\t\t\tlet unit = 100 / formatterParams.color.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\tcolor = \"#2DC214\";\n\t}\n\n\t//generate legend\n\tswitch(typeof formatterParams.legend){\n\t\tcase \"string\":\n\t\t\tlegend = formatterParams.legend;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegend = formatterParams.legend(value);\n\t\t\tbreak;\n\t\tcase \"boolean\":\n\t\t\tlegend = value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegend = false;\n\t}\n\n\t//set legend color\n\tswitch(typeof formatterParams.legendColor){\n\t\tcase \"string\":\n\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.legendColor)){\n\t\t\t\tlet unit = 100 / formatterParams.legendColor.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegendColor = \"#000\";\n\t}\n\n\telement.style.minWidth = \"30px\";\n\telement.style.position = \"relative\";\n\n\telement.setAttribute(\"aria-label\", percentValue);\n\n\tvar barEl = document.createElement(\"div\");\n\tbarEl.style.display = \"inline-block\";\n\tbarEl.style.width = percentValue + \"%\";\n\tbarEl.style.backgroundColor = color;\n\tbarEl.style.height = \"100%\";\n\n\tbarEl.setAttribute('data-max', max);\n\tbarEl.setAttribute('data-min', min);\n\n\tvar barContainer = document.createElement(\"div\");\n\tbarContainer.style.position = \"relative\";\n\tbarContainer.style.width = \"100%\";\n\tbarContainer.style.height = \"100%\";\n\n\tif(legend){\n\t\tvar legendEl = document.createElement(\"div\");\n\t\tlegendEl.style.position = \"absolute\";\n\t\tlegendEl.style.top = 0;\n\t\tlegendEl.style.left = 0;\n\t\tlegendEl.style.textAlign = legendAlign;\n\t\tlegendEl.style.width = \"100%\";\n\t\tlegendEl.style.color = legendColor;\n\t\tlegendEl.innerHTML = legend;\n\t}\n\n\tonRendered(function(){\n\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\tif(!(cell instanceof CellComponent)){\n\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\tholderEl.style.position = \"absolute\";\n\t\t\tholderEl.style.top = \"4px\";\n\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\tholderEl.style.left = \"4px\";\n\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\telement.appendChild(holderEl);\n\n\t\t\telement = holderEl;\n\t\t}\n\n\t\telement.appendChild(barContainer);\n\t\tbarContainer.appendChild(barEl);\n\n\t\tif(legend){\n\t\t\tbarContainer.appendChild(legendEl);\n\t\t}\n\t});\n\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\tvar content = document.createElement(\"span\");\n\tvar row = cell.getRow();\n\tvar table = cell.getTable();\n\n\trow.watchPosition((position) => {\n\t\tif (formatterParams.relativeToPage) {\n\t\t\tposition += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);\n\t\t}\n\t\tcontent.innerText = position;\n\t});\n\t\n\treturn content;\n}\n","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\treturn \"
    \";\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"div\"),\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\n\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\n\tel.innerHTML = `\n \n \n\n\n\n \n`;\n\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\tfunction toggleList(isOpen){\n\t\tvar collapseEl = config.element;\n\n\t\tconfig.open = isOpen;\n\n\t\tif(collapseEl){\n\n\t\t\tif(config.open){\n\t\t\t\tel.classList.add(\"open\");\n\t\t\t\tcollapseEl.style.display = '';\n\t\t\t}else{\n\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tel.addEventListener(\"click\", function(e){\n\t\te.stopImmediatePropagation();\n\t\ttoggleList(!config.open);\n\t\tcell.getTable().rowManager.adjustTableSize();\n\t});\n\n\ttoggleList(config.open);\n\n\treturn el;\n}","import RowComponent from '../../../../core/row/RowComponent.js';\n\nexport default function(cell, formatterParams, onRendered){\n\tvar checkbox = document.createElement(\"input\");\n\tvar blocked = false;\n\n\tcheckbox.type = 'checkbox';\n\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\n\t\n\tif(this.table.modExists(\"selectRow\", true)){\n\n\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(typeof cell.getRow == 'function'){\n\t\t\tvar row = cell.getRow();\n\n\t\t\tif(row instanceof RowComponent){\n\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\t\tif(!blocked){\n\t\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tblocked = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\tblocked = true;\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t}else{\n\t\t\t\tcheckbox = \"\";\n\t\t\t}\n\t\t}else {\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\n\t\t\t\t\tthis.table.deselectRow();\n\t\t\t\t}else {\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t}\n\t}\n\n\treturn checkbox;\n}","import plaintext from './formatters/plaintext.js';\nimport html from './formatters/html.js';\nimport textarea from './formatters/textarea.js';\nimport money from './formatters/money.js';\nimport link from './formatters/link.js';\nimport image from './formatters/image.js';\nimport tickCross from './formatters/tickCross.js';\nimport datetime from './formatters/datetime.js';\nimport datetimediff from './formatters/datetimediff.js';\nimport lookup from './formatters/lookup.js';\nimport star from './formatters/star.js';\nimport traffic from './formatters/traffic.js';\nimport progress from './formatters/progress.js';\nimport color from './formatters/color.js';\nimport buttonTick from './formatters/buttonTick.js';\nimport buttonCross from './formatters/buttonCross.js';\nimport rownum from './formatters/rownum.js';\nimport handle from './formatters/handle.js';\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\nimport rowSelection from './formatters/rowSelection.js';\n\nexport default {\n\tplaintext:plaintext,\n\thtml:html,\n\ttextarea:textarea,\n\tmoney:money,\n\tlink:link,\n\timage:image,\n\ttickCross:tickCross,\n\tdatetime:datetime,\n\tdatetimediff:datetimediff,\n\tlookup:lookup,\n\tstar:star,\n\ttraffic:traffic,\n\tprogress:progress,\n\tcolor:color,\n\tbuttonTick:buttonTick,\n\tbuttonCross:buttonCross,\n\trownum:rownum,\n\thandle:handle,\n\tresponsiveCollapse:responsiveCollapse,\n\trowSelection:rowSelection,\n};","import Module from '../../core/Module.js';\n\nimport defaultFormatters from './defaults/formatters.js';\n\nclass Format extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.registerColumnOption(\"formatter\");\n\t\tthis.registerColumnOption(\"formatterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"formatterPrint\");\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\n\t\tthis.registerColumnOption(\"formatterClipboard\");\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\n\t\tthis.registerColumnOption(\"titleFormatter\");\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\n\t}\n\t\n\t//initialize column formatter\n\tinitializeColumn(column){\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\t\t\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t\t}\n\t}\n\t\n\tlookupFormatter(column, type){\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\n\t\tformatter = column.definition[\"formatter\" + type];\n\t\t\n\t\t//set column formatter\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tconfig.formatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.formatter = formatter;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn config;\n\t}\n\t\n\tcellRendered(cell){\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\n\t\t\tcell.modules.format.renderedCallback();\n\t\t\tcell.modules.format.rendered = true;\n\t\t}\n\t}\n\t\n\t//return a formatted value for a column header\n\tformatHeader(column, title, el){\n\t\tvar formatter, params, onRendered, mockCell;\n\t\t\n\t\tif(column.definition.titleFormatter){\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\n\t\t\t\n\t\t\tonRendered = (callback) => {\n\t\t\t\tcolumn.titleFormatterRendered = callback;\n\t\t\t};\n\t\t\t\n\t\t\tmockCell = {\n\t\t\t\tgetValue:function(){\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\tgetElement:function(){\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\t\t\t\tgetType:function(){\n\t\t\t\t\treturn \"header\";\n\t\t\t\t},\n\t\t\t\tgetColumn:function(){\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetTable:() => {\n\t\t\t\t\treturn this.table;\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tparams = column.definition.titleFormatterParams || {};\n\t\t\t\n\t\t\tparams = typeof params === \"function\" ? params() : params;\n\t\t\t\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\n\t\t}else{\n\t\t\treturn title;\n\t\t}\n\t}\n\t\n\t\n\t//return a formatted value for a cell\n\tformatValue(cell){\n\t\tvar component = cell.getComponent(),\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\tif(!cell.modules.format){\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\t\t\t\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t}\n\t\t\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n\t}\n\t\n\tformatExportValue(cell, type){\n\t\tvar formatter = cell.column.modules.format[type],\n\t\tparams;\n\t\t\n\t\tif(formatter){\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(cell.getComponent()) : formatter.params;\n\t\t\t\n\t\t\tfunction onRendered(callback){\n\t\t\t\tif(!cell.modules.format){\n\t\t\t\t\tcell.modules.format = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\t\tcell.modules.format.rendered = false;\n\t\t\t}\n\t\t\t\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t\t\t\n\t\t}else{\n\t\t\treturn this.formatValue(cell);\n\t\t}\n\t}\n\t\n\tsanitizeHTML(value){\n\t\tif(value){\n\t\t\tvar entityMap = {\n\t\t\t\t'&': '&',\n\t\t\t\t'<': '<',\n\t\t\t\t'>': '>',\n\t\t\t\t'\"': '"',\n\t\t\t\t\"'\": ''',\n\t\t\t\t'/': '/',\n\t\t\t\t'`': '`',\n\t\t\t\t'=': '='\n\t\t\t};\n\t\t\t\n\t\t\treturn String(value).replace(/[&<>\"'`=/]/g, function (s) {\n\t\t\t\treturn entityMap[s];\n\t\t\t});\n\t\t}else{\n\t\t\treturn value;\n\t\t}\n\t}\n\t\n\temptyToSpace(value){\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n\t}\n\t\n\t//get formatter for cell\n\tgetFormatter(formatter){\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tformatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t//Custom formatter Function, do nothing\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn formatter;\n\t}\n}\n\nFormat.moduleName = \"format\";\n\n//load defaults\nFormat.formatters = defaultFormatters;\n\nexport default Format;","import Module from '../../core/Module.js';\n\nclass FrozenColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.initializationMode = \"left\";\n\t\tthis.active = false;\n\t\tthis.blocked = true;\n\t\t\n\t\tthis.registerColumnOption(\"frozen\");\n\t}\n\t\n\t//reset initial state\n\treset(){\n\t\tthis.initializationMode = \"left\";\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.active = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\n\t\t\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-deleted\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-show\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.reinitializeColumns.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t}\n\t\n\tblockLayout(){\n\t\tthis.blocked = true;\n\t}\n\t\n\tunblockLayout(){\n\t\tthis.blocked = false;\n\t}\n\t\n\tlayoutCell(cell){\n\t\tthis.layoutElement(cell.element, cell.column);\n\t}\n\t\n\treinitializeColumns(){\n\t\tthis.reset();\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tthis.initializeColumn(column);\n\t\t});\n\n\t\tthis.layout();\n\t}\n\t\n\t//initialize specific column\n\tinitializeColumn(column){\n\t\tvar config = {margin:0, edge:false};\n\t\t\n\t\tif(!column.isGroup){\t\t\t\n\t\t\tif(this.frozenCheck(column)){\n\t\t\t\tconfig.position = this.initializationMode;\n\t\t\t\t\n\t\t\t\tif(this.initializationMode == \"left\"){\n\t\t\t\t\tthis.leftColumns.push(column);\n\t\t\t\t}else{\n\t\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.active = true;\n\t\t\t\t\n\t\t\t\tcolumn.modules.frozen = config;\n\t\t\t}else{\n\t\t\t\tthis.initializationMode = \"right\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfrozenCheck(column){\n\t\tif(column.parent.isGroup && column.definition.frozen){\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t\t}\n\t\t\n\t\tif(column.parent.isGroup){\n\t\t\treturn this.frozenCheck(column.parent);\n\t\t}else{\n\t\t\treturn column.definition.frozen;\n\t\t}\n\t}\n\t\n\t//layout calculation rows\n\tlayoutCalcRows(){\n\t\tif(this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modExists(\"groupRows\")){\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\n\t\t\t}\n\t\t}\n\t}\n\t\n\tlayoutGroupCalcs(groups){\n\t\tgroups.forEach((group) => {\n\t\t\tif(group.calcs.top){\n\t\t\t\tthis.layoutRow(group.calcs.top);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.calcs.bottom){\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.groupList && group.groupList.length){\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//calculate column positions and layout headers\n\tlayoutColumnPosition(allCells){\n\t\tvar leftParents = [];\n\t\t\n\t\tvar leftMargin = 0;\n\t\tvar rightMargin = 0;\n\t\t\n\t\tthis.leftColumns.forEach((column, i) => {\t\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tleftMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.leftColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\n\t\t\t\tif(!leftParents.includes(parentEl)){\n\t\t\t\t\tthis.layoutElement(parentEl, column);\n\t\t\t\t\tleftParents.push(parentEl);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column, i) => {\n\t\t\t\n\t\t\tcolumn.modules.frozen.marginValue = rightMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\trightMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.rightColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetColGroupParentElement(column){\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n\t}\n\t\n\t//layout columns appropriately\n\tlayout(){\t\n\t\tif(this.active && !this.blocked){\n\t\t\t//calculate left columns\n\t\t\tthis.layoutColumnPosition();\n\t\t\t\n\t\t\tthis.reinitializeRows();\n\t\t\t\n\t\t\tthis.layoutCalcRows();\n\t\t}\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\t\t\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t\t\n\t\tvisibleRows.forEach((row) =>{\n\t\t\tif(row.type === \"row\"){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutRow(row){\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\n\t\t}\n\t\t\n\t\tthis.leftColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutElement(element, column){\n\t\tvar position;\n\t\t\n\t\tif(column.modules.frozen && element){\n\t\t\telement.style.position = \"sticky\";\n\n\t\t\tif(this.table.rtl){\n\t\t\t\tposition = column.modules.frozen.position === \"left\" ? \"right\" : \"left\";\n\t\t\t}else{\n\t\t\t\tposition = column.modules.frozen.position;\n\t\t\t}\n\t\t\n\t\t\telement.style[position] = column.modules.frozen.margin;\n\n\t\t\telement.classList.add(\"tabulator-frozen\");\n\t\t\t\n\t\t\telement.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\telement.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t}\n\t}\n\n\tadjustForScrollbar(width){\n\t\tif(this.rightColumns.length){\n\t\t\tthis.table.columnManager.getContentsElement().style.width = \"calc(100% - \" + width + \"px)\";\n\t\t}\n\t}\n\t\n\t_calcSpace(columns, index){\n\t\tvar width = 0;\n\t\t\n\t\tfor (let i = 0; i < index; i++){\n\t\t\tif(columns[i].visible){\n\t\t\t\twidth += columns[i].getWidth();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn width;\n\t}\n}\n\nFrozenColumns.moduleName = \"frozenColumns\";\n\nexport default FrozenColumns;","import Module from '../../core/Module.js';\n\nclass FrozenRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.topElement = document.createElement(\"div\");\n\t\tthis.rows = [];\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\n\n\t\t//register table options\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\n\t}\n\n\tinitialize(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\t\t\n\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\tfragment.appendChild(this.topElement);\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\n\n\t\tif(this.table.options.frozenRows){\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t}\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\tinitializeRows(){\n\t\tthis.table.rowManager.getRows().forEach((row) => {\n\t\t\tthis.initializeRow(row);\n\t\t});\n\t}\n\n\tinitializeRow(row){\n\t\tvar frozenRows = this.table.options.frozenRows,\n\t\trowType = typeof frozenRows;\n\n\t\tif(rowType === \"number\"){\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(rowType === \"function\"){\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(Array.isArray(frozenRows)){\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowFrozen(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\treturn index > -1;\n\t}\n\n\tisFrozen(){\n\t\treturn !!this.rows.length;\n\t}\n\n\tvisibleRows(viewable, rows){\n\t\tthis.rows.forEach((row) => {\n\t\t\trows.push(row);\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\t//filter frozen rows out of display data\n\tgetRows(rows){\n\t\tvar output = rows.slice(0);\n\n\t\tthis.rows.forEach(function(row){\n\t\t\tvar index = output.indexOf(row);\n\n\t\t\tif(index > -1){\n\t\t\t\toutput.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tfreezeRow(row){\n\t\tif(!row.modules.frozen){\n\t\t\trow.modules.frozen = true;\n\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\trow.initialize();\n\t\t\trow.normalizeHeight();\n\t\t\n\t\t\tthis.rows.push(row);\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.styleRows();\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t\t}\n\t}\n\n\tunfreezeRow(row){\n\t\tif(row.modules.frozen){\n\n\t\t\trow.modules.frozen = false;\n\n\t\t\tthis.detachRow(row);\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tif(this.rows.length){\n\t\t\t\tthis.styleRows();\n\t\t\t}\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t\t}\n\t}\n\n\tdetachRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t}\n\n\tstyleRows(row){\n\t\tthis.rows.forEach((row, i) => {\n\t\t\tthis.table.rowManager.styleRow(row, i);\n\t\t});\n\t}\n}\n\nFrozenRows.moduleName = \"frozenRows\";\n\nexport default FrozenRows;","//public group object\nclass GroupComponent {\n\tconstructor (group){\n\t\tthis._group = group;\n\t\tthis.type = \"GroupComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"group\", target._group, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetKey(){\n\t\treturn this._group.key;\n\t}\n\n\tgetField(){\n\t\treturn this._group.field;\n\t}\n\n\tgetElement(){\n\t\treturn this._group.element;\n\t}\n\n\tgetRows(){\n\t\treturn this._group.getRows(true);\n\t}\n\n\tgetSubGroups(){\n\t\treturn this._group.getSubGroups(true);\n\t}\n\n\tgetParentGroup(){\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\n\t}\n\n\tisVisible(){\n\t\treturn this._group.visible;\n\t}\n\n\tshow(){\n\t\tthis._group.show();\n\t}\n\n\thide(){\n\t\tthis._group.hide();\n\t}\n\n\ttoggle(){\n\t\tthis._group.toggleVisibility();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible);\n\t}\n\n\t_getSelf(){\n\t\treturn this._group;\n\t}\n\n\tgetTable(){\n\t\treturn this._group.groupManager.table;\n\t}\n}\n\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\nimport GroupComponent from './GroupComponent.js';\n\n//Group functions\nclass Group{\n\t\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\n\t\tthis.groupManager = groupManager;\n\t\tthis.parent = parent;\n\t\tthis.key = key;\n\t\tthis.level = level;\n\t\tthis.field = field;\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\t\tthis.type = \"group\"; //type of element\n\t\tthis.old = oldGroup;\n\t\tthis.rows = [];\n\t\tthis.groups = [];\n\t\tthis.groupList = [];\n\t\tthis.generator = generator;\n\t\tthis.element = false;\n\t\tthis.elementContents = false;\n\t\tthis.height = 0;\n\t\tthis.outerHeight = 0;\n\t\tthis.initialized = false;\n\t\tthis.calcs = {};\n\t\tthis.initialized = false;\n\t\tthis.modules = {};\n\t\tthis.arrowElement = false;\n\t\t\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.createElements();\n\t\tthis.addBindings();\n\t\t\n\t\tthis.createValueGroups();\n\t}\n\t\n\twipe(elementsOnly){\n\t\tif(!elementsOnly){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\tgroup.wipe();\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tif(row.modules){\n\t\t\t\t\t\tdelete row.modules.group;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n\t\n\tcreateElements(){\n\t\tvar arrow = document.createElement(\"div\");\n\t\tarrow.classList.add(\"tabulator-arrow\");\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-row\");\n\t\tthis.element.classList.add(\"tabulator-group\");\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tthis.arrowElement = document.createElement(\"div\");\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\t\tthis.arrowElement.appendChild(arrow);\n\t\t\n\t\t//setup movable rows\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t\t}\n\t}\n\t\n\tcreateValueGroups(){\n\t\tvar level = this.level + 1;\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\n\t\t\t\tthis._createGroup(value, level);\n\t\t\t});\n\t\t}\n\t}\n\t\n\taddBindings(){\n\t\tvar toggleElement;\n\t\t\n\t\tif(this.groupManager.table.options.groupToggleElement){\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\n\t\t\t\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\n\t\t\t\tif(this.groupManager.table.options.groupToggleElement === \"arrow\"){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t}\n\n\t\t\t\t//allow click event to propagate before toggling visibility\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.toggleVisibility();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\t\n\t_createGroup(groupID, level){\n\t\tvar groupKey = level + \"_\" + groupID;\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\t_addRowToGroup(row){\n\t\t\n\t\tvar level = this.level + 1;\n\t\t\n\t\tif(this.hasSubGroups){\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t\tgroupKey = level + \"_\" + groupID;\n\t\t\t\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\t\tif(this.groups[groupKey]){\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!this.groups[groupKey]){\n\t\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_addRow(row){\n\t\tthis.rows.push(row);\n\t\trow.modules.group = this;\n\t}\n\t\n\tinsertRow(row, to, after){\n\t\tvar data = this.conformRowData({});\n\t\t\n\t\trow.updateData(data);\n\t\t\n\t\tvar toIndex = this.rows.indexOf(to);\n\t\t\n\t\tif(toIndex > -1){\n\t\t\tif(after){\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\n\t\t\t}else{\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t\t}\n\t\t}else{\n\t\t\tif(after){\n\t\t\t\tthis.rows.push(row);\n\t\t\t}else{\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\trow.modules.group = this;\n\t\t\n\t\t// this.generateGroupHeaderContents();\n\t\t\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t\t\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\t\n\tscrollHeader(left){\n\t\tif(this.arrowElement){\n\t\t\tthis.arrowElement.style.marginLeft = left;\n\t\t\t\n\t\t\tthis.groupList.forEach(function(child){\n\t\t\t\tchild.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tgetRowIndex(row){}\n\t\n\t//update row data to match grouping constraints\n\tconformRowData(data){\n\t\tif(this.field){\n\t\t\tdata[this.field] = this.key;\n\t\t}else{\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t\t}\n\t\t\n\t\tif(this.parent){\n\t\t\tdata = this.parent.conformRowData(data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\tremoveRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\tvar el = row.getElement();\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t\t\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t}else{\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\t\t\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(el.parentNode){\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupManager.blockRedraw){\n\t\t\t\tthis.generateGroupHeaderContents();\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupList.length){\n\t\t\t\tif(this.parent){\n\t\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t\t}else{\n\t\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetHeadersAndRows(){\n\t\tvar output = [];\n\t\t\n\t\toutput.push(this);\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\t\n\t\tif(this.calcs.top){\n\t\t\tthis.calcs.top.detachElement();\n\t\t\tthis.calcs.top.deleteCells();\n\t\t}\n\t\t\n\t\tif(this.calcs.bottom){\n\t\t\tthis.calcs.bottom.detachElement();\n\t\t\tthis.calcs.bottom.deleteCells();\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\tif(this.visible){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput = output.concat(this.rows);\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetData(visible, transform){\n\t\tvar output = [];\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(!visible || (visible && this.visible)){\n\t\t\tthis.rows.forEach((row) => {\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRowCount(){\n\t\tvar count = 0;\n\t\t\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tcount += group.getRowCount();\n\t\t\t});\n\t\t}else{\n\t\t\tcount = this.rows.length;\n\t\t}\n\t\treturn count;\n\t}\n\n\t\n\ttoggleVisibility(){\n\t\tif(this.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\t\n\thide(){\n\t\tthis.visible = false;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\t\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\trow.detachElement();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\n\t}\n\t\n\tshow(){\n\t\tthis.visible = true;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tvar prev = this.generateElement();\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\t\trow.initialize();\n\t\t\t\t\t\tprev = rowEl;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\n\t}\n\t\n\t_visSet(){\n\t\tvar data = [];\n\t\t\n\t\tif(typeof this.visible == \"function\"){\n\t\t\t\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\tdata.push(row.getData());\n\t\t\t});\n\t\t\t\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t\t}\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\t\n\t\t\t\tif(result){\n\t\t\t\t\tmatch = result;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tif(this.rows.find(function(item){\n\t\t\t\treturn item === row;\n\t\t\t})){\n\t\t\t\tmatch = this;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetSubGroups(component){\n\t\tvar output = [];\n\t\t\n\t\tthis.groupList.forEach(function(child){\n\t\t\toutput.push(component ? child.getComponent() : child);\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRows(component, includeChildren){\n\t\tvar output = [];\n\t\t\n\t\tif(includeChildren && this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getRows(component, includeChildren));\n\t\t\t});\n\t\t}else{\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\toutput.push(component ? row.getComponent() : row);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgenerateGroupHeaderContents(){\n\t\tvar data = [];\n\t\t\n\t\tvar rows = this.getRows(false, true);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\t\t\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\n\t\tif(typeof this.elementContents === \"string\"){\n\t\t\tthis.element.innerHTML = this.elementContents;\n\t\t}else{\n\t\t\tthis.element.appendChild(this.elementContents);\n\t\t}\n\t\t\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n\t}\n\t\n\tgetPath(path = []) {\n\t\tpath.unshift(this.key);\n\t\tif(this.parent) {\n\t\t\tthis.parent.getPath(path);\n\t\t}\n\t\treturn path;\n\t}\n\t\n\t////////////// Standard Row Functions //////////////\n\t\n\tgetElement(){\n\t\treturn this.elementContents ? this.element : this.generateElement();\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.addBindings = false;\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(this.visible){\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t}else{\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t\t}\n\t\t\n\t\tthis.generateGroupHeaderContents();\n\t\t\n\t\t// this.addBindings();\n\t\t\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(){\n\t\tthis.setHeight(this.element.clientHeight);\n\t}\n\t\n\tinitialize(force){\n\t\tif(!this.initialized || force){\n\t\t\tthis.normalizeHeight();\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\treinitialize(){\n\t\tthis.initialized = false;\n\t\tthis.height = 0;\n\t\t\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.initialize(true);\n\t\t}\n\t}\n\t\n\tsetHeight(height){\n\t\tif(this.height != height){\n\t\t\tthis.height = height;\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\tgetGroup(){\n\t\treturn this;\n\t}\n\t\n\treinitializeHeight(){}\n\t\n\tcalcHeight(){}\n\t\n\tsetCellHeight(){}\n\t\n\tclearCellHeight(){}\n\t\n\tdeinitializeHeight(){}\n\n\trendered(){}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new GroupComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n\nexport default Group;","import Module from '../../core/Module.js';\n\nimport Group from './Group.js';\n\nclass GroupRows extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\tthis.groupList = []; //ordered list of groups\n\t\tthis.allowedValues = false;\n\t\tthis.groups = {}; //hold row groups\n\t\t\n\t\tthis.displayHandler = this.getRows.bind(this);\n\n\t\tthis.blockRedraw = false;\n\t\t\n\t\t//register table options\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\n\t\tthis.registerTableOption(\"groupValues\", false);\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\n\t\t\n\t\t//register table functions\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\n\t}\n\t\n\t//initialize group configuration\n\tinitialize(){\n\t\tthis.subscribe(\"table-destroy\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wipe\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wiped\", this._restore_redrawing.bind(this));\n\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t_blockRedrawing(){\n\t\tthis.blockRedraw = true;\n\t}\n\n\t_restore_redrawing(){\n\t\tthis.blockRedraw = false;\n\t}\n\n\tconfigureGroupSetup(){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar groupBy = this.table.options.groupBy,\n\t\t\tstartOpen = this.table.options.groupStartOpen,\n\t\t\tgroupHeader = this.table.options.groupHeader;\n\t\t\t\n\t\t\tthis.allowedValues = this.table.options.groupValues;\n\t\t\t\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\t\t\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\n\t\t\t\t};\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupIDLookups = [];\n\t\t\t\n\t\t\tif(groupBy){\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\t\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\t\t\t\t\t\n\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\tif(col.definition.topCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(col.definition.bottomCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(!Array.isArray(groupBy)){\n\t\t\t\tgroupBy = [groupBy];\n\t\t\t}\n\t\t\t\n\t\t\tgroupBy.forEach((group, i) => {\n\t\t\t\tvar lookupFunc, column;\n\t\t\t\t\n\t\t\t\tif(typeof group == \"function\"){\n\t\t\t\t\tlookupFunc = group;\n\t\t\t\t}else{\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn data[group];\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groupIDLookups.push({\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\t\t\tfunc:lookupFunc,\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tif(startOpen){\n\t\t\t\tif(!Array.isArray(startOpen)){\n\t\t\t\t\tstartOpen = [startOpen];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstartOpen.forEach((level) => {\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.startOpen = startOpen;\n\t\t\t}\n\t\t\t\n\t\t\tif(groupHeader){\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t\t\t}\n\t\t}else{\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\trowSample(rows, prevValue){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar group = this.getGroups(false)[0];\n\t\t\t\n\t\t\tprevValue.push(group.getRows(false)[0]);\n\t\t}\n\t\t\n\t\treturn prevValue;\n\t}\n\t\n\tvirtualRenderFill(){\n\t\tvar el = this.table.rowManager.tableElement;\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\trows = rows.filter((row) => {\n\t\t\t\treturn row.type !== \"group\";\n\t\t\t});\n\t\t\t\n\t\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\n\t\t}else{\n\t\t\treturn rows;\n\t\t}\n\t}\n\t\n\trowAddingIndex(row, index, top){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.assignRowToGroup(row);\n\t\t\t\n\t\t\tvar groupRows = row.modules.group.rows;\n\t\t\t\n\t\t\tif(groupRows.length > 1){\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\n\t\t\t\t\tif(top){\n\t\t\t\t\t\tif(groupRows[0] !== row){\n\t\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn index;\n\t\t}\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"group-changed\");\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tsetGroupBy(groups){\n\t\tthis.table.options.groupBy = groups;\n\t\t\n\t\tif(!this.initialized){\n\t\t\tthis.initialize();\n\t\t}\n\t\t\n\t\tthis.configureGroupSetup();\n\n\t\tif(!groups && this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs === true){\n\t\t\tthis.table.modules.columnCalcs.reinitializeCalcs();\n\t\t}\n\t\t\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupValues(groupValues){\n\t\tthis.table.options.groupValues = groupValues;\n\t\tthis.configureGroupSetup();\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupStartOpen(values){\n\t\tthis.table.options.groupStartOpen = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tsetGroupHeader(values){\n\t\tthis.table.options.groupHeader = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tuserGetGroups(values){\n\t\treturn this.getGroups(true);\n\t}\n\t\n\t// get grouped table data in the same format as getData()\n\tuserGetGroupedData(){\n\t\treturn this.table.options.groupBy ? this.getGroupedData() : this.getData();\n\t}\n\t\n\t\n\t///////////////////////////////////////\n\t///////// Component Functions /////////\n\t///////////////////////////////////////\n\t\n\trowGetGroup(row){\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\trowMoving(from, to, after){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(!after && to instanceof Group){\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t\t}\n\t\t\t\n\t\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\n\t\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\n\t\t\t\n\t\t\tif(toGroup === fromGroup){\n\t\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\n\t\t\t}else{\n\t\t\t\tif(fromGroup){\n\t\t\t\t\tfromGroup.removeRow(from);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttoGroup.insertRow(from, to, after);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\trowDeleting(row){\n\t\t//remove from group\n\t\tif(this.table.options.groupBy && row.modules.group){\n\t\t\trow.modules.group.removeRow(row);\n\t\t}\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.updateGroupRows(true);\n\t\t}\t\n\t}\n\t\n\tcellUpdated(cell){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.reassignRowToGroup(cell.row);\n\t\t}\n\t}\n\t\n\t//return appropriate rows with group headers\n\tgetRows(rows){\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\n\t\t\t\n\t\t\tthis.generateGroups(rows);\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\n\t\t\t}\n\t\t\t\n\t\t\treturn this.updateGroupRows();\n\t\t\t\n\t\t}else{\n\t\t\treturn rows.slice(0);\n\t\t}\n\t}\n\t\n\tgetGroups(component){\n\t\tvar groupComponents = [];\n\t\t\n\t\tthis.groupList.forEach(function(group){\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\tgetChildGroups(group){\n\t\tvar groupComponents = [];\n\t\t\n\t\tif(!group){\n\t\t\tgroup = this;\n\t\t}\n\t\t\n\t\tgroup.groupList.forEach((child) => {\n\t\t\tif(child.groupList.length){\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\n\t\t\t}else{\n\t\t\t\tgroupComponents.push(child);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\twipe(){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tgroup.wipe();\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\tpullGroupListData(groupList) {\n\t\tvar groupListData = [];\n\t\t\n\t\tgroupList.forEach((group) => {\n\t\t\tvar groupHeader = {};\n\t\t\tgroupHeader.level = 0;\n\t\t\tgroupHeader.rowCount = 0;\n\t\t\tgroupHeader.headerContent = \"\";\n\t\t\tvar childData = [];\n\t\t\t\n\t\t\tif (group.hasSubGroups) {\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\n\t\t\t\t\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\tgroupListData = groupListData.concat(childData);\n\t\t\t}\n\t\t\t\n\t\t\telse {\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\t\n\t\t\t\tgroup.getRows().forEach((row) => {\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupListData;\n\t}\n\t\n\tgetGroupedData(){\n\t\t\n\t\treturn this.pullGroupListData(this.groupList);\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\t\n\t\tif(this.options(\"dataTree\")){\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\n\t\t}\n\t\t\n\t\tthis.groupList.forEach((group) => {\n\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\n\t\t\tif(result){\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tcountGroups(){\n\t\treturn this.groupList.length;\n\t}\n\t\n\tgenerateGroups(rows){\n\t\tvar oldGroups = this.groups;\n\t\t\n\t\tthis.groups = {};\n\t\tthis.groupList = [];\n\t\t\n\t\tif(this.allowedValues && this.allowedValues[0]){\n\t\t\tthis.allowedValues[0].forEach((value) => {\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\n\t\t\t});\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\n\t\t\t});\n\t\t}else{\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\n\t\t\t});\n\t\t}\n\t\t\n\t\tObject.values(oldGroups).forEach((group) => {\n\t\t\tgroup.wipe(true);\n\t\t});\t\n\t}\n\t\n\t\n\tcreateGroup(groupID, level, oldGroups){\n\t\tvar groupKey = level + \"_\" + groupID,\n\t\tgroup;\n\t\t\n\t\toldGroups = oldGroups || [];\n\t\t\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\tassignRowToExistingGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tgroupKey = \"0_\" + groupID;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n\t\n\tassignRowToGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\n\t\t\n\t\tif(newGroupNeeded){\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\n\t\t}\n\t\t\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\n\t\t\n\t\treturn !newGroupNeeded;\n\t}\n\t\n\treassignRowToGroup(row){\n\t\tif(row.type === \"row\"){\n\t\t\tvar oldRowGroup = row.modules.group,\n\t\t\toldGroupPath = oldRowGroup.getPath(),\n\t\t\tnewGroupPath = this.getExpectedPath(row),\n\t\t\tsamePath;\n\t\t\t\n\t\t\t// figure out if new group path is the same as old group path\n\t\t\tsamePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\n\t\t\t\treturn element === newGroupPath[index];\n\t\t\t});\n\t\t\t\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\t\t\tif(!samePath) {\n\t\t\t\toldRowGroup.removeRow(row);\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetExpectedPath(row) {\n\t\tvar groupPath = [], rowData = row.getData();\n\t\t\n\t\tthis.groupIDLookups.forEach((groupId) => {\n\t\t\tgroupPath.push(groupId.func(rowData));\n\t\t});\n\t\t\n\t\treturn groupPath;\n\t}\n\t\n\tupdateGroupRows(force){\n\t\tvar output = [];\n\n\t\tif(!this.blockRedraw){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tscrollHeaders(left){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\n\t\t\t}\n\t\t\t\n\t\t\tleft = left + \"px\";\n\t\t\t\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tgroup.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcheckBasicModeGroupHeaderWidth(){\n\t\tvar element = this.table.rowManager.tableElement,\n\t\tonlyGroupHeaders = true;\n\t\t\n\t\tthis.table.rowManager.getDisplayRows().forEach((row, index) =>{\n\t\t\tthis.table.rowManager.styleRow(row, index);\n\t\t\telement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t\t\n\t\t\tif(row.type !== \"group\"){\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n}\n\nGroupRows.moduleName = \"groupRows\";\n\nexport default GroupRows;","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tvar after = (action.data.posFrom - action.data.posTo) > 0;\n\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after);\n\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete:function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after);\n\t\t\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","import Module from '../../core/Module.js';\nimport Row from '../../core/row/Row.js';\nimport Cell from '../../core/cell/Cell.js';\n\nimport defaultUndoers from './defaults/undoers.js';\nimport defaultRedoers from './defaults/redoers.js';\n\nclass History extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.history){\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\n\t}\n\n\trowMoved(from, to, after){\n\t\tthis.action(\"rowMove\", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after});\n\t}\n\n\trowAdded(row, data, pos, index){\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\n\t}\n\n\trowDeleted(row){\n\t\tvar index, rows;\n\n\t\tif(this.table.options.groupBy){\n\n\t\t\trows = row.getComponent().getGroup()._getSelf().rows;\n\t\t\tindex = rows.indexOf(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = rows[index-1];\n\t\t\t}\n\t\t}else{\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\n\t\t\t}\n\t\t}\n\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\n\t}\n\n\tcellUpdated(cell){\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\n\t}\n\n\tclear(){\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t}\n\n\taction(type, component, data){\n\t\tthis.history = this.history.slice(0, this.index + 1);\n\n\t\tthis.history.push({\n\t\t\ttype:type,\n\t\t\tcomponent:component,\n\t\t\tdata:data,\n\t\t});\n\n\t\tthis.index ++;\n\t}\n\n\tgetHistoryUndoSize(){\n\t\treturn this.index + 1;\n\t}\n\n\tgetHistoryRedoSize(){\n\t\treturn this.history.length - (this.index + 1);\n\t}\n\n\tclearComponentHistory(component){\n\t\tvar index = this.history.findIndex(function(item){\n\t\t\treturn item.component === component;\n\t\t});\n\n\t\tif(index > -1){\n\t\t\tthis.history.splice(index, 1);\n\t\t\tif(index <= this.index){\n\t\t\t\tthis.index--;\n\t\t\t}\n\n\t\t\tthis.clearComponentHistory(component);\n\t\t}\n\t}\n\n\tundo(){\n\t\tif(this.index > -1){\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.undoers[action.type].call(this, action);\n\n\t\t\tthis.index--;\n\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Undo Error - No more history to undo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tredo(){\n\t\tif(this.history.length-1 > this.index){\n\n\t\t\tthis.index++;\n\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.redoers[action.type].call(this, action);\n\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Redo Error - No more history to redo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//rebind rows to new element after deletion\n\t_rebindRow(oldRow, newRow){\n\t\tthis.history.forEach(function(action){\n\t\t\tif(action.component instanceof Row){\n\t\t\t\tif(action.component === oldRow){\n\t\t\t\t\taction.component = newRow;\n\t\t\t\t}\n\t\t\t}else if(action.component instanceof Cell){\n\t\t\t\tif(action.component.row === oldRow){\n\t\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\t\tif(field){\n\t\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nHistory.moduleName = \"history\";\n\n//load defaults\nHistory.undoers = defaultUndoers;\nHistory.redoers = defaultRedoers;\n\nexport default History;","import Module from '../../core/Module.js';\n\nclass HtmlTableImport extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.fieldIndex = [];\n\t\tthis.hasIndex = false;\n\t}\n\n\tinitialize(){\n\t\tthis.tableElementCheck();\n\t}\n\n\ttableElementCheck(){\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\n\t\t\tif(this.table.originalElement.childNodes.length){\n\t\t\t\tthis.parseTable();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tparseTable(){\n\t\tvar element = this.table.originalElement,\n\t\toptions = this.table.options,\n\t\theaders = element.getElementsByTagName(\"th\"),\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\n\t\tdata = [];\n\n\t\tthis.hasIndex = false;\n\n\t\tthis.dispatchExternal(\"htmlImporting\");\n\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t\t//check for Tabulator inline options\n\t\tthis._extractOptions(element, options);\n\n\t\tif(headers.length){\n\t\t\tthis._extractHeaders(headers, rows);\n\t\t}else{\n\t\t\tthis._generateBlankHeaders(headers, rows);\n\t\t}\n\n\t\t//iterate through table rows and build data set\n\t\tfor(var index = 0; index < rows.length; index++){\n\t\t\tvar row = rows[index],\n\t\t\tcells = row.getElementsByTagName(\"td\"),\n\t\t\titem = {};\n\n\t\t\t//create index if the don't exist in table\n\t\t\tif(!this.hasIndex){\n\t\t\t\titem[options.index] = index;\n\t\t\t}\n\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\tvar cell = cells[i];\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//add row data to item\n\t\t\tdata.push(item);\n\t\t}\n\n\t\toptions.data = data;\n\n\t\tthis.dispatchExternal(\"htmlImported\");\n\t}\n\n\t//extract tabulator attribute options\n\t_extractOptions(element, options, defaultOptions){\n\t\tvar attributes = element.attributes;\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\n\t\tvar optionsList = {};\n\n\t\toptionsArr.forEach((item) => {\n\t\t\toptionsList[item.toLowerCase()] = item;\n\t\t});\n\n\t\tfor(var index in attributes){\n\t\t\tvar attrib = attributes[index];\n\t\t\tvar name;\n\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//get value of attribute\n\t_attribValue(value){\n\t\tif(value === \"true\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(value === \"false\"){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t//find column if it has already been defined\n\t_findCol(title){\n\t\tvar match = this.table.options.columns.find((column) => {\n\t\t\treturn column.title === title;\n\t\t});\n\n\t\treturn match || false;\n\t}\n\n\t//extract column from headers\n\t_extractHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\texists = false,\n\t\t\tcol = this._findCol(header.textContent),\n\t\t\twidth;\n\n\t\t\tif(col){\n\t\t\t\texists = true;\n\t\t\t}else{\n\t\t\t\tcol = {title:header.textContent.trim()};\n\t\t\t}\n\n\t\t\tif(!col.field) {\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replaceAll(\" \", \"_\");\n\t\t\t}\n\n\t\t\twidth = header.getAttribute(\"width\");\n\n\t\t\tif(width && !col.width)\t{\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\t//check for Tabulator inline options\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tif(col.field == this.table.options.index){\n\t\t\t\tthis.hasIndex = true;\n\t\t\t}\n\n\t\t\tif(!exists){\n\t\t\t\tthis.table.options.columns.push(col);\n\t\t\t}\n\n\t\t}\n\t}\n\n\t//generate blank headers\n\t_generateBlankHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\tcol = {title:\"\", field:\"col\" + index};\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tvar width = header.getAttribute(\"width\");\n\n\t\t\tif(width){\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n}\n\nHtmlTableImport.moduleName = \"htmlTableImport\";\n\nexport default HtmlTableImport;\n","function csvImporter(input){\n\tvar data = [],\n\trow = 0, \n\tcol = 0,\n\tinQuote = false;\n \n\t//Iterate over each character\n\tfor (let index = 0; index < input.length; index++) {\n\t\tlet char = input[index], \n\t\tnextChar = input[index+1]; \n \n\t\t//Initialize empty row\n\t\tif(!data[row]){\n\t\t\tdata[row] = [];\n\t\t}\n\n\t\t//Initialize empty column\n\t\tif(!data[row][col]){\n\t\t\tdata[row][col] = \"\";\n\t\t}\n \n\t\t//Handle quotation mark inside string\n\t\tif (char == '\"' && inQuote && nextChar == '\"') { \n\t\t\tdata[row][col] += char; \n\t\t\tindex++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//Begin / End Quote\n\t\tif (char == '\"') { \n\t\t\tinQuote = !inQuote;\n\t\t\tcontinue;\n\t\t}\n \n\t\t//Next column (if not in quote)\n\t\tif (char == ',' && !inQuote) { \n\t\t\tcol++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CRLF) \n\t\tif (char == '\\r' && nextChar == '\\n' && !inQuote) { \n\t\t\tcol = 0; \n\t\t\trow++; \n\t\t\tindex++; \n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CR or LF) \n\t\tif ((char == '\\r' || char == '\\n') && !inQuote) { \n\t\t\tcol = 0;\n\t\t\trow++;\n\t\t\tcontinue; \n\t\t}\n\n\t\t//Normal Character, append to column\n\t\tdata[row][col] += char;\n\t}\n\n\treturn data;\n}\n\nexport default csvImporter;","export default function(input){\n\ttry {\n\t\treturn JSON.parse(input);\n\t} catch(e) {\n\t\tconsole.warn(\"JSON Import Error - File contents is invalid JSON\", e);\n\t\treturn Promise.reject();\n\t}\n}","function arrayImporter(input){\n\treturn input;\n}\n\nexport default arrayImporter;","import csv from './importers/csv.js';\nimport json from './importers/json.js';\nimport array from './importers/array.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tarray:array,\n};","import Module from '../../core/Module.js';\n\nimport defaultImporters from './defaults/importers.js';\n\nclass Import extends Module{\n \n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.registerTableOption(\"importFormat\");\n\t\tthis.registerTableOption(\"importReader\", \"text\");\n\t}\n \n\tinitialize(){\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\n\n\t\tif(this.table.options.importFormat){\n\t\t\tthis.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\n\t\t\tthis.subscribe(\"data-load\", this.loadData.bind(this), 10);\n\t\t}\n\t}\n\n\tloadDataCheck(data){\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\n\t}\n\n\tloadData(data, params, config, silent, previousData){\n\t\treturn this.importData(this.lookupImporter(), data)\n\t\t\t.then(this.structureData.bind(this))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import data\");\n\t\t\t\treturn Promise.reject(err);\n\t\t\t});\n\t}\n\n\tlookupImporter(importFormat){\n\t\tvar importer;\n \n\t\tif(!importFormat){\n\t\t\timportFormat = this.table.options.importFormat;\n\t\t}\n \n\t\tif(typeof importFormat === \"string\"){\n\t\t\timporter = Import.importers[importFormat];\n\t\t}else{\n\t\t\timporter = importFormat;\n\t\t}\n\n\t\tif(!importer){\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\n\t\t}\n \n\t\treturn importer;\n\t}\n \n\timportFromFile(importFormat, extension){\n\t\tvar importer = this.lookupImporter(importFormat);\n \n\t\tif(importer){\n\t\t\treturn this.pickFile(extension)\n\t\t\t\t.then(this.importData.bind(this, importer))\n\t\t\t\t.then(this.structureData.bind(this))\n\t\t\t\t.then(this.setData.bind(this))\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t});\n\t\t}\n\t}\n \n\tpickFile(extensions){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.type = \"file\";\n\t\t\tinput.accept = extensions;\n \n\t\t\tinput.addEventListener(\"change\", (e) => {\n\t\t\t\tvar file = input.files[0],\n\t\t\t\treader = new FileReader();\n \n\t\t\t\tswitch(this.table.options.importReader){\n\t\t\t\t\tcase \"buffer\":\n\t\t\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"binary\":\n\t\t\t\t\t\treader.readAsBinaryString(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\treader.readAsDataURL(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treader.readAsText(file);\n\t\t\t\t}\n \n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\tresolve(reader.result);\n\t\t\t\t};\n \n\t\t\t\treader.onerror = (e) => {\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\t\treject();\n\t\t\t\t};\n\t\t\t});\n \n\t\t\tinput.click();\n\t\t});\n\t}\n \n\timportData(importer, fileContents){\n\t\tvar data = importer.call(this.table, fileContents);\n \n\t\tif(data instanceof Promise){\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn data ? Promise.resolve(data) : Promise.reject();\n\t\t}\n\t}\n\n\tstructureData(parsedData){\n\t\tvar data = [];\n \n\t\tif(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\n\t\t\tif(this.table.options.autoColumns){\n\t\t\t\tdata = this.structureArrayToObject(parsedData);\n\t\t\t}else{\n\t\t\t\tdata = this.structureArrayToColumns(parsedData);\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn parsedData;\n\t\t}\n\t}\n\n\tstructureArrayToObject(parsedData){\n\t\tvar columns = parsedData.shift();\n\n\t\tvar data = parsedData.map((values) => {\n\t\t\tvar row = {};\n\n\t\t\tcolumns.forEach((key, i) => {\n\t\t\t\trow[key] = values[i];\n\t\t\t});\n\n\t\t\treturn row;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tstructureArrayToColumns(parsedData){\n\t\tvar data = [],\n\t\tcolumns = this.table.getColumns();\n\n\t\t//remove first row if it is the column names\n\t\tif(columns[0] && parsedData[0][0]){\n\t\t\tif(columns[0].getDefinition().title === parsedData[0][0]){\n\t\t\t\tparsedData.shift();\n\t\t\t}\n\t\t}\n \n\t\t//convert row arrays to objects\n\t\tparsedData.forEach((rowData) => {\n\t\t\tvar row = {};\n\n\t\t\trowData.forEach((value, index) => {\n\t\t\t\tvar column = columns[index];\n\n\t\t\t\tif(column){\n\t\t\t\t\trow[column.getField()] = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdata.push(row);\n\t\t});\n\n\t\treturn data;\n\t}\n \n\tsetData(data){\n\t\treturn this.table.setData(data);\n\t}\n}\n\nImport.moduleName = \"import\";\n\n//load defaults\nImport.importers = defaultImporters;\n\nexport default Import;","import Module from '../../core/Module.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\n\nclass Interaction extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.eventMap = {\n\t\t\t//row events\n\t\t\trowClick:\"row-click\",\n\t\t\trowDblClick:\"row-dblclick\",\n\t\t\trowContext:\"row-contextmenu\",\n\t\t\trowMouseEnter:\"row-mouseenter\",\n\t\t\trowMouseLeave:\"row-mouseleave\",\n\t\t\trowMouseOver:\"row-mouseover\",\n\t\t\trowMouseOut:\"row-mouseout\",\n\t\t\trowMouseMove:\"row-mousemove\",\n\t\t\trowMouseDown:\"row-mousedown\",\n\t\t\trowMouseUp:\"row-mouseup\",\n\t\t\trowTap:\"row\",\n\t\t\trowDblTap:\"row\",\n\t\t\trowTapHold:\"row\",\n\n\t\t\t//cell events\n\t\t\tcellClick:\"cell-click\",\n\t\t\tcellDblClick:\"cell-dblclick\",\n\t\t\tcellContext:\"cell-contextmenu\",\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\n\t\t\tcellMouseOver:\"cell-mouseover\",\n\t\t\tcellMouseOut:\"cell-mouseout\",\n\t\t\tcellMouseMove:\"cell-mousemove\",\n\t\t\tcellMouseDown:\"cell-mousedown\",\n\t\t\tcellMouseUp:\"cell-mouseup\",\n\t\t\tcellTap:\"cell\",\n\t\t\tcellDblTap:\"cell\",\n\t\t\tcellTapHold:\"cell\",\n\n\t\t\t//column header events\n\t\t\theaderClick:\"column-click\",\n\t\t\theaderDblClick:\"column-dblclick\",\n\t\t\theaderContext:\"column-contextmenu\",\n\t\t\theaderMouseEnter:\"column-mouseenter\",\n\t\t\theaderMouseLeave:\"column-mouseleave\",\n\t\t\theaderMouseOver:\"column-mouseover\",\n\t\t\theaderMouseOut:\"column-mouseout\",\n\t\t\theaderMouseMove:\"column-mousemove\",\n\t\t\theaderMouseDown:\"column-mousedown\",\n\t\t\theaderMouseUp:\"column-mouseup\",\n\t\t\theaderTap:\"column\",\n\t\t\theaderDblTap:\"column\",\n\t\t\theaderTapHold:\"column\",\n\n\t\t\t//group header\n\t\t\tgroupClick:\"group-click\",\n\t\t\tgroupDblClick:\"group-dblclick\",\n\t\t\tgroupContext:\"group-contextmenu\",\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\n\t\t\tgroupMouseOver:\"group-mouseover\",\n\t\t\tgroupMouseOut:\"group-mouseout\",\n\t\t\tgroupMouseMove:\"group-mousemove\",\n\t\t\tgroupMouseDown:\"group-mousedown\",\n\t\t\tgroupMouseUp:\"group-mouseup\",\n\t\t\tgroupTap:\"group\",\n\t\t\tgroupDblTap:\"group\",\n\t\t\tgroupTapHold:\"group\",\n\t\t};\n\n\t\tthis.subscribers = {};\n\n\t\tthis.touchSubscribers = {};\n\n\t\tthis.columnSubscribers = {};\n\n\t\tthis.touchWatchers = {\n\t\t\trow:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcell:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcolumn:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tgroup:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t}\n\t\t};\n\n\t\tthis.registerColumnOption(\"headerClick\");\n\t\tthis.registerColumnOption(\"headerDblClick\");\n\t\tthis.registerColumnOption(\"headerContext\");\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\n\t\tthis.registerColumnOption(\"headerMouseOver\");\n\t\tthis.registerColumnOption(\"headerMouseOut\");\n\t\tthis.registerColumnOption(\"headerMouseMove\");\n\t\tthis.registerColumnOption(\"headerMouseDown\");\n\t\tthis.registerColumnOption(\"headerMouseUp\");\n\t\tthis.registerColumnOption(\"headerTap\");\n\t\tthis.registerColumnOption(\"headerDblTap\");\n\t\tthis.registerColumnOption(\"headerTapHold\");\n\n\t\tthis.registerColumnOption(\"cellClick\");\n\t\tthis.registerColumnOption(\"cellDblClick\");\n\t\tthis.registerColumnOption(\"cellContext\");\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\n\t\tthis.registerColumnOption(\"cellMouseOver\");\n\t\tthis.registerColumnOption(\"cellMouseOut\");\n\t\tthis.registerColumnOption(\"cellMouseMove\");\n\t\tthis.registerColumnOption(\"cellMouseDown\");\n\t\tthis.registerColumnOption(\"cellMouseUp\");\n\t\tthis.registerColumnOption(\"cellTap\");\n\t\tthis.registerColumnOption(\"cellDblTap\");\n\t\tthis.registerColumnOption(\"cellTapHold\");\n\n\t}\n\n\tinitialize(){\n\t\tthis.initializeExternalEvents();\n\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.clearTouchWatchers.bind(this));\n\t\tthis.subscribe(\"scroll-vertical\", this.clearTouchWatchers.bind(this));\n\t}\n\n\tclearTouchWatchers(){\n\t\tvar types = Object.values(this.touchWatchers);\n\n\t\ttypes.forEach((type) => {\n\t\t\tfor(let key in type){\n\t\t\t\ttype[key] = null;\n\t\t\t}\n\t\t});\n\t}\n\t\t\n\tcellContentsSelectionFixer(e, cell){\n\t\tvar range;\n\n\t\tif(this.table.modExists(\"edit\")){\n\t\t\tif (this.table.modules.edit.currentCell === cell){\n\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t}\n\t\t}\n\n\t\te.preventDefault();\n\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\n\tinitializeExternalEvents(){\n\t\tfor(let key in this.eventMap){\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key));\n\t\t}\n\t}\n\n\tsubscriptionChanged(key, added){\n\t\tif(added){\n\t\t\tif(!this.subscribers[key]){\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t}else{\n\t\t\t\t\tthis.subscribeTouchEvents(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t\tdelete this.subscribers[key];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.unsubscribeTouchEvents(key);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tsubscribeTouchEvents(key){\n\t\tvar type = this.eventMap[key];\n\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\n\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\t\t}\n\n\t\tthis.subscribers[key] = true;\n\t}\n\n\tunsubscribeTouchEvents(key){\n\t\tvar noTouch = true,\n\t\ttype = this.eventMap[key];\n\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\n\t\t\tdelete this.subscribers[key];\n\n\t\t\tfor(let i in this.eventMap){\n\t\t\t\tif(this.eventMap[i] === type){\n\t\t\t\t\tif(this.subscribers[i]){\n\t\t\t\t\t\tnoTouch = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(noTouch){\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\n\t\tfor(let key in this.eventMap){\n\t\t\tif(def[key]){\n\t\t\t\tthis.subscriptionChanged(key, true);\n\n\t\t\t\tif(!this.columnSubscribers[key]){\n\t\t\t\t\tthis.columnSubscribers[key] = [];\n\t\t\t\t}\n\n\t\t\t\tthis.columnSubscribers[key].push(column);\n\t\t\t}\n\t\t}\n\t}\n\n\thandle(action, e, component){\n\t\tthis.dispatchEvent(action, e, component);\n\t}\n\n\thandleTouch(type, action, e, component){\n\t\tvar watchers = this.touchWatchers[type];\n\n\t\tif(type === \"column\"){\n\t\t\ttype = \"header\";\n\t\t}\n\n\t\tswitch(action){\n\t\t\tcase \"start\":\n\t\t\t\twatchers.tap = true;\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\n\t\t\t\twatchers.tapHold = setTimeout(() => {\n\t\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\t\twatchers.tapHold = null;\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\n\t\t\t\t}, 1000);\n\t\t\t\tbreak;\n\n\t\t\tcase \"end\":\n\t\t\t\tif(watchers.tap){\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\n\t\t\t\t}\n\n\t\t\t\tif(watchers.tapDbl){\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\n\t\t\t\t}else{\n\t\t\t\t\twatchers.tapDbl = setTimeout(() => {\n\t\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\t\twatchers.tapDbl = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\twatchers.tapHold = null;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdispatchEvent(action, e, component){\n\t\tvar componentObj = component.getComponent(),\n\t\tcallback;\n\n\t\tif(this.columnSubscribers[action]){\n\n\t\t\tif(component instanceof Cell){\n\t\t\t\tcallback = component.column.definition[action];\n\t\t\t}else if(component instanceof Column){\n\t\t\t\tcallback = component.definition[action];\n\t\t\t}\n\n\t\t\tif(callback){\n\t\t\t\tcallback(e, componentObj);\n\t\t\t}\n\t\t}\n\n\t\tthis.dispatchExternal(action, e, componentObj);\n\t}\n}\n\nInteraction.moduleName = \"interaction\";\n\nexport default Interaction;\n","export default {\n\tnavPrev:\"shift + 9\",\n\tnavNext:9,\n\tnavUp:38,\n\tnavDown:40,\n\tnavLeft:37,\n\tnavRight:39,\n\tscrollPageUp:33,\n\tscrollPageDown:34,\n\tscrollToStart:36,\n\tscrollToEnd:35,\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 67\"],\n\n\trangeJumpUp:[\"ctrl + 38\", \"meta + 38\"],\n\trangeJumpDown:[\"ctrl + 40\", \"meta + 40\"],\n\trangeJumpLeft:[\"ctrl + 37\", \"meta + 37\"],\n\trangeJumpRight:[\"ctrl + 39\", \"meta + 39\"],\n\trangeExpandUp:\"shift + 38\",\n\trangeExpandDown:\"shift + 40\",\n\trangeExpandLeft:\"shift + 37\",\n\trangeExpandRight:\"shift + 39\",\n\trangeExpandJumpUp:[\"ctrl + shift + 38\", \"meta + shift + 38\"],\n\trangeExpandJumpDown:[\"ctrl + shift + 40\", \"meta + shift + 40\"],\n\trangeExpandJumpLeft:[\"ctrl + shift + 37\", \"meta + shift + 37\"],\n\trangeExpandJumpRight:[\"ctrl + shift + 39\", \"meta + shift + 39\"],\n};\n","export default {\n\tkeyBlock:function(e){\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos >= 0){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollPageDown:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\n\t\tscrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos <= scrollMax){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\n\t},\n\tscrollToStart:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToEnd:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tnavPrev:function(e){\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\n\t},\n\n\tnavNext:function(e){\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\n\t},\n\n\tnavLeft:function(e){\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\n\t},\n\n\tnavRight:function(e){\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\n\t},\n\n\tnavUp:function(e){\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\n\t},\n\n\tnavDown:function(e){\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\n\t},\n\n\trangeJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, false);\n\t},\n\trangeJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, false);\n\t},\n\trangeJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, false);\n\t},\n\trangeJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, false);\n\t},\n\trangeExpandLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", false, true);\n\t},\n\trangeExpandRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", false, true);\n\t},\n\trangeExpandUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", false, true);\n\t},\n\trangeExpandDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", false, true);\n\t},\n\trangeExpandJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, true);\n\t},\n\trangeExpandJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, true);\n\t},\n\trangeExpandJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, true);\n\t},\n\trangeExpandJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, true);\n\t},\n\n\tundo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.undo();\n\t\t\t}\n\t\t}\n\t},\n\n\tredo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.redo();\n\t\t\t}\n\t\t}\n\t},\n\n\tcopyToClipboard:function(e){\n\t\tif(!this.table.modules.edit.currentCell){\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t}\n\t\t}\n\t},\n};\n","import Module from '../../core/Module.js';\n\nimport defaultBindings from './defaults/bindings.js';\nimport defaultActions from './defaults/actions.js';\n\nclass Keybindings extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.watchKeys = null;\n\t\tthis.pressedKeys = null;\n\t\tthis.keyupBinding = false;\n\t\tthis.keydownBinding = false;\n\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\n\t}\n\n\tinitialize(){\n\t\tvar bindings = this.table.options.keybindings,\n\t\tmergedBindings = {};\n\n\t\tthis.watchKeys = {};\n\t\tthis.pressedKeys = [];\n\n\t\tif(bindings !== false){\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings);\n\t\t\tObject.assign(mergedBindings, bindings);\n\n\t\t\tthis.mapBindings(mergedBindings);\n\t\t\tthis.bindEvents();\n\t\t}\n\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t}\n\n\tmapBindings(bindings){\n\t\tfor(let key in bindings){\n\t\t\tif(Keybindings.actions[key]){\n\t\t\t\tif(bindings[key]){\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t\t}\n\n\t\t\t\t\tbindings[key].forEach((binding) => {\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\n\t\t\t\t\t\t\n\t\t\t\t\t\tbindingList.forEach((item) => {\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\n\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\tmapBinding(action, symbolsList){\n\t\tvar binding = {\n\t\t\taction: Keybindings.actions[action],\n\t\t\tkeys: [],\n\t\t\tctrl: false,\n\t\t\tshift: false,\n\t\t\tmeta: false,\n\t\t};\n\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\t\tsymbols.forEach((symbol) => {\n\t\t\tswitch(symbol){\n\t\t\t\tcase \"ctrl\":\n\t\t\t\t\tbinding.ctrl = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"shift\":\n\t\t\t\t\tbinding.shift = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"meta\":\n\t\t\t\t\tbinding.meta = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\n\t\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\t\tif(!this.watchKeys[symbol]){\n\t\t\t\t\t\tthis.watchKeys[symbol] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.watchKeys[symbol].push(binding);\n\t\t\t}\n\t\t});\n\t}\n\n\tbindEvents(){\n\t\tvar self = this;\n\n\t\tthis.keyupBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tself.pressedKeys.push(code);\n\n\t\t\t\tbindings.forEach(function(binding){\n\t\t\t\t\tself.checkBinding(e, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tthis.keydownBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n\t}\n\n\tclearBindings(){\n\t\tif(this.keyupBinding){\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t\t}\n\n\t\tif(this.keydownBinding){\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t\t}\n\t}\n\n\tcheckBinding(e, binding){\n\t\tvar match = true;\n\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\n\t\t\tbinding.keys.forEach((key) => {\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\n\n\t\t\t\tif(index == -1){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tbinding.action.call(this, e);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nKeybindings.moduleName = \"keybindings\";\n\n//load defaults\nKeybindings.bindings = defaultBindings;\nKeybindings.actions = defaultActions;\n\nexport default Keybindings;","import Module from '../../core/Module.js';\n\nclass Menu extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.menuContainer = null;\n\t\tthis.nestedMenuBlock = false;\n\t\t\n\t\tthis.currentComponent = null;\n\t\tthis.rootPopup = null;\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\n\t\t\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\n\t\tthis.registerTableOption(\"rowDblClickMenu\", false);\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\n\t\tthis.registerTableOption(\"groupDblClickMenu\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextMenu\");\n\t\tthis.registerColumnOption(\"headerClickMenu\");\n\t\tthis.registerColumnOption(\"headerDblClickMenu\");\n\t\tthis.registerColumnOption(\"headerMenu\");\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\n\t\tthis.registerColumnOption(\"contextMenu\");\n\t\tthis.registerColumnOption(\"clickMenu\");\n\t\tthis.registerColumnOption(\"dblClickMenu\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tif(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\n\t\t}\n\t}\t\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextMenu){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickMenu){\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowDblClickMenu){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextMenu){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickMenu){\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupDblClickMenu){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar\tdef = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){\n\t\t\tthis.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerDblClickMenu\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerMenu){\n\t\t\tthis.initializeColumnHeaderMenu(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\n\t\t}\n\t\t\n\t\tif(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){\n\t\t\tthis.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, \"dblClickMenu\");\n\t\t\tthis.subscribe(\"cell-dblclick\", this.columnSubscribers.dblClickMenu);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderMenu(column){\n\t\tvar icon = column.definition.headerMenuIcon,\n\t\theaderMenuEl;\n\t\t\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\n\t\t\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderMenuEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderMenuEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadMenuTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadMenuTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadMenuEvent(menu, e, component){\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\n\t\t\n\t\tthis.loadMenu(e, component, menu);\n\t}\n\t\n\tloadMenu(e, component, menu, parentEl, parentPopup){\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\n\t\tmenuEl = document.createElement(\"div\"),\n\t\tpopup;\n\t\t\n\t\tmenuEl.classList.add(\"tabulator-menu\");\n\t\t\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t//abort if no menu set\n\t\tif(!menu || !menu.length){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(!parentEl){\n\t\t\tif(this.nestedMenuBlock){\n\t\t\t\t//abort if child menu already open\n\t\t\t\tif(this.rootPopup){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\n\t\t\t\t\tthis.nestedMenuBlock = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\n\t\t\t\n\t\t}else{\n\t\t\tpopup = parentPopup.child(menuEl);\n\t\t}\n\t\t\n\t\tmenu.forEach((item) => {\n\t\t\tvar itemEl = document.createElement(\"div\"),\n\t\t\tlabel = item.label,\n\t\t\tdisabled = item.disabled;\n\t\t\t\n\t\t\tif(item.separator){\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t\t}else{\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\t\t\t\t\n\t\t\t\tif(typeof label == \"function\"){\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(label instanceof Node){\n\t\t\t\t\titemEl.appendChild(label);\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = label;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(typeof disabled == \"function\"){\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(disabled){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(item.action){\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmenuEl.appendChild(itemEl);\n\t\t});\n\t\t\n\t\tmenuEl.addEventListener(\"click\", (e) => {\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\n\t\t\t}\n\t\t});\n\t\t\n\t\tpopup.show(parentEl || e);\n\t\t\n\t\tif(popup === this.rootPopup){\n\t\t\tthis.rootPopup.hideOnBlur(() => {\n\t\t\t\tthis.rootPopup = null;\n\t\t\t\t\n\t\t\t\tif(this.currentComponent){\n\t\t\t\t\tthis.dispatch(\"menu-closed\", menu, popup);\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\n\t\t\t\t\tthis.currentComponent = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.currentComponent = component;\n\t\t\t\n\t\t\tthis.dispatch(\"menu-opened\", menu, popup);\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nMenu.moduleName = \"menu\";\n\nexport default Menu;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating column header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving column\n\t\tthis.toCol = false; //destination column\n\t\tthis.toColAfter = false; //position of moving column relative to the destination column\n\t\tthis.startX = 0; //starting position within header element\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\n\t\tthis.touchMove = false;\n\t\t\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\n\t}\n\t\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.classList.add(\"tabulator-col-placeholder\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.movableColumns){\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"alert-show\", this.abortMove.bind(this));\n\t\t}\n\t}\n\n\tabortMove(){\n\t\tclearTimeout(this.checkTimeout);\n\t}\n\t\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\tcolEl;\n\t\t\n\t\tif(!column.modules.frozen && !column.isGroup){\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tconfig.mousemove = function(e){\n\t\t\t\tif(column.parent === self.moving.parent){\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(self);\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tself.touchMove = false;\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tself.bindTouchEvents(column);\n\t\t}\n\t\t\n\t\tcolumn.modules.moveColumn = config;\n\t}\n\t\n\tbindTouchEvents(column){\n\t\tvar colEl = column.getElement(),\n\t\tstartXMove = false, //shifting center position of the cell\n\t\tnextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\n\t\t\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextCol = column.nextColumn();\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\n\t\t\t\tprevCol = column.prevColumn();\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\n\t\t\t\tnextColWidthLast = 0;\n\t\t\t\tprevColWidthLast = 0;\n\t\t\t\tstartXMove = false;\n\t\t\t\t\n\t\t\t\tthis.startMove(e, column);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\n\t\t\tvar diff, moveToCol;\n\t\t\t\n\t\t\tif(this.moving){\n\t\t\t\tthis.moveHover(e);\n\t\t\t\t\n\t\t\t\tif(!startXMove){\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\n\t\t\t\t\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\n\t\t\t\t\t\tmoveToCol = nextCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\n\t\t\t\t\t\tmoveToCol = prevCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(moveToCol){\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tstartMove(e, column){\n\t\tvar element = column.getElement(),\n\t\theaderElement = this.table.columnManager.getContentsElement(),\n\t\theadersElement = this.table.columnManager.getHeadersElement();\n\t\t\n\t\tthis.moving = column;\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\n\t\t\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\t\t\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t\t\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\t\t\n\t\theaderElement.appendChild(this.hoverElement);\n\t\t\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\n\t\t\n\t\tif(!this.touchMove){\n\t\t\tthis._bindMouseMove();\n\t\t\t\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t\t\n\t\tthis.moveHover(e);\n\t}\n\t\n\t_bindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_unbindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tmoveColumn(column, after){\n\t\tvar movingCells = this.moving.getCells();\n\t\t\n\t\tthis.toCol = column;\n\t\tthis.toColAfter = after;\n\t\t\n\t\tif(after){\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\tendMove(e){\n\t\tif(e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\t\t\t\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\t\t\t\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(this.toCol){\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t\t}\n\t\t\t\n\t\t\tthis.moving = false;\n\t\t\tthis.toCol = false;\n\t\t\tthis.toColAfter = false;\n\t\t\t\n\t\t\tif(!this.touchMove){\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tmoveHover(e){\n\t\tvar columnHolder = this.table.columnManager.getContentsElement(),\n\t\tscrollLeft = columnHolder.scrollLeft,\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\n\t\tscrollPos;\n\t\t\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\n\t\t\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nMoveColumns.moduleName = \"moveColumn\";\n\nexport default MoveColumns;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating row header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving row\n\t\tthis.toRow = false; //destination row\n\t\tthis.toRowAfter = false; //position of moving row relative to the destination row\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\n\t\tthis.startY = 0; //starting Y position within header element\n\t\tthis.startX = 0; //starting X position within header element\n\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\tthis.tableRowDropEvent = false;\n\n\t\tthis.touchMove = false;\n\n\t\tthis.connection = false;\n\t\tthis.connectionSelectorsTables = false;\n\t\tthis.connectionSelectorsElements = false;\n\t\tthis.connectionElements = [];\n\t\tthis.connections = [];\n\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\n\n\t\tthis.registerColumnOption(\"rowHandle\");\n\t}\n\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.classList.add(\"tabulator-row-placeholder\");\n\n\t\treturn el;\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.movableRows){\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeGroupHeader(group){\n\t\tvar self = this,\n\t\tconfig = {};\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, group);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl;\n\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(group, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\tif(rowEl.previousSibling){\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tgroup.modules.moveRow = config;\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\trowEl;\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, row);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(row, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(row, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\n\t\tif(!this.hasHandle){\n\n\t\t\trowEl = row.getElement();\n\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(row, row.getElement());\n\t\t}\n\n\t\trow.modules.moveRow = config;\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tthis.hasHandle = true;\n\t\t}\n\t}\n\n\tinitializeCell(cell){\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tvar self = this,\n\t\t\tcellEl = cell.getElement(true);\n\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, cell.row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\n\t\t}\n\t}\n\n\tbindTouchEvents(row, element){\n\t\tvar startYMove = false, //shifting center position of the cell\n\t\tnextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\n\n\t\telement.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextRow = row.nextRow();\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\n\t\t\t\tprevRow = row.prevRow();\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\n\t\t\t\tnextRowHeightLast = 0;\n\t\t\t\tprevRowHeightLast = 0;\n\t\t\t\tstartYMove = false;\n\n\t\t\t\tthis.startMove(e, row);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\tthis.moving, this.toRow, this.toRowAfter;\n\t\telement.addEventListener(\"touchmove\", (e) => {\n\n\t\t\tvar diff, moveToRow;\n\n\t\t\tif(this.moving){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis.moveHover(e);\n\n\t\t\t\tif(!startYMove){\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t}\n\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\n\t\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\n\t\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(moveToRow){\n\t\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t\tthis.touchMove = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t_bindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\t_unbindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\tstartMove(e, row){\n\t\tvar element = row.getElement();\n\n\t\tthis.setStartPosition(e, row);\n\n\t\tthis.moving = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\t\tif(!this.connection){\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\t\telement.parentNode.removeChild(element);\n\t\t}else{\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\t\tthis.connectToTables(row);\n\t\t}\n\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\t\tif(this.connection){\n\t\t\tdocument.body.appendChild(this.hoverElement);\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t\t}else{\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\n\t\t\tthis._bindMouseMove();\n\t\t}\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\n\n\t\tthis.moveHover(e);\n\t}\n\n\tsetStartPosition(e, row){\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t\telement, position;\n\n\t\telement = row.getElement();\n\t\tif(this.connection){\n\t\t\tposition = element.getBoundingClientRect();\n\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t\t}else{\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\n\t\t}\n\t}\n\n\tendMove(e){\n\t\tif(!e || e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\n\t\t\tif(!this.connection){\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\t}\n\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif(this.toRow){\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\n\t\t\t}\n\n\t\t\tthis.moving = false;\n\t\t\tthis.toRow = false;\n\t\t\tthis.toRowAfter = false;\n\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\t\tif(this.connection){\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\t\tthis.disconnectFromTables();\n\t\t\t}\n\t\t}\n\t}\n\n\tmoveRow(row, after){\n\t\tthis.toRow = row;\n\t\tthis.toRowAfter = after;\n\t}\n\n\tmoveHover(e){\n\t\tif(this.connection){\n\t\t\tthis.moveHoverConnections.call(this, e);\n\t\t}else{\n\t\t\tthis.moveHoverTable.call(this, e);\n\t\t}\n\t}\n\n\tmoveHoverTable(e){\n\t\tvar rowHolder = this.table.rowManager.getElement(),\n\t\tscrollTop = rowHolder.scrollTop,\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop;\n\t\t\n\t\tthis.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + \"px\";\n\t}\n\n\tmoveHoverConnections(e){\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\n\t}\n\n\telementRowDrop(e, element, row){\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\n\t}\n\n\t//establish connection with other tables\n\tconnectToTables(row){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\t\trow:row,\n\t\t\t});\n\t\t}\n\n\t\tif(this.connectionSelectorsElements){\n\n\t\t\tthis.connectionElements = [];\n\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t\t}\n\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\n\t\t\t\tif(typeof query === \"string\"){\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t\t}else{\n\t\t\t\t\tthis.connectionElements.push(query);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.connectionElements.forEach((element) => {\n\t\t\t\tvar dropEvent = (e) => {\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\n\t\t\t\t};\n\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t\t});\n\t\t}\n\t}\n\n\t//disconnect from other tables\n\tdisconnectFromTables(){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t\t}\n\n\t\tthis.connectionElements.forEach((element) => {\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\t\tdelete element.tabulatorElementDropEvent;\n\t\t});\n\t}\n\n\t//accept incomming connection\n\tconnect(table, row){\n\t\tif(!this.connectedTable){\n\t\t\tthis.connectedTable = table;\n\t\t\tthis.connectedRow = row;\n\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\n\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//close incoming connection\n\tdisconnect(table){\n\t\tif(table === this.connectedTable){\n\t\t\tthis.connectedTable = false;\n\t\t\tthis.connectedRow = false;\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t\t}\n\t}\n\n\tdropComplete(table, row, success){\n\t\tvar sender = false;\n\n\t\tif(success){\n\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(sender){\n\t\t\t\tsender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table);\n\t\t\t}else{\n\t\t\t\tif(this.table.options.movableRowsSender){\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}\n\n\t\tthis.endMove();\n\t}\n\n\ttableRowDrop(e, row){\n\t\tvar receiver = false,\n\t\tsuccess = false;\n\n\t\te.stopImmediatePropagation();\n\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\n\t\t\tcase \"string\":\n\t\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(receiver){\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t\t}\n\n\t\tif(success){\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}\n\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\t\trow:row,\n\t\t\tsuccess:success,\n\t\t});\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"connect\":\n\t\t\t\treturn this.connect(table, data.row);\n\n\t\t\tcase \"disconnect\":\n\t\t\t\treturn this.disconnect(table);\n\n\t\t\tcase \"dropcomplete\":\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t}\n\t}\n}\n\nMoveRows.prototype.receivers = {\n\tinsert:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\ttoRow.update(fromRow.getData());\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\treplace:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\ttoRow.delete();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n};\n\nMoveRows.prototype.senders = {\n\tdelete:function(fromRow, toRow, toTable){\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.moduleName = \"moveRow\";\n\nexport default MoveRows;","export default {};","import Module from '../../core/Module.js';\n\nimport defaultMutators from './defaults/mutators.js';\n\nclass Mutator extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of mutation types\n\t\tthis.enabled = true;\n\n\t\tthis.registerColumnOption(\"mutator\");\n\t\tthis.registerColumnOption(\"mutatorParams\");\n\t\tthis.registerColumnOption(\"mutatorData\");\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\n\t\tthis.registerColumnOption(\"mutatorEdit\");\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\n\t\tthis.registerColumnOption(\"mutateLink\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.mutateLink.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\n\t}\n\n\trowDataChanged(row, tempData, updatedData){\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\n\t}\n\n\t//initialize column mutator\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\tmutator;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\n\n\t\t\t\tif(mutator){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\tmutator:mutator,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.mutate = config;\n\t\t}\n\t}\n\n\tlookupMutator(value){\n\t\tvar mutator = false;\n\n\t\t//set column mutator\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Mutator.mutators[value]){\n\t\t\t\t\tmutator = Mutator.mutators[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tmutator = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn mutator;\n\t}\n\n\t//apply mutator to row\n\ttransformRow(data, type, updatedData){\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\tvalue;\n\n\t\tif(this.enabled){\n\n\t\t\tthis.table.columnManager.traverse((column) => {\n\t\t\t\tvar mutator, params, component;\n\n\t\t\t\tif(column.modules.mutate){\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\t\tif(mutator){\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\t\tif((type == \"data\" && !updatedData)|| typeof value !== \"undefined\"){\n\t\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//apply mutator to new cell value\n\ttransformCell(cell, value){\n\t\tif(cell.column.modules.mutate){\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t\t\ttempData = {};\n\n\t\t\tif(mutator){\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\t\t\tcell.column.setFieldValue(tempData, value);\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tmutateLink(cell){\n\t\tvar links = cell.column.definition.mutateLink;\n\n\t\tif(links){\n\t\t\tif(!Array.isArray(links)){\n\t\t\t\tlinks = [links];\n\t\t\t}\n\n\t\t\tlinks.forEach((link) => {\n\t\t\t\tvar linkCell = cell.row.getCell(link);\n\n\t\t\t\tif(linkCell){\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tenable(){\n\t\tthis.enabled = true;\n\t}\n\n\tdisable(){\n\t\tthis.enabled = false;\n\t}\n}\n\nMutator.moduleName = \"mutator\";\n\n//load defaults\nMutator.mutators = defaultMutators;\n\nexport default Mutator;","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\n\tif(totalRows){\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\n\t\t\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\n\t\t\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(ofEl);\n\t\tel.appendChild(totalEl);\n\t\tel.appendChild(rowsEl);\n\t}else{\n\t\tvalueEl.innerHTML = \" 0 \";\n\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(rowsEl);\n\t}\n\t\n\treturn el;\n}","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\t\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\t\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\t\n\tel.appendChild(showingEl);\n\tel.appendChild(valueEl);\n\tel.appendChild(ofEl);\n\tel.appendChild(totalEl);\n\tel.appendChild(rowsEl);\n\t\n\treturn el;\n}","import rows from './pageCounters/rows.js';\nimport pages from './pageCounters/pages.js';\n\n\nexport default {\n\trows:rows,\n\tpages:pages,\n};","import Module from '../../core/Module.js';\n\nimport defaultPageCounters from './defaults/pageCounters.js';\n\nclass Page extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.mode = \"local\";\n\t\tthis.progressiveLoad = false;\n\t\t\n\t\tthis.element = null;\n\t\tthis.pageCounterElement = null;\n\t\tthis.pageCounter = null;\n\t\t\n\t\tthis.size = 0;\n\t\tthis.page = 1;\n\t\tthis.count = 5;\n\t\tthis.max = 1;\n\n\t\tthis.remoteRowCountEstimate = null;\n\t\t\n\t\tthis.initialLoad = true;\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\n\t\t\n\t\tthis.pageSizes = [];\n\t\t\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initial page to show on load\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\n\t\t\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\n\t\t\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\n\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad){\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\n\t\t\t\n\t\t\tthis.createElements();\n\t\t\tthis.initializePageCounter();\n\t\t\tthis.initializePaginator();\n\t\t}else if(this.table.options.progressiveLoad){\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\t\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\t\n\trowAddingPosition(row, top){\n\t\tvar rowManager = this.table.rowManager,\n\t\tdisplayRows = rowManager.getDisplayRows(),\n\t\tindex;\n\t\t\n\t\tif(top){\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[0];\n\t\t\t}else{\n\t\t\t\tif(rowManager.activeRows.length){\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[displayRows.length - 1];\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {index, top};\n\t}\n\t\n\tcalculatePageSizes(){\n\t\tvar testElRow, testElCell;\n\t\t\n\t\tif(this.table.options.paginationSize){\n\t\t\tthis.size = this.table.options.paginationSize;\n\t\t}else{\n\t\t\ttestElRow = document.createElement(\"div\");\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\t\ttestElRow.style.visibility = \"hidden\";\n\t\t\t\n\t\t\ttestElCell = document.createElement(\"div\");\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\n\t\t\t\n\t\t\ttestElRow.appendChild(testElCell);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\n\t\t\t\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\n\t\t}\n\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\n\t\t\n\t\tthis.generatePageSizeSelectList();\n\t}\n\t\n\tinitialLoadComplete(){\n\t\tthis.initialLoad = false;\n\t}\n\t\n\tremotePageParams(data, config, silent, params){\n\t\tif(!this.initialLoad){\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\n\t\t\t\tthis.reset(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\t//configure request params\n\t\tparams.page = this.page;\n\t\t\n\t\t//set page size if defined\n\t\tif(this.size){\n\t\t\tparams.size = this.size;\n\t\t}\n\t\t\n\t\treturn params;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetPageToRow(row){\n\t\tif(this.table.options.pagination){\n\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\treturn this.setPageToRow(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Promise.reject();\n\t}\n\t\n\tuserSetPageSize(size){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.setPageSize(size);\n\t\t\treturn this.setPage(1);\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tscrollVertical(top, dir){\n\t\tvar element, diff, margin;\n\t\tif(!dir && !this.table.dataLoader.loading){\n\t\t\telement = this.table.rowManager.getElement();\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\n\t\t\t\n\t\t\tif(diff < margin){\n\t\t\t\tthis.nextPage()\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\n\t\t\t}\n\t\t}\n\t}\n\t\n\trestOnRenderBefore(rows, renderInPosition){\n\t\tif(!renderInPosition){\n\t\t\tif(this.mode === \"local\"){\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(){\n\t\tthis.refreshData(true, \"all\");\n\t}\n\t\n\tcreateElements(){\n\t\tvar button;\n\t\t\n\t\tthis.element = document.createElement(\"span\");\n\t\tthis.element.classList.add(\"tabulator-paginator\");\n\t\t\n\t\tthis.pagesElement = document.createElement(\"span\");\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\t\t\n\t\tbutton = document.createElement(\"button\");\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"\");\n\t\tbutton.setAttribute(\"title\", \"\");\n\t\t\n\t\tthis.firstBut = button.cloneNode(true);\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\t\t\n\t\tthis.prevBut = button.cloneNode(true);\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\t\t\n\t\tthis.nextBut = button.cloneNode(true);\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\t\t\n\t\tthis.lastBut = button.cloneNode(true);\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\t\t\n\t\tif(this.table.options.paginationSizeSelector){\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t\t}\n\t}\n\t\n\tgeneratePageSizeSelectList(){\n\t\tvar pageSizes = [];\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes = [];\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\n\t\t\t\t\t\tpageSizes.push(this.size * i);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t}else{\n\t\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t\t\n\t\t\tpageSizes.forEach((item) => {\n\t\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\t\titemEl.value = item;\n\t\t\t\t\n\t\t\t\tif(item === true){\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\n\t\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = item;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\n\t\t\t});\n\t\t\t\n\t\t\tthis.pageSizeSelect.value = this.size;\n\t\t}\n\t}\n\t\n\tinitializePageCounter(){\n\t\tvar counter = this.table.options.paginationCounter,\n\t\tpageCounter = null;\n\t\t\n\t\tif(counter){\n\t\t\tif(typeof counter === \"function\"){\n\t\t\t\tpageCounter = counter;\n\t\t\t}else{\n\t\t\t\tpageCounter = Page.pageCounters[counter];\n\t\t\t}\n\t\t\t\n\t\t\tif(pageCounter){\n\t\t\t\tthis.pageCounter = pageCounter;\n\t\t\t\t\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup pagination\n\tinitializePaginator(hidden){\n\t\tvar pageSelectLabel, paginationCounterHolder;\n\t\t\n\t\tif(!hidden){\n\t\t\t//build pagination element\n\t\t\t\n\t\t\t//bind localizations\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\n\t\t\t\tthis.firstBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\n\t\t\t\tthis.prevBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\n\t\t\t\tthis.nextBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\n\t\t\t\tthis.lastBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\t//click bindings\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(1);\n\t\t\t});\n\t\t\t\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.previousPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.nextPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(this.max);\n\t\t\t});\n\t\t\t\n\t\t\tif(this.table.options.paginationElement){\n\t\t\t\tthis.element = this.table.options.paginationElement;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.pageSizeSelect){\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\n\t\t\t\t\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\n\t\t\t\t\tthis.setPage(1);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//append to DOM\n\t\t\tthis.element.appendChild(this.firstBut);\n\t\t\tthis.element.appendChild(this.prevBut);\n\t\t\tthis.element.appendChild(this.pagesElement);\n\t\t\tthis.element.appendChild(this.nextBut);\n\t\t\tthis.element.appendChild(this.lastBut);\n\t\t\t\n\t\t\tif(!this.table.options.paginationElement){\n\t\t\t\tif(this.table.options.paginationCounter){\n\n\t\t\t\t\tpaginationCounterHolder; \n\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(paginationCounterHolder){\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.footerAppend(this.pageCounterElement);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.footerAppend(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.page = this.table.options.paginationInitialPage;\n\t\t\tthis.count = this.table.options.paginationButtonCount;\n\t\t}\n\t\t\n\t\t//set default values\n\t\tthis.mode = this.table.options.paginationMode;\n\t}\n\t\n\tinitializeProgressive(mode){\n\t\tthis.initializePaginator(true);\n\t\tthis.mode = \"progressive_\" + mode;\n\t\tthis.progressiveLoad = true;\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"page-changed\");\n\t}\n\t\n\t//calculate maximum page from number of rows\n\tsetMaxRows(rowCount){\n\t\tif(!rowCount){\n\t\t\tthis.max = 1;\n\t\t}else{\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\n\t\t}\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t}\n\t}\n\t\n\t//reset to first page without triggering action\n\treset(force){\n\t\tif(!this.initialLoad){\n\t\t\tif(this.mode == \"local\" || force){\n\t\t\t\tthis.page = 1;\n\t\t\t\tthis.trackChanges();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//set the maximum page\n\tsetMaxPage(max){\n\t\t\n\t\tmax = parseInt(max);\n\t\t\n\t\tthis.max = max || 1;\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t\tthis.trigger();\n\t\t}\n\t}\n\t\n\t//set current page number\n\tsetPage(page){\n\t\tswitch(page){\n\t\t\tcase \"first\":\n\t\t\t\treturn this.setPage(1);\n\t\n\t\t\tcase \"prev\":\n\t\t\t\treturn this.previousPage();\n\t\t\t\n\t\t\tcase \"next\":\n\t\t\t\treturn this.nextPage();\n\t\t\t\n\t\t\tcase \"last\":\n\t\t\t\treturn this.setPage(this.max);\n\t\t}\n\t\t\n\t\tpage = parseInt(page);\n\t\t\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\n\t\t\tthis.page = page;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageToRow(row){\n\t\tvar rows = this.displayRows(-1);\n\t\tvar index = rows.indexOf(row);\n\t\n\t\tif(index > -1){\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\n\t\t\t\n\t\t\treturn this.setPage(page);\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageSize(size){\n\t\tif(size !== true){\n\t\t\tsize = parseInt(size);\n\t\t}\n\n\t\tif(size > 0){\n\t\t\tthis.size = size;\n\t\t\tthis.dispatchExternal(\"pageSizeChanged\", size);\n\t\t}\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t// this.pageSizeSelect.value = size;\n\t\t\tthis.generatePageSizeSelectList();\n\t\t}\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\t_setPageCounter(totalRows, size, currentRow){\n\t\tvar content;\n\t\t\n\t\tif(this.pageCounter){\n\n\t\t\tif(this.mode === \"remote\"){\n\t\t\t\tsize = this.size;\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\n\t\t\t}\n\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\n\t\t\t\n\t\t\tswitch(typeof content){\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif(content instanceof Node){\n\t\t\t\t\t\n\t\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.pageCounterElement.appendChild(content);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\t\n\t\t\t\t\t\tif(content != null){\n\t\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.pageCounterElement.innerHTML = content;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup the pagination buttons\n\t_setPageButtons(){\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\n\t\t\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\n\t\t\n\t\tif(this.page == 1){\n\t\t\tthis.firstBut.disabled = true;\n\t\t\tthis.prevBut.disabled = true;\n\t\t}else{\n\t\t\tthis.firstBut.disabled = false;\n\t\t\tthis.prevBut.disabled = false;\n\t\t}\n\t\t\n\t\tif(this.page == this.max){\n\t\t\tthis.lastBut.disabled = true;\n\t\t\tthis.nextBut.disabled = true;\n\t\t}else{\n\t\t\tthis.lastBut.disabled = false;\n\t\t\tthis.nextBut.disabled = false;\n\t\t}\n\t\t\n\t\tfor(let i = min; i <= max; i++){\n\t\t\tif(i>0 && i <= this.max){\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.footerRedraw();\n\t}\n\t\n\t_generatePageButton(page){\n\t\tvar button = document.createElement(\"button\");\n\t\t\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tif(page == this.page){\n\t\t\tbutton.classList.add(\"active\");\n\t\t}\n\t\t\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\t\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t\t});\n\t\t\n\t\tbutton.setAttribute(\"data-page\", page);\n\t\tbutton.textContent = page;\n\t\t\n\t\tbutton.addEventListener(\"click\", (e) => {\n\t\t\tthis.setPage(page);\n\t\t});\n\t\t\n\t\treturn button;\n\t}\n\t\n\t//previous page\n\tpreviousPage(){\n\t\tif(this.page > 1){\n\t\t\tthis.page--;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//next page\n\tnextPage(){\n\t\tif(this.page < this.max){\n\t\t\tthis.page++;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tif(!this.progressiveLoad){\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\n\t\t\t}\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//return current page number\n\tgetPage(){\n\t\treturn this.page;\n\t}\n\t\n\t//return max page number\n\tgetPageMax(){\n\t\treturn this.max;\n\t}\n\t\n\tgetPageSize(size){\n\t\treturn this.size;\n\t}\n\t\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\t\n\t//return appropriate rows for current page\n\tgetRows(data){\n\t\tvar actualRowPageSize = 0,\n\t\toutput, start, end, actualStartRow;\n\n\t\tvar actualRows = data.filter((row) => {\n\t\t\treturn row.type === \"row\";\n\t\t});\n\t\t\n\t\tif(this.mode == \"local\"){\n\t\t\toutput = [];\n\t\t\t\n\t\t\tthis.setMaxRows(data.length);\n\t\t\t\n\t\t\tif(this.size === true){\n\t\t\t\tstart = 0;\n\t\t\t\tend = data.length;\n\t\t\t}else{\n\t\t\t\tstart = this.size * (this.page - 1);\n\t\t\t\tend = start + parseInt(this.size);\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageButtons();\n\t\t\t\n\t\t\tfor(let i = start; i < end; i++){\n\t\t\t\tlet row = data[i];\n\n\t\t\t\tif(row){\n\t\t\t\t\toutput.push(row);\n\n\t\t\t\t\tif(row.type === \"row\"){\n\t\t\t\t\t\tif(!actualStartRow){\n\t\t\t\t\t\t\tactualStartRow = row;\n\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\tactualRowPageSize++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\n\t\t\t\n\t\t\treturn output;\n\t\t}else{\n\t\t\tthis._setPageButtons();\n\t\t\tthis._setPageCounter(actualRows.length);\n\t\t\t\n\t\t\treturn data.slice(0);\n\t\t}\n\t}\n\t\n\ttrigger(){\n\t\tvar left;\n\t\t\n\t\tswitch(this.mode){\n\t\t\tcase \"local\":\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\n\t\t\t\n\t\t\t\tthis.refreshData();\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\n\t\t\t\treturn Promise.resolve();\n\t\t\t\n\t\t\tcase \"remote\":\n\t\t\t\tthis.dataChanging = true;\n\t\t\t\treturn this.reloadData(null)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.dataChanging = false;\n\t\t\t\t\t});\n\t\t\t\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\treturn this.reloadData(null, true);\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\n\t\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t_parseRemoteData(data){\n\t\tvar margin;\n\t\t\n\t\tif(typeof data.last_page === \"undefined\"){\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\n\t\t}\n\t\t\n\t\tif(data.data){\n\t\t\tthis.max = parseInt(data.last_page) || 1;\n\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\n\t\t\t\n\t\t\tif(this.progressiveLoad){\n\t\t\t\tswitch(this.mode){\n\t\t\t\t\tcase \"progressive_load\":\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page == 1){\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\n\t\t\t\t\t\n\t\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\n\t\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\n\t\t}\n\t\t\n\t\treturn data.data;\n\t}\n\t\n\t//handle the footer element being redrawn\n\tfooterRedraw(){\n\t\tvar footer = this.table.footerManager.containerElement;\n\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}else{\n\t\t\tthis.pagesElement.style.display = '';\n\t\t\t\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\t\tthis.pagesElement.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n}\n\nPage.moduleName = \"page\";\n\n//load defaults\nPage.pageCounters = defaultPageCounters;\n\nexport default Page;\n","// read persistance information from storage\nexport default {\n\tlocal:function(id, type){\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie:function(id, type){\n\t\tvar cookie = document.cookie,\n\t\tkey = id + \"-\" + type,\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\n\t\tend, data;\n\n\t\t//if cookie exists, decode and load column data into tabulator\n\t\tif(cookiePos > -1){\n\t\t\tcookie = cookie.slice(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif(end > -1){\n\t\t\t\tcookie = cookie.slice(0, end);\n\t\t\t}\n\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t}\n\n\t\treturn data ? JSON.parse(data) : false;\n\t}\n};\n","//write persistence information to storage\nexport default {\n\tlocal:function(id, type, data){\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie:function(id, type, data){\n\t\tvar expireDate = new Date();\n\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t}\n};","import Module from '../../core/Module.js';\n\nimport defaultReaders from './defaults/readers.js';\nimport defaultWriters from './defaults/writers.js';\n\nclass Persistence extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = \"\";\n\t\tthis.id = \"\";\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\t\tthis.defWatcherBlock = false;\n\t\tthis.config = {};\n\t\tthis.readFunc = false;\n\t\tthis.writeFunc = false;\n\n\t\tthis.registerTableOption(\"persistence\", false);\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\n\t}\n\n\t// Test for whether localStorage is available for use.\n\tlocalStorageTest() {\n\t\tvar testKey = \"_tabulator_test\";\n\n\t\ttry {\n\t\t\twindow.localStorage.setItem( testKey, testKey);\n\t\t\twindow.localStorage.removeItem( testKey );\n\t\t\treturn true;\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//setup parameters\n\tinitialize(){\n\t\tif(this.table.options.persistence){\n\t\t\t//determine persistent layout storage type\n\t\t\tvar mode = this.table.options.persistenceMode,\n\t\t\tid = this.table.options.persistenceID,\n\t\t\tretrievedData;\n\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\n\n\t\t\tif(this.table.options.persistenceReaderFunc){\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.readers[this.mode]){\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.table.options.persistenceWriterFunc){\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.writers[this.mode]){\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//set storage tag\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\n\n\t\t\tthis.config = {\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\t\t\theaderFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter,\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\n\t\t\t};\n\n\t\t\t//load pagination data if needed\n\t\t\tif(this.config.page){\n\t\t\t\tretrievedData = this.retrieveData(\"page\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.paginationInitialPage;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//load group data if needed\n\t\t\tif(this.config.group){\n\t\t\t\tretrievedData = this.retrieveData(\"group\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.groupHeader;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.config.columns){\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\n\t\t\t}\n\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\n\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"headerFilter\"));\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"column-width\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\n\t\t}\n\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\n\t}\n\n\teventSave(type){\n\t\tif(this.config[type]){\n\t\t\tthis.save(type);\n\t\t}\n\t}\n\n\ttableBuilt(){\n\t\tvar sorters, filters, headerFilters;\n\n\t\tif(this.config.sort){\n\t\t\tsorters = this.load(\"sort\");\n\n\t\t\tif(!sorters === false){\n\t\t\t\tthis.table.options.initialSort = sorters;\n\t\t\t}\n\t\t}\n\n\t\tif(this.config.filter){\n\t\t\tfilters = this.load(\"filter\");\n\n\t\t\tif(!filters === false){\n\t\t\t\tthis.table.options.initialFilter = filters;\n\t\t\t}\n\t\t}\n\t\tif(this.config.headerFilter){\n\t\t\theaderFilters = this.load(\"headerFilter\");\n\n\t\t\tif(!headerFilters === false){\n\t\t\t\tthis.table.options.initialHeaderFilter = headerFilters;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\ttableRedraw(force){\n\t\tif(force && this.config.columns){\n\t\t\tthis.save(\"columns\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tgetColumnLayout(){\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\n\t}\n\n\tsetColumnLayout(layout){\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true));\n\t\treturn true;\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumn(column){\n\t\tvar def, keys;\n\n\t\tif(this.config.columns){\n\t\t\tthis.defWatcherBlock = true;\n\n\t\t\tdef = column.getDefinition();\n\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\t\tkeys.forEach((key)=>{\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\t\tvar value = def[key];\n\n\t\t\t\tif(props){\n\t\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\t\tset: (newValue) => {\n\t\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(props.set){\n\t\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget:() => {\n\t\t\t\t\t\t\tif(props.get){\n\t\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.defWatcherBlock = false;\n\t\t}\n\t}\n\n\t//load saved definitions\n\tload(type, current){\n\t\tvar data = this.retrieveData(type);\n\n\t\tif(current){\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//retrieve data from memory\n\tretrieveData(type){\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n\t}\n\n\t//merge old and new column definitions\n\tmergeDefinition(oldCols, newCols, mergeAllNew){\n\t\tvar output = [];\n\n\t\tnewCols = newCols || [];\n\n\t\tnewCols.forEach((column, to) => {\n\t\t\tvar from = this._findColumn(oldCols, column),\n\t\t\tkeys;\n\n\t\t\tif(from){\n\t\t\t\tif(mergeAllNew){\n\t\t\t\t\tkeys = Object.keys(column);\n\t\t\t\t}else if(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(from);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\n\t\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(from.columns){\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\n\t\t\t\t}\n\n\t\t\t\toutput.push(from);\n\t\t\t}\n\t\t});\n\n\t\toldCols.forEach((column, i) => {\n\t\t\tvar from = this._findColumn(newCols, column);\n\n\t\t\tif (!from) {\n\t\t\t\tif(output.length>i){\n\t\t\t\t\toutput.splice(i, 0, column);\n\t\t\t\t}else{\n\t\t\t\t\toutput.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//find matching columns\n\t_findColumn(columns, subject){\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\n\n\t\treturn columns.find(function(col){\n\t\t\tswitch(type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\n\t\t\t\tcase \"field\":\n\t\t\t\t\treturn col.field === subject.field;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\treturn col === subject;\n\t\t\t}\n\t\t});\n\t}\n\n\t//save data\n\tsave(type){\n\t\tvar data = {};\n\n\t\tswitch(type){\n\t\t\tcase \"columns\":\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\t\tbreak;\n\n\t\t\tcase \"filter\":\n\t\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"headerFilter\":\n\t\t\t\tdata = this.table.modules.filter.getHeaderFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"sort\":\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tdata = this.getGroupConfig();\n\t\t\t\tbreak;\n\n\t\t\tcase \"page\":\n\t\t\t\tdata = this.getPageConfig();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(this.writeFunc){\n\t\t\tthis.writeFunc(this.id, type, data);\n\t\t}\n\n\t}\n\n\t//ensure sorters contain no function data\n\tvalidateSorters(data){\n\t\tdata.forEach(function(item){\n\t\t\titem.column = item.field;\n\t\t\tdelete item.field;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetGroupConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.group){\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tgetPageConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.page){\n\t\t\tif(this.config.page === true || this.config.page.size){\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t\t}\n\n\t\t\tif(this.config.page === true || this.config.page.page){\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\n\t//parse columns for data to store\n\tparseColumns(columns){\n\t\tvar definitions = [],\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\t\tcolumns.forEach((column) => {\n\t\t\tvar defStore = {},\n\t\t\tcolDef = column.getDefinition(),\n\t\t\tkeys;\n\n\t\t\tif(column.isGroup){\n\t\t\t\tdefStore.title = colDef.title;\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\n\t\t\t}else{\n\t\t\t\tdefStore.field = column.getField();\n\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t\tkeys.push(\"visible\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tswitch(key){\n\t\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdefinitions.push(defStore);\n\t\t});\n\n\t\treturn definitions;\n\t}\n}\n\nPersistence.moduleName = \"persistence\";\n\nPersistence.moduleInitOrder = -10;\n\n//load defaults\nPersistence.readers = defaultReaders;\nPersistence.writers = defaultWriters;\n\nexport default Persistence;","import Module from '../../core/Module.js';\n\nclass Popup extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\n\t\tthis.registerTableOption(\"rowDblClickPopup\", false);\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\n\t\tthis.registerTableOption(\"groupDblClickPopup\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextPopup\");\n\t\tthis.registerColumnOption(\"headerClickPopup\");\n\t\tthis.registerColumnOption(\"headerDblClickPopup\");\n\t\tthis.registerColumnOption(\"headerPopup\");\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\n\t\tthis.registerColumnOption(\"contextPopup\");\n\t\tthis.registerColumnOption(\"clickPopup\");\n\t\tthis.registerColumnOption(\"dblClickPopup\");\n\n\t\tthis.registerComponentFunction(\"cell\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"group\", \"popup\", this._componentPopupCall.bind(this));\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\t_componentPopupCall(component, contents, position){\n\t\tthis.loadPopupEvent(contents, null, component, position);\n\t}\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextPopup){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickPopup){\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\n\t\t}\n\n\t\tif(this.table.options.rowDblClickPopup){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextPopup){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickPopup){\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\n\t\t}\n\n\t\tif(this.table.options.groupDblClickPopup){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\n\t\t\n\t\t\n\t\t}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){\n\t\t\tthis.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerDblClickPopup\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickPopup);\n\t\t}\n\t\t\n\t\tif(def.headerPopup){\n\t\t\tthis.initializeColumnHeaderPopup(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\n\t\t}\n\n\t\tif(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){\n\t\t\tthis.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, \"dblClickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.dblClickPopup);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderPopup(column){\n\t\tvar icon = column.definition.headerPopupIcon,\n\t\theaderPopupEl;\n\t\t\n\t\theaderPopupEl = document.createElement(\"span\");\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\n\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderPopupEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderPopupEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadPopupTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadPopupTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadPopupEvent(contents, e, component, position){\n\t\tvar renderedCallback;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\n\t\t\n\t\tthis.loadPopup(e, component, contents, renderedCallback, position);\n\t}\n\t\n\tloadPopup(e, component, contents, renderedCallback, position){\n\t\tvar touch = !(e instanceof MouseEvent),\n\t\tcontentsEl, popup;\n\t\t\n\t\tif(contents instanceof HTMLElement){\n\t\t\tcontentsEl = contents;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\tcontentsEl.innerHTML = contents;\n\t\t}\n\t\t\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\n\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tpopup = this.popup(contentsEl);\n\n\t\tif(typeof renderedCallback === \"function\"){\n\t\t\tpopup.renderCallback(renderedCallback);\n\t\t}\n\n\t\tif(e){\n\t\t\tpopup.show(e);\n\t\t}else{\n\t\t\tpopup.show(component.getElement(), position || \"center\");\n\t\t}\n\n\t\t\n\t\tpopup.hideOnBlur(() => {\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\n\t\t});\n\n\n\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\n\t}\n}\n\nPopup.moduleName = \"popup\";\n\nexport default Popup;\n","import Module from '../../core/Module.js';\n\nclass Print extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.element = false;\n\t\tthis.manualBlock = false;\n\t\tthis.beforeprintEventHandler = null;\n\t\tthis.afterprintEventHandler = null;\n\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\n\n\t\tthis.registerColumnOption(\"print\");\n\t\tthis.registerColumnOption(\"titlePrint\");\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\tthis.beforeprintEventHandler = this.replaceTable.bind(this);\n\t\t\tthis.afterprintEventHandler = this.cleanup.bind(this);\n\n\t\t\twindow.addEventListener(\"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.addEventListener(\"afterprint\", this.afterprintEventHandler);\n\t\t\tthis.subscribe(\"table-destroy\", this.destroy.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\n\t}\n\n\tdestroy(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\twindow.removeEventListener( \"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.removeEventListener( \"afterprint\", this.afterprintEventHandler );\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\treplaceTable(){\n\t\tif(!this.manualBlock){\n\t\t\tthis.element = document.createElement(\"div\");\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\t\tthis.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\t\tthis.table.element.style.display = \"none\";\n\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t\t}\n\t}\n\n\tcleanup(){\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\t\tif(this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\tthis.table.element.style.display = \"\";\n\t\t}\n\t}\n\n\tprintFullscreen(visible, style, config){\n\t\tvar scrollX = window.scrollX,\n\t\tscrollY = window.scrollY,\n\t\theaderEl = document.createElement(\"div\"),\n\t\tfooterEl = document.createElement(\"div\"),\n\t\ttableEl = this.table.modules.export.generateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\n\t\theaderContent, footerContent;\n\n\t\tthis.manualBlock = true;\n\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\t\tif(this.table.options.printHeader){\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\t\tif(typeof headerContent == \"string\"){\n\t\t\t\theaderEl.innerHTML = headerContent;\n\t\t\t}else{\n\t\t\t\theaderEl.appendChild(headerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(headerEl);\n\t\t}\n\n\t\tthis.element.appendChild(tableEl);\n\n\t\tif(this.table.options.printFooter){\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\n\t\t\tif(typeof footerContent == \"string\"){\n\t\t\t\tfooterEl.innerHTML = footerContent;\n\t\t\t}else{\n\t\t\t\tfooterEl.appendChild(footerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(footerEl);\n\t\t}\n\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\t\tdocument.body.appendChild(this.element);\n\n\t\tif(this.table.options.printFormatter){\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t\t}\n\n\t\twindow.print();\n\n\t\tthis.cleanup();\n\n\t\twindow.scrollTo(scrollX, scrollY);\n\n\t\tthis.manualBlock = false;\n\t}\n}\n\nPrint.moduleName = \"print\";\n\nexport default Print;","import Module from '../../core/Module.js';\n\nclass ReactiveData extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.data = false;\n\t\tthis.blocked = false; //block reactivity while performing update\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\t\tthis.currentVersion = 0;\n\t\t\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.reactiveData){\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\n\t\t}\n\t}\n\t\n\twatchData(data){\n\t\tvar self = this,\n\t\tversion;\n\t\t\n\t\tthis.currentVersion ++;\n\t\t\n\t\tversion = this.currentVersion;\n\t\t\n\t\tthis.unwatchData();\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\t//override array push function\n\t\tthis.origFuncs.push = data.push;\n\t\t\n\t\tObject.defineProperty(this.data, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\t\n\t\t\t\t\tself.block(\"data-push\");\n\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.push.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-push\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array unshift function\n\t\tthis.origFuncs.unshift = data.unshift;\n\t\t\n\t\tObject.defineProperty(this.data, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-unshift\");\n\t\t\t\t\t\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.unshift.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-unshift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array shift function\n\t\tthis.origFuncs.shift = data.shift;\n\t\t\n\t\tObject.defineProperty(this.data, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-shift\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.shift.call(data);\n\n\t\t\t\t\tself.unblock(\"data-shift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array pop function\n\t\tthis.origFuncs.pop = data.pop;\n\t\t\n\t\tObject.defineProperty(this.data, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-pop\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.pop.call(data);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-pop\");\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array splice function\n\t\tthis.origFuncs.splice = data.splice;\n\t\t\n\t\tObject.defineProperty(this.data, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t\tend = args[1],\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\n\t\t\t\tstartRow, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-splice\");\n\t\t\t\t\t//add new rows\n\t\t\t\t\tif(newRows){\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(startRow){\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//delete removed rows\n\t\t\t\t\tif(end !== 0){\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\t\t\t\t\t\t\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(newRows || end !== 0){\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.splice.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-splice\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result ;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchData(){\n\t\tif(this.data !== false){\n\t\t\tfor(var key in this.origFuncs){\n\t\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable:true,\n\t\t\t\t\twritable:true,\n\t\t\t\t\tvalue: this.origFuncs.key,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\twatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tthis.watchKey(row, data, key);\n\t\t}\n\t\t\n\t\tif(this.table.options.dataTree){\n\t\t\tthis.watchTreeChildren(row);\n\t\t}\n\t}\n\t\n\twatchTreeChildren (row){\n\t\tvar self = this,\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\n\t\torigFuncs = {};\n\t\t\n\t\tif(childField){\n\t\t\t\n\t\t\torigFuncs.push = childField.push;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"push\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-push\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-push\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.unshift = childField.unshift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-unshift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-unshift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.shift = childField.shift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-shift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.shift.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-shift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.pop = childField.pop;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-pop\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.pop.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-pop\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.splice = childField.splice;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-splice\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-splice\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trebuildTree(row){\n\t\tthis.table.modules.dataTree.initializeRow(row);\n\t\tthis.table.modules.dataTree.layoutRow(row);\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\t\n\twatchKey(row, data, key){\n\t\tvar self = this,\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\n\t\tvalue = data[key],\n\t\tversion = this.currentVersion;\n\t\t\n\t\tObject.defineProperty(data, key, {\n\t\t\tset: (newValue) => {\n\t\t\t\tvalue = newValue;\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"key\");\n\t\t\t\t\t\n\t\t\t\t\tvar update = {};\n\t\t\t\t\tupdate[key] = newValue;\n\t\t\t\t\trow.updateData(update);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"key\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(props.set){\n\t\t\t\t\tprops.set(newValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\tget:() => {\n\t\t\t\t\n\t\t\t\tif(props.get){\n\t\t\t\t\tprops.get();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn value;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tObject.defineProperty(data, key, {\n\t\t\t\tvalue:data[key],\n\t\t\t});\n\t\t}\n\t}\n\t\n\tblock(key){\n\t\tif(!this.blocked){\n\t\t\tthis.blocked = key;\n\t\t}\n\t}\n\t\n\tunblock(key){\n\t\tif(this.blocked === key){\n\t\t\tthis.blocked = false;\n\t\t}\n\t}\n}\n\nReactiveData.moduleName = \"reactiveData\";\n\nexport default ReactiveData;\n\n\n\n","import Module from '../../core/Module.js';\n\nclass ResizeColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.startColumn = false;\n\t\tthis.startX = false;\n\t\tthis.startWidth = false;\n\t\tthis.latestX = false;\n\t\tthis.handle = null;\n\t\tthis.initialNextColumn = null;\n\t\tthis.nextColumn = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.registerColumnOption(\"resizable\", true);\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\n\t}\n\t\n\tinitializeEventWatchers(){\n\t\tif(!this.initialized){\n\t\t\t\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t\n\tlayoutCellHandles(cell){\n\t\tif(cell.row.type === \"row\"){\n\t\t\tthis.deInitializeComponent(cell);\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\n\t\t}\n\t}\n\t\n\tlayoutColumnHeader(column){\n\t\tif(column.definition.resizable){\n\t\t\tthis.initializeEventWatchers();\n\t\t\tthis.deInitializeComponent(column);\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\n\t\t}\n\t}\n\t\n\tcolumnLayoutUpdated(column){\n\t\tvar prev = column.prevColumn();\n\t\t\n\t\tthis.reinitializeColumn(column);\n\t\t\n\t\tif(prev){\n\t\t\tthis.reinitializeColumn(prev);\n\t\t}\n\t}\n\t\n\tcolumnWidthUpdated(column){\n\t\tif(column.modules.frozen){\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfrozenColumnOffset(column){\n\t\tvar offset = false;\n\n\t\tif(column.modules.frozen){\n\t\t\toffset = column.modules.frozen.marginValue; \n\n\t\t\tif(column.modules.frozen.position === \"left\"){\n\t\t\t\toffset += column.getWidth() - 3;\n\t\t\t}else{\n\t\t\t\tif(offset){\n\t\t\t\t\toffset -= 3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn offset !== false ? offset + \"px\" : false;\n\t}\n\t\n\treinitializeColumn(column){\n\t\tvar frozenOffset = this.frozenColumnOffset(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\n\t\t\t\tif(frozenOffset){\n\t\t\t\t\tcell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t\t\tcell.modules.resize.handleEl.style[\"z-index\"] = 11;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\n\t\t\tif(frozenOffset){\n\t\t\t\tcolumn.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\n\t\t}\n\t}\n\t\n\tinitializeColumn(type, component, column, element){\n\t\tvar self = this,\n\t\tvariableHeight = false,\n\t\tmode = column.definition.resizable,\n\t\tconfig = {},\n\t\tnearestColumn = column.getLastColumn();\n\t\t\n\t\t//set column resize mode\n\t\tif(type === \"header\"){\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\t\tconfig = {variableHeight:variableHeight};\n\t\t}\n\t\t\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\n\t\t\t\n\t\t\tvar handle = document.createElement('span');\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\n\t\t\t\n\t\t\thandle.addEventListener(\"click\", function(e){\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t\n\t\t\tvar handleDown = function(e){\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t};\n\t\t\t\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\t\t\t\n\t\t\t//resize column on double click\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\n\t\t\t\t\n\t\t\t\te.stopPropagation();\n\t\t\t\tnearestColumn.reinitializeWidth(true);\n\t\t\t\t\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(column.modules.frozen){\n\t\t\t\thandle.style.position = \"sticky\";\n\t\t\t\thandle.style[column.modules.frozen.position] = this.frozenColumnOffset(column);\n\t\t\t}\n\t\t\t\n\t\t\tconfig.handleEl = handle;\n\t\t\t\n\t\t\tif(element.parentNode && column.visible){\n\t\t\t\telement.after(handle);\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tcomponent.modules.resize = config;\n\t}\n\t\n\tdeInitializeColumn(column){\n\t\tthis.deInitializeComponent(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tthis.deInitializeComponent(cell);\n\t\t});\n\t}\n\t\n\tdeInitializeComponent(component){\n\t\tvar handleEl;\n\t\t\n\t\tif(component.modules.resize){\n\t\t\thandleEl = component.modules.resize.handleEl;\n\t\t\t\n\t\t\tif(handleEl && handleEl.parentElement){\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tresizeHandle(component, height){\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\n\t\t}\n\t}\n\t\n\t_checkResizability(column){\n\t\treturn column.definition.resizable;\n\t}\n\t\n\t_mouseDown(e, column, handle){\n\t\tvar self = this;\n\t\t\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tfunction mouseMove(e){\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\n\t\t\tstartDiff = x - self.startX,\n\t\t\tmoveDiff = x - self.latestX,\n\t\t\tblockedBefore, blockedAfter;\n\t\t\t\n\t\t\tself.latestX = x;\n\t\t\t\n\t\t\tif(self.table.rtl){\n\t\t\t\tstartDiff = -startDiff;\n\t\t\t\tmoveDiff = -moveDiff;\n\t\t\t}\n\t\t\t\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\n\t\t\t\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tif(moveDiff < 0){\n\t\t\t\tself.nextColumn = self.initialNextColumn;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\n\t\t\t\t\n\t\t\t\tif(moveDiff > 0){\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(self.nextColumn){\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.table.columnManager.rerenderColumns(true);\n\t\t\t\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction mouseUp(e){\n\t\t\t\n\t\t\t//block editor from taking action while resizing is taking place\n\t\t\tif(self.startColumn.modules.edit){\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\t\t\t\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\t\t\t\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(self.startWidth !== column.getWidth()){\n\t\t\t\tself.table.columnManager.verticalAlignHeaders();\n\n\t\t\t\tself.dispatch(\"column-resized\", column);\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\n\t\t\t}\n\t\t}\n\t\t\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\t\t\n\t\t//block editor from taking action while resizing is taking place\n\t\tif(self.startColumn.modules.edit){\n\t\t\tself.startColumn.modules.edit.blocked = true;\n\t\t}\n\t\t\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\t\tself.latestX = self.startX;\n\t\tself.startWidth = column.getWidth();\n\t\t\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeColumns.moduleName = \"resizeColumns\";\n\nexport default ResizeColumns;","import Module from '../../core/Module.js';\n\nclass ResizeRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.startColumn = false;\n\t\tthis.startY = false;\n\t\tthis.startHeight = false;\n\t\tthis.handle = null;\n\t\tthis.prevHandle = null;\n\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.resizableRows){\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\trowEl = row.getElement();\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-row-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function(e){\n\t\t\tself.startRow = row;\n\t\t\tself._mouseDown(e, row, handle);\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\n\t\tprevHandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function(e){\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\t\tif(prevRow){\n\t\t\t\tself.startRow = prevRow;\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\n\n\t\trowEl.appendChild(handle);\n\t\trowEl.appendChild(prevHandle);\n\t}\n\n\t_mouseDown(e, row, handle){\n\t\tvar self = this;\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e){\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t\t}\n\n\t\tfunction mouseUp(e){\n\n\t\t\t// //block editor from taking action while resizing is taking place\n\t\t\t// if(self.startColumn.modules.edit){\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t\t// }\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\n\t\t}\n\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\n\t\t//block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = true;\n\t\t// }\n\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\t\tself.startHeight = row.getHeight();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeRows.moduleName = \"resizeRows\";\n\nexport default ResizeRows;","import Module from '../../core/Module.js';\n\nclass ResizeTable extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.binding = false;\n\t\tthis.visibilityObserver = false;\n\t\tthis.resizeObserver = false;\n\t\tthis.containerObserver = false;\n\t\t\n\t\tthis.tableHeight = 0;\n\t\tthis.tableWidth = 0;\n\t\tthis.containerHeight = 0;\n\t\tthis.containerWidth = 0;\n\t\t\n\t\tthis.autoResize = false;\n\t\t\n\t\tthis.visible = false;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.initialRedraw = false;\n\t\t\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.autoResize){\n\t\t\tvar table = this.table,\n\t\t\ttableStyle;\n\t\t\t\n\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\n\t\t\tif(table.element.parentNode){\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\n\t\t\t\t\n\t\t\t\tthis.initializeVisibilityObserver();\n\t\t\t\t\n\t\t\t\tthis.autoResize = true;\n\t\t\t\t\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(table.element.parentNode){\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.resizeObserver.observe(table.element);\n\t\t\t\t\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\n\t\t\t\t\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.binding = function(){\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t\t}\n\t}\n\t\n\tinitializeVisibilityObserver(){\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\n\t\t\tthis.visible = entries[0].isIntersecting;\n\t\t\t\n\t\t\tif(!this.initialized){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.initialRedraw = !this.visible;\n\t\t\t}else{\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.redrawTable(this.initialRedraw);\n\t\t\t\t\tthis.initialRedraw = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.visibilityObserver.observe(this.table.element);\n\t}\n\t\n\tredrawTable(force){\n\t\tif(this.initialized && this.visible){\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\t\t\tthis.table.redraw(force);\n\t\t}\n\t}\n\t\n\ttableResized(){\n\t\tthis.table.rowManager.redraw();\n\t}\n\t\n\tclearBindings(){\n\t\tif(this.binding){\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\n\t\t}\n\t\t\n\t\tif(this.resizeObserver){\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.visibilityObserver){\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.containerObserver){\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t\t}\n\t}\n}\n\nResizeTable.moduleName = \"resizeTable\";\n\nexport default ResizeTable;","import Module from '../../core/Module.js';\n\nclass ResponsiveLayout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.columns = [];\n\t\tthis.hiddenColumns = [];\n\t\tthis.mode = \"\";\n\t\tthis.index = 0;\n\t\tthis.collapseFormatter = [];\n\t\tthis.collapseStartOpen = true;\n\t\tthis.collapseHandleColumn = false;\n\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\n\n\t\tthis.registerColumnOption(\"responsive\");\n\t}\n\n\t//generate responsive columns list\n\tinitialize(){\n\t\tif(this.table.options.responsiveLayout){\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\n\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.generateCollapsedRowContent.bind(this));\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\ttableRedraw(force){\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\n\t\t\tif(!force){\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeResponsivity(){\n\t\tvar columns = [];\n\n\t\tthis.mode = this.table.options.responsiveLayout;\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\t\tthis.hiddenColumns = [];\n\n\t\t//determine level of responsivity for each column\n\t\tthis.table.columnManager.columnsByIndex.forEach((column, i) => {\n\t\t\tif(column.modules.responsive){\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\n\t\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\t\tcolumns.push(column);\n\n\t\t\t\t\tif(!column.visible && this.mode === \"collapse\"){\n\t\t\t\t\t\tthis.hiddenColumns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//sort list by responsivity\n\t\tcolumns = columns.reverse();\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\n\t\t});\n\n\t\tthis.columns = columns;\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.generateCollapsedContent();\n\t\t}\n\n\t\t//assign collapse column\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\n\t\t\t\tthis.collapseHandleColumn = col;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif(this.collapseHandleColumn){\n\t\t\tif(this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}else{\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//define layout information\n\tinitializeColumn(column){\n\t\tvar def = column.getDefinition();\n\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\n\t}\n\n\tinitializeRow(row){\n\t\tvar el;\n\n\t\tif(row.type !== \"calc\"){\n\t\t\tel = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\t\trow.modules.responsiveLayout = {\n\t\t\t\telement:el,\n\t\t\t\topen:this.collapseStartOpen,\n\t\t\t};\n\n\t\t\tif(!this.collapseStartOpen){\n\t\t\t\tel.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tlayoutRow(row){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t}\n\t}\n\n\t//update column visibility\n\tupdateColumnVisibility(column, responsiveToggle){\n\t\tif(!responsiveToggle && column.modules.responsive){\n\t\t\tcolumn.modules.responsive.visible = column.visible;\n\t\t\tthis.initializeResponsivity();\n\t\t}\n\t}\n\n\thideColumn(column){\n\t\tvar colCount = this.hiddenColumns.length;\n\n\t\tcolumn.hide(false, true);\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.hiddenColumns.unshift(column);\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !colCount){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tshowColumn(column){\n\t\tvar index;\n\n\t\tcolumn.show(false, true);\n\t\t//set column width to prevent calculation loops on uninitialized columns\n\t\tcolumn.setWidth(column.getWidth());\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t\t}\n\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//redraw columns to fit space\n\tupdate(){\n\t\tvar working = true;\n\n\t\twhile(working){\n\n\t\t\tlet width = this.table.modules.layout.getMode() == \"fitColumns\" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth();\n\n\t\t\tlet diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width;\n\n\t\t\tif(diff < 0){\n\t\t\t\t//table is too wide\n\t\t\t\tlet column = this.columns[this.index];\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.hideColumn(column);\n\t\t\t\t\tthis.index ++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\t//table has spare space\n\t\t\t\tlet column = this.columns[this.index -1];\n\n\t\t\t\tif(column){\n\t\t\t\t\tif(diff > 0){\n\t\t\t\t\t\tif(diff >= column.getWidth()){\n\t\t\t\t\t\t\tthis.showColumn(column);\n\t\t\t\t\t\t\tthis.index --;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tworking = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!this.table.rowManager.activeRowsCount){\n\t\t\t\tthis.table.rowManager.renderEmptyScroll();\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedContent(){\n\t\tvar rows = this.table.rowManager.getDisplayRows();\n\n\t\trows.forEach((row) => {\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t});\n\t}\n\n\tgenerateCollapsedRowContent(row){\n\t\tvar el, contents;\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\tel = row.modules.responsiveLayout.element;\n\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\n\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\t\tif(contents){\n\t\t\t\tel.appendChild(contents);\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedRowData(row){\n\t\tvar data = row.getData(),\n\t\toutput = [],\n\t\tmockCellComponent;\n\n\t\tthis.hiddenColumns.forEach((column) => {\n\t\t\tvar value = column.getFieldValue(data);\n\n\t\t\tif(column.definition.title && column.field){\n\t\t\t\tif(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){\n\n\t\t\t\t\tmockCellComponent = {\n\t\t\t\t\t\tvalue:false,\n\t\t\t\t\t\tdata:{},\n\t\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\tfunction onRendered(callback){\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tformatCollapsedData(data){\n\t\tvar list = document.createElement(\"table\");\n\n\t\tdata.forEach(function(item){\n\t\t\tvar row = document.createElement(\"tr\");\n\t\t\tvar titleData = document.createElement(\"td\");\n\t\t\tvar valueData = document.createElement(\"td\");\n\t\t\tvar node_content;\n\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\t\ttitleData.appendChild(titleHighlight);\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\n\t\t\t\ttitleHighlight.innerHTML = text || item.title;\n\t\t\t});\n\n\t\t\tif(item.value instanceof Node){\n\t\t\t\tnode_content = document.createElement(\"div\");\n\t\t\t\tnode_content.appendChild(item.value);\n\t\t\t\tvalueData.appendChild(node_content);\n\t\t\t}else{\n\t\t\t\tvalueData.innerHTML = item.value;\n\t\t\t}\n\n\t\t\trow.appendChild(titleData);\n\t\t\trow.appendChild(valueData);\n\t\t\tlist.appendChild(row);\n\t\t}, this);\n\n\t\treturn Object.keys(data).length ? list : \"\";\n\t}\n}\n\nResponsiveLayout.moduleName = \"responsiveLayout\";\n\nexport default ResponsiveLayout;\n","import Module from '../../core/Module.js';\n\nclass SelectRow extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = false; //flag selecting in progress\n\t\tthis.lastClickedRow = false; //last clicked row\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\t\tthis.selectedRows = []; //hold selected rows\n\t\tthis.headerCheckboxElement = null; // hold header select element\n\t\t\n\t\tthis.registerTableOption(\"selectableRows\", \"highlight\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRangeMode\", \"drag\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\n\t\tthis.registerTableOption(\"selectableRowsPersistence\", true); // maintain selection when table view is updated\n\t\tthis.registerTableOption(\"selectableRowsCheck\", function(data, row){return true;}); //check whether row is selectable\n\t\t\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\n\t}\n\t\n\tinitialize(){\n\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tif(this.table.options.selectableRows === \"highlight\" && this.table.options.selectableRange){\n\t\t\tthis.table.options.selectableRows = false;\n\t\t}\n\n\t\tif(this.table.options.selectableRows !== false){\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"selectable\", \"selectableRows\", true);\n\t\tthis.deprecationCheck(\"selectableRollingSelection\", \"selectableRowsRollingSelection\", true);\n\t\tthis.deprecationCheck(\"selectableRangeMode\", \"selectableRowsRangeMode\", true);\n\t\tthis.deprecationCheck(\"selectablePersistence\", \"selectableRowsPersistence\", true);\n\t\tthis.deprecationCheck(\"selectableCheck\", \"selectableRowsCheck\", true);\n\t}\n\t\n\trowRetrieve(type, prevValue){\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\n\t}\n\t\n\trowDeleted(row){\n\t\tthis._deselectRow(row, true);\n\t}\n\t\n\tclearSelectionData(silent){\n\t\tvar prevSelected = this.selectedRows.length;\n\n\t\tthis.selecting = false;\n\t\tthis.lastClickedRow = false;\n\t\tthis.selectPrev = [];\n\t\tthis.selectedRows = [];\n\t\t\n\t\tif(prevSelected && silent !== true){\n\t\t\tthis._rowSelectionChanged();\n\t\t}\n\t}\n\t\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tselectable = self.checkRowSelectability(row),\n\t\telement = row.getElement();\n\t\t\n\t\t// trigger end of row selection\n\t\tvar endSelect = function(){\n\t\t\t\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.selecting = false;\n\t\t\t}, 50);\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t\t};\n\t\t\n\t\trow.modules.select = {selected:false};\n\n\t\telement.classList.toggle(\"tabulator-selectable\", selectable);\n\t\telement.classList.toggle(\"tabulator-unselectable\", !selectable);\n\t\t\n\t\t//set row selection class\n\t\tif(self.checkRowSelectability(row)){\t\t\t\n\t\t\tif(self.table.options.selectableRows && self.table.options.selectableRows != \"highlight\"){\n\t\t\t\tif(self.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\n\t\t\t\t}else{\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!self.selecting){\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\t\t\tif(e.shiftKey){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selecting = true;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selectPrev = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\thandleComplexRowClick(row, e){\n\t\tif(e.shiftKey){\n\t\t\tthis.table._clearSelection();\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\n\t\t\t\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\n\t\t\t\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\t\t\t\n\t\t\tif(e.ctrlKey || e.metaKey){\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.options.selectableRows !== true && !this.isRowSelected(row)){\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectableRows){\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.lastClickedRow = row;\n\t\t\t}else{\n\t\t\t\tthis.deselectRows(undefined, true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.selectableRows !== true){\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectableRows){\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectableRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectRows(toggledRows);\n\t\t\t}\n\t\t\tthis.table._clearSelection();\n\t\t}\n\t\telse if(e.ctrlKey || e.metaKey){\n\t\t\tthis.toggleRow(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}else{\n\t\t\tthis.deselectRows(undefined, true);\n\t\t\tthis.selectRows(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}\n\t}\n\n\tcheckRowSelectability(row){\n\t\tif(row && row.type === \"row\"){\n\t\t\treturn this.table.options.selectableRowsCheck.call(this.table, row.getComponent());\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\t//toggle row selection\n\ttoggleRow(row){\n\t\tif(this.checkRowSelectability(row)){\n\t\t\tif(row.modules.select && row.modules.select.selected){\n\t\t\t\tthis._deselectRow(row);\n\t\t\t}else{\n\t\t\t\tthis._selectRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//select a number of rows\n\tselectRows(rows){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._selectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(false, changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._selectRow(rowMatch, false, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//select an individual row\n\t_selectRow(rowInfo, silent, force){\n\t\t//handle max row count\n\t\tif(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){\n\t\t\tif(this.selectedRows.length >= this.table.options.selectableRows){\n\t\t\t\tif(this.table.options.selectableRowsRollingSelection){\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t\t}else{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\n\t\t\n\t\tif(row){\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = true;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tthis._rowSelectionChanged(silent, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisRowSelected(row){\n\t\treturn this.selectedRows.indexOf(row) !== -1;\n\t}\n\t\n\t//deselect a number of rows\n\tdeselectRows(rows, silent){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = Object.assign([], this.selectedRows);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._deselectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(silent, [], changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._deselectRow(rowMatch, silent, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//deselect an individual row\n\t_deselectRow(rowInfo, silent){\n\t\tvar self = this,\n\t\trow = self.table.rowManager.findRow(rowInfo),\n\t\tindex, element;\n\t\t\n\t\tif(row){\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\n\t\t\t\treturn selectedRow == row;\n\t\t\t});\n\t\t\t\n\t\t\tif(index > -1){\n\n\t\t\t\telement = row.getElement();\n\t\t\t\t\n\t\t\t\tif(element){\n\t\t\t\t\telement.classList.remove(\"tabulator-selected\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = false;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t\t}\n\t\t\t\tself.selectedRows.splice(index, 1);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tself._rowSelectionChanged(silent, undefined, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetSelectedData(){\n\t\tvar data = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetSelectedRows(){\n\t\tvar rows = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\trows.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t_rowSelectionChanged(silent, selected = [], deselected = []){\n\t\tif(this.headerCheckboxElement){\n\t\t\tif(this.selectedRows.length === 0){\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\n\t\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else {\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(!silent){\n\t\t\tif(!Array.isArray(selected)){\n\t\t\t\tselected = [selected];\n\t\t\t}\n\n\t\t\tselected = selected.map(row => row.getComponent());\n\n\t\t\tif(!Array.isArray(deselected)){\n\t\t\t\tdeselected = [deselected];\n\t\t\t}\n\n\t\t\tdeselected = deselected.map(row => row.getComponent());\n\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows(), selected, deselected);\n\t\t}\n\t}\n\t\n\tregisterRowSelectCheckbox (row, element) {\n\t\tif(!row._row.modules.select){\n\t\t\trow._row.modules.select = {};\n\t\t}\n\t\t\n\t\trow._row.modules.select.checkboxEl = element;\n\t}\n\t\n\tregisterHeaderSelectCheckbox (element) {\n\t\tthis.headerCheckboxElement = element;\n\t}\n\t\n\tchildRowSelection(row, select){\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\t\t\n\t\tif(select){\n\t\t\tfor(let child of children){\n\t\t\t\tthis._selectRow(child, true);\n\t\t\t}\n\t\t}else{\n\t\t\tfor(let child of children){\n\t\t\t\tthis._deselectRow(child, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nSelectRow.moduleName = \"selectRow\";\n\nexport default SelectRow;","//sort numbers\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar decimal = params.decimalSeparator;\n\tvar thousand = params.thousandSeparator;\n\tvar emptyAlign = 0;\n\n\ta = String(a);\n\tb = String(b);\n\n\tif(thousand){\n\t\ta = a.split(thousand).join(\"\");\n\t\tb = b.split(thousand).join(\"\");\n\t}\n\n\tif(decimal){\n\t\ta = a.split(decimal).join(\".\");\n\t\tb = b.split(decimal).join(\".\");\n\t}\n\n\ta = parseFloat(a);\n\tb = parseFloat(b);\n\n\t//handle non numeric values\n\tif(isNaN(a)){\n\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t}else if(isNaN(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\treturn a - b;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort strings\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\tvar locale;\n\n\t//handle empty values\n\tif(!a){\n\t\temptyAlign = !b ? 0 : -1;\n\t}else if(!b){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\tswitch(typeof params.locale){\n\t\t\tcase \"boolean\":\n\t\t\t\tif(params.locale){\n\t\t\t\t\tlocale = this.langLocale();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"string\":\n\t\t\t\tlocale = params.locale;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort datetime\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tif(typeof DT != \"undefined\"){\n\t\tif(!DT.isDateTime(a)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\ta = DT.fromISO(String(a));\n\t\t\t}else{\n\t\t\t\ta = DT.fromFormat(String(a), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!DT.isDateTime(b)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\tb = DT.fromISO(String(b));\n\t\t\t}else{\n\t\t\t\tb = DT.fromFormat(String(b), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!a.isValid){\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\n\t\t}else if(!b.isValid){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\t//compare valid values\n\t\t\treturn a - b;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\n\t}else{\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\n\t}\n}","import datetime from './datetime.js';\n\n//sort date\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"dd/MM/yyyy\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","import datetime from './datetime.js';\n\n//sort times\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"HH:mm\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","//sort booleans\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\treturn el1 - el2;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar type = params.type || \"length\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tfunction calc(value){\n\t\tvar result;\n\n\t\tswitch(type){\n\t\t\tcase \"length\":\n\t\t\t\tresult = value.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"sum\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"max\":\n\t\t\t\tresult = Math.max.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"min\":\n\t\t\t\tresult = Math.min.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"avg\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t}) / value.length;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t//handle non array values\n\tif(!Array.isArray(a)){\n\t\temptyAlign = !Array.isArray(b) ? 0 : -1;\n\t}else if(!Array.isArray(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\treturn calc(b) - calc(a);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\treturn el1 - el2;\n}","//sort alpha numeric strings\nexport default function(as, bs, aRow, bRow, column, dir, params){\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\n\t//handle empty values\n\tif(!as && as!== 0){\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t}else if(!bs && bs!== 0){\n\t\temptyAlign = 1;\n\t}else{\n\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\ta = String(as).toLowerCase();\n\t\tb = String(bs).toLowerCase();\n\t\tif(a === b) return 0;\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\ta = a.match(rx);\n\t\tb = b.match(rx);\n\t\tL = a.length > b.length ? b.length : a.length;\n\t\twhile(i < L){\n\t\t\ta1= a[i];\n\t\t\tb1= b[i++];\n\t\t\tif(a1 !== b1){\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\treturn a1 - b1;\n\t\t\t\t}\n\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t}\n\t\t}\n\n\t\treturn a.length > b.length;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import number from './sorters/number.js';\nimport string from './sorters/string.js';\nimport date from './sorters/date.js';\nimport time from './sorters/time.js';\nimport datetime from './sorters/datetime.js';\nimport boolean from './sorters/boolean.js';\nimport array from './sorters/array.js';\nimport exists from './sorters/exists.js';\nimport alphanum from './sorters/alphanum.js';\n\nexport default {\n\tnumber:number,\n\tstring:string,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tboolean:boolean,\n\tarray:array,\n\texists:exists,\n\talphanum:alphanum\n};","import Module from '../../core/Module.js';\n\nimport defaultSorters from './defaults/sorters.js';\n\nclass Sort extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\t\t\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\n\t\t\n\t\tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\n\t\tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\n\t\tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\n\t\tthis.registerTableOption(\"headerSortElement\", \"
    \"); //header sort element\n\t\tthis.registerTableOption(\"headerSortClickElement\", \"header\"); //element which triggers sort when clicked\n\t\t\n\t\tthis.registerColumnOption(\"sorter\");\n\t\tthis.registerColumnOption(\"sorterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"headerSort\", true);\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\n\t\tthis.registerColumnOption(\"headerSortTristate\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.registerDataHandler(this.sort.bind(this), 20);\n\t\t\n\t\tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\n\t\tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\n\t\tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\n\t\t\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\n\t\t}\n\t}\n\t\n\ttableBuilt(){\n\t\tif(this.table.options.initialSort){\n\t\t\tthis.setSort(this.table.options.initialSort);\n\t\t}\n\t}\n\t\n\tremoteSortParams(data, config, silent, params){\n\t\tvar sorters = this.getSort();\n\t\t\n\t\tsorters.forEach((item) => {\n\t\t\tdelete item.column;\n\t\t});\n\t\t\n\t\tparams.sort = sorters;\n\t\t\n\t\treturn params;\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetSort(sortList, dir){\n\t\tthis.setSort(sortList, dir);\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\tclearSort(){\n\t\tthis.clear();\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\t//initialize column header for sorting\n\tinitializeColumn(column){\n\t\tvar sorter = false,\n\t\tcolEl,\n\t\tarrowEl;\n\t\t\n\t\tswitch(typeof column.definition.sorter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Sort.sorters[column.definition.sorter]){\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tcolumn.modules.sort = {\n\t\t\tsorter:sorter, dir:\"none\",\n\t\t\tparams:column.definition.sorterParams || {},\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\n\t\t\ttristate: column.definition.headerSortTristate,\n\t\t};\n\t\t\n\t\tif(column.definition.headerSort !== false){\n\t\t\t\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\t\t\t\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortClickElement){\n\t\t\t\tcase \"icon\":\n\t\t\t\t\tarrowEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"header\":\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortElement){\n\t\t\t\tcase \"function\":\n\t\t\t\t//do nothing\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"object\":\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t\t}\n\t\t\t\n\t\t\t//create sorter arrow\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\n\t\t\t\n\t\t\tcolumn.modules.sort.element = arrowEl;\n\t\t\t\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t\n\t\t\tif(this.table.options.headerSortClickElement === \"icon\"){\n\t\t\t\tarrowEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//sort on click\n\t\t\t(this.table.options.headerSortClickElement === \"icon\" ? arrowEl : colEl).addEventListener(\"click\", (e) => {\n\t\t\t\tvar dir = \"\",\n\t\t\t\tsorters=[],\n\t\t\t\tmatch = false;\n\t\t\t\t\n\t\t\t\tif(column.modules.sort){\n\t\t\t\t\tif(column.modules.sort.tristate){\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\n\t\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = this.getSort();\n\t\t\t\t\t\t\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(match > -1){\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//add to existing sort\n\t\t\t\t\t\tthis.setSort(sorters);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(dir == \"none\"){\n\t\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\t\tthis.setSort(column, dir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\n\t\t\t\t\tthis.refreshSort();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trefreshSort(){\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.reloadData(null, false, false);\n\t\t}else{\n\t\t\tthis.refreshData(true);\n\t\t}\n\t\t\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\t\n\t//check if the sorters have changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\t\n\t//return current sorters\n\tgetSort(){\n\t\tvar self = this,\n\t\tsorters = [];\n\t\t\n\t\tself.sortList.forEach(function(item){\n\t\t\tif(item.column){\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn sorters;\n\t}\n\t\n\t//change sort list and trigger sort\n\tsetSort(sortList, dir){\n\t\tvar self = this,\n\t\tnewSortList = [];\n\t\t\n\t\tif(!Array.isArray(sortList)){\n\t\t\tsortList = [{column: sortList, dir:dir}];\n\t\t}\n\t\t\n\t\tsortList.forEach(function(item){\n\t\t\tvar column;\n\t\t\t\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\titem.column = column;\n\t\t\t\tnewSortList.push(item);\n\t\t\t\tself.changed = true;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tself.sortList = newSortList;\n\t\t\n\t\tthis.dispatch(\"sort-changed\");\n\t}\n\t\n\t//clear sorters\n\tclear(){\n\t\tthis.setSort([]);\n\t}\n\t\n\t//find appropriate sorter for column\n\tfindSorter(column){\n\t\tvar row = this.table.rowManager.activeRows[0],\n\t\tsorter = \"string\",\n\t\tfield, value;\n\t\t\n\t\tif(row){\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\t\t\t\n\t\t\tif(field){\n\t\t\t\t\n\t\t\t\tvalue = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Sort.sorters[sorter];\n\t}\n\t\n\t//work through sort list sorting data\n\tsort(data){\n\t\tvar self = this,\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t\tsortListActual = [],\n\t\trowComponents = [];\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorting\")){\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\n\t\t}\n\t\t\n\t\tself.clearColumnHeaders();\n\t\t\n\t\tif(this.table.options.sortMode !== \"remote\"){\n\t\t\t\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tvar sortObj;\n\t\t\t\t\n\t\t\t\tif(item.column){\n\t\t\t\t\tsortObj = item.column.modules.sort;\n\t\t\t\t\t\n\t\t\t\t\tif(sortObj){\n\t\t\t\t\t\t\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\t\t\tif(!sortObj.sorter){\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\t\t\t\t\t\t\n\t\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//sort data\n\t\t\tif (sortListActual.length) {\n\t\t\t\tself._sortItems(data, sortListActual);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorted\")){\n\t\t\tdata.forEach((row) => {\n\t\t\t\trowComponents.push(row.getComponent());\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//clear sort arrows on columns\n\tclearColumnHeaders(){\n\t\tthis.table.columnManager.getRealColumns().forEach((column) => {\n\t\t\tif(column.modules.sort){\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//set the column header sort direction\n\tsetColumnHeader(column, dir){\n\t\tcolumn.modules.sort.dir = dir;\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir === \"asc\" ? \"ascending\" : \"descending\");\n\t\tthis.setColumnHeaderSortIcon(column, dir);\n\t}\n\t\n\tsetColumnHeaderSortIcon(column, dir){\n\t\tvar sortEl = column.modules.sort.element,\n\t\tarrowEl;\n\t\t\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\n\t\t\t\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\n\t\t\t\n\t\t\tif(typeof arrowEl === \"object\"){\n\t\t\t\tsortEl.appendChild(arrowEl);\n\t\t\t}else{\n\t\t\t\tsortEl.innerHTML = arrowEl;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//sort each item in sort list\n\t_sortItems(data, sortList){\n\t\tvar sorterCount = sortList.length - 1;\n\t\t\n\t\tdata.sort((a, b) => {\n\t\t\tvar result;\n\t\t\t\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\n\t\t\t\tlet sortItem = sortList[i];\n\t\t\t\t\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\t\t\t\t\n\t\t\t\tif(result !== 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\t\t});\n\t}\n\t\n\t//process individual rows for a sort function on active data\n\t_sortRow(a, b, column, dir, params){\n\t\tvar el1Comp, el2Comp;\n\t\t\n\t\t//switch elements depending on search direction\n\t\tvar el1 = dir == \"asc\" ? a : b;\n\t\tvar el2 = dir == \"asc\" ? b : a;\n\t\t\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\t\t\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\t\t\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\t\t\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n\t}\n}\n\nSort.moduleName = \"sort\";\n\n//load defaults\nSort.sorters = defaultSorters;\n\nexport default Sort;\n","class RangeComponent {\n\tconstructor(range) {\n\t\tthis._range = range;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function (target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t} else {\n\t\t\t\t\treturn target._range.table.componentFunctionBinder.handle(\"range\", target._range, name);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tgetElement() {\n\t\treturn this._range.element;\n\t}\n\n\tgetData() {\n\t\treturn this._range.getData();\n\t}\n\n\tgetCells() {\n\t\treturn this._range.getCells(true);\n\t}\n\n\tgetStructuredCells() {\n\t\treturn this._range.getStructuredCells();\n\t}\n\n\tgetRows() {\n\t\treturn this._range.getRows().map((row) => row.getComponent());\n\t}\n\n\tgetColumns() {\n\t\treturn this._range.getColumns().map((column) => column.getComponent());\n\t}\n\t\n\tgetBounds() {\n\t\treturn this._range.getBounds();\n\t}\n\n\tgetTopEdge() {\n\t\treturn this._range.top;\n\t}\n\n\tgetBottomEdge() {\n\t\treturn this._range.bottom;\n\t}\n\n\tgetLeftEdge() {\n\t\treturn this._range.left;\n\t}\n\n\tgetRightEdge() {\n\t\treturn this._range.right;\n\t}\n\n\tsetBounds(start, end){\n\t\tif(this._range.destroyedGuard(\"setBounds\")){\n\t\t\tthis._range.setBounds(start ? start._cell : start, end ? end._cell : end);\n\t\t}\n\t}\n\n\tsetStartBound(start){\n\t\tif(this._range.destroyedGuard(\"setStartBound\")){\n\t\t\tthis._range.setEndBound(start ? start._cell : start);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tsetEndBound(end){\n\t\tif(this._range.destroyedGuard(\"setEndBound\")){\n\t\t\tthis._range.setEndBound(end ? end._cell : end);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tclearValues(){\n\t\tif(this._range.destroyedGuard(\"clearValues\")){\n\t\t\tthis._range.clearValues();\n\t\t}\n\t}\n\n\tremove(){\n\t\tif(this._range.destroyedGuard(\"remove\")){\n\t\t\tthis._range.destroy(true);\n\t\t}\n\t}\n}\n\nexport default RangeComponent;\n","import CoreFeature from '../../core/CoreFeature.js';\nimport RangeComponent from \"./RangeComponent\";\n\nclass Range extends CoreFeature{\n\tconstructor(table, rangeManager, start, end) {\n\t\tsuper(table);\n\t\t\n\t\tthis.rangeManager = rangeManager;\n\t\tthis.element = null;\n\t\tthis.initialized = false;\n\t\tthis.initializing = {\n\t\t\tstart:false,\n\t\t\tend:false,\n\t\t};\n\t\tthis.destroyed = false;\n\t\t\n\t\tthis.top = 0;\n\t\tthis.bottom = 0;\n\t\tthis.left = 0;\n\t\tthis.right = 0;\n\t\t\n\t\tthis.table = table;\n\t\tthis.start = {row:0, col:0};\n\t\tthis.end = {row:0, col:0};\n\n\t\tif(this.rangeManager.rowHeader){\n\t\t\tthis.left = 1;\n\t\t\tthis.right = 1;\n\t\t\tthis.start.col = 1;\n\t\t\tthis.end.col = 1;\n\t\t}\n\t\t\n\t\tthis.initElement();\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.initBounds(start, end);\n\t\t});\n\t}\n\t\n\tinitElement(){\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-range\");\n\t}\n\t\n\tinitBounds(start, end){\n\t\tthis._updateMinMax();\n\t\t\n\t\tif(start){\n\t\t\tthis.setBounds(start, end || start);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Boundary Setup ///////\n\t///////////////////////////////////\n\t\n\tsetStart(row, col) {\n\t\tif(this.start.row !== row || this.start.col !== col){\n\t\t\tthis.start.row = row;\n\t\t\tthis.start.col = col;\n\t\t\t\n\t\t\tthis.initializing.start = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetEnd(row, col) {\n\t\tif(this.end.row !== row || this.end.col !== col){\n\t\t\tthis.end.row = row;\n\t\t\tthis.end.col = col;\n\t\t\t\n\t\t\tthis.initializing.end = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetBounds(start, end, visibleRows){\n\t\tif(start){\n\t\t\tthis.setStartBound(start);\n\t\t}\n\t\t\n\t\tthis.setEndBound(end || start);\n\t\tthis.rangeManager.layoutElement(visibleRows);\n\t}\n\t\n\tsetStartBound(element){\n\t\tvar row, col;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tthis.setStart(0, element.getPosition() - 1);\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\t\n\t\t\tif (element.column === this.rangeManager.rowHeader) {\n\t\t\t\tthis.setStart(row, 1);\n\t\t\t} else {\n\t\t\t\tthis.setStart(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tsetEndBound(element){\n\t\tvar rowsCount = this._getTableRows().length,\n\t\trow, col, isRowHeader;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tif (this.rangeManager.selecting === \"column\") {\n\t\t\t\t\tthis.setEnd(rowsCount - 1, element.getPosition() - 1);\n\t\t\t\t} else if (this.rangeManager.selecting === \"cell\") {\n\t\t\t\t\tthis.setEnd(0, element.getPosition() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\tisRowHeader = element.column === this.rangeManager.rowHeader;\n\t\t\t\n\t\t\tif (this.rangeManager.selecting === \"row\") {\n\t\t\t\tthis.setEnd(row, this._getTableColumns().length - 1);\n\t\t\t} else if (this.rangeManager.selecting !== \"row\" && isRowHeader) {\n\t\t\t\tthis.setEnd(row, 0);\n\t\t\t} else if (this.rangeManager.selecting === \"column\") {\n\t\t\t\tthis.setEnd(rowsCount - 1, col);\n\t\t\t} else {\n\t\t\t\tthis.setEnd(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_updateMinMax() {\n\t\tthis.top = Math.min(this.start.row, this.end.row);\n\t\tthis.bottom = Math.max(this.start.row, this.end.row);\n\t\tthis.left = Math.min(this.start.col, this.end.col);\n\t\tthis.right = Math.max(this.start.col, this.end.col);\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeChanged\", this.getComponent());\n\t\t}else{\n\t\t\tif(this.initializing.start && this.initializing.end){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.dispatchExternal(\"rangeAdded\", this.getComponent());\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_getTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\t_getTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Rendering ///////\n\t///////////////////////////////////\n\t\n\tlayout() {\n\t\tvar _vDomTop = this.table.rowManager.renderer.vDomTop,\n\t\t_vDomBottom = this.table.rowManager.renderer.vDomBottom,\n\t\t_vDomLeft = this.table.columnManager.renderer.leftCol,\n\t\t_vDomRight = this.table.columnManager.renderer.rightCol,\t\t\n\t\ttop, bottom, left, right, topLeftCell, bottomRightCell;\n\t\t\n\t\tif (_vDomTop == null) {\n\t\t\t_vDomTop = 0;\n\t\t}\n\t\t\n\t\tif (_vDomBottom == null) {\n\t\t\t_vDomBottom = Infinity;\n\t\t}\n\t\t\n\t\tif (_vDomLeft == null) {\n\t\t\t_vDomLeft = 0;\n\t\t}\n\t\t\n\t\tif (_vDomRight == null) {\n\t\t\t_vDomRight = Infinity;\n\t\t}\n\t\t\n\t\tif (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) {\n\t\t\ttop = Math.max(this.top, _vDomTop);\n\t\t\tbottom = Math.min(this.bottom, _vDomBottom);\n\t\t\tleft = Math.max(this.left, _vDomLeft);\n\t\t\tright = Math.min(this.right, _vDomRight);\n\t\t\t\n\t\t\ttopLeftCell = this.rangeManager.getCell(top, left);\n\t\t\tbottomRightCell = this.rangeManager.getCell(bottom, right);\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-range-active\");\n\t\t\t// this.element.classList.toggle(\"tabulator-range-active\", this === this.rangeManager.activeRange);\n\t\t\t\n\t\t\tthis.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.top = topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t\tthis.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t}\n\t}\n\t\n\tatTopLeft(cell) {\n\t\treturn cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left;\n\t}\n\t\n\tatBottomRight(cell) {\n\t\treturn cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right;\n\t}\n\t\n\toccupies(cell) {\n\t\treturn this.occupiesRow(cell.row) && this.occupiesColumn(cell.column);\n\t}\n\t\n\toccupiesRow(row) {\n\t\treturn this.top <= row.position - 1 && row.position - 1 <= this.bottom;\n\t}\n\t\n\toccupiesColumn(col) {\n\t\treturn this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right;\n\t}\n\t\n\toverlaps(left, top, right, bottom) {\n\t\tif ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tgetData() {\n\t\tvar data = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tvar rowData = row.getData(),\n\t\t\tresult = {};\n\t\t\t\n\t\t\tcolumns.forEach((column) => {\n\t\t\t\tresult[column.field] = rowData[column.field];\n\t\t\t});\n\t\t\t\n\t\t\tdata.push(result);\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetCells(structured, component) {\n\t\tvar cells = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\tif (structured) {\n\t\t\tcells = rows.map((row) => {\n\t\t\t\tvar arr = [];\n\t\t\t\t\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tarr.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn arr;\n\t\t\t});\n\t\t} else {\n\t\t\trows.forEach((row) => {\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tcells.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn cells;\n\t}\n\t\n\tgetStructuredCells() {\n\t\treturn this.getCells(true, true);\n\t}\n\t\n\tgetRows() {\n\t\treturn this._getTableRows().slice(this.top, this.bottom + 1);\n\t}\n\t\n\tgetColumns() {\n\t\treturn this._getTableColumns().slice(this.left, this.right + 1);\n\t}\n\t\n\tclearValues(){\n\t\tvar cells = this.getCells();\n\t\tvar clearValue = this.table.options.selectableRangeClearCellsValue;\n\t\t\n\t\tthis.table.blockRedraw();\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tcell.setValue(clearValue);\n\t\t});\n\t\t\n\t\tthis.table.restoreRedraw();\n\t\t\n\t}\n\t\n\tgetBounds(component){\n\t\tvar cells = this.getCells(false, component),\n\t\toutput = {\n\t\t\tstart:null,\n\t\t\tend:null,\n\t\t};\n\t\t\n\t\tif(cells.length){\n\t\t\toutput.start = cells[0];\n\t\t\toutput.end = cells[cells.length - 1];\n\t\t}else{\n\t\t\tconsole.warn(\"No bounds defined on range\");\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponent() {\n\t\tif (!this.component) {\n\t\t\tthis.component = new RangeComponent(this);\n\t\t}\n\t\treturn this.component;\n\t}\n\t\n\tdestroy(notify) {\n\t\tthis.destroyed = true;\n\t\t\n\t\tthis.element.remove();\n\t\t\n\t\tif(notify){\n\t\t\tthis.rangeManager.rangeRemoved(this);\n\t\t}\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeRemoved\", this.getComponent());\n\t\t}\n\t}\n\t\n\tdestroyedGuard(func){\n\t\tif(this.destroyed){\n\t\t\tconsole.warn(\"You cannot call the \" + func + \" function on a destroyed range\");\n\t\t}\n\t\t\n\t\treturn !this.destroyed;\n\t}\n}\n\nexport default Range;\n","import Module from \"../../core/Module.js\";\nimport Range from \"./Range.js\";\n\nclass SelectRange extends Module {\n\tconstructor(table) {\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = \"cell\";\n\t\tthis.mousedown = false;\n\t\tthis.ranges = [];\n\t\tthis.overlay = null;\n\t\tthis.rowHeader = null;\n\t\tthis.layoutChangeTimeout = null;\n\t\tthis.columnSelection = false;\n\t\tthis.rowSelection = false;\n\t\tthis.maxRanges = 0;\n\t\tthis.activeRange = false;\n\t\tthis.blockKeydown = false;\n\t\t\n\t\tthis.keyDownEvent = this._handleKeyDown.bind(this);\n\t\tthis.mouseUpEvent = this._handleMouseUp.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"selectableRange\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeColumns\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeRows\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeClearCells\", false); //allow clearing of active range\n\t\tthis.registerTableOption(\"selectableRangeClearCellsValue\", undefined); //value for cleared active range\n\n\t\tthis.registerTableFunction(\"getRangesData\", this.getRangesData.bind(this));\n\t\tthis.registerTableFunction(\"getRanges\", this.getRanges.bind(this));\n\t\tthis.registerTableFunction(\"addRange\", this.addRangeFromComponent.bind(this));\n\n\t\tthis.registerComponentFunction(\"cell\", \"getRanges\", this.cellGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getRanges\", this.rowGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getRanges\", this.colGetRanges.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Initialization ///////\n\t///////////////////////////////////\n\t\n\tinitialize() {\n\t\tif (this.options(\"selectableRange\")) {\t\t\n\t\t\tif(!this.options(\"selectableRows\")){\n\t\t\t\t\n\t\t\t\tthis.maxRanges = this.options(\"selectableRange\");\n\t\t\t\t\n\t\t\t\tthis.initializeTable();\n\t\t\t\tthis.initializeWatchers();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"SelectRange functionality cannot be used in conjunction with row selection\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tinitializeTable() {\t\t\n\t\tthis.overlay = document.createElement(\"div\");\n\t\tthis.overlay.classList.add(\"tabulator-range-overlay\");\n\t\t\n\t\tthis.rangeContainer = document.createElement(\"div\");\n\t\tthis.rangeContainer.classList.add(\"tabulator-range-container\");\n\t\t\n\t\tthis.activeRangeCellElement = document.createElement(\"div\");\n\t\tthis.activeRangeCellElement.classList.add(\"tabulator-range-cell-active\");\n\t\t\n\t\tthis.overlay.appendChild(this.rangeContainer);\n\t\tthis.overlay.appendChild(this.activeRangeCellElement);\n\t\t\n\t\tthis.table.rowManager.element.addEventListener(\"keydown\", this.keyDownEvent);\n\t\t\n\t\tthis.resetRanges();\n\t\t\n\t\tthis.table.rowManager.element.appendChild(this.overlay);\n\t\tthis.table.columnManager.element.setAttribute(\"tabindex\", 0);\n\t\tthis.table.element.classList.add(\"tabulator-ranges\");\n\t}\n\t\n\tinitializeWatchers() {\n\t\tthis.columnSelection = this.options(\"selectableRangeColumns\");\n\t\tthis.rowSelection = this.options(\"selectableRangeRows\");\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-mousedown\", this.handleColumnMouseDown.bind(this));\n\t\tthis.subscribe(\"column-mousemove\", this.handleColumnMouseMove.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.handleColumnResized.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.updateHeaderColumn.bind(this));\n\n\t\tthis.subscribe(\"cell-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.renderCell.bind(this));\n\t\tthis.subscribe(\"cell-mousedown\", this.handleCellMouseDown.bind(this));\n\t\tthis.subscribe(\"cell-mousemove\", this.handleCellMouseMove.bind(this));\n\t\tthis.subscribe(\"cell-click\", this.handleCellClick.bind(this));\n\t\tthis.subscribe(\"cell-editing\", this.handleEditingCell.bind(this));\n\t\t\n\t\tthis.subscribe(\"page-changed\", this.redraw.bind(this));\n\n\t\tthis.subscribe(\"scroll-vertical\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.layoutChange.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-destroy\", this.tableDestroyed.bind(this));\n\t\tthis.subscribe(\"data-processed\", this.resetRanges.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-layout\", this.layoutElement.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.redraw.bind(this));\n\t\tthis.subscribe(\"table-destroy\", this.tableDestroyed.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-editor-clear\", this.finishEditingCell.bind(this));\n\t\tthis.subscribe(\"edit-blur\", this.restoreFocus.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-left\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-right\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.keyNavigate.bind(this, \"up\"));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.keyNavigate.bind(this, \"down\"));\n\t\tthis.subscribe(\"keybinding-nav-range\", this.keyNavigateRange.bind(this));\n\t}\n\t\n\t\n\tinitializeColumn(column) {\n\t\tif(this.columnSelection && column.definition.headerSort && this.options(\"headerSortClickElement\") !== \"icon\"){\n\t\t\tconsole.warn(\"Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.\");\n\t\t}\n\t\t\n\t\tif (column.modules.edit) {\n\t\t\t// Block editor from taking action so we can trigger edit by\n\t\t\t// double clicking.\n\t\t\t// column.modules.edit.blocked = true;\n\t\t}\n\t}\n\t\n\tupdateHeaderColumn(){\n\t\tif(this.rowSelection){\n\t\t\tthis.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];\n\t\t\t\n\t\t\tif(this.rowHeader){\n\t\t\t\tthis.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + \" tabulator-range-row-header\";\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.headerSort){\n\t\t\t\t\tconsole.warn(\"Using column headerSort with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.editor){\n\t\t\t\t\tconsole.warn(\"Using column editor with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Table Functions ///////\n\t///////////////////////////////////\n\t\n\tgetRanges(){\n\t\treturn this.ranges.map((range) => range.getComponent());\n\t}\n\t\n\tgetRangesData() {\n\t\treturn this.ranges.map((range) => range.getData());\n\t}\n\t\n\taddRangeFromComponent(start, end){\n\t\tstart = start ? start._cell : null;\n\t\tend = end ? end._cell : null;\n\t\t\n\t\treturn this.addRange(start, end);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Component Functions ///////\n\t///////////////////////////////////\n\t\n\tcellGetRanges(cell){\n\t\tvar ranges = [];\n\t\t\n\t\tif (cell.column === this.rowHeader) {\n\t\t\tranges = this.ranges.filter((range) => range.occupiesRow(cell.row));\n\t\t} else {\n\t\t\tranges = this.ranges.filter((range) => range.occupies(cell));\n\t\t}\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\trowGetRanges(row){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesRow(row));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\tcolGetRanges(col){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesColumn(col));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Event Handlers /////////\n\t///////////////////////////////////\n\t\n\t_handleMouseUp(e){\n\t\tthis.mousedown = false;\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t}\n\t\n\t_handleKeyDown(e) {\n\t\tif (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) {\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t// is editing a cell?\n\t\t\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.table.modules.edit.editCell(this.getActiveCell());\n\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tif ((e.key === \"Backspace\" || e.key === \"Delete\") && this.options(\"selectableRangeClearCells\")) {\n\t\t\t\tif(this.activeRange){\n\t\t\t\t\tthis.activeRange.clearValues();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeFocus(cell){\n\t\tvar range;\n\t\t\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\t\n\trestoreFocus(element){\n\t\tthis.table.rowManager.element.focus();\n\t\t\n\t\treturn true;\n\t}\n\t\n\t///////////////////////////////////\n\t////// Column Functionality ///////\n\t///////////////////////////////////\n\t\n\thandleColumnResized(column) {\n\t\tvar selected;\n\t\t\n\t\tif (this.selecting !== \"column\" && this.selecting !== \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tselected = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (!selected) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.ranges.forEach((range) => {\n\t\t\tvar selectedColumns = range.getColumns(true);\n\t\t\t\n\t\t\tselectedColumns.forEach((selectedColumn) => {\n\t\t\t\tif (selectedColumn !== column) {\n\t\t\t\t\tselectedColumn.setWidth(column.width);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\thandleColumnMouseDown(event, column) {\n\t\tif (event.button === 2 && (this.selecting === \"column\" || this.selecting === \"all\") && this.activeRange.occupiesColumn(column)) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, column);\n\t}\n\t\n\thandleColumnMouseMove(e, column) {\n\t\tif (column === this.rowHeader || !this.mousedown || this.selecting === 'all') {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, column, true);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Cell Functionality ///////\n\t///////////////////////////////////\n\t\n\trenderCell(cell) {\n\t\tvar el = cell.getElement(),\n\t\trangeIdx = this.ranges.findIndex((range) => range.occupies(cell));\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", rangeIdx !== -1);\n\t\tel.classList.toggle(\"tabulator-range-only-cell-selected\", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) &&\tthis.ranges[0].atBottomRight(cell));\n\t\t\n\t\tel.dataset.range = rangeIdx;\n\t}\n\t\n\thandleCellMouseDown(event, cell) {\n\t\tif (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === \"row\" || this.selecting === \"all\") && this.activeRange.occupiesRow(cell.row)))) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, cell);\n\t}\n\t\n\thandleCellMouseMove(e, cell) {\n\t\tif (!this.mousedown || this.selecting === \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, cell, true);\n\t}\n\t\n\thandleCellClick(e, cell){\n\t\tthis.initializeFocus(cell);\n\t}\n\t\n\thandleEditingCell(cell) {\n\t\tif(this.activeRange){\n\t\t\tthis.activeRange.setBounds(cell);\n\t\t}\n\t}\n\t\n\tfinishEditingCell() {\n\t\tthis.blockKeydown = true;\n\t\tthis.table.rowManager.element.focus();\n\n\t\tsetTimeout(() => {\n\t\t\tthis.blockKeydown = false;\n\t\t}, 10);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Navigation ///////\n\t///////////////////////////////////\n\t\n\tkeyNavigate(dir, e){\n\t\tif(this.navigate(false, false, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tkeyNavigateRange(e, dir, jump, expand){\n\t\tif(this.navigate(jump, expand, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tnavigate(jump, expand, dir) {\n\t\tvar moved = false,\n\t\trange, rangeEdge, nextRow, nextCol, row, column;\n\t\t\n\t\t// Don't navigate while editing\n\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// If there are more than 1 range, use the active range and destroy the others\n\t\tif (this.ranges.length > 1) {\n\t\t\tthis.ranges = this.ranges.filter((range) => {\n\t\t\t\tif (range === this.activeRange) {\n\t\t\t\t\trange.setEnd(range.start.row, range.start.col);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\trange.destroy();\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\trange = this.activeRange;\n\t\t\n\t\trangeEdge = expand ? range.end : range.start;\n\t\tnextRow = rangeEdge.row;\n\t\tnextCol = rangeEdge.col;\n\t\t\n\t\tif(jump){\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = this.findJumpCellRight(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = this.findJumpCellUp(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = this.findJumpCellDown(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}else{\n\t\t\tif(expand){\n\t\t\t\tif ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = Math.max(nextCol - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = Math.max(nextRow - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = Math.min(nextRow + 1, this.getTableRows().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tmoved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row;\n\t\t\n\t\tif(!expand){\n\t\t\trange.setStart(nextRow, nextCol);\n\t\t}\n\t\t\n\t\trange.setEnd(nextRow, nextCol);\n\t\t\n\t\tif(!expand){\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (moved) {\n\t\t\trow = this.getRowByRangePos(range.end.row);\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col);\n\t\t\t\n\t\t\tif ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) {\n\t\t\t\tcolumn.getComponent().scrollTo(undefined, false);\n\t\t\t} else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) {\n\t\t\t\trow.getComponent().scrollTo(undefined, false);\n\t\t\t} else {\n\t\t\t\t// Use faster autoScroll when the elements are on the DOM\n\t\t\t\tthis.autoScroll(range, row.getElement(), column.getElement());\n\t\t\t}\n\t\t\t\n\t\t\tthis.layoutElement();\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\trangeRemoved(removed){\n\t\tthis.ranges = this.ranges.filter((range) => range !== removed);\n\t\t\n\t\tif(this.activeRange === removed){\n\t\t\tif(this.ranges.length){\n\t\t\t\tthis.activeRange = this.ranges[this.ranges.length - 1];\n\t\t\t}else{\n\t\t\t\tthis.addRange();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.layoutElement();\n\t}\n\t\n\tfindJumpCell(cells, reverse, emptyStart, emptySide){\n\t\tvar nextCell;\n\t\t\n\t\tif(reverse){\n\t\t\tcells = cells.reverse();\n\t\t}\n\t\t\n\t\tfor(let currentCell of cells){\n\t\t\tlet currentValue = currentCell.getValue();\n\t\t\t\n\t\t\tif(emptyStart){\n\t\t\t\tnextCell = currentCell;\n\t\t\t\tif(currentValue){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(emptySide){\n\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindJumpCellLeft(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false,\n\t\tjumpCol = colPos,\n\t\ttargetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos),\n\t\tnextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellRight(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false,\n\t\tjumpCol = colPos,\n\t\tnextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellUp(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\tfindJumpCellDown(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Selection ///////\n\t///////////////////////////////////\n\tnewSelection(event, element) {\n\t\tvar range;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(!this.columnSelection){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (element === this.rowHeader) {\n\t\t\t\trange = this.resetRanges();\n\t\t\t\tthis.selecting = \"all\";\n\t\t\t\t\n\t\t\t\tvar topLeftCell, bottomRightCell = this.getCell(-1, -1);\n\n\t\t\t\tif(this.rowHeader){\n\t\t\t\t\ttopLeftCell = this.getCell(0, 1);\n\t\t\t\t}else{\n\t\t\t\t\ttopLeftCell = this.getCell(0, 0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trange.setBounds(topLeftCell, bottomRightCell);\t\t\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis.selecting = \"column\";\n\t\t\t}\n\t\t} else if (element.column === this.rowHeader) {\n\t\t\tthis.selecting = \"row\";\n\t\t} else {\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (event.shiftKey) {\n\t\t\tthis.activeRange.setBounds(false, element);\n\t\t} else if (event.ctrlKey) {\n\t\t\tthis.addRange().setBounds(element);\n\t\t} else {\n\t\t\tthis.resetRanges().setBounds(element);\n\t\t}\n\t}\n\t\n\tautoScroll(range, row, column) {\n\t\tvar tableHolder = this.table.rowManager.element,\n\t\trowHeader, rect, view, withinHorizontalView, withinVerticalView;\n\n\t\tif (typeof row === 'undefined') {\n\t\t\trow = this.getRowByRangePos(range.end.row).getElement();\n\t\t}\n\t\t\n\t\tif (typeof column === 'undefined') {\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col).getElement();\n\t\t}\n\n\t\tif (this.rowHeader) {\n\t\t\trowHeader = this.rowHeader.getElement();\n\t\t}\n\t\t\n\t\trect = {\n\t\t\tleft: column.offsetLeft,\n\t\t\tright: column.offsetLeft + column.offsetWidth,\n\t\t\ttop: row.offsetTop,\n\t\t\tbottom: row.offsetTop + row.offsetHeight,\n\t\t};\n\t\t\n\t\tview = {\n\t\t\tleft: tableHolder.scrollLeft,\n\t\t\tright: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),\n\t\t\ttop: tableHolder.scrollTop,\n\t\t\tbottom:\ttableHolder.scrollTop +\ttableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,\n\t\t};\n\n\t\tif (rowHeader) {\n\t\t\tview.left += rowHeader.offsetWidth;\n\t\t}\n\t\t\n\t\twithinHorizontalView = view.left < rect.left &&\trect.left < view.right && view.left < rect.right &&\trect.right < view.right;\n\t\t\n\t\twithinVerticalView = view.top < rect.top &&\trect.top < view.bottom && view.top < rect.bottom &&\trect.bottom < view.bottom;\n\t\t\n\t\tif (!withinHorizontalView) {\n\t\t\tif (rect.left < view.left) {\n\t\t\t\ttableHolder.scrollLeft = rect.left;\n\t\t\t\tif (rowHeader) {\n\t\t\t\t\ttableHolder.scrollLeft -= rowHeader.offsetWidth;\n\t\t\t\t}\n\t\t\t} else if (rect.right > view.right) {\n\t\t\t\ttableHolder.scrollLeft = rect.right - tableHolder.clientWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!withinVerticalView) {\n\t\t\tif (rect.top < view.top) {\n\t\t\t\ttableHolder.scrollTop = rect.top;\n\t\t\t} else if (rect.bottom > view.bottom) {\n\t\t\t\ttableHolder.scrollTop = rect.bottom - tableHolder.clientHeight;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Layout ///////\n\t///////////////////////////////////\n\t\n\tlayoutChange(){\n\t\tthis.overlay.style.visibility = \"hidden\";\n\t\tclearTimeout(this.layoutChangeTimeout);\n\t\tthis.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200);\n\t}\n\t\n\tredraw(force) {\n\t\tif (force) {\n\t\t\tthis.selecting = 'cell';\n\t\t\tthis.resetRanges();\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\t\n\tlayoutElement(visibleRows) {\n\t\tvar rows;\n\t\t\n\t\tif (visibleRows) {\n\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t} else {\n\t\t\trows = this.table.rowManager.getRows();\n\t\t}\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\trow.cells.forEach((cell) => this.renderCell(cell));\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.getTableColumns().forEach((column) => {\n\t\t\tthis.layoutColumn(column);\n\t\t});\n\t\t\n\t\tthis.layoutRanges();\n\t}\n\t\n\tlayoutRow(row) {\n\t\tvar el = row.getElement(),\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesRow(row));\n\t\t\n\t\tif (this.selecting === \"row\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutColumn(column) {\n\t\tvar el = column.getElement(),\t\t\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (this.selecting === \"column\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutRanges() {\n\t\tvar activeCell;\n\t\t\n\t\tif (!this.table.initialized) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tactiveCell = this.getActiveCell();\n\t\t\n\t\tif (!activeCell) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.top =\tactiveCell.row.getElement().offsetTop + \"px\";\n\t\tthis.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + \"px\";\n\t\t\n\t\tthis.ranges.forEach((range) => range.layout());\n\t\t\n\t\tthis.overlay.style.visibility = \"visible\";\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Helper Functions ///////\n\t///////////////////////////////////\t\n\t\n\tgetCell(rowIdx, colIdx) {\n\t\tvar row;\n\t\t\n\t\tif (colIdx < 0) {\n\t\t\tcolIdx = this.getTableColumns().length + colIdx;\n\t\t\tif (colIdx < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (rowIdx < 0) {\n\t\t\trowIdx = this.getTableRows().length + rowIdx;\n\t\t}\n\t\t\n\t\trow = this.table.rowManager.getRowFromPosition(rowIdx + 1);\n\t\t\n\t\treturn row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null;\n\t}\n\t\n\t\n\tgetActiveCell() {\n\t\treturn this.getCell(this.activeRange.start.row, this.activeRange.start.col);\n\t}\n\t\n\tgetRowByRangePos(pos) {\n\t\treturn this.getTableRows()[pos];\n\t}\n\t\n\tgetColumnByRangePos(pos) {\n\t\treturn this.getTableColumns()[pos];\n\t}\n\t\n\tgetTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\tgetTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\taddRange(start, end) {\n\t\tvar range;\n\t\t\n\t\tif(this.maxRanges !== true && this.ranges.length >= this.maxRanges){\n\t\t\tthis.ranges.shift().destroy();\n\t\t}\n\t\t\n\t\trange = new Range(this.table, this, start, end);\n\t\t\n\t\tthis.activeRange = range;\n\t\tthis.ranges.push(range);\n\t\tthis.rangeContainer.appendChild(range.element);\n\t\t\n\t\treturn range;\n\t}\n\t\n\tresetRanges() {\n\t\tvar range, cell;\n\t\t\n\t\tthis.ranges.forEach((range) => range.destroy());\n\t\tthis.ranges = [];\n\t\t\n\t\trange = this.addRange();\n\t\t\n\t\tif(this.table.rowManager.activeRows.length){\n\t\t\tcell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0];\n\n\t\t\tif(cell){\n\t\t\t\trange.setBounds(cell);\n\t\t\t\tthis.initializeFocus(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn range;\n\t}\n\t\n\ttableDestroyed(){\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t\tthis.table.rowManager.element.removeEventListener(\"keydown\", this.keyDownEvent);\n\t}\n\t\n\tselectedRows(component) {\n\t\treturn component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows();\n\t}\n\t\n\tselectedColumns(component) {\n\t\treturn component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();\n\t}\n}\n\nSelectRange.moduleName = \"selectRange\";\n\nexport default SelectRange;\n","import Module from '../../core/Module.js';\nimport Cell from '../../core/cell/Cell.js';\n\nclass Tooltip extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.tooltipSubscriber = null,\n\t\tthis.headerSubscriber = null,\n\t\t\n\t\tthis.timeout = null;\n\t\tthis.popupInstance = null;\n\t\t\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \n\t\t\n\t\tthis.registerColumnOption(\"tooltip\");\n\t\tthis.registerColumnOption(\"headerTooltip\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheckMsg(\"tooltipGenerationMode\", \"This option is no longer needed as tooltips are always generated on hover now\");\n\t}\t\n\t\n\tinitializeColumn(column){\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\n\t\t\tthis.headerSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\n\t\t}\n\t\t\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\n\t\t\tthis.tooltipSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\n\t\t}\n\t}\n\t\n\tmousemoveCheck(action, e, component){\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\n\t\t\n\t\tif(tooltip){\n\t\t\tthis.clearPopup();\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\n\t\t}\n\t}\n\n\tmouseoutCheck(action, e, component){\n\t\tif(!this.popupInstance){\n\t\t\tthis.clearPopup();\n\t\t}\n\t}\n\t\n\tclearPopup(action, e, component){\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = null;\n\t\t\n\t\tif(this.popupInstance){\n\t\t\tthis.popupInstance.hide();\n\t\t}\n\t}\n\t\n\tloadTooltip(e, component, tooltip){\n\t\tvar contentsEl, renderedCallback, coords;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(typeof tooltip === \"function\"){\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\n\t\t}\n\t\t\n\t\tif(tooltip instanceof HTMLElement){\n\t\t\tcontentsEl = tooltip;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\t\n\t\t\tif(tooltip === true){\n\t\t\t\tif(component instanceof Cell){\n\t\t\t\t\ttooltip = component.value;\n\t\t\t\t}else{\n\t\t\t\t\tif(component.definition.field){\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\ttooltip = component.definition.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcontentsEl.innerHTML = tooltip;\n\t\t}\n\t\t\n\t\tif(tooltip || tooltip === 0 || tooltip === false){\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\n\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault());\n\t\t\t\n\t\t\tthis.popupInstance = this.popup(contentsEl);\n\t\t\t\n\t\t\tif(typeof renderedCallback === \"function\"){\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\n\t\t\t}\n\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\n\t\t\t\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\n\t\t\t\tthis.popupInstance = null;\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nTooltip.moduleName = \"tooltip\";\n\nexport default Tooltip;\n","export default {\n\t//is integer\n\tinteger: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//must be alphanumeric\n\talphanumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvar reg = new RegExp(/^[a-z0-9]+$/i);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//maximum value\n\tmax: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\n\t//minimum string length\n\tminLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(typeof parameters == \"string\"){\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function(row){\n\t\t\tvar data = row.getData();\n\n\t\t\tif(data !== cellData){\n\t\t\t\tif(value == column.getFieldValue(data)){\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired:function(cell, value, parameters){\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultValidators from './defaults/validators.js';\n\nclass Validate extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.invalidCells = [];\n\t\t\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\n\t\t\n\t\tthis.registerColumnOption(\"validator\");\n\t\t\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\n\t}\n\t\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Event Handling //////////\n\t///////////////////////////////////\n\t\n\teditValidate(cell, value, previousValue){\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\n\t\t\n\t\t// allow time for editor to make render changes then style cell\n\t\tif(valid !== true){\n\t\t\tsetTimeout(() => {\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn valid;\n\t}\n\t\n\teditorClear(cell, cancelled){\n\t\tif(cancelled){\n\t\t\tif(cell.column.modules.validate){\n\t\t\t\tthis.cellValidate(cell);\n\t\t\t}\n\t\t}\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t}\n\t\n\teditedClear(cell){\n\t\tif(cell.modules.validate){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Cell Functions /////////\n\t///////////////////////////////////\n\t\n\tcellIsValid(cell){\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\n\t}\n\t\n\tcellValidate(cell){\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Column Functions ////////\n\t///////////////////////////////////\n\t\n\tcolumnValidate(column){\n\t\tvar invalid = [];\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Row Functions //////////\n\t///////////////////////////////////\n\t\n\trowValidate(row){\n\t\tvar invalid = [];\n\t\t\n\t\trow.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\tuserClearCellValidation(cells){\n\t\tif(!cells){\n\t\t\tcells = this.getInvalidCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.clearValidation(cell._getSelf());\n\t\t});\n\t}\n\t\n\tuserValidate(cells){\n\t\tvar output = [];\n\t\t\n\t\t//clear row data\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trow = row.getComponent();\n\t\t\t\n\t\t\tvar valid = row.validate();\n\t\t\t\n\t\t\tif(valid !== true){\n\t\t\t\toutput = output.concat(valid);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output.length ? output : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.validator !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//validate\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = [],\n\t\tvalidator;\n\t\t\n\t\tif(column.definition.validator){\n\t\t\t\n\t\t\tif(Array.isArray(column.definition.validator)){\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\n\t\t\t\t\tvalidator = self._extractValidator(item);\n\t\t\t\t\t\n\t\t\t\t\tif(validator){\n\t\t\t\t\t\tconfig.push(validator);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\t\t\t\t\n\t\t\t\tif(validator){\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.validate = config.length ? config : false;\n\t\t}\n\t}\n\t\n\t_extractValidator(value){\n\t\tvar type, params, pos;\n\t\t\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tpos = value.indexOf(':');\n\t\t\t\n\t\t\t\tif(pos > -1){\n\t\t\t\t\ttype = value.substring(0,pos);\n\t\t\t\t\tparams = value.substring(pos+1);\n\t\t\t\t}else{\n\t\t\t\t\ttype = value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\treturn this._buildValidator(type, params);\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\treturn this._buildValidator(value);\n\t\t\t\n\t\t\tcase \"object\":\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t}\n\t}\n\t\n\t_buildValidator(type, params){\n\t\t\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\n\t\t\n\t\tif(!func){\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn {\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\n\t\t\t\tfunc:func,\n\t\t\t\tparams:params,\n\t\t\t};\n\t\t}\n\t}\n\t\n\tvalidate(validators, cell, value){\n\t\tvar self = this,\n\t\tfailedValidators = [],\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\n\t\tif(validators){\n\t\t\tvalidators.forEach((item) => {\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\n\t\t\t\t\tfailedValidators.push({\n\t\t\t\t\t\ttype:item.type,\n\t\t\t\t\t\tparameters:item.params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(!cell.modules.validate){\n\t\t\tcell.modules.validate = {};\n\t\t}\n\t\t\n\t\tif(!failedValidators.length){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}else{\n\t\t\tcell.modules.validate.invalid = failedValidators;\n\t\t\t\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t}\n\t\t\t\n\t\t\tif(invalidIndex == -1){\n\t\t\t\tthis.invalidCells.push(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn failedValidators.length ? failedValidators : true;\n\t}\n\t\n\tgetInvalidCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.invalidCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearValidation(cell){\n\t\tvar invalidIndex;\n\t\t\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\n\t\t\t\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\t\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nValidate.moduleName = \"validate\";\n\n//load defaults\nValidate.validators = defaultValidators;\n\nexport default Validate;\n","export default {\n\n\tdebugEventsExternal:false, //flag to console log events\n\tdebugEventsInternal:false, //flag to console log events\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\n\tdebugInvalidComponentFuncs:true, //allow toggling of invalid component warnings\n\tdebugInitialization:true, //allow toggling of pre initialization function call warnings\n\tdebugDeprecation:true, //allow toggling of deprecation warnings\n\n\theight:false, //height of tabulator\n\tminHeight:false, //minimum height of tabulator\n\tmaxHeight:false, //maximum height of tabulator\n\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\n\n\tpopupContainer:false,\n\n\tcolumns:[],//store for colum header info\n\tcolumnDefaults:{}, //store column default props\n\n\tdata:false, //default starting data\n\n\tautoColumns:false, //build columns from data row structure\n\tautoColumnsDefinitions:false,\n\n\tnestedFieldSeparator:\".\", //separator for nested data\n\n\tfooterElement:false, //hold footer element\n\n\tindex:\"id\", //filed for row index\n\n\ttextDirection:\"auto\",\n\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\n\n\theaderVisible:true, //hide header\n\n\trenderVertical:\"virtual\",\n\trenderHorizontal:\"basic\",\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\n\n\tscrollToRowPosition:\"top\",\n\tscrollToRowIfVisible:true,\n\n\tscrollToColumnPosition:\"left\",\n\tscrollToColumnIfVisible:true,\n\n\trowFormatter:false,\n\trowFormatterPrint:null,\n\trowFormatterClipboard:null,\n\trowFormatterHtmlOutput:null,\n\n\trowHeight:null,\n\n\tplaceholder:false,\n\n\tdataLoader:true,\n\tdataLoaderLoading:false,\n\tdataLoaderError:false,\n\tdataLoaderErrorTimeout:3000,\n\n\tdataSendParams:{},\n\n\tdataReceiveParams:{},\n};\n","export default class OptionsList {\n\tconstructor(table, msgType, defaults = {}){\n\t\tthis.table = table;\n\t\tthis.msgType = msgType;\n\t\tthis.registeredDefaults = Object.assign({}, defaults);\n\t}\n\t\n\tregister(option, value){\n\t\tthis.registeredDefaults[option] = value;\n\t}\n\t\n\tgenerate(defaultOptions, userOptions = {}){\n\t\tvar output = Object.assign({}, this.registeredDefaults),\n\t\twarn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true;\n\t\t\n\t\tObject.assign(output, defaultOptions);\n\t\t\n\t\tfor (let key in userOptions){\n\t\t\tif(!output.hasOwnProperty(key)){\n\t\t\t\tif(warn){\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key);\n\t\t\t\t}\n\n\t\t\t\toutput[key] = userOptions.key;\n\t\t\t}\n\t\t}\n\t\n\t\t\n\t\tfor (let key in output){\n\t\t\tif(key in userOptions){\n\t\t\t\toutput[key] = userOptions[key];\n\t\t\t}else{\n\t\t\t\tif(Array.isArray(output[key])){\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\n\t\t\t\t\tdelete output[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Renderer extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.elementVertical = table.rowManager.element;\n\t\tthis.elementHorizontal = table.columnManager.element;\n\t\tthis.tableElement = table.rowManager.tableElement;\n\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determine how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the container without resizing it)\n\t}\n\n\n\t///////////////////////////////////\n\t/////// Internal Bindings /////////\n\t///////////////////////////////////\n\n\tinitialize(){\n\t\t//initialize core functionality\n\t}\n\n\tclearRows(){\n\t\t//clear down existing rows layout\n\t}\n\n\tclearColumns(){\n\t\t//clear down existing columns layout\n\t}\n\n\n\treinitializeColumnWidths(columns){\n\t\t//resize columns to fit data\n\t}\n\n\n\trenderRows(){\n\t\t//render rows from a clean slate\n\t}\n\n\trenderColumns(){\n\t\t//render columns from a clean slate\n\t}\n\n\trerenderRows(callback){\n\t\t// rerender rows and keep position\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t}\n\n\trerenderColumns(update, blockRedraw){\n\t\t//rerender columns\n\t}\n\n\trenderRowCells(row){\n\t\t//render the cells in a row\n\t}\n\n\trerenderRowCells(row, force){\n\t\t//rerender the cells in a row\n\t}\n\n\tscrollColumns(left, dir){\n\t\t//handle horizontal scrolling\n\t}\n\n\tscrollRows(top, dir){\n\t\t//handle vertical scrolling\n\t}\n\n\tresize(){\n\t\t//container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\n\t}\n\n\tscrollToRow(row){\n\t\t//scroll to a specific row\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\t//determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\t//return the visible rows\n\t\treturn [];\n\t}\n\n\t///////////////////////////////////\n\t//////// Helper Functions /////////\n\t///////////////////////////////////\n\n\trows(){\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t/////// External Triggers /////////\n\t/////// (DO NOT OVERRIDE) /////////\n\t///////////////////////////////////\n\n\tclear(){\n\t\t//clear down existing layout\n\t\tthis.clearRows();\n\t\tthis.clearColumns();\n\t}\n\n\trender(){\n\t\t//render from a clean slate\n\t\tthis.renderRows();\n\t\tthis.renderColumns();\n\t}\n\n\trerender(callback){\n\t\t// rerender and keep position\n\t\tthis.rerenderRows();\n\t\tthis.rerenderColumns();\n\t}\n\n\tscrollToRowPosition(row, position, ifVisible){\n\t\tvar rowIndex = this.rows().indexOf(row),\n\t\trowEl = row.getElement(),\n\t\toffset = 0;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(rowIndex > -1){\n\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\n\t\t\t\t}\n\n\t\t\t\t//check row visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\n\t\t\t\t}\n\n\t\t\t\tif(position === \"nearest\"){\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\";\n\t\t\t\t}\n\n\t\t\t\t//scroll to row\n\t\t\t\tthis.scrollToRow(row);\n\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"top\":\n\t\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t\t}\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class BasicHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\trenderRowCells(row, inFragment) {\n\t\tconst rowFrag = document.createDocumentFragment();\n\t\trow.cells.forEach((cell) => {\n\t\t\trowFrag.appendChild(cell.getElement());\n\t\t});\n\t\trow.element.appendChild(rowFrag);\n\t\t\n\t\tif(!inFragment){\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tcolumns.forEach(function(column){\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class VirtualDomHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftCol = 0;\n\t\tthis.rightCol = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\t\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t\t\n\t\tthis.fitDataColAvg = 0;\n\t\t\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\n\t\t\n\t\tthis.visibleRows = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.isFitData = false;\n\t\t\n\t\tthis.columns = [];\n\t}\n\t\n\tinitialize(){\n\t\tthis.compatibilityCheck();\n\t\tthis.layoutCheck();\n\t\tthis.vertScrollListen();\n\t}\n\t\n\tcompatibilityCheck(){\t\t\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\n\t\t}\n\t\t\n\t\tif(this.options(\"responsiveLayout\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\n\t\t}\n\t\t\n\t\tif(this.options(\"rtl\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\n\t\t}\n\t}\n\t\n\tlayoutCheck(){\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\n\t}\n\t\n\tvertScrollListen(){\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\n\t}\n\t\n\tclearVisRowCache(){\n\t\tthis.visibleRows = null;\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\t\n\trenderColumns(row, force){\n\t\tthis.dataChange();\n\t}\n\t\n\t\n\tscrollColumns(left, dir){\n\t\tif(this.scrollLeft != left){\n\t\t\tthis.scrollLeft = left;\n\t\t\t\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\n\t\t}\n\t}\n\t\n\tcalcWindowBuffer(){\n\t\tvar buffer = this.elementVertical.clientWidth;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\tvar width = column.getWidth();\n\t\t\t\t\n\t\t\t\tif(width > buffer){\n\t\t\t\t\tbuffer = width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.windowBuffer = buffer * 2;\n\t}\n\t\n\trerenderColumns(update, blockRedraw){\t\t\n\t\tvar old = {\n\t\t\tcols:this.columns,\n\t\t\tleftCol:this.leftCol,\n\t\t\trightCol:this.rightCol,\n\t\t},\n\t\tcolPos = 0;\n\t\t\n\t\tif(update && !this.initialized){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.clear();\n\t\t\n\t\tthis.calcWindowBuffer();\n\t\t\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\n\t\t\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tvar config = {},\n\t\t\twidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tif(!column.modules.frozen){\t\t\t\n\t\t\t\t\twidth = column.getWidth();\n\n\t\t\t\t\tconfig.leftPos = colPos;\n\t\t\t\t\tconfig.rightPos = colPos + width;\n\t\t\t\t\t\n\t\t\t\t\tconfig.width = width;\n\t\t\t\t\t\n\t\t\t\t\tif (this.isFitData) {\n\t\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\n\t\t\t\t\t\t//column is visible\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.leftCol == -1){\n\t\t\t\t\t\t\tthis.leftCol = this.columns.length;\n\t\t\t\t\t\t\tthis.vDomPadLeft = colPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.rightCol = this.columns.length;\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// column is hidden\n\t\t\t\t\t\tif(this.leftCol !== -1){\n\t\t\t\t\t\t\tthis.vDomPadRight += width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.columns.push(column);\n\t\t\t\t\t\n\t\t\t\t\tcolumn.modules.vdomHoz = config;\n\t\t\t\t\t\n\t\t\t\t\tcolPos += width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tif(!update || this.reinitChanged(old)){\n\t\t\t\tthis.reinitializeRows();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\n\t}\n\t\n\trenderRowCells(row){\n\t\tif(this.initialized){\n\t\t\tthis.initializeRow(row);\n\t\t}else{\n\t\t\tconst rowFrag = document.createDocumentFragment();\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\trowFrag.appendChild(cell.getElement());\n\t\t\t});\n\t\t\trow.element.appendChild(rowFrag);\n\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\trerenderRowCells(row, force){\n\t\tthis.reinitializeRow(row, force);\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\tthis.columns[i].reinitializeWidth();\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\t\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tclear(){\n\t\tthis.columns = [];\n\t\t\n\t\tthis.leftCol = -1;\n\t\tthis.rightCol = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t}\n\t\n\tdataChange(){\n\t\tvar change = false,\n\t\trow, rowEl;\n\t\t\n\t\tif(this.isFitData){\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif(!column.definition.width && column.visible){\n\t\t\t\t\tchange = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\t\t\n\t\t\t\trow = this.chain(\"rows-sample\", [1], [], () => {\n\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\n\t\t\t\t})[0];\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trowEl = row.getElement();\n\t\t\t\t\t\n\t\t\t\t\trow.generateCells();\n\t\t\t\t\t\n\t\t\t\t\tthis.tableElement.appendChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tfor(let colEnd = 0; colEnd < row.cells.length; colEnd++){\n\t\t\t\t\t\tlet cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\t\t\t\t\t\t\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\n\t\t\t\tthis.layoutRefresh();\n\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treinitChanged(old){\n\t\tvar match = true;\n\t\t\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\told.cols.forEach((col, i) => {\n\t\t\tif(col !== this.columns[i]){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn !match;\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.getVisibleRows(),\n\t\totherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\n\t\tvisibleRows.forEach((row) => {\n\t\t\tthis.reinitializeRow(row, true);\n\t\t});\n\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t}\n\t\n\tgetVisibleRows(){\n\t\tif (!this.visibleRows){\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\n\t\t}\n\t\t\n\t\treturn this.visibleRows;\t\n\t}\n\t\n\tscroll(diff){\n\t\tthis.vDomScrollPosLeft += diff;\n\t\tthis.vDomScrollPosRight += diff;\n\t\t\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\n\t\t\tthis.rerenderColumns();\n\t\t}else{\n\t\t\tif(diff > 0){\n\t\t\t\t//scroll right\n\t\t\t\tthis.addColRight();\n\t\t\t\tthis.removeColLeft();\n\t\t\t}else{\n\t\t\t\t//scroll left\n\t\t\t\tthis.addColLeft();\n\t\t\t\tthis.removeColRight();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcolPositionAdjust (start, end, diff){\n\t\tfor(let i = start; i < end; i++){\n\t\t\tlet column = this.columns[i];\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\n\t\t}\n\t}\n\t\n\taddColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\n\t\t\tlet column = this.columns[this.rightCol + 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling);\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\n\t\t\t\t\t\tthis.vDomPadRight = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\t\t\t\t}\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\taddColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol - 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement());\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tif(diff){\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.rightCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\n\t\t\t\t\tthis.rightCol --;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\n\t\t\t\t\tthis.leftCol ++;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tfitDataColActualWidthCheck(column){\n\t\tvar newWidth, widthDiff;\n\t\t\n\t\tif(column.modules.vdomHoz.fitDataCheck){\n\t\t\tcolumn.reinitializeWidth();\n\t\t\t\n\t\t\tnewWidth = column.getWidth();\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\n\t\t\t\n\t\t\tif(widthDiff){\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\n\t\t}\n\t\t\n\t\treturn widthDiff;\n\t}\n\t\n\tinitializeRow(row){\n\t\tif(row.type !== \"group\"){\n\t\t\trow.modules.vdomHoz = {\n\t\t\t\tleftCol:this.leftCol,\n\t\t\t\trightCol:this.rightCol,\n\t\t\t};\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\t\tthis.appendCell(row, this.columns[i]);\n\t\t\t}\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tappendCell(row, column){\n\t\tif(column && column.visible){\n\t\t\tlet cell = row.getCell(column);\n\t\t\t\n\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\tcell.cellRendered();\n\t\t}\n\t}\n\t\n\treinitializeRow(row, force){\n\t\tif(row.type !== \"group\"){\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\n\t\t\t\t\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\n\n\t\t\t\tthis.initializeRow(row);\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Column from './column/Column.js';\nimport ColumnComponent from './column/ColumnComponent.js';\nimport Helpers from './tools/Helpers.js';\nimport OptionsList from './tools/OptionsList.js';\n\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\n\nimport defaultColumnOptions from './column/defaults/options.js';\n\nexport default class ColumnManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.blockHozScrollEvent = false;\n\t\tthis.headersElement = null;\n\t\tthis.contentsElement = null;\n\t\tthis.element = null ; //containing element\n\t\tthis.columns = []; // column definition object\n\t\tthis.columnsByIndex = []; //columns by index\n\t\tthis.columnsByField = {}; //columns by field\n\t\tthis.scrollLeft = 0;\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockUpdate = null; //store latest redraw update only status\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t////////////// Setup Functions /////////////////\n\t\n\tinitialize(){\n\t\tthis.initializeRenderer();\n\t\t\n\t\tthis.headersElement = this.createHeadersElement();\n\t\tthis.contentsElement = this.createHeaderContentsElement();\n\t\tthis.element = this.createHeaderElement();\n\t\t\n\t\tthis.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild);\n\t\tthis.element.insertBefore(this.contentsElement, this.element.firstChild);\n\n\t\tthis.initializeScrollWheelWatcher();\n\t\t\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.padVerticalScrollbar.bind(this));\n\t}\n\n\tpadVerticalScrollbar(width){\n\t\tif(this.table.rtl){\n\t\t\tthis.headersElement.style.marginLeft = width + \"px\";\n\t\t}else{\n\t\t\tthis.headersElement.style.marginRight = width + \"px\";\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\n\t\t\t\"basic\": RendererBasicHorizontal,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderHorizontal;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderHorizontal);\n\t\t}\n\t}\n\t\n\t\n\tcreateHeadersElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-headers\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\treturn el;\n\t}\n\n\tcreateHeaderContentsElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header-contents\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateHeaderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tif(!this.table.options.headerVisible){\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\n\t\t}\n\t\t\n\t\treturn el;\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return containing contents element\n\tgetContentsElement(){\n\t\treturn this.contentsElement;\n\t}\n\t\n\t\n\t//return header containing element\n\tgetHeadersElement(){\n\t\treturn this.headersElement;\n\t}\n\t\n\t//scroll horizontally to match table body\n\tscrollHorizontal(left){\n\t\tthis.contentsElement.scrollLeft = left;\n\n\t\tthis.scrollLeft = left;\n\t\t\n\t\tthis.renderer.scrollColumns(left);\n\t}\n\n\tinitializeScrollWheelWatcher(){\n\t\tthis.contentsElement.addEventListener(\"wheel\", (e) => {\n\t\t\tvar left;\n\n\t\t\tif(e.deltaX){\n\t\t\t\tleft = this.contentsElement.scrollLeft + e.deltaX;\n\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t///////////// Column Setup Functions /////////////\n\tgenerateColumnsFromRowData(data){\n\t\tvar cols = [],\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\n\t\trow, sorter;\n\t\t\n\t\tif(data && data.length){\n\t\t\t\n\t\t\trow = data[0];\n\t\t\t\n\t\t\tfor(var key in row){\n\t\t\t\tlet col = {\n\t\t\t\t\tfield:key,\n\t\t\t\t\ttitle:key,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet value = row[key];\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(value)){\n\t\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcol.sorter = sorter;\n\t\t\t\t\n\t\t\t\tcols.push(col);\n\t\t\t}\n\t\t\t\n\t\t\tif(definitions){\n\t\t\t\t\n\t\t\t\tswitch(typeof definitions){\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(definitions)){\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(match){\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.table.options.columns = cols;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.table.options.columns = cols;\n\t\t\t}\n\t\t\t\n\t\t\tthis.setColumns(this.table.options.columns);\n\t\t}\n\t}\n\t\n\tsetColumns(cols, row){\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\n\t\t\n\t\tthis.columns = [];\n\t\tthis.columnsByIndex = [];\n\t\tthis.columnsByField = {};\n\t\t\n\t\tthis.dispatch(\"columns-loading\");\n\t\t\n\t\tcols.forEach((def, i) => {\n\t\t\tthis._addColumn(def);\n\t\t});\n\t\t\n\t\tthis._reIndexColumns();\n\t\t\n\t\tthis.dispatch(\"columns-loaded\");\n\t\t\n\t\tthis.rerenderColumns(false, true);\n\t\t\n\t\tthis.redraw(true);\n\t}\n\t\n\t_addColumn(definition, before, nextToColumn){\n\t\tvar column = new Column(definition, this),\n\t\tcolEl = column.getElement(),\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\t\t\n\t\tif(nextToColumn && index > -1){\n\t\t\tvar topColumn = nextToColumn.getTopColumn();\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\n\t\t\tvar nextEl = topColumn.getElement();\n\t\t\t\n\t\t\tif(before){\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t\t}else{\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t\t}\n\t\t}else{\n\t\t\tif(before){\n\t\t\t\tthis.columns.unshift(column);\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t\t}else{\n\t\t\t\tthis.columns.push(column);\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t\t}\n\t\t}\n\t\t\n\t\tcolumn.columnRendered();\n\t\t\n\t\treturn column;\n\t}\n\t\n\tregisterColumnField(col){\n\t\tif(col.definition.field){\n\t\t\tthis.columnsByField[col.definition.field] = col;\n\t\t}\n\t}\n\t\n\tregisterColumnPosition(col){\n\t\tthis.columnsByIndex.push(col);\n\t}\n\t\n\t_reIndexColumns(){\n\t\tthis.columnsByIndex = [];\n\t\t\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t}\n\t\n\t//ensure column headers take up the correct amount of space in column groups\n\tverticalAlignHeaders(){\n\t\tvar minHeight = 0;\n\t\t\n\t\tif(!this.redrawBlock){\n\n\t\t\tthis.headersElement.style.height=\"\";\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.clearVerticalAlign();\n\t\t\t});\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tvar height = column.getHeight();\n\t\t\t\t\n\t\t\t\tif(height > minHeight){\n\t\t\t\t\tminHeight = height;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.headersElement.style.height = minHeight + \"px\";\n\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\n\t\t\t});\n\t\t\t\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\t//////////////// Column Details /////////////////\n\tfindColumn(subject){\n\t\tvar columns;\n\n\t\tif(typeof subject == \"object\"){\n\t\t\t\n\t\t\tif(subject instanceof Column){\n\t\t\t\t//subject is column element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof ColumnComponent){\n\t\t\t\t//subject is public column component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\n\t\t\t\tcolumns = [];\n\n\t\t\t\tthis.columns.forEach((column) => {\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t\t});\n\n\t\t\t\t//subject is a HTML element of the column header\n\t\t\t\tlet match = columns.find((column) => {\n\t\t\t\t\treturn column.element === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\t//subject should be treated as the field name of the column\n\t\t\treturn this.columnsByField[subject] || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetColumnByField(field){\n\t\treturn this.columnsByField[field];\n\t}\n\t\n\tgetColumnsByFieldRoot(root){\n\t\tvar matches = [];\n\t\t\n\t\tObject.keys(this.columnsByField).forEach((field) => {\n\t\t\tvar fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field;\n\t\t\tif(fieldRoot === root){\n\t\t\t\tmatches.push(this.columnsByField[field]);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn matches;\n\t}\n\t\n\tgetColumnByIndex(index){\n\t\treturn this.columnsByIndex[index];\n\t}\n\t\n\tgetFirstVisibleColumn(){\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\n\t\t\treturn col.visible;\n\t\t});\n\t\t\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\n\t}\n\n\tgetVisibleColumnsByIndex() {\n\t\treturn this.columnsByIndex.filter((col) => col.visible);\n\t}\n\t\n\tgetColumns(){\n\t\treturn this.columns;\n\t}\n\t\n\tfindColumnIndex(column){\n\t\treturn this.columnsByIndex.findIndex((col) => {\n\t\t\treturn column === col;\n\t\t});\n\t}\n\t\n\t//return all columns that are not groups\n\tgetRealColumns(){\n\t\treturn this.columnsByIndex;\n\t}\n\t\n\t//traverse across columns and call action\n\ttraverse(callback){\n\t\tthis.columnsByIndex.forEach((column,i) =>{\n\t\t\tcallback(column, i);\n\t\t});\n\t}\n\t\n\t//get definitions of actual columns\n\tgetDefinitions(active){\n\t\tvar output = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(!active || (active && column.visible)){\n\t\t\t\toutput.push(column.getDefinition());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\t//get full nested definition tree\n\tgetDefinitionTree(){\n\t\tvar output = [];\n\t\t\n\t\tthis.columns.forEach((column) => {\n\t\t\toutput.push(column.getDefinition(true));\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(structured){\n\t\tvar output = [],\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetWidth(){\n\t\tvar width = 0;\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn width;\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\n\t\t\n\t\tif(after){\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t\t}\n\t\t\n\t\tthis.moveColumnActual(from, to, after);\n\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\t\n\tmoveColumnActual(from, to, after){\n\t\tif(from.parent.isGroup){\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t\t}else{\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t\t}\n\t\t\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\t\t\n\t\tthis.rerenderColumns(true);\n\t\t\n\t\tthis.dispatch(\"column-moved\", from, to, after);\n\t\t\n\t\tif(this.subscribedExternal(\"columnMoved\")){\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\n\t\t}\n\t}\n\t\n\t_moveColumnInArray(columns, from, to, after, updateRows){\n\t\tvar\tfromIndex = columns.indexOf(from),\n\t\ttoIndex, rows = [];\n\t\t\n\t\tif (fromIndex > -1) {\n\t\t\t\n\t\t\tcolumns.splice(fromIndex, 1);\n\t\t\t\n\t\t\ttoIndex = columns.indexOf(to);\n\t\t\t\n\t\t\tif (toIndex > -1) {\n\t\t\t\t\n\t\t\t\tif(after){\n\t\t\t\t\ttoIndex = toIndex+1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\ttoIndex = fromIndex;\n\t\t\t}\n\t\t\t\n\t\t\tcolumns.splice(toIndex, 0, from);\n\t\t\t\n\t\t\tif(updateRows){\n\t\t\t\t\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\n\t\t\t\t\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\n\t\t\t\t\n\t\t\t\trows.forEach(function(row){\n\t\t\t\t\tif(row.cells.length){\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n\t\n\tscrollToColumn(column, position, ifVisible){\n\t\tvar left = 0,\n\t\toffset = column.getLeftOffset(),\n\t\tadjust = 0,\n\t\tcolEl = column.getElement();\n\t\t\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\tadjust = -this.element.clientWidth / 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//check column visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//calculate scroll position\n\t\t\t\tleft = offset + adjust;\n\t\t\t\t\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.scrollHorizontal(left);\n\t\t\t\t\n\t\t\t\tresolve();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\t\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tgenerateCells(row){\n\t\tvar cells = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tcells.push(column.generateCell(row));\n\t\t});\n\t\t\n\t\treturn cells;\n\t}\n\t\n\t//////////////// Column Management /////////////////\n\tgetFlexBaseWidth(){\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\n\t\tfixedWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar if present\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\t\t\n\t\tthis.columnsByIndex.forEach(function(column){\n\t\t\tvar width, minWidth, colWidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\twidth = column.definition.width || 0;\n\t\t\t\t\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\t\t\t\t\n\t\t\t\tif(typeof(width) == \"string\"){\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tcolWidth = width;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn fixedWidth;\n\t}\n\t\n\taddColumn(definition, before, nextToColumn){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\n\t\t\t\n\t\t\tthis._reIndexColumns();\n\t\t\t\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\n\t\t\t\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\t\t\t\n\t\t\tthis.redraw(true);\n\t\t\t\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t\t\n\t\t\tthis.rerenderColumns();\n\t\t\t\n\t\t\tresolve(column);\n\t\t});\n\t}\n\t\n\t//remove column from system\n\tderegisterColumn(column){\n\t\tvar field = column.getField(),\n\t\tindex;\n\t\t\n\t\t//remove from field list\n\t\tif(field){\n\t\t\tdelete this.columnsByField[field];\n\t\t}\n\t\t\n\t\t//remove from index list\n\t\tindex = this.columnsByIndex.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columnsByIndex.splice(index, 1);\n\t\t}\n\t\t\n\t\t//remove from column list\n\t\tindex = this.columns.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\t\t\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.redraw();\n\t}\n\t\n\trerenderColumns(update, silent){\n\t\tif(!this.redrawBlock){\n\t\t\tthis.renderer.rerenderColumns(update, silent);\n\t\t}else{\n\t\t\tif(update === false || (update === true && this.redrawBlockUpdate === null)){\n\t\t\t\tthis.redrawBlockUpdate = update;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockUpdate = null;\n\t}\n\t\n\trestoreRedraw(){\n\t\tthis.redrawBlock = false;\n\t\tthis.verticalAlignHeaders();\n\t\tthis.renderer.rerenderColumns(this.redrawBlockUpdate);\n\t\t\n\t}\n\t\n\t//redraw columns\n\tredraw(force){\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.verticalAlignHeaders();\n\t\t}\n\t\t\n\t\tif(force){\n\t\t\tthis.table.rowManager.resetScroll();\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t}\n\t\t\n\t\tif(!this.confirm(\"table-redrawing\", force)){\n\t\t\tthis.layoutRefresh(force);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-redraw\", force);\n\t\t\n\t\tthis.table.footerManager.redraw();\n\t}\n}","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class BasicVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.verticalFillMode = \"fill\";\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t}\n\t\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\t\t\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\telement.scrollTop = 0;\n\t\telement.scrollLeft = 0;\n\t\t\n\t\telement.style.minWidth = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\t}\n\t\n\trenderRows() {\n\t\tvar element = this.tableElement,\n\t\tonlyGroupHeaders = true,\n\t\ttableFrag = document.createDocumentFragment(),\n\t\trows = this.rows();\n\t\t\n\t\trows.forEach((row, index) => {\n\t\t\tthis.styleRow(row, index);\n\t\t\trow.initialize(false, true);\n\t\t\t\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t\t\n\t\t\ttableFrag.appendChild(row.getElement());\n\t\t});\n\t\t\n\t\telement.appendChild(tableFrag);\n\t\t\n\t\trows.forEach((row) => {\n\t\t\trow.rendered();\n\t\t\t\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.calcHeight(true);\n\t\t\t}\n\t\t});\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.setCellHeight();\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n\t\n\trerenderRows(callback){\t\n\t\tthis.clearRows();\n\t\t\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t\t\n\t\tthis.renderRows();\n\n\t\tif(!this.rows().length){\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\t}\n\t\n\tscrollToRowNearestTop(row){\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\n\t\t\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\n\t}\n\t\n\tscrollToRow(row){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\n\t}\n\t\n\tvisibleRows(includingBuffer){\n\t\treturn this.rows();\n\t}\n\t\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class VirtualDomVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.verticalFillMode = \"fill\";\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\t\tthis.vDomBottom = 0; //hold position for last rendered row in the virtual DOM\n\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\t}\n\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\telement.style.paddingTop = \"\";\n\t\telement.style.paddingBottom = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\n\t\tthis.elementVertical.scrollTop = 0;\n\t\tthis.elementVertical.scrollLeft = 0;\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomTop = 0;\n\t\tthis.vDomBottom = 0;\n\t\tthis.vDomTopPad = 0;\n\t\tthis.vDomBottomPad = 0;\n\t\tthis.vDomScrollPosTop = 0;\n\t\tthis.vDomScrollPosBottom = 0;\n\t}\n\n\trenderRows(){\n\t\tthis._virtualRenderFill();\n\t}\n\n\trerenderRows(callback){\n\t\tvar scrollTop = this.elementVertical.scrollTop;\n\t\tvar topRow = false;\n\t\tvar topOffset = false;\n\n\t\tvar left = this.table.rowManager.scrollLeft;\n\n\t\tvar rows = this.rows();\n\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\n\t\t\tif(rows[i]){\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\n\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\ttopRow = i;\n\t\t\t\t}else{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trows.forEach((row) => {\n\t\t\trow.deinitializeHeight();\n\t\t});\n\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\n\t\tif(this.rows().length){\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\n\t\t}else{\n\t\t\tthis.clear();\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\n\t\tthis.scrollColumns(left);\n\t}\n\n\tscrollColumns(left){\n\t\tthis.table.rowManager.scrollHorizontal(left);\n\t}\n\n\tscrollRows(top, dir){\n\t\tvar topDiff = top - this.vDomScrollPosTop;\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\n\t\tvar margin = this.vDomWindowBuffer * 2;\n\t\tvar rows = this.rows();\n\n\t\tthis.scrollTop = top;\n\n\t\tif(-topDiff > margin || bottomDiff > margin){\n\t\t\t//if big scroll redraw table;\n\t\t\tvar left = this.table.rowManager.scrollLeft;\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\n\t\t\tthis.scrollColumns(left);\n\t\t}else{\n\n\t\t\tif(dir){\n\t\t\t\t//scrolling up\n\t\t\t\tif(topDiff < 0){\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\n\t\t\t\t}\n\n\t\t\t\tif(bottomDiff < 0){\n\t\t\t\t\t//hide bottom row if needed\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(bottomDiff >= 0){\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\n\t\t\t\t}\n\n\t\t\t\t//scrolling down\n\t\t\t\tif(topDiff >= 0){\n\t\t\t\t\t//hide top row if needed\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresize(){\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\tvar rowIndex = this.rows().indexOf(row);\n\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\n\t}\n\n\tscrollToRow(row){\n\t\tvar index = this.rows().indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tthis._virtualRenderFill(index, true);\n\t\t}\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\tvar topEdge = this.elementVertical.scrollTop,\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\n\t\ttopFound = false,\n\t\ttopRow = 0,\n\t\tbottomRow = 0,\n\t\trows = this.rows();\n\n\t\tif(includingBuffer){\n\t\t\ttopRow = this.vDomTop;\n\t\t\tbottomRow = this.vDomBottom;\n\t\t}else{\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\t\t\t\tif(rows[i]){\n\t\t\t\t\tif(!topFound){\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows.slice(topRow, bottomRow + 1);\n\t}\n\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\n\t//full virtual render\n\t_virtualRenderFill(position, forceMove, offset) {\n\t\tvar\telement = this.tableElement,\n\t\tholder = this.elementVertical,\n\t\ttopPad = 0,\n\t\trowsHeight = 0,\n\t\trowHeight = 0,\n\t\theightOccupied = 0,\n\t\ttopPadHeight = 0,\n\t\ti = 0,\n\t\trows = this.rows(),\n\t\trowsCount = rows.length,\n\t\tindex = 0,\n\t\trow,\n\t\trowFragment,\n\t\trenderedRows = [],\n\t\ttotalRowsRendered = 0,\n\t\trowsToRender = 0,\n\t\tfixedHeight = this.table.rowManager.fixedHeight,\n\t\tcontainerHeight = this.elementVertical.clientHeight, \n\t\tavgRowHeight = this.table.options.rowHeight, \n\t\tresized = true;\n\n\t\tposition = position || 0;\n\n\t\toffset = offset || 0;\n\n\t\tif(!position){\n\t\t\tthis.clear();\n\t\t}else {\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\t\t//check if position is too close to bottom of table\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\n\n\t\t\tif(heightOccupied < containerHeight){\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\n\t\t\t\tif(position < 0){\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate initial pad\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\n\t\t\tposition -= topPad;\n\t\t}\n\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\n\t\t\tthis.vDomTop = position;\n\t\t\tthis.vDomBottom = position -1;\n\n\t\t\tif(fixedHeight || this.table.options.maxHeight) {\n\t\t\t\tif(avgRowHeight) {\n\t\t\t\t\trowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight);\n\t\t\t\t}\n\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender));\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowsToRender = rowsCount;\n\t\t\t}\n\n\t\t\twhile(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) {\n\t\t\t\trenderedRows = [];\n\t\t\t\trowFragment = document.createDocumentFragment();\n\n\t\t\t\ti = 0;\n\n\t\t\t\twhile ((i < rowsToRender) && this.vDomBottom < rowsCount -1) {\t\n\t\t\t\t\tindex = this.vDomBottom + 1,\n\t\t\t\t\trow = rows[index];\n\n\t\t\t\t\tthis.styleRow(row, index);\n\n\t\t\t\t\trow.initialize(false, true);\n\t\t\t\t\tif(!row.heightInitialized && !this.table.options.rowHeight){\n\t\t\t\t\t\trow.clearCellHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\trowFragment.appendChild(row.getElement());\n\t\t\t\t\trenderedRows.push(row);\n\t\t\t\t\tthis.vDomBottom ++;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tif(!renderedRows.length){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telement.appendChild(rowFragment);\n\t\t\t\t\n\t\t\t\t// NOTE: The next 3 loops are separate on purpose\n\t\t\t\t// This is to batch up the dom writes and reads which drastically improves performance \n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trow.rendered();\n\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.calcHeight(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.setCellHeight();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trowHeight = row.getHeight();\n\t\t\t\t\t\n\t\t\t\t\tif(totalRowsRendered < topPad){\n\t\t\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t\t\t}else {\n\t\t\t\t\t\trowsHeight += rowHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t}\n\t\t\t\t\ttotalRowsRendered++;\n\t\t\t\t});\n\n\t\t\t\tresized = this.table.rowManager.adjustTableSize();\n\t\t\t\tcontainerHeight = this.elementVertical.clientHeight;\n\t\t\t\tif(resized && (fixedHeight || this.table.options.maxHeight))\n\t\t\t\t{\n\t\t\t\t\tavgRowHeight = rowsHeight / totalRowsRendered;\n\t\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!position){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t\t//adjust row height to match average of rendered elements\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered);\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\n\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\n\t\t\t}else {\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t\t}\n\t\t\t\n\t\t\telement.style.paddingTop = this.vDomTopPad+\"px\";\n\t\t\telement.style.paddingBottom = this.vDomBottomPad+\"px\";\n\n\t\t\tif(forceMove){\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\n\t\t\t}\n\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\n\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\n\t\t\t}\n\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\t\tholder.scrollTop = this.scrollTop;\n\n\t\t\tthis.dispatch(\"render-virtual-fill\");\n\t\t}\n\t}\n\n\t_addTopRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomTop -1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tif(this.vDomTop){\n\t\t\t\tlet row = rows[index],\n\t\t\t\trowHeight, initialized;\n\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\n\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trow.initialize();\n\n\t\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\t\tthis.vDomTop--;\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\ti++;\n\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad -= paddingAdjust;\n\n\t\t\tif(this.vDomTopPad < 0){\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif(index < 1){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\n\t\t}\n\t}\n\n\t_removeTopRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomTop],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomTop++;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad += paddingAdjust;\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\n\t\t}\n\t}\n\n\t_addBottomRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomBottom + 1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[index],\n\t\t\trowHeight, initialized;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\ttable.appendChild(row.getElement());\n\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t}\n\n\t\t\t\t\trow.initialize();\n\n\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tthis.vDomBottom++;\n\t\t\t\t\tindex++;\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\n\t\t}\n\t}\n\n\t_removeBottomRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomBottom],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomBottom --;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad += paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\n\t\t}\n\t}\n\n\t_quickNormalizeRowHeight(rows){\n\t\tfor(let row of rows){\n\t\t\trow.calcHeight();\n\t\t}\n\n\t\tfor(let row of rows){\n\t\t\trow.setCellHeight();\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Row from './row/Row.js';\nimport RowComponent from './row/RowComponent.js';\nimport Helpers from './tools/Helpers.js';\n\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\n\nexport default class RowManager extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = this.createHolderElement(); //containing element\n\t\tthis.tableElement = this.createTableElement(); //table element\n\t\tthis.heightFixer = this.createTableElement(); //table element\n\t\tthis.placeholder = null; //placeholder element\n\t\tthis.placeholderContents = null; //placeholder element\n\t\t\n\t\tthis.firstRender = false; //handle first render\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\n\t\tthis.fixedHeight = false; //current rendering mode\n\t\t\n\t\tthis.rows = []; //hold row data objects\n\t\tthis.activeRowsPipeline = []; //hold calculation of active rows\n\t\tthis.activeRows = []; //rows currently available to on display in the table\n\t\tthis.activeRowsCount = 0; //count of active rows\n\t\t\n\t\tthis.displayRows = []; //rows currently on display in the table\n\t\tthis.displayRowsCount = 0; //count of display rows\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\n\t\t\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\n\t\t\n\t\tthis.scrollbarWidth = 0;\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t//////////////// Setup Functions /////////////////\n\t\n\tcreateHolderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-tableholder\");\n\t\tel.setAttribute(\"tabindex\", 0);\n\t\t// el.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateTableElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-table\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitializePlaceholder(){\n\t\tvar placeholder = this.table.options.placeholder;\n\t\t\n\t\tif(typeof placeholder === \"function\"){\n\t\t\tplaceholder = placeholder.call(this.table);\n\t\t}\n\t\t\n\t\tplaceholder = this.chain(\"placeholder\", [placeholder], placeholder, placeholder) || placeholder;\n\t\t\n\t\t//configure placeholder element\n\t\tif(placeholder){\t\n\t\t\tlet el = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-placeholder\");\n\t\t\t\n\t\t\tif(typeof placeholder == \"string\"){\n\t\t\t\tlet contents = document.createElement(\"div\");\n\t\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\n\t\t\t\tcontents.innerHTML = placeholder;\n\t\t\t\t\n\t\t\t\tel.appendChild(contents);\n\t\t\t\t\n\t\t\t\tthis.placeholderContents = contents;\n\t\t\t\t\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && placeholder instanceof HTMLElement){\n\t\t\t\t\n\t\t\t\tel.appendChild(placeholder);\n\t\t\t\tthis.placeholderContents = placeholder;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Invalid placeholder provided, must be string or HTML Element\", placeholder);\n\t\t\t\t\n\t\t\t\tthis.el = null;\n\t\t\t}\n\t\t\t\n\t\t\tthis.placeholder = el;\n\t\t}\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\t\n\t//return table element\n\tgetTableElement(){\n\t\treturn this.tableElement;\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializePlaceholder();\n\t\tthis.initializeRenderer();\n\t\t\n\t\t//initialize manager\n\t\tthis.element.appendChild(this.tableElement);\n\t\t\n\t\tthis.firstRender = true;\n\t\t\n\t\t//scroll header along with table body\n\t\tthis.element.addEventListener(\"scroll\", () => {\n\t\t\tvar left = this.element.scrollLeft,\n\t\t\tleftDir = this.scrollLeft > left,\n\t\t\ttop = this.element.scrollTop,\n\t\t\ttopDir = this.scrollTop > top;\n\t\t\t\n\t\t\t//handle horizontal scrolling\n\t\t\tif(this.scrollLeft != left){\n\t\t\t\tthis.scrollLeft = left;\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\n\t\t\t\t\n\t\t\t\tthis._positionPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\t//handle vertical scrolling\n\t\t\tif(this.scrollTop != top){\n\t\t\t\tthis.scrollTop = top;\n\t\t\t\t\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t////////////////// Row Manipulation //////////////////\n\tfindRow(subject){\n\t\tif(typeof subject == \"object\"){\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\t//subject is a HTML element of the row\n\t\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\t\treturn row.getElement() === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}else if(subject === null){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\treturn false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t\t\n\t\t\treturn match || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetRowFromDataObject(data){\n\t\tvar match = this.rows.find((row) => {\n\t\t\treturn row.data === data;\n\t\t});\n\t\t\n\t\treturn match || false;\n\t}\n\t\n\tgetRowFromPosition(position){\n\t\treturn this.getDisplayRows().find((row) => {\n\t\t\treturn row.getPosition() === position && row.isDisplayed();\n\t\t});\n\t}\n\t\n\tscrollToRow(row, position, ifVisible){\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\tsetData(data, renderInPosition, columnsChanged){\n\t\treturn new Promise((resolve, reject)=>{\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\n\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\tthis._setDataActual(data, true);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reRenderInPosition(() => {\n\t\t\t\t\t\tthis._setDataActual(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t\t}\n\t\t\t\tthis.resetScroll();\n\t\t\t\t\n\t\t\t\tthis._setDataActual(data);\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\t_setDataActual(data, renderInPosition){\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\n\t\t\n\t\tthis._wipeElements();\n\t\t\n\t\tif(Array.isArray(data)){\n\t\t\tthis.dispatch(\"data-processing\", data);\n\t\t\t\n\t\t\tdata.forEach((def, i) => {\n\t\t\t\tif(def && typeof def === \"object\"){\n\t\t\t\t\tvar row = new Row(def, this);\n\t\t\t\t\tthis.rows.push(row);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\n\t\t\t\n\t\t\tthis.dispatch(\"data-processed\", data);\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\n\t\t}else{\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\n\t\t}\n\t}\n\t\n\t_wipeElements(){\n\t\tthis.dispatch(\"rows-wipe\");\n\t\t\n\t\tthis.destroy();\n\t\t\n\t\tthis.adjustTableSize();\n\t\t\n\t\tthis.dispatch(\"rows-wiped\");\n\t}\n\t\n\tdestroy(){\n\t\tthis.rows.forEach((row) => {\n\t\t\trow.wipe();\n\t\t});\n\t\t\n\t\tthis.rows = [];\n\t\tthis.activeRows = [];\n\t\tthis.activeRowsPipeline = [];\n\t\tthis.activeRowsCount = 0;\n\t\tthis.displayRows = [];\n\t\tthis.displayRowsCount = 0;\n\t}\n\t\n\tdeleteRow(row, blockRedraw){\n\t\tvar allIndex = this.rows.indexOf(row),\n\t\tactiveIndex = this.activeRows.indexOf(row);\n\t\t\n\t\tif(activeIndex > -1){\n\t\t\tthis.activeRows.splice(activeIndex, 1);\n\t\t}\n\t\t\n\t\tif(allIndex > -1){\n\t\t\tthis.rows.splice(allIndex, 1);\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tvar displayIndex = rows.indexOf(row);\n\t\t\t\n\t\t\tif(displayIndex > -1){\n\t\t\t\trows.splice(displayIndex, 1);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis.tableEmpty();\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\n\t\t}\n\t}\n\t\n\taddRow(data, pos, index, blockRedraw){\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\t\treturn row;\n\t}\n\t\n\t//add multiple rows\n\taddRows(data, pos, index, refreshDisplayOnly){\n\t\tvar rows = [];\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tpos = this.findAddRowPos(pos);\n\t\t\t\n\t\t\tif(!Array.isArray(data)){\n\t\t\t\tdata = [data];\n\t\t\t}\n\t\t\t\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\n\t\t\t\tdata.reverse();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach((item, i) => {\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\n\t\t\t\trows.push(row);\n\t\t\t\tthis.dispatch(\"row-added\", row, item, pos, index);\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(refreshDisplayOnly ? \"displayPipeline\" : false, false, true);\n\t\t\t\n\t\t\tthis.regenerateRowPositions();\n\t\t\t\n\t\t\tif(this.displayRowsCount){\n\t\t\t\tthis._clearPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\tresolve(rows);\n\t\t});\n\t}\n\t\n\tfindAddRowPos(pos){\n\t\tif(typeof pos === \"undefined\"){\n\t\t\tpos = this.table.options.addRowPos;\n\t\t}\n\t\t\n\t\tif(pos === \"pos\"){\n\t\t\tpos = true;\n\t\t}\n\t\t\n\t\tif(pos === \"bottom\"){\n\t\t\tpos = false;\n\t\t}\n\t\t\n\t\treturn pos;\n\t}\n\t\n\taddRowActual(data, pos, index, blockRedraw){\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t\ttop = this.findAddRowPos(pos),\n\t\tallIndex = -1,\n\t\tactiveIndex, chainResult;\n\t\t\n\t\tif(!index){\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\n\t\t\t\n\t\t\tindex = chainResult.index;\n\t\t\ttop = chainResult.top;\n\t\t}\n\t\t\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tindex = this.findRow(index);\n\t\t}\n\t\t\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\n\t\t\n\t\tif(index){\n\t\t\tallIndex = this.rows.indexOf(index);\n\t\t}\n\t\t\n\t\tif(index && allIndex > -1){\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\n\t\t\t\n\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\tvar displayIndex = rows.indexOf(index);\n\t\t\t\t\n\t\t\t\tif(displayIndex > -1){\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(activeIndex > -1){\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\n\t\t\t}\n\t\t\t\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(top){\n\t\t\t\t\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.unshift(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.unshift(row);\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}else{\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.push(row);\n\t\t\t\tthis.rows.push(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t}\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\treturn row;\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tthis.dispatch(\"row-move\", from, to, after);\n\t\t\n\t\tthis.moveRowActual(from, to, after);\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatch(\"row-moved\", from, to, after);\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\n\t}\n\t\n\tmoveRowActual(from, to, after){\n\t\tthis.moveRowInArray(this.rows, from, to, after);\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tthis.moveRowInArray(rows, from, to, after);\n\t\t});\n\t\t\n\t\tthis.dispatch(\"row-moving\", from, to, after);\n\t}\n\t\n\tmoveRowInArray(rows, from, to, after){\n\t\tvar\tfromIndex, toIndex, start, end;\n\t\t\n\t\tif(from !== to){\n\t\t\t\n\t\t\tfromIndex = rows.indexOf(from);\n\t\t\t\n\t\t\tif (fromIndex > -1) {\n\t\t\t\t\n\t\t\t\trows.splice(fromIndex, 1);\n\t\t\t\t\n\t\t\t\ttoIndex = rows.indexOf(to);\n\t\t\t\t\n\t\t\t\tif (toIndex > -1) {\n\t\t\t\t\t\n\t\t\t\t\tif(after){\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//restyle rows\n\t\t\tif(rows === this.getDisplayRows()){\n\t\t\t\t\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\n\t\t\t\t\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tif(rows[i]){\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearData(){\n\t\tthis.setData([]);\n\t}\n\t\n\tgetRowIndex(row){\n\t\treturn this.findRowIndex(row, this.rows);\n\t}\n\t\n\tgetDisplayRowIndex(row){\n\t\tvar index = this.getDisplayRows().indexOf(row);\n\t\treturn index > -1 ? index : false;\n\t}\n\t\n\tnextDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tnextRow = false;\n\t\t\n\t\t\n\t\tif(index !== false && index < this.displayRowsCount -1){\n\t\t\tnextRow = this.getDisplayRows()[index+1];\n\t\t}\n\t\t\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn nextRow;\n\t}\n\t\n\tprevDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tprevRow = false;\n\t\t\n\t\tif(index){\n\t\t\tprevRow = this.getDisplayRows()[index-1];\n\t\t}\n\t\t\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn prevRow;\n\t}\n\t\n\tfindRowIndex(row, list){\n\t\tvar rowIndex;\n\t\t\n\t\trow = this.findRow(row);\n\t\t\n\t\tif(row){\n\t\t\trowIndex = list.indexOf(row);\n\t\t\t\n\t\t\tif(rowIndex > -1){\n\t\t\t\treturn rowIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tgetData(active, transform){\n\t\tvar output = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tif(row.type == \"row\"){\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(active){\n\t\tvar\toutput = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\toutput.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetDataCount(active){\n\t\tvar rows = this.getRows(active);\n\t\t\n\t\treturn rows.length;\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tthis.scrollLeft = left;\n\t\tthis.element.scrollLeft = left;\n\t\t\n\t\tthis.dispatch(\"scroll-horizontal\", left);\n\t}\n\t\n\tregisterDataPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.dataPipeline.push({handler, priority});\n\t\t\tthis.dataPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\tregisterDisplayPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.displayPipeline.push({handler, priority});\n\t\t\tthis.displayPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\t//set active data set\n\trefreshActiveData(handler, skipStage, renderInPosition){\n\t\tvar table = this.table,\n\t\tstage = \"\",\n\t\tindex = 0,\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"];\n\t\t\n\t\tif(!this.table.destroyed){\n\t\t\tif(typeof handler === \"function\"){\n\t\t\t\tindex = this.dataPipeline.findIndex((item) => {\n\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(index > -1){\n\t\t\t\t\tstage = \"dataPipeline\";\n\t\t\t\t\t\n\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\tif(index == this.dataPipeline.length - 1){\n\t\t\t\t\t\t\tstage = \"display\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\n\t\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(index > -1){\n\t\t\t\t\t\tstage = \"displayPipeline\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\n\t\t\t\t\t\t\t\tstage = \"end\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tstage = handler || \"all\";\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.redrawBlock){\n\t\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\n\t\t\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\tskipStage: skipStage,\n\t\t\t\t\t\trenderInPosition: renderInPosition,\n\t\t\t\t\t\tstage:stage,\n\t\t\t\t\t\tindex:index,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\tif(Helpers.elVisible(this.element)){\n\t\t\t\t\tif(renderInPosition){\n\t\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!handler){\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.renderTable();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\n\t\t\t\t\t\t\tthis.table.columnManager.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"data-refreshed\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\trefreshPipelines(handler, stage, index, renderInPosition){\n\t\tthis.dispatch(\"data-refreshing\");\n\t\t\n\t\tif(!handler || !this.activeRowsPipeline[0]){\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\n\t\t}\n\t\t\n\t\t//cascade through data refresh stages\n\t\tswitch(stage){\n\t\t\tcase \"all\":\n\t\t\t//handle case where all data needs refreshing\n\t\t\t\n\t\t\tcase \"dataPipeline\":\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\n\t\t\t\t\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\tindex = 0;\n\t\t\t\tthis.resetDisplayRows();\n\t\t\t\n\t\t\tcase \"displayPipeline\":\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\n\t\t\t\t\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"end\":\n\t\t\t//case to handle scenario when trying to skip past end stage\n\t\t\t\tthis.regenerateRowPositions();\n\t\t}\n\t\t\n\t\tif(this.getDisplayRows().length){\n\t\t\tthis._clearPlaceholder();\n\t\t}\n\t}\n\t\n\t//regenerate row positions\n\tregenerateRowPositions(){\n\t\tvar rows = this.getDisplayRows();\n\t\tvar index = 1;\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\"){\n\t\t\t\trow.setPosition(index);\n\t\t\t\tindex++;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tsetActiveRows(activeRows){\n\t\tthis.activeRows = this.activeRows = Object.assign([], activeRows);\n\t\tthis.activeRowsCount = this.activeRows.length;\n\t}\n\t\n\t//reset display rows array\n\tresetDisplayRows(){\n\t\tthis.displayRows = [];\n\t\t\n\t\tthis.displayRows.push(this.activeRows.slice(0));\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[0].length;\n\t}\n\t\n\t//set display row pipeline data\n\tsetDisplayRows(displayRows, index){\n\t\tthis.displayRows[index] = displayRows;\n\t\t\n\t\tif(index == this.displayRows.length -1){\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t\t}\n\t}\n\t\n\tgetDisplayRows(index){\n\t\tif(typeof index == \"undefined\"){\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\n\t\t}else{\n\t\t\treturn this.displayRows[index] || [];\n\t\t}\n\t}\n\t\n\tgetVisibleRows(chain, viewable){\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\n\t\t\n\t\tif(chain){\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t//repeat action across display rows\n\tdisplayRowIterator(callback){\n\t\tthis.activeRowsPipeline.forEach(callback);\n\t\tthis.displayRows.forEach(callback);\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t}\n\t\n\t//return only actual rows (not group headers etc)\n\tgetRows(type){\n\t\tvar rows = [];\n\t\t\n\t\tswitch(type){\n\t\t\tcase \"active\":\n\t\t\t\trows = this.activeRows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.getVisibleRows(false, true);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t///////////////// Table Rendering /////////////////\n\t//trigger rerender of table in current position\n\treRenderInPosition(callback){\n\t\tif(this.redrawBlock){\n\t\t\tif(callback){\n\t\t\t\tcallback();\n\t\t\t}else{\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\t\n\t\t\tthis.renderer.rerenderRows(callback);\n\t\t\t\n\t\t\tif(!this.fixedHeight){\n\t\t\t\tthis.adjustTableSize();\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"renderComplete\");\n\t\t}\n\t}\n\t\n\tscrollBarCheck(){\n\t\tvar scrollbarWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar moving table when present\n\t\tif(this.element.scrollHeight > this.element.clientHeight){\n\t\t\tscrollbarWidth = this.element.offsetWidth - this.element.clientWidth;\n\t\t}\n\t\t\n\t\tif(scrollbarWidth !== this.scrollbarWidth){\n\t\t\tthis.scrollbarWidth = scrollbarWidth;\n\t\t\tthis.dispatch(\"scrollbar-vertical\", scrollbarWidth);\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomVertical,\n\t\t\t\"basic\": RendererBasicVertical,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderVertical;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderMode = this.table.options.renderVertical;\n\t\t\t\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t\t\n\t\t\tif((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){\n\t\t\t\tthis.fixedHeight = true;\n\t\t\t}else{\n\t\t\t\tthis.fixedHeight = false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderVertical);\n\t\t}\n\t}\n\t\n\tgetRenderMode(){\n\t\treturn this.renderMode;\n\t}\n\t\n\trenderTable(){\n\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tthis._clearTable();\n\t\t\n\t\tif(this.displayRowsCount){\n\t\t\tthis.renderer.renderRows();\n\t\t\t\n\t\t\tif(this.firstRender){\n\t\t\t\tthis.firstRender = false;\n\t\t\t\t\n\t\t\t\tif(!this.fixedHeight){\n\t\t\t\t\tthis.adjustTableSize();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.layoutRefresh(true);\n\t\t\t}\n\t\t}else{\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t\t\n\t\tif(!this.fixedHeight){\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-layout\");\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis._showPlaceholder();\n\t\t}\n\t\t\n\t\tthis.scrollBarCheck();\n\t\t\n\t\tthis.dispatchExternal(\"renderComplete\");\n\t}\n\t\n\t//show scrollbars on empty table div\n\trenderEmptyScroll(){\n\t\tif(this.placeholder){\n\t\t\tthis.tableElement.style.display = \"none\";\n\t\t}else{\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\n\t\t}\n\t}\n\t\n\t_clearTable(){\t\n\t\tthis._clearPlaceholder();\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.renderer.clearRows();\n\t}\n\t\n\ttableEmpty(){\n\t\tthis.renderEmptyScroll();\n\t\tthis._showPlaceholder();\n\t}\n\n\tcheckPlaceholder(){\n\t\tif(this.displayRowsCount){\n\t\t\tthis._clearPlaceholder();\n\t\t}else{\n\t\t\tthis.tableEmpty();\n\t\t}\n\t}\n\t\n\t_showPlaceholder(){\n\t\tif(this.placeholder){\n\t\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t\t}\n\t\t\t\n\t\t\tthis.initializePlaceholder();\n\t\t\t\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\t\t\t\n\t\t\tthis.getElement().appendChild(this.placeholder);\n\t\t\tthis._positionPlaceholder();\n\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t}\n\t\n\t_clearPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t}\n\t\t\n\t\t// clear empty table placeholder min\n\t\tthis.tableElement.style.minWidth = \"\";\n\t\tthis.tableElement.style.display = \"\";\n\t}\n\t\n\t_positionPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\n\t\t}\n\t}\n\t\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\t\n\t//normalize height of active rows\n\tnormalizeHeight(){\n\t\tthis.activeRows.forEach(function(row){\n\t\t\trow.normalizeHeight();\n\t\t});\n\t}\n\t\n\t//adjust the height of the table holder to fit in the Tabulator element\n\tadjustTableSize(){\n\t\tlet initialHeight = this.element.clientHeight, minHeight;\n\t\tlet resized = false;\n\t\t\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\t\t\t\n\t\t\tif(this.fixedHeight){\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\n\t\t\t\t\n\t\t\t\tconst height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.minHeight = minHeight || \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.height = height;\n\t\t\t\tthis.element.style.maxHeight = height;\n\t\t\t} else {\n\t\t\t\tthis.element.style.height = \"\";\n\t\t\t\tthis.element.style.height =\n\t\t\t\tthis.table.element.clientHeight - otherHeight + \"px\";\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderer.resize();\n\t\t\t\n\t\t\t//check if the table has changed size when dealing with variable height tables\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\n\t\t\t\tresized = true;\n\t\t\t\tif(this.subscribed(\"table-resize\")){\n\t\t\t\t\tthis.dispatch(\"table-resize\");\n\t\t\t\t}else{\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t}\n\t\t\n\t\tthis._positionPlaceholder();\n\t\treturn resized;\n\t}\n\t\n\t//reinitialize all rows\n\treinitialize(){\n\t\tthis.rows.forEach(function(row){\n\t\t\trow.reinitialize(true);\n\t\t});\n\t}\n\t\n\t//prevent table from being redrawn\n\tblockRedraw (){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockRestoreConfig = false;\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw (){\n\t\tthis.redrawBlock = false;\n\t\t\n\t\tif(this.redrawBlockRestoreConfig){\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\t\t\t\n\t\t\tthis.redrawBlockRestoreConfig = false;\n\t\t}else{\n\t\t\tif(this.redrawBlockRenderInPosition){\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.redrawBlockRenderInPosition = false;\n\t}\n\t\n\t//redraw table\n\tredraw (force){\n\t\tthis.adjustTableSize();\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\t\t\n\t\tif(!force){\t\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(this.scrollLeft);\n\t\t}else{\n\t\t\tthis.renderTable();\n\t\t}\n\t}\n\t\n\tresetScroll(){\n\t\tthis.element.scrollLeft = 0;\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tif(this.table.browser === \"ie\"){\n\t\t\tvar event = document.createEvent(\"Event\");\n\t\t\tevent.initEvent(\"scroll\", false, true);\n\t\t\tthis.element.dispatchEvent(event);\n\t\t}else{\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\n\nexport default class FooterManager extends CoreFeature{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.active = false;\n\t\tthis.element = this.createElement(); //containing element\n\t\tthis.containerElement = this.createContainerElement(); //containing element\n\t\tthis.external = false;\n\t}\n\n\tinitialize(){\n\t\tthis.initializeElement();\n\t}\n\n\tcreateElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer\");\n\n\t\treturn el;\n\t}\n\n\t\n\tcreateContainerElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer-contents\");\n\n\t\tthis.element.appendChild(el);\n\n\t\treturn el;\n\t}\n\n\tinitializeElement(){\n\t\tif(this.table.options.footerElement){\n\n\t\t\tswitch(typeof this.table.options.footerElement){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\n\t\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.external = true;\n\t\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tappend(element){\n\t\tthis.activate();\n\n\t\tthis.containerElement.appendChild(element);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tprepend(element){\n\t\tthis.activate();\n\n\t\tthis.element.insertBefore(element, this.element.firstChild);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tremove(element){\n\t\telement.parentNode.removeChild(element);\n\t\tthis.deactivate();\n\t}\n\n\tdeactivate(force){\n\t\tif(!this.element.firstChild || force){\n\t\t\tif(!this.external){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\tthis.active = false;\n\t\t}\n\t}\n\n\tactivate(){\n\t\tif(!this.active){\n\t\t\tthis.active = true;\n\t\t\tif(!this.external){\n\t\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\t\tthis.table.element.style.display = '';\n\t\t\t}\n\t\t}\n\t}\n\n\tredraw(){\n\t\tthis.dispatch(\"footer-redraw\");\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Row from '../row/Row.js';\n\nexport default class InteractionManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.el = null;\n\t\t\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\n\t\t\n\t\tthis.previousTargets = {};\n\t\t\n\t\tthis.listeners = [\n\t\t\t\"click\",\n\t\t\t\"dblclick\",\n\t\t\t\"contextmenu\",\n\t\t\t\"mouseenter\",\n\t\t\t\"mouseleave\",\n\t\t\t\"mouseover\",\n\t\t\t\"mouseout\",\n\t\t\t\"mousemove\",\n\t\t\t\"mouseup\",\n\t\t\t\"mousedown\",\n\t\t\t\"touchstart\",\n\t\t\t\"touchend\",\n\t\t];\n\t\t\n\t\tthis.componentMap = {\n\t\t\t\"tabulator-cell\":\"cell\",\n\t\t\t\"tabulator-row\":\"row\",\n\t\t\t\"tabulator-group\":\"group\",\n\t\t\t\"tabulator-col\":\"column\",\n\t\t};\n\t\t\n\t\tthis.pseudoTrackers = {\n\t\t\t\"row\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"cell\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"group\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"column\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t};\n\t\t\n\t\tthis.pseudoTracking = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.el = this.table.element;\n\t\t\n\t\tthis.buildListenerMap();\n\t\tthis.bindSubscriptionWatchers();\n\t}\n\t\n\tbuildListenerMap(){\n\t\tvar listenerMap = {};\n\t\t\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistenerMap[listener] = {\n\t\t\t\thandler:null,\n\t\t\t\tcomponents:[],\n\t\t\t};\n\t\t});\n\t\t\n\t\tthis.listeners = listenerMap;\n\t}\n\t\n\tbindPseudoEvents(){\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\n\t\t});\n\t\t\n\t\tthis.pseudoTracking = true;\n\t}\n\t\n\tpseudoMouseEnter(key, e, target){\n\t\tif(this.pseudoTrackers[key].target !== target){\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\n\t\t\t}\n\t\t\t\n\t\t\tthis.pseudoMouseLeave(key, e);\n\t\t\t\n\t\t\tthis.pseudoTrackers[key].target = target;\n\t\t\t\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\n\t\t}\n\t}\n\t\n\tpseudoMouseLeave(key, e){\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\n\t\tlinkedKeys = {\n\t\t\t\"row\":[\"cell\"],\n\t\t\t\"cell\":[\"row\"],\n\t\t};\n\t\t\n\t\tleaveList = leaveList.filter((item) => {\n\t\t\tvar links = linkedKeys[key];\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\n\t\t});\n\t\t\n\t\t\n\t\tleaveList.forEach((key) => {\n\t\t\tvar target = this.pseudoTrackers[key].target;\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\n\t\t\t\t\n\t\t\t\tthis.pseudoTrackers[key].target = null;\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\tbindSubscriptionWatchers(){\n\t\tvar listeners = Object.keys(this.listeners),\n\t\tcomponents = Object.values(this.componentMap);\n\t\t\n\t\tfor(let comp of components){\n\t\t\tfor(let listener of listeners){\n\t\t\t\tlet key = comp + \"-\" + listener;\n\t\t\t\t\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\n\t}\n\t\n\tsubscriptionChanged(component, key, added){\n\t\tvar listener = this.listeners[key].components,\n\t\tindex = listener.indexOf(component),\n\t\tchanged = false;\n\t\t\n\t\tif(added){\n\t\t\tif(index === -1){\n\t\t\t\tlistener.push(component);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\n\t\t\t\tif(index > -1){\n\t\t\t\t\tlistener.splice(index, 1);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\n\t\t\tthis.bindPseudoEvents();\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.updateEventListeners();\n\t\t}\n\t}\n\t\n\tupdateEventListeners(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.components.length){\n\t\t\t\tif(!listener.handler){\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler);\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(listener.handler){\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\t\tlistener.handler = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\ttrack(type, e){\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\n\t\t\n\t\tvar targets = this.findTargets(path);\n\t\ttargets = this.bindComponents(type, targets);\n\t\t\n\t\tthis.triggerEvents(type, e, targets);\n\t\t\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\n\t\t}\n\t}\n\t\n\tfindTargets(path){\n\t\tvar targets = {};\n\t\t\n\t\tlet componentMap = Object.keys(this.componentMap);\n\t\t\n\t\tfor (let el of path) {\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\n\t\t\t\n\t\t\tlet abort = classList.filter((item) => {\n\t\t\t\treturn this.abortClasses.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tif(abort.length){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tlet elTargets = classList.filter((item) => {\n\t\t\t\treturn componentMap.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tfor (let target of elTargets) {\n\t\t\t\tif(!targets[this.componentMap[target]]){\n\t\t\t\t\ttargets[this.componentMap[target]] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(targets.group && targets.group === targets.row){\n\t\t\tdelete targets.row;\n\t\t}\n\n\t\treturn targets;\n\t}\n\t\n\tbindComponents(type, targets){\n\t\t//ensure row component is looked up before cell\n\t\tvar keys = Object.keys(targets).reverse(),\n\t\tlistener = this.listeners[type],\n\t\tmatches = {},\n\t\ttargetMatches = {};\n\t\t\n\t\tfor(let key of keys){\n\t\t\tlet component,\n\t\t\ttarget = targets[key],\n\t\t\tpreviousTarget = this.previousTargets[key];\n\t\t\t\n\t\t\tif(previousTarget && previousTarget.target === target){\n\t\t\t\tcomponent = previousTarget.component;\n\t\t\t}else{\n\t\t\t\tswitch(key){\n\t\t\t\t\tcase \"row\":\n\t\t\t\t\tcase \"group\":\n\t\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\n\t\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tcomponent = rows.find((row) => {\n\t\t\t\t\t\t\t\treturn row.getElement() === target;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\n\t\t\t\t\t\t\t\ttargets[key] = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"column\":\n\t\t\t\t\t\tif(listener.components.includes(\"column\")){\n\t\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"cell\":\n\t\t\t\t\t\tif(listener.components.includes(\"cell\")){\n\t\t\t\t\t\t\tif(matches[\"row\"] instanceof Row){\n\t\t\t\t\t\t\t\tcomponent = matches[\"row\"].findCell(target);\n\t\t\t\t\t\t\t}else{\t\n\t\t\t\t\t\t\t\tif(targets[\"row\"]){\n\t\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(component){\n\t\t\t\tmatches[key] = component;\n\t\t\t\ttargetMatches[key] = {\n\t\t\t\t\ttarget:target,\n\t\t\t\t\tcomponent:component,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.previousTargets = targetMatches;\n\t\t\n\t\treturn matches;\n\t}\n\t\n\ttriggerEvents(type, e, targets){\n\t\tvar listener = this.listeners[type];\n\n\t\tfor(let key in targets){\n\t\t\tif(targets[key] && listener.components.includes(key)){\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearWatchers(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.handler){\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\tlistener.handler = null;\n\t\t\t}\n\t\t}\n\t}\n}\n","export default class ComponentFunctionBinder{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\n\t\tthis.bindings = {};\n\t}\n\n\tbind(type, funcName, handler){\n\t\tif(!this.bindings[type]){\n\t\t\tthis.bindings[type] = {};\n\t\t}\n\n\t\tif(this.bindings[type][funcName]){\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, handler);\n\t\t}else{\n\t\t\tthis.bindings[type][funcName] = handler;\n\t\t}\n\t}\n\n\thandle(type, component, name){\n\t\tif(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){\n\t\t\treturn this.bindings[type][name].bind(null, component);\n\t\t}else{\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\n\t\t\t\tif(this.table.options.debugInvalidComponentFuncs){\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\n\nexport default class DataLoader extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\n\t\tthis.loading = false;\n\t}\n\t\n\tinitialize(){}\n\t\n\tload(data, params, config, replace, silent, columnsChanged){\n\t\tvar requestNo = ++this.requestOrder;\n\n\t\tif(this.table.destroyed){\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\t\n\t\tthis.dispatchExternal(\"dataLoading\", data);\n\t\t\n\t\t//parse json data to array\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\n\t\t\tthis.loading = true;\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.alertLoader();\n\t\t\t}\n\t\t\t\n\t\t\t//get params for request\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\n\t\t\t\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\n\t\t\t\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\n\t\t\t\n\t\t\treturn result.then((response) => {\n\t\t\t\tif(!this.table.destroyed){\n\t\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\n\t\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\n\t\t\t\t\t\n\t\t\t\t\tif(requestNo == this.requestOrder){\n\t\t\t\t\t\tthis.clearAlert();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(rowData !== false){\n\t\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\n\t\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - Table has been destroyed\");\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\n\t\t\t\t\n\t\t\t\tif(!silent){\n\t\t\t\t\tthis.alertError();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.clearAlert();\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\n\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t});\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\n\t\t\t\n\t\t\tif(!data){\n\t\t\t\tdata = [];\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\t\n\tmapParams(params, map){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in params){\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tobjectInvert(obj){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in obj){\n\t\t\toutput[obj[key]] = key;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tblockActiveLoad(){\n\t\tthis.requestOrder++;\n\t}\n\t\n\talertLoader(){\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\n\t\t\n\t\tif(shouldLoad){\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\n\t\t}\n\t}\n\t\n\talertError(){\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\n\t}\n\t\n\tclearAlert(){\n\t\tthis.table.alertManager.clear();\n\t}\n}","export default class ExternalEventBus {\n\n\tconstructor(table, optionsList, debug){\n\t\tthis.table = table;\n\t\tthis.events = {};\n\t\tthis.optionsList = optionsList || {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push(callback);\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tdelete this.events[key];\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift(),\n\t\tresult;\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((callback, i) => {\n\t\t\t\tlet callResult = callback.apply(this.table, args);\n\n\t\t\t\tif(!i){\n\t\t\t\t\tresult = callResult;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"ExternalEvent:\" + args[0];\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n}","export default class InternalEventBus {\n\n\tconstructor(debug){\n\t\tthis.events = {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback, priority = 10000){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push({callback, priority});\n\n\t\tthis.events[key].sort((a, b) => {\n\t\t\treturn a.priority - b.priority;\n\t\t});\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item.callback === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_chain(key, args, initialValue, fallback){\n\t\tvar value = initialValue;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\n\t\t\t});\n\n\t\t\treturn value;\n\t\t}else{\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\n\t\t}\n\t}\n\n\t_confirm(key, args){\n\t\tvar confirmed = false;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tif(subscriber.callback.apply(this, args)){\n\t\t\t\t\tconfirmed = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn confirmed;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift();\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((subscriber) => {\n\t\t\t\tsubscriber.callback.apply(this, args);\n\t\t\t});\n\t\t}\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n\n\t_debugChain(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._chain(...arguments);\n\t}\n\n\t_debugConfirm(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._confirm(...arguments);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class DeprecationAdvisor extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\t_warnUser(){\n\t\tif(this.options(\"debugDeprecation\")){\n\t\t\tconsole.warn(...arguments);\n\t\t}\n\t}\n\t\n\tcheck(oldOption, newOption, convert){\n\t\tvar msg = \"\";\n\t\t\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\n\t\t\t\n\t\t\tif(newOption){\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\n\t\t\t\tif(convert){\n\t\t\t\t\tthis.table.options[newOption] = this.table.options[oldOption];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tcheckMsg(oldOption, msg){\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tmsg(msg){\n\t\tthis._warnUser(msg);\n\t}\n}","import Tabulator from '../Tabulator.js';\n\nclass TableRegistry {\n\n\tstatic register(table){\n\t\tTableRegistry.tables.push(table);\n\t}\n\n\tstatic deregister(table){\n\t\tvar index = TableRegistry.tables.indexOf(table);\n\n\t\tif(index > -1){\n\t\t\tTableRegistry.tables.splice(index, 1);\n\t\t}\n\t}\n\n\tstatic lookupTable(query, silent){\n\t\tvar results = [],\n\t\tmatches, match;\n\n\t\tif(typeof query === \"string\"){\n\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\tif(matches.length){\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\n\t\t\tmatch = TableRegistry.matchElement(query);\n\n\t\t\tif(match){\n\t\t\t\tresults.push(match);\n\t\t\t}\n\t\t}else if(Array.isArray(query)){\n\t\t\tquery.forEach(function(item){\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\n\t\t\t});\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tstatic matchElement(element){\n\t\treturn TableRegistry.tables.find(function(table){\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n}\n\nTableRegistry.tables = [];\n\nexport default TableRegistry;","//resize columns to fit data they contain\nexport default function(columns, forced){\n\tif(forced){\n\t\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\n\t}\n\t\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\nexport default function(columns, forced){\n\tcolumns.forEach(function(column){\n\t\tcolumn.reinitializeWidth();\n\t});\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","//resize columns to fit data the contain and stretch last column to fill table\nexport default function(columns, forced){\n\tvar colsWidth = 0,\n\ttableWidth = this.table.rowManager.element.clientWidth,\n\tgap = 0,\n\tlastCol = false;\n\n\tcolumns.forEach((column, i) => {\n\t\tif(!column.widthFixed){\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\n\t\t\tlastCol = column;\n\t\t}\n\n\t\tif(column.visible){\n\t\t\tcolsWidth += column.getWidth();\n\t\t}\n\t});\n\n\tif(lastCol){\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tlastCol.setWidth(0);\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\tif(gap > 0){\n\t\t\tlastCol.setWidth(gap);\n\t\t}else{\n\t\t\tlastCol.reinitializeWidth();\n\t\t}\n\t}else{\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t}\n}","//resize columns to fit\nexport default function(columns, forced){\n\tvar totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width\n\tvar fixedWidth = 0; //total width of columns with a defined width\n\tvar flexWidth = 0; //total width available to flexible columns\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks across all columns\n\tvar flexColWidth = 0; //desired width of flexible columns\n\tvar flexColumns = []; //array of flexible width columns\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks across all columns\n\tvar overflowWidth = 0; //horizontal overflow width\n\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\tfunction calcWidth(width){\n\t\tvar colWidth;\n\n\t\tif(typeof(width) == \"string\"){\n\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\n\t\t\t}else{\n\t\t\t\tcolWidth = parseInt(width);\n\t\t\t}\n\t\t}else{\n\t\t\tcolWidth = width;\n\t\t}\n\n\t\treturn colWidth;\n\t}\n\n\t//ensure columns resize to take up the correct amount of space\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\n\t\tvar oversizeCols = [],\n\t\toversizeSpace = 0,\n\t\tremainingSpace = 0,\n\t\tnextColWidth = 0,\n\t\tremainingFlexGrowUnits = flexGrowUnits,\n\t\tgap = 0,\n\t\tchangeUnits = 0,\n\t\tundersizeCols = [];\n\n\t\tfunction calcGrow(col){\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\n\t\t}\n\n\t\tfunction calcShrink(col){\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)));\n\t\t}\n\n\t\tcolumns.forEach(function(col, i){\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\t\t\tif(col.column.minWidth >= width){\n\t\t\t\toversizeCols.push(col);\n\t\t\t}else{\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\n\t\t\t\t\tcol.width = col.column.maxWidth;\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\n\t\t\t\t\tif(remainingFlexGrowUnits){\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tundersizeCols.push(col);\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(oversizeCols.length){\n\t\t\toversizeCols.forEach(function(col){\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t});\n\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\n\n\t\t\tgap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t}else{\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\n\n\t\t\tundersizeCols.forEach(function(column){\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t});\n\t\t}\n\n\t\treturn gap;\n\t}\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n\n\t//adjust for vertical scrollbar if present\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t}\n\n\tcolumns.forEach(function(column){\n\t\tvar width, minWidth, colWidth;\n\n\t\tif(column.visible){\n\n\t\t\twidth = column.definition.width;\n\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\tif(width){\n\n\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\tif(column.definition.widthShrink){\n\t\t\t\t\tfixedShrinkColumns.push({\n\t\t\t\t\t\tcolumn:column,\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\n\t\t\t\t\t});\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tflexColumns.push({\n\t\t\t\t\tcolumn:column,\n\t\t\t\t\twidth:0,\n\t\t\t\t});\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t}\n\t\t}\n\t});\n\n\t//calculate available space\n\tflexWidth = totalWidth - fixedWidth;\n\n\t//calculate correct column size\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t//generate column widths\n\tgapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t//increase width of last column to account for rounding errors\n\tif(flexColumns.length && gapFill > 0){\n\t\tflexColumns[flexColumns.length-1].width += gapFill;\n\t}\n\n\t//calculate space for columns to be shrunk into\n\tflexColumns.forEach(function(col){\n\t\tflexWidth -= col.width;\n\t});\n\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t//shrink oversize columns if there is no available space\n\tif(overflowWidth > 0 && flexShrinkUnits){\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t}\n\n\t//decrease width of last column to account for rounding errors\n\tif(gapFill && fixedShrinkColumns.length){\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\n\t}\n\n\tflexColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n\n\tfixedShrinkColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n}\n","import fitData from './modes/fitData.js';\nimport fitDataGeneral from './modes/fitDataGeneral.js';\nimport fitDataStretch from './modes/fitDataStretch.js';\nimport fitColumns from './modes/fitColumns.js';\n\nexport default {\n\tfitData:fitData,\n\tfitDataFill:fitDataGeneral,\n\tfitDataTable:fitDataGeneral,\n\tfitDataStretch:fitDataStretch,\n\tfitColumns:fitColumns ,\n};","import Module from '../../core/Module.js';\n\nimport defaultModes from './defaults/modes.js';\n\nclass Layout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table, \"layout\");\n\n\t\tthis.mode = null;\n\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\n\n\t\tthis.registerColumnOption(\"widthGrow\");\n\t\tthis.registerColumnOption(\"widthShrink\");\n\t}\n\n\t//initialize layout system\n\tinitialize(){\n\t\tvar layout = this.table.options.layout;\n\n\t\tif(Layout.modes[layout]){\n\t\t\tthis.mode = layout;\n\t\t}else{\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\t\t\tthis.mode = 'fitData';\n\t\t}\n\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.widthGrow){\n\t\t\tcolumn.definition.widthGrow = Number(column.definition.widthGrow);\n\t\t}\n\t\tif(column.definition.widthShrink){\n\t\t\tcolumn.definition.widthShrink = Number(column.definition.widthShrink);\n\t\t}\n\t}\n\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\n\t//trigger table layout\n\tlayout(dataChanged){\n\t\tthis.dispatch(\"layout-refreshing\");\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\n\t\tthis.dispatch(\"layout-refreshed\");\n\t}\n}\n\nLayout.moduleName = \"layout\";\n\n//load defaults\nLayout.modes = defaultModes;\n\nexport default Layout;","export default {\n\t\"default\":{ //hold default locale text\n\t\t\"groups\":{\n\t\t\t\"item\":\"item\",\n\t\t\t\"items\":\"items\",\n\t\t},\n\t\t\"columns\":{\n\t\t},\n\t\t\"data\":{\n\t\t\t\"loading\":\"Loading\",\n\t\t\t\"error\":\"Error\",\n\t\t},\n\t\t\"pagination\":{\n\t\t\t\"page_size\":\"Page Size\",\n\t\t\t\"page_title\":\"Show Page\",\n\t\t\t\"first\":\"First\",\n\t\t\t\"first_title\":\"First Page\",\n\t\t\t\"last\":\"Last\",\n\t\t\t\"last_title\":\"Last Page\",\n\t\t\t\"prev\":\"Prev\",\n\t\t\t\"prev_title\":\"Prev Page\",\n\t\t\t\"next\":\"Next\",\n\t\t\t\"next_title\":\"Next Page\",\n\t\t\t\"all\":\"All\",\n\t\t\t\"counter\":{\n\t\t\t\t\"showing\": \"Showing\",\n\t\t\t\t\"of\": \"of\",\n\t\t\t\t\"rows\": \"rows\",\n\t\t\t\t\"pages\": \"pages\",\n\t\t\t}\n\t\t},\n\t\t\"headerFilters\":{\n\t\t\t\"default\":\"filter column...\",\n\t\t\t\"columns\":{}\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\n\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultLangs from './defaults/langs.js';\n\nclass Localize extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.locale = \"default\"; //current locale\n\t\tthis.lang = false; //current language\n\t\tthis.bindings = {}; //update events to call when locale is changed\n\t\tthis.langList = {};\n\n\t\tthis.registerTableOption(\"locale\", false); //current system language\n\t\tthis.registerTableOption(\"langs\", {});\n\t}\n\n\tinitialize(){\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\n\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\n\t\t}\n\n\t\tfor(let locale in this.table.options.langs){\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\n\t\t}\n\n\t\tthis.setLocale(this.table.options.locale);\n\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\n\t}\n\n\t//set header placeholder\n\tsetHeaderFilterPlaceholder(placeholder){\n\t\tthis.langList.default.headerFilters.default = placeholder;\n\t}\n\n\t//setup a lang description object\n\tinstallLang(locale, lang){\n\t\tif(this.langList[locale]){\n\t\t\tthis._setLangProp(this.langList[locale], lang);\n\t\t}else{\n\t\t\tthis.langList[locale] = lang;\n\t\t}\n\t}\n\n\t_setLangProp(lang, values){\n\t\tfor(let key in values){\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\n\t\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t\t}else{\n\t\t\t\tlang[key] = values[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t//set current locale\n\tsetLocale(desiredLocale){\n\t\tdesiredLocale = desiredLocale || \"default\";\n\n\t\t//fill in any matching language values\n\t\tfunction traverseLang(trans, path){\n\t\t\tfor(var prop in trans){\n\t\t\t\tif(typeof trans[prop] == \"object\"){\n\t\t\t\t\tif(!path[prop]){\n\t\t\t\t\t\tpath[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t\t}else{\n\t\t\t\t\tpath[prop] = trans[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//determining correct locale to load\n\t\tif(desiredLocale === true && navigator.language){\n\t\t\t//get local from system\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\n\t\t}\n\n\t\tif(desiredLocale){\n\t\t\t//if locale is not set, check for matching top level locale else use default\n\t\t\tif(!this.langList[desiredLocale]){\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\t\tif(this.langList[prefix]){\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\t\tdesiredLocale = prefix;\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\t\tdesiredLocale = \"default\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.locale = desiredLocale;\n\n\t\t//load default lang template\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\n\n\t\tif(desiredLocale != \"default\"){\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\n\t\t}\n\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\n\n\t\tthis._executeBindings();\n\t}\n\n\t//get current locale\n\tgetLocale(locale){\n\t\treturn this.locale;\n\t}\n\n\t//get lang object for given local or current if none provided\n\tgetLang(locale){\n\t\treturn locale ? this.langList[locale] : this.lang;\n\t}\n\n\t//get text for current locale\n\tgetText(path, value){\n\t\tvar fillPath = value ? path + \"|\" + value : path,\n\t\tpathArray = fillPath.split(\"|\"),\n\t\ttext = this._getLangElement(pathArray, this.locale);\n\n\t\t// if(text === false){\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t\t// }\n\n\t\treturn text || \"\";\n\t}\n\n\t//traverse langs object and find localized copy\n\t_getLangElement(path, locale){\n\t\tvar root = this.lang;\n\n\t\tpath.forEach(function(level){\n\t\t\tvar rootPath;\n\n\t\t\tif(root){\n\t\t\t\trootPath = root[level];\n\n\t\t\t\tif(typeof rootPath != \"undefined\"){\n\t\t\t\t\troot = rootPath;\n\t\t\t\t}else{\n\t\t\t\t\troot = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn root;\n\t}\n\n\t//set update binding\n\tbind(path, callback){\n\t\tif(!this.bindings[path]){\n\t\t\tthis.bindings[path] = [];\n\t\t}\n\n\t\tthis.bindings[path].push(callback);\n\n\t\tcallback(this.getText(path), this.lang);\n\t}\n\n\t//iterate through bindings and trigger updates\n\t_executeBindings(){\n\t\tfor(let path in this.bindings){\n\t\t\tthis.bindings[path].forEach((binding) => {\n\t\t\t\tbinding(this.getText(path), this.lang);\n\t\t\t});\n\t\t}\n\t}\n}\n\nLocalize.moduleName = \"localize\";\n\n//load defaults\nLocalize.langs = defaultLangs;\n\nexport default Localize;","import Module from '../../core/Module.js';\nimport TableRegistry from '../../core/tools/TableRegistry.js';\n\nclass Comms extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\n\tinitialize(){\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\n\t}\n\n\tgetConnections(selectors){\n\t\tvar connections = [],\n\t\tconnection;\n\n\t\tconnection = TableRegistry.lookupTable(selectors);\n\n\t\tconnection.forEach((con) =>{\n\t\t\tif(this.table !== con){\n\t\t\t\tconnections.push(con);\n\t\t\t}\n\t\t});\n\n\t\treturn connections;\n\t}\n\n\tsend(selectors, module, action, data){\n\t\tvar connections = this.getConnections(selectors);\n\n\t\tconnections.forEach((connection) => {\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\n\t\t});\n\n\t\tif(!connections.length && selectors){\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t\t}\n\t}\n\n\treceive(table, module, action, data){\n\t\tif(this.table.modExists(module)){\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t\t}else{\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t\t}\n\t}\n}\n\nComms.moduleName = \"comms\";\n\nexport default Comms;","import * as coreModules from '../modules/core.js';\nimport TableRegistry from './TableRegistry.js';\n\nexport default class ModuleBinder {\n\t\n\tconstructor(tabulator, modules){\n\t\tthis.bindStaticFunctionality(tabulator);\n\t\tthis.bindModules(tabulator, coreModules, true);\n\t\t\n\t\tif(modules){\n\t\t\tthis.bindModules(tabulator, modules);\n\t\t}\n\t}\n\t\n\tbindStaticFunctionality(tabulator){\n\t\ttabulator.moduleBindings = {};\n\t\t\n\t\ttabulator.extendModule = function(name, property, values){\n\t\t\tif(tabulator.moduleBindings[name]){\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\n\t\t\t\t\n\t\t\t\tif(source){\n\t\t\t\t\tif(typeof values == \"object\"){\n\t\t\t\t\t\tfor(let key in values){\n\t\t\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t\t\t}\n\t\t};\n\t\t\n\t\ttabulator.registerModule = function(modules){\n\t\t\tif(!Array.isArray(modules)){\n\t\t\t\tmodules = [modules];\n\t\t\t}\n\t\t\t\n\t\t\tmodules.forEach((mod) => {\n\t\t\t\ttabulator.registerModuleBinding(mod);\n\t\t\t});\n\t\t};\n\t\t\n\t\ttabulator.registerModuleBinding = function(mod){\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\n\t\t};\n\t\t\n\t\ttabulator.findTable = function(query){\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\n\t\t};\n\t\t\n\t\t//ensure that module are bound to instantiated function\n\t\ttabulator.prototype.bindModules = function(){\n\t\t\tvar orderedStartMods = [],\n\t\t\torderedEndMods = [],\n\t\t\tunOrderedMods = [];\n\t\t\t\n\t\t\tthis.modules = {};\n\t\t\t\n\t\t\tfor(var name in tabulator.moduleBindings){\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\n\t\t\t\tlet module = new mod(this);\n\t\t\t\t\n\t\t\t\tthis.modules[name] = module;\n\t\t\t\t\n\t\t\t\tif(mod.prototype.moduleCore){\n\t\t\t\t\tthis.modulesCore.push(module);\n\t\t\t\t}else{\n\t\t\t\t\tif(mod.moduleInitOrder){\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\n\t\t\t\t\t\t\torderedStartMods.push(module);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\torderedEndMods.push(module);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}else{\n\t\t\t\t\t\tunOrderedMods.push(module);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\t\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\n\t\t};\n\t}\n\t\n\tbindModules(tabulator, modules, core){\n\t\tvar mods = Object.values(modules);\n\t\t\n\t\tif(core){\n\t\t\tmods.forEach((mod) => {\n\t\t\t\tmod.prototype.moduleCore = true;\n\t\t\t});\n\t\t}\n\t\t\n\t\ttabulator.registerModule(mods);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class Alert extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.element = this._createAlertElement();\n\t\tthis.msgElement = this._createMsgElement();\n\t\tthis.type = null;\n \n\t\tthis.element.appendChild(this.msgElement);\n\t}\n \n\t_createAlertElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert\");\n\t\treturn el;\n\t}\n \n\t_createMsgElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert-msg\");\n\t\tel.setAttribute(\"role\", \"alert\");\n\t\treturn el;\n\t}\n \n\t_typeClass(){\n\t\treturn \"tabulator-alert-state-\" + this.type;\n\t}\n \n\talert(content, type = \"msg\"){\n\t\tif(content){\n\t\t\tthis.clear();\n\n\t\t\tthis.dispatch(\"alert-show\", type);\n \n\t\t\tthis.type = type;\n \n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\n \n\t\t\tthis.msgElement.classList.add(this._typeClass());\n \n\t\t\tif(typeof content === \"function\"){\n\t\t\t\tcontent = content();\n\t\t\t}\n \n\t\t\tif(content instanceof HTMLElement){\n\t\t\t\tthis.msgElement.appendChild(content);\n\t\t\t}else{\n\t\t\t\tthis.msgElement.innerHTML = content;\n\t\t\t}\n \n\t\t\tthis.table.element.appendChild(this.element);\n\t\t}\n\t}\n \n\tclear(){\n\t\tthis.dispatch(\"alert-hide\", this.type);\n\n\t\tif(this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n \n\t\tthis.msgElement.classList.remove(this._typeClass());\n\t}\n}","'use strict';\n\nimport defaultOptions from './defaults/options.js';\n\nimport ColumnManager from './ColumnManager.js';\nimport RowManager from './RowManager.js';\nimport FooterManager from './FooterManager.js';\n\nimport InteractionMonitor from './tools/InteractionMonitor.js';\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\nimport DataLoader from './tools/DataLoader.js';\n\nimport ExternalEventBus from './tools/ExternalEventBus.js';\nimport InternalEventBus from './tools/InternalEventBus.js';\n\nimport DeprecationAdvisor from './tools/DeprecationAdvisor.js';\n\nimport TableRegistry from './tools/TableRegistry.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nimport OptionsList from './tools/OptionsList.js';\n\nimport Alert from './tools/Alert.js';\n\nclass Tabulator {\n\t\n\tconstructor(element, options){\n\t\t\n\t\tthis.options = {};\n\t\t\n\t\tthis.columnManager = null; // hold Column Manager\n\t\tthis.rowManager = null; //hold Row Manager\n\t\tthis.footerManager = null; //holder Footer Manager\n\t\tthis.alertManager = null; //hold Alert Manager\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\n\t\tthis.externalEvents = null; //handle external event messaging\n\t\tthis.eventBus = null; //handle internal event messaging\n\t\tthis.interactionMonitor = false; //track user interaction\n\t\tthis.browser = \"\"; //hold current browser type\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\n\t\tthis.rtl = false; //check if the table is in RTL mode\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\n\t\t\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\n\t\tthis.dataLoader = false; //bind component functions\n\t\t\n\t\tthis.modules = {}; //hold all modules bound to this table\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\n\t\t\n\t\tthis.deprecationAdvisor = new DeprecationAdvisor(this);\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.destroyed = false;\n\t\t\n\t\tif(this.initializeElement(element)){\n\t\t\t\n\t\t\tthis.initializeCoreSystems(options);\n\t\t\t\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._create();\n\t\t\t});\n\t\t}\n\t\t\n\t\tTableRegistry.register(this); //register table for inter-device communication\n\t}\n\t\n\tinitializeElement(element){\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\n\t\t\tthis.element = element;\n\t\t\treturn true;\n\t\t}else if(typeof element === \"string\"){\n\t\t\tthis.element = document.querySelector(element);\n\t\t\t\n\t\t\tif(this.element){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tinitializeCoreSystems(options){\n\t\tthis.columnManager = new ColumnManager(this);\n\t\tthis.rowManager = new RowManager(this);\n\t\tthis.footerManager = new FooterManager(this);\n\t\tthis.dataLoader = new DataLoader(this);\n\t\tthis.alertManager = new Alert(this);\n\t\t\n\t\tthis.bindModules();\n\t\t\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options);\n\t\t\n\t\tthis._clearObjectPointers();\n\t\t\n\t\tthis._mapDeprecatedFunctionality();\n\t\t\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\n\t\t\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\n\t\t\n\t\tthis.dataLoader.initialize();\n\t\t// this.columnManager.initialize();\n\t\t// this.rowManager.initialize();\n\t\tthis.footerManager.initialize();\n\t}\n\t\n\t//convert deprecated functionality to new functions\n\t_mapDeprecatedFunctionality(){\n\t\t//all previously deprecated functionality removed in the 5.0 release\n\t}\n\t\n\t_clearSelection(){\n\t\t\n\t\tthis.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tif (window.getSelection) {\n\t\t\tif (window.getSelection().empty) { // Chrome\n\t\t\t\twindow.getSelection().empty();\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t} else if (document.selection) { // IE?\n\t\t\tdocument.selection.empty();\n\t\t}\n\t\t\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\n\t}\n\t\n\t//create table\n\t_create(){\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\n\t\tthis.eventBus.dispatch(\"table-building\");\n\t\t\n\t\tthis._rtlCheck();\n\t\t\n\t\tthis._buildElement();\n\t\t\n\t\tthis._initializeTable();\n\t\t\n\t\tthis._loadInitialData();\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\n\t}\n\t\n\t_rtlCheck(){\n\t\tvar style = window.getComputedStyle(this.element);\n\t\t\n\t\tswitch(this.options.textDirection){\n\t\t\tcase\"auto\":\n\t\t\t\tif(style.direction !== \"rtl\"){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"rtl\":\n\t\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\t\tthis.rtl = true;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"ltr\":\n\t\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis.rtl = false;\n\t\t}\n\t}\n\t\n\t//clear pointers to objects in default config object\n\t_clearObjectPointers(){\n\t\tthis.options.columns = this.options.columns.slice(0);\n\t\t\n\t\tif(Array.isArray(this.options.data) && !this.options.reactiveData){\n\t\t\tthis.options.data = this.options.data.slice(0);\n\t\t}\n\t}\n\t\n\t//build tabulator element\n\t_buildElement(){\n\t\tvar element = this.element,\n\t\toptions = this.options,\n\t\tnewElement;\n\t\t\n\t\tif(element.tagName === \"TABLE\"){\n\t\t\tthis.originalElement = this.element;\n\t\t\tnewElement = document.createElement(\"div\");\n\t\t\t\n\t\t\t//transfer attributes to new element\n\t\t\tvar attributes = element.attributes;\n\t\t\t\n\t\t\t// loop through attributes and apply them on div\n\t\t\tfor(var i in attributes){\n\t\t\t\tif(typeof attributes[i] == \"object\"){\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// replace table with div element\n\t\t\telement.parentNode.replaceChild(newElement, element);\n\t\t\t\n\t\t\tthis.element = element = newElement;\n\t\t}\n\t\t\n\t\telement.classList.add(\"tabulator\");\n\t\telement.setAttribute(\"role\", \"grid\");\n\t\t\n\t\t//empty element\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\t//set table height\n\t\tif(options.height){\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\t\telement.style.height = options.height;\n\t\t}\n\t\t\n\t\t//set table min height\n\t\tif(options.minHeight !== false){\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\t\telement.style.minHeight = options.minHeight;\n\t\t}\n\t\t\n\t\t//set table maxHeight\n\t\tif(options.maxHeight !== false){\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\t\telement.style.maxHeight = options.maxHeight;\n\t\t}\n\t}\n\t\n\t//initialize core systems and modules\n\t_initializeTable(){\n\t\tvar element = this.element,\n\t\toptions = this.options;\n\t\t\n\t\tthis.interactionMonitor.initialize();\n\t\t\n\t\tthis.columnManager.initialize();\n\t\tthis.rowManager.initialize();\n\t\t\n\t\tthis._detectBrowser();\n\t\t\n\t\t//initialize core modules\n\t\tthis.modulesCore.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\t//build table elements\n\t\telement.appendChild(this.columnManager.getElement());\n\t\telement.appendChild(this.rowManager.getElement());\n\t\t\n\t\tif(options.footerElement){\n\t\t\tthis.footerManager.activate();\n\t\t}\n\t\t\n\t\tif(options.autoColumns && options.data){\n\t\t\t\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t\t}\n\t\t\n\t\t//initialize regular modules\n\t\tthis.modulesRegular.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\tthis.columnManager.setColumns(options.columns);\n\t\t\n\t\tthis.eventBus.dispatch(\"table-built\");\n\t}\n\t\n\t_loadInitialData(){\n\t\tthis.dataLoader.load(this.options.data);\n\t\tthis.columnManager.verticalAlignHeaders();\n\t}\n\t\n\t//deconstructor\n\tdestroy(){\n\t\tvar element = this.element;\n\t\t\n\t\tthis.destroyed = true;\n\t\t\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\n\t\t\n\t\tthis.eventBus.dispatch(\"table-destroy\");\n\t\t\n\t\t//clear row data\n\t\tthis.rowManager.destroy();\n\t\t\n\t\t//clear DOM\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\telement.classList.remove(\"tabulator\");\n\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\n\t}\n\t\n\t_detectBrowser(){\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\n\t\t\n\t\tif(ua.indexOf(\"Trident\") > -1){\n\t\t\tthis.browser = \"ie\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\n\t\t\tthis.browser = \"edge\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\n\t\t\tthis.browser = \"firefox\";\n\t\t\tthis.browserSlow = false;\n\t\t}else if(ua.indexOf(\"Mac OS\") > -1){\n\t\t\tthis.browser = \"safari\";\n\t\t\tthis.browserSlow = false;\n\t\t}else{\n\t\t\tthis.browser = \"other\";\n\t\t\tthis.browserSlow = false;\n\t\t}\n\t\t\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4));\n\t}\n\t\n\tinitGuard(func, msg){\n\t\tvar stack, line;\n\t\t\n\t\tif(this.options.debugInitialization && !this.initialized){\n\t\t\tif(!func){\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\n\t\t\t\t\n\t\t\t\tif(line[0] == \" \"){\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\n\t\t\t\t}else{\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\n\t\t}\n\t\t\n\t\treturn this.initialized;\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\t//block table redrawing\n\tblockRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\n\t\t\n\t\tthis.rowManager.blockRedraw();\n\t\tthis.columnManager.blockRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\n\n\t\tthis.rowManager.restoreRedraw();\n\t\tthis.columnManager.restoreRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\n\t}\n\t\n\t//load data\n\tsetData(data, params, config){\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, false);\n\t}\n\t\n\t//clear data\n\tclearData(){\n\t\tthis.initGuard();\n\t\t\n\t\tthis.dataLoader.blockActiveLoad();\n\t\tthis.rowManager.clearData();\n\t}\n\t\n\t//get table data array\n\tgetData(active){\n\t\treturn this.rowManager.getData(active);\n\t}\n\t\n\t//get table data array count\n\tgetDataCount(active){\n\t\treturn this.rowManager.getDataCount(active);\n\t}\n\t\n\t//replace data, keeping table in position with same sort\n\treplaceData(data, params, config){\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, true, true);\n\t}\n\t\n\t//update table data\n\tupdateData(data){\n\t\tvar responses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\tresponses++;\n\t\t\t\t\t\t\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\t\treject(\"Update Error - Unable to update row\", item, e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\treject(\"Update Error - Unable to find row\", item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\taddData(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data){\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\n\t\t\t\t\t.then((rows) => {\n\t\t\t\t\t\tvar output = [];\n\t\t\t\t\t\n\t\t\t\t\t\trows.forEach(function(row){\n\t\t\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\tresolve(output);\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//update table data\n\tupdateOrAddData(data){\n\t\tvar rows = [],\n\t\tresponses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tresponses++;\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.rowManager.addRows(item)\n\t\t\t\t\t\t\t.then((newRows)=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//get row object\n\tgetRow(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//get row object\n\tgetRowFromPosition(position){\n\t\tvar row = this.rowManager.getRowFromPosition(position);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//delete row from table\n\tdeleteRow(index){\n\t\tvar foundRows = [];\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(!Array.isArray(index)){\n\t\t\tindex = [index];\n\t\t}\n\t\t\n\t\t//find matching rows\n\t\tfor(let item of index){\n\t\t\tlet row = this.rowManager.findRow(item, true);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\tfoundRows.push(row);\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort((a, b) => {\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\t\t\n\t\t//delete rows\n\t\tfoundRows.forEach((row) =>{\n\t\t\trow.delete();\n\t\t});\n\t\t\n\t\tthis.rowManager.reRenderInPosition();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\t//add row to table\n\taddRow(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\treturn this.rowManager.addRows(data, pos, index, true)\n\t\t\t.then((rows)=>{\n\t\t\t\treturn rows[0].getComponent();\n\t\t\t});\n\t}\n\t\n\t//update a row if it exists otherwise create it\n\tupdateOrAddRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn row.getComponent();\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn this.rowManager.addRows(data)\n\t\t\t\t.then((rows)=>{\n\t\t\t\t\treturn rows[0].getComponent();\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\t//update row data\n\tupdateRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\n\t\t}\n\t}\n\t\n\t//scroll to row in DOM\n\tscrollToRow(index, position, ifVisible){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible);\n\t\t}else{\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\n\t\t}\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tvar fromRow = this.rowManager.findRow(from);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromRow){\n\t\t\tfromRow.moveToRow(to, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t\t}\n\t}\n\t\n\tgetRows(active){\n\t\treturn this.rowManager.getComponents(active);\t\n\t}\n\t\n\t//get position of row in table\n\tgetRowPosition(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getPosition();\n\t\t}else{\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t/////////////// Column Functions ///////////////\n\tsetColumns(definition){\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\n\t\t\n\t\tthis.columnManager.setColumns(definition);\n\t}\n\t\n\tgetColumns(structured){\n\t\treturn this.columnManager.getComponents(structured);\n\t}\n\t\n\tgetColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tif(column){\n\t\t\treturn column.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tgetColumnDefinitions(){\n\t\treturn this.columnManager.getDefinitionTree();\n\t}\n\t\n\tshowColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.show();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\thideColumn(field){\n\t\tvar column = this.columnManager.findColumn(field); \n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.hide();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\ttoggleColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tif(column.visible){\n\t\t\t\tcolumn.hide();\n\t\t\t}else{\n\t\t\t\tcolumn.show();\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\taddColumn(definition, before, field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.columnManager.addColumn(definition, before, column)\n\t\t\t.then((column) => {\n\t\t\t\treturn column.getComponent();\n\t\t\t});\n\t}\n\t\n\tdeleteColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.delete();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tupdateColumnDefinition(field, definition){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.updateDefinition(definition);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tvar fromColumn = this.columnManager.findColumn(from),\n\t\ttoColumn = this.columnManager.findColumn(to);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromColumn){\n\t\t\tif(toColumn){\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t\t}\n\t}\n\t\n\t//scroll to column in DOM\n\tscrollToColumn(field, position, ifVisible){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this.columnManager.findColumn(field);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//////////// General Public Functions ////////////\n\t//redraw list without updating data\n\tredraw(force){\n\t\tthis.initGuard();\n\n\t\tthis.columnManager.redraw(force);\n\t\tthis.rowManager.redraw(force);\n\t}\n\t\n\tsetHeight(height){\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.initializeRenderer();\n\t\tthis.rowManager.redraw(true);\n\t}\n\t\n\t//////////////////// Event Bus ///////////////////\n\t\n\ton(key, callback){\n\t\tthis.externalEvents.subscribe(key, callback);\n\t}\n\t\n\toff(key, callback){\n\t\tthis.externalEvents.unsubscribe(key, callback);\n\t}\n\t\n\tdispatchEvent(){\n\t\tvar args = Array.from(arguments);\n\t\targs.shift();\n\t\t\n\t\tthis.externalEvents.dispatch(...arguments);\n\t}\n\n\t//////////////////// Alerts ///////////////////\n\n\talert(contents, type){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.alert(contents, type);\n\t}\n\n\tclearAlert(){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.clear();\n\t}\n\t\n\t////////////// Extension Management //////////////\n\tmodExists(plugin, required){\n\t\tif(this.modules[plugin]){\n\t\t\treturn true;\n\t\t}else{\n\t\t\tif(required){\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule(key){\n\t\tvar mod = this.modules[key];\n\t\t\n\t\tif(!mod){\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\n\t\t}\n\t\t\n\t\treturn mod;\n\t}\n}\n\n//default setup options\nTabulator.defaultOptions = defaultOptions;\n\n//bind modules and static functionality\nnew ModuleBinder(Tabulator);\n\nexport default Tabulator;\n","//tabulator with all modules installed\nimport {default as Tabulator} from './Tabulator.js';\nimport * as modules from '../core/modules/optional.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nclass TabulatorFull extends Tabulator {}\n\n//bind modules and static functionality\nnew ModuleBinder(TabulatorFull, modules);\n\nexport default TabulatorFull;\n","export default class PseudoRow {\n\n\tconstructor (type){\n\t\tthis.type = type;\n\t\tthis.element = this._createElement();\n\t}\n\n\t_createElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-row\");\n\t\treturn el;\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tgetComponent(){\n\t\treturn false;\n\t}\n\n\tgetData(){\n\t\treturn {};\n\t}\n\n\tgetHeight(){\n\t\treturn this.element.outerHeight;\n\t}\n\n\tinitialize(){}\n\n\treinitialize(){}\n\n\tnormalizeHeight(){}\n\n\tgenerateCells(){}\n\n\treinitializeHeight(){}\n\n\tcalcHeight(){}\n\n\tsetCellHeight(){}\n\n\tclearCellHeight(){}\n\n\trendered(){}\n}"],"names":["generateParamsList","defaultURLGenerator","defaultOptions","List","Edit","html","textarea","tickCross","datetime","star","progress","csv","json","array","Popup","number","date","time","RendererVirtualDomHorizontal","RendererBasicHorizontal","RendererVirtualDomVertical","RendererBasicVertical","InteractionMonitor"],"mappings":"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"} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.min.js b/tmp/tabulator-5.6.1/dist/js/tabulator_esm.min.js deleted file mode 100644 index 9ee9214..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v5.6.1 (c) Oliver Folkerd 2024 */ -class e{constructor(e){this.table=e}reloadData(e,t,i){return this.table.dataLoader.load(e,void 0,void 0,void 0,t,i)}langText(){return this.table.modules.localize.getText(...arguments)}langBind(){return this.table.modules.localize.bind(...arguments)}langLocale(){return this.table.modules.localize.getLocale(...arguments)}commsConnections(){return this.table.modules.comms.getConnections(...arguments)}commsSend(){return this.table.modules.comms.send(...arguments)}layoutMode(){return this.table.modules.layout.getMode()}layoutRefresh(e){return this.table.modules.layout.layout(e)}subscribe(){return this.table.eventBus.subscribe(...arguments)}unsubscribe(){return this.table.eventBus.unsubscribe(...arguments)}subscribed(e){return this.table.eventBus.subscribed(e)}subscriptionChange(){return this.table.eventBus.subscriptionChange(...arguments)}dispatch(){return this.table.eventBus.dispatch(...arguments)}chain(){return this.table.eventBus.chain(...arguments)}confirm(){return this.table.eventBus.confirm(...arguments)}dispatchExternal(){return this.table.externalEvents.dispatch(...arguments)}subscribedExternal(e){return this.table.externalEvents.subscribed(e)}subscriptionChangeExternal(){return this.table.externalEvents.subscriptionChange(...arguments)}options(e){return this.table.options[e]}setOption(e,t){return void 0!==t&&(this.table.options[e]=t),this.table.options[e]}deprecationCheck(e,t,i){return this.table.deprecationAdvisor.check(e,t,i)}deprecationCheckMsg(e,t){return this.table.deprecationAdvisor.checkMsg(e,t)}deprecationMsg(e){return this.table.deprecationAdvisor.msg(e)}module(e){return this.table.module(e)}}class t{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static retrieveNestedData(e,t,i){var s,o=e?t.split(e):[t],n=o.length;for(let e=0;ee.subject===l)),r>-1?t[n]=i[r].copy:(a=Object.assign(Array.isArray(l)?[]:{},l),i.unshift({subject:l,copy:a}),t[n]=this.deepClone(l,a,i)))}return t}}class i extends e{constructor(e,t,i){super(e),this.element=t,this.container=this._lookupContainer(),this.parent=i,this.reversedX=!1,this.childPopup=null,this.blurable=!1,this.blurCallback=null,this.blurEventsBound=!1,this.renderedCallback=null,this.visible=!1,this.hideable=!0,this.element.classList.add("tabulator-popup-container"),this.blurEvent=this.hide.bind(this,!1),this.escEvent=this._escapeCheck.bind(this),this.destroyBinding=this.tableDestroyed.bind(this),this.destroyed=!1}tableDestroyed(){this.destroyed=!0,this.hide(!0)}_lookupContainer(){var e=this.table.options.popupContainer;return"string"==typeof e?(e=document.querySelector(e))||console.warn("Menu Error - no container element found matching selector:",this.table.options.popupContainer,"(defaulting to document body)"):!0===e&&(e=this.table.element),e&&!this._checkContainerIsParent(e)&&(e=!1,console.warn("Menu Error - container element does not contain this table:",this.table.options.popupContainer,"(defaulting to document body)")),e||(e=document.body),e}_checkContainerIsParent(e,t=this.table.element){return e===t||!!t.parentNode&&this._checkContainerIsParent(e,t.parentNode)}renderCallback(e){this.renderedCallback=e}containerEventCoords(e){var i=!(e instanceof MouseEvent),s=i?e.touches[0].pageX:e.pageX,o=i?e.touches[0].pageY:e.pageY;if(this.container!==document.body){let e=t.elOffset(this.container);s-=e.left,o-=e.top}return{x:s,y:o}}elementPositionCoords(e,i="right"){var s,o,n,r=t.elOffset(e);switch(this.container!==document.body&&(s=t.elOffset(this.container),r.left-=s.left,r.top-=s.top),i){case"right":o=r.left+e.offsetWidth,n=r.top-1;break;case"bottom":o=r.left,n=r.top+e.offsetHeight;break;case"left":o=r.left,n=r.top-1;break;case"top":o=r.left,n=r.top;break;case"center":o=r.left+e.offsetWidth/2,n=r.top+e.offsetHeight/2}return{x:o,y:n,offset:r}}show(e,t){var i,s,o,n,r;return this.destroyed||this.table.destroyed||(e instanceof HTMLElement?(o=e,n=(r=this.elementPositionCoords(e,t)).offset,i=r.x,s=r.y):"number"==typeof e?(n={top:0,left:0},i=e,s=t):(i=(r=this.containerEventCoords(e)).x,s=r.y,this.reversedX=!1),this.element.style.top=s+"px",this.element.style.left=i+"px",this.container.appendChild(this.element),"function"==typeof this.renderedCallback&&this.renderedCallback(),this._fitToScreen(i,s,o,n,t),this.visible=!0,this.subscribe("table-destroy",this.destroyBinding),this.element.addEventListener("mousedown",(e=>{e.stopPropagation()}))),this}_fitToScreen(e,t,i,s,o){var n=this.container===document.body?document.documentElement.scrollTop:this.container.scrollTop;if((e+this.element.offsetWidth>=this.container.offsetWidth||this.reversedX)&&(this.element.style.left="",this.element.style.right=i?this.container.offsetWidth-s.left+"px":this.container.offsetWidth-e+"px",this.reversedX=!0),t+this.element.offsetHeight>Math.max(this.container.offsetHeight,n?this.container.scrollHeight:0))if(i)if("bottom"===o)this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight-i.offsetHeight-1+"px";else this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+i.offsetHeight+1+"px";else this.element.style.top=parseInt(this.element.style.top)-this.element.offsetHeight+"px"}isVisible(){return this.visible}hideOnBlur(e){return this.blurable=!0,this.visible&&(setTimeout((()=>{this.visible&&(this.table.rowManager.element.addEventListener("scroll",this.blurEvent),this.subscribe("cell-editing",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),document.body.addEventListener("mousedown",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent),this.blurEventsBound=!0)}),100),this.blurCallback=e),this}_escapeCheck(e){27==e.keyCode&&this.hide()}blockHide(){this.hideable=!1}restoreHide(){this.hideable=!0}hide(e=!1){return this.visible&&this.hideable&&(this.blurable&&this.blurEventsBound&&(document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),document.body.removeEventListener("mousedown",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent),this.unsubscribe("cell-editing",this.blurEvent),this.blurEventsBound=!1),this.childPopup&&this.childPopup.hide(),this.parent&&(this.parent.childPopup=null),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.visible=!1,this.blurCallback&&!e&&this.blurCallback(),this.unsubscribe("table-destroy",this.destroyBinding)),this}child(e){return this.childPopup&&this.childPopup.hide(),this.childPopup=new i(this.table,e,this),this.childPopup}}class s extends e{constructor(e,t){super(e),this._handler=null}initialize(){}registerTableOption(e,t){this.table.optionsList.register(e,t)}registerColumnOption(e,t){this.table.columnManager.optionsList.register(e,t)}registerTableFunction(e,t){void 0===this.table[e]?this.table[e]=(...i)=>(this.table.initGuard(e),t(...i)):console.warn("Unable to bind table function, name already in use",e)}registerComponentFunction(e,t,i){return this.table.componentFunctionBinder.bind(e,t,i)}registerDataHandler(e,t){this.table.rowManager.registerDataPipelineHandler(e,t),this._handler=e}registerDisplayHandler(e,t){this.table.rowManager.registerDisplayPipelineHandler(e,t),this._handler=e}displayRows(e){var t,i=this.table.rowManager.displayRows.length-1;if(this._handler&&(t=this.table.rowManager.displayPipeline.findIndex((e=>e.handler===this._handler)))>-1&&(i=t),e&&(i+=e),this._handler)return i>-1?this.table.rowManager.getDisplayRows(i):this.activeRows()}activeRows(){return this.table.rowManager.activeRows}refreshData(e,t){t||(t=this._handler),t&&this.table.rowManager.refreshActiveData(t,!1,e)}footerAppend(e){return this.table.footerManager.append(e)}footerPrepend(e){return this.table.footerManager.prepend(e)}footerRemove(e){return this.table.footerManager.remove(e)}popup(e,t){return new i(this.table,e,t)}alert(e,t){return this.table.alertManager.alert(e,t)}clearAlert(){return this.table.alertManager.clear()}}class o extends s{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"],this.registerColumnOption("accessor"),this.registerColumnOption("accessorParams"),this.registerColumnOption("accessorData"),this.registerColumnOption("accessorDataParams"),this.registerColumnOption("accessorDownload"),this.registerColumnOption("accessorDownloadParams"),this.registerColumnOption("accessorClipboard"),this.registerColumnOption("accessorClipboardParams"),this.registerColumnOption("accessorPrint"),this.registerColumnOption("accessorPrintParams"),this.registerColumnOption("accessorHtmlOutput"),this.registerColumnOption("accessorHtmlOutputParams")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((s=>{var o,n="accessor"+(s.charAt(0).toUpperCase()+s.slice(1));e.definition[n]&&(o=this.lookupAccessor(e.definition[n]))&&(t=!0,i[n]={accessor:o,params:e.definition[n+"Params"]||{}})})),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":o.accessors[e]?t=o.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,i){var s="accessor"+(i.charAt(0).toUpperCase()+i.slice(1)),o=e.getComponent(),n=t.deepClone(e.data||{});return this.table.columnManager.traverse((function(e){var t,r,a,l;e.modules.accessor&&(r=e.modules.accessor[s]||e.modules.accessor.accessor||!1)&&"undefined"!=(t=e.getFieldValue(n))&&(l=e.getComponent(),a="function"==typeof r.params?r.params(t,n,i,l,o):r.params,e.setFieldValue(n,r.accessor(t,n,i,a,l,o)))})),n}}o.moduleName="accessor",o.accessors={};function n(e,t){var i=[];if(t=t||"",Array.isArray(e))e.forEach(((e,s)=>{i=i.concat(n(e,t?t+"["+s+"]":s))}));else if("object"==typeof e)for(var s in e)i=i.concat(n(e[s],t?t+"["+s+"]":s));else i.push({key:t,value:e});return i}function r(e){var t=n(e),i=[];return t.forEach((function(e){i.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))})),i.join("&")}function a(e,t,i){return e&&i&&Object.keys(i).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+r(i))),e}function l(e,t){var i=[];if(t=t||"",Array.isArray(e))e.forEach(((e,s)=>{i=i.concat(l(e,t?t+"["+s+"]":s))}));else if("object"==typeof e)for(var s in e)i=i.concat(l(e[s],t?t+"["+s+"]":s));else i.push({key:t,value:e});return i}var h={json:{headers:{"Content-Type":"application/json"},body:function(e,t,i){return JSON.stringify(i)}},form:{headers:{},body:function(e,t,i){var s=l(i),o=new FormData;return s.forEach((function(e){o.append(e.key,e.value)})),o}}};class d extends s{constructor(e){super(e),this.config={},this.url="",this.urlGenerator=!1,this.params=!1,this.loaderPromise=!1,this.registerTableOption("ajaxURL",!1),this.registerTableOption("ajaxURLGenerator",!1),this.registerTableOption("ajaxParams",{}),this.registerTableOption("ajaxConfig","get"),this.registerTableOption("ajaxContentType","form"),this.registerTableOption("ajaxRequestFunc",!1),this.registerTableOption("ajaxRequesting",(function(){})),this.registerTableOption("ajaxResponse",!1),this.contentTypeFormatters=d.contentTypeFormatters}initialize(){this.loaderPromise=this.table.options.ajaxRequestFunc||d.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||d.defaultURLGenerator,this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.setDefaultConfig(this.table.options.ajaxConfig),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-params",this.requestParams.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}requestParams(e,t,i,s){var o=this.table.options.ajaxParams;return o&&("function"==typeof o&&(o=o.call(this.table)),s=Object.assign(Object.assign({},o),s)),s}requestDataCheck(e,t,i,s){return!((e||!this.url)&&"string"!=typeof e)}requestData(e,t,i,s,o){var n;return!o&&this.requestDataCheck(e)?(e&&this.setUrl(e),n=this.generateConfig(i),this.sendRequest(this.url,t,n)):o}setDefaultConfig(e={}){this.config=Object.assign({},d.defaultConfig),"string"==typeof e?this.config.method=e:Object.assign(this.config,e)}generateConfig(e={}){var t=Object.assign({},this.config);return"string"==typeof e?t.method=e:Object.assign(t,e),t}setUrl(e){this.url=e}getUrl(){return this.url}sendRequest(e,t,i){return!1!==this.table.options.ajaxRequesting.call(this.table,e,t)?this.loaderPromise(e,i,t).then((i=>(this.table.options.ajaxResponse&&(i=this.table.options.ajaxResponse.call(this.table,e,t,i)),i))):Promise.reject()}}d.moduleName="ajax",d.defaultConfig={method:"GET"},d.defaultURLGenerator=a,d.defaultLoaderPromise=function(e,t,i){var s;return new Promise(((o,n)=>{if(e=this.urlGenerator.call(this.table,e,t,i),"GET"!=t.method.toUpperCase())if(s="object"==typeof this.table.options.ajaxContentType?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType]){for(var r in s.headers)t.headers||(t.headers={}),void 0===t.headers[r]&&(t.headers[r]=s.headers[r]);t.body=s.body.call(this,e,t,i)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers.Origin&&(t.headers.Origin=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then((e=>{e.ok?e.json().then((e=>{o(e)})).catch((e=>{n(e),console.warn("Ajax Load Error - Invalid JSON returned",e)})):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),n(e))})).catch((e=>{console.error("Ajax Load Error - Connection Error: ",e),n(e)}))):(console.warn("Ajax Load Error - No URL Set"),o([]))}))},d.contentTypeFormatters=h;class c extends s{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0,this.registerTableOption("clipboard",!1),this.registerTableOption("clipboardCopyStyled",!0),this.registerTableOption("clipboardCopyConfig",!1),this.registerTableOption("clipboardCopyFormatter",!1),this.registerTableOption("clipboardCopyRowRange","active"),this.registerTableOption("clipboardPasteParser","table"),this.registerTableOption("clipboardPasteAction","insert"),this.registerColumnOption("clipboard"),this.registerColumnOption("titleClipboard")}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(e=>{var t,i,s;this.blocked||(e.preventDefault(),this.customSelection?(t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t))):(s=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard"),t=(i=this.table.modules.export.generateHTMLTable(s))?this.generatePlainContent(s):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))),window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.dispatchExternal("clipboardCopied",t,i),this.reset())})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(e=>{this.paste(e)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach((e=>{var i=[];e.columns.forEach((t=>{var s="";if(t)if("group"===e.type&&(t.value=t.component.getKey()),null===t.value)s="";else switch(typeof t.value){case"object":s=JSON.stringify(t.value);break;case"undefined":s="";break;default:s=t.value}i.push(s)})),t.push(i.join("\t"))})),t.join("\n")}copy(e,t){var i,s;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(this.table.element),(i=window.getSelection()).toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((s=document.body.createTextRange()).moveToElementText(this.table.element),s.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=c.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=c.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}}paste(e){var t,i,s;this.checkPasteOrigin(e)&&(t=this.getPasteData(e),(i=this.pasteParser.call(this,t))?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),s=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,s)):this.dispatchExternal("clipboardPasteError",t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach((e=>{t.push(this.table.modules.mutator.transformRow(e,"clipboard"))})):t=e,t}checkPasteOrigin(e){var t=!0;return!this.confirm("clipboard-paste",[e])&&["DIV","SPAN"].includes(e.target.tagName)||(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}}c.moduleName="clipboard",c.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)},range:function(e){var t,i,s,o,n,r=[],a=this.table.modules.selectRange.activeRange,l=!1;return n=e.length,a&&(i=(t=a.getBounds()).start,t.start===t.end&&(l=!0),i&&(s=(r=this.table.rowManager.activeRows.slice()).indexOf(i.row),o=l?e.length:r.indexOf(t.end.row)-s+1,s>-1&&(this.table.blockRedraw(),(r=r.slice(s,s+o)).forEach(((t,i)=>{t.updateData(e[i%n])})),this.table.restoreRedraw()))),r}},c.pasteParsers={table:function(e){var t=[],i=!0,s=this.table.columnManager.columns,o=[],n=[];return(e=e.split("\n")).forEach((function(e){t.push(e.split("\t"))})),!(!t.length||1===t.length&&t[0].length<2)&&(t[0].forEach((function(e){var t=s.find((function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()}));t?o.push(t):i=!1})),i||(i=!0,o=[],t[0].forEach((function(e){var t=s.find((function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()}));t?o.push(t):i=!1})),i||(o=this.table.columnManager.columnsByIndex)),i&&t.shift(),t.forEach((function(e){var t={};e.forEach((function(e,i){o[i]&&(t[o[i].field]=e)})),n.push(t)})),n)},range:function(e){var t,i,s,o,n,r=[],a=[],l=this.table.modules.selectRange.activeRange,h=!1;return!!(l&&(i=(t=l.getBounds()).start,t.start===t.end&&(h=!0),i&&((e=e.split("\n")).forEach((function(e){r.push(e.split("\t"))})),r.length&&(n=(o=this.table.columnManager.getVisibleColumnsByIndex()).indexOf(i.column))>-1)))&&(s=h?r[0].length:o.indexOf(t.end.column)-n+1,o=o.slice(n,n+s),r.forEach((e=>{var t={},i=e.length;o.forEach((function(s,o){t[s.field]=e[o%i]})),a.push(t)})),a)}};class u{constructor(e){return this._row=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}_getSelf(){return this._row}}class m{constructor(e){return this._cell=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._cell.table.componentFunctionBinder.handle("cell",e._cell,t)}})}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(e){return this._cell.row.getData(e)}getType(){return"cell"}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class p extends e{constructor(e,t){super(e.table),this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell")}_configureCell(){var e=this.element,t=this.column.getField();(e.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(e.style.display="inline-flex",e.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[this.column.vertAlign]||"",this.column.hozAlign&&(e.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[this.column.hozAlign]||"")),t&&e.setAttribute("tabulator-field",t),this.column.definition.cssClass)&&this.column.definition.cssClass.split(" ").forEach((t=>{e.classList.add(t)}));this.dispatch("cell-init",this),this.column.visible||this.hide()}_generateContents(){var e;switch(typeof(e=this.chain("cell-format",this,null,(()=>this.element.innerHTML=this.value)))){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.dispatch("cell-rendered",this)}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t,i){this.setValueProcessData(e,t,i)&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.column.definition.cellEdited&&this.column.definition.cellEdited.call(this.table,this.getComponent()),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}setValueProcessData(e,t,i){var s=!1;return(this.value!==e||i)&&(s=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),s&&this.dispatch("cell-value-changed",this),s}setValueActual(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this.dispatch("cell-layout",this)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null,this.dispatch("cell-height",this,"")}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled,this.dispatch("cell-height",this,this.row.heightStyled)}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}delete(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}getIndex(){return this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new m(this)),this.component}}class g{constructor(e){return this._column=e,this.type="ColumnComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._column.table.componentFunctionBinder.handle("column",e._column,t)}})}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getTitleDownload(){return this._column.getTitleDownload()}getCells(){var e=[];return this._column.cells.forEach((function(t){e.push(t.getComponent())})),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach((function(e){e.show()})):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach((function(e){e.hide()})):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach((function(t){e.push(t.getComponent())})),e}getParentColumn(){return this._column.parent instanceof f&&this._column.parent.getComponent()}_getSelf(){return this._column}scrollTo(e,t){return this._column.table.columnManager.scrollToColumn(this._column,e,t)}getTable(){return this._column.table}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return!!e&&e.getComponent()}getPrevColumn(){var e=this._column.prevColumn();return!!e&&e.getComponent()}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.columnManager.rerenderColumns(!0),t}}var b={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,maxInitialWidth:void 0,cssClass:void 0,variableHeight:void 0,headerVertical:void 0,headerHozAlign:void 0,headerWordWrap:!1,editableTitle:void 0};class f extends e{constructor(e,t){super(t.table),this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleDownload=null,this.titleFormatterRendered=!1,this.mapDefinitions(),this.setField(this.definition.field),this.modules={},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.maxInitialWidth=null,this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this.definition.columns?(this.isGroup=!0,this.definition.columns.forEach(((e,t)=>{var i=new f(e,this);this.attachColumn(i)})),this.checkColumnVisibility()):t.registerColumnField(this),this._initialize()}createElement(){var e=document.createElement("div");switch(e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),this.table.options.columnHeaderVertAlign){case"middle":e.style.justifyContent="center";break;case"bottom":e.style.justifyContent="flex-end"}return e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitions(){var e=this.table.options.columnDefaults;if(e)for(let t in e)void 0===this.definition[t]&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(f.defaultOptionList,this.definition)}checkDefinition(){Object.keys(this.definition).forEach((e=>{-1===f.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)}))}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach((function(e){e.reRegisterPosition()})):this.registerColumnPosition(this)}_initialize(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.dispatch("column-init",this)}_buildColumnHeader(){var e=this.definition;(this.dispatch("column-layout",this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass)&&e.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(parseInt(e.minWidth)),e.maxInitialWidth&&(this.maxInitialWidth=parseInt(e.maxInitialWidth)),e.maxWidth&&this.setMaxWidth(parseInt(e.maxWidth)),this.reinitializeWidth(),this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}_buildColumnHeaderContent(){var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=document.createElement("div");if(t.classList.add("tabulator-col-title"),e.headerWordWrap&&t.classList.add("tabulator-col-title-wrap"),e.editableTitle){var i=document.createElement("input");i.classList.add("tabulator-title-editor"),i.addEventListener("click",(e=>{e.stopPropagation(),i.focus()})),i.addEventListener("mousedown",(e=>{e.stopPropagation()})),i.addEventListener("change",(()=>{e.title=i.value,this.dispatchExternal("columnTitleChanged",this.getComponent())})),t.appendChild(i),e.field?this.langBind("columns|"+e.field,(t=>{i.value=t||e.title||" "})):i.value=e.title||" "}else e.field?this.langBind("columns|"+e.field,(i=>{this._formatColumnHeaderTitle(t,i||e.title||" ")})):this._formatColumnHeaderTitle(t,e.title||" ");return t}_formatColumnHeaderTitle(e,t){var i=this.chain("column-format",[this,t,e],null,(()=>t));switch(typeof i){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":e.innerHTML="";break;default:e.innerHTML=i}}_buildGroupHeader(){(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t,i=e,s=this.fieldStructure,o=s.length;for(let e=0;e{t.push(e),t=t.concat(e.getColumns(!0))})):t=this.columns,t}getCells(){return this.cells}getTopColumn(){return this.parent.isGroup?this.parent.getTopColumn():this}getDefinition(e){var t=[];return this.isGroup&&e&&(this.columns.forEach((function(e){t.push(e.getDefinition(!0))})),this.definition.columns=t),this.definition}checkColumnVisibility(){var e=!1;this.columns.forEach((function(t){t.visible&&(e=!0)})),e?(this.show(),this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1)):this.hide()}show(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(e){e.show()})),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager.verticalAlignHeaders(),this.dispatch("column-show",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}hide(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager.verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(e){e.hide()})),this.dispatch("column-hide",this,t),e||this.dispatchExternal("columnVisibilityChanged",this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),this.silent||this.table.columnManager.rerenderColumns())}matchChildWidths(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})),this.contentElement.style.maxWidth=e-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())}removeChild(e){var t=this.columns.indexOf(e);t>-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(e){e.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this)}checkCellHeights(){var e=[];this.cells.forEach((function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)})),e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()}))}getWidth(){var e=0;return this.isGroup?this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})):e=this.width,e}getLeftOffset(){var e=this.element.offsetLeft;return this.parent.isGroup&&(e+=this.parent.getLeftOffset()),e}getHeight(){return Math.ceil(this.element.getBoundingClientRect().height)}setMinWidth(e){this.maxWidth&&e>this.maxWidth&&(e=this.maxWidth,console.warn("the minWidth ("+e+"px) for column '"+this.field+"' cannot be bigger that its maxWidth ("+this.maxWidthStyled+")")),this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(e){e.setMinWidth()}))}setMaxWidth(e){this.minWidth&&e{this.isGroup&&this.columns.forEach((function(e){e.delete()})),this.dispatch("column-delete",this);var i=this.cells.length;for(let e=0;e-1&&this._nextVisibleColumn(e+1)}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(e),this.dispatch("column-width-fit-after",this)}fitToData(e){if(!this.isGroup){this.widthFixed||(this.element.style.width="",this.cells.forEach((e=>{e.clearWidth()})));var t=this.element.offsetWidth;if((!this.width||!this.widthFixed)&&(this.cells.forEach((e=>{var i=e.getWidth();i>t&&(t=i)})),t)){var i=t+1;this.maxInitialWidth&&!e&&(i=Math.min(i,this.maxInitialWidth)),this.setWidthActual(i)}}}updateDefinition(e){var t;return this.isGroup||this.parent.isGroup?(console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"),Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(t=Object.assign({},this.getDefinition()),t=Object.assign(t,e),this.table.columnManager.addColumn(t,!1,this).then((e=>(t.field==this.field&&(this.field=!1),this.delete().then((()=>e.getComponent()))))))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new g(this)),this.component}getPosition(){return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this)+1}}f.defaultOptionList=b;class v{constructor(e){return this._row=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(){return this._row.getPosition()}watchPosition(e){return this._row.watchPosition(e)}delete(){return this._row.delete()}scrollTo(e,t){return this._row.table.rowManager.scrollToRow(this._row,e,t)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}_getSelf(){return this._row}reformat(){return this._row.reinitialize()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e?e.getComponent():e}getPrevRow(){var e=this._row.prevRow();return e?e.getComponent():e}}class w extends e{constructor(e,t,i="row"){super(t.table),this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.position=0,this.positionWatchers=[],this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){this.createElement(),this.dispatch("row-init",this)}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e,t){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.initialized=!0,this.table.columnManager.renderer.renderRowCells(this,t),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this)}else this.table.columnManager.renderer.rerenderRowCells(this,t)}rendered(){this.cells.forEach((e=>{e.cellRendered()}))}reinitializeHeight(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)}deinitialize(){this.initialized=!1}deinitializeHeight(){this.heightInitialized=!1}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.dispatch("row-relayout",this)}calcHeight(e){var t,i=0;this.table.options.rowHeight?this.height=this.table.options.rowHeight:(t=this.table.options.resizableRows?this.element.clientHeight:0,this.cells.forEach((function(e){var t=e.getHeight();t>i&&(i=t)})),this.height=e?Math.max(i,t):this.manualHeight?this.height:Math.max(i,t)),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}setCellHeight(){this.cells.forEach((function(e){e.setHeight()})),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach((function(e){e.clearHeight()}))}normalizeHeight(e){e&&!this.table.options.rowHeight&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.data=this.chain("row-data-init-before",[this,e],void 0,e),this.dispatch("row-data-init-after",this)}updateData(e){var i,s=this.element&&t.elVisible(this.element),o={};return new Promise(((t,n)=>{"string"==typeof e&&(e=JSON.parse(e)),this.dispatch("row-data-save-before",this),this.subscribed("row-data-changing")&&(o=Object.assign(o,this.data),o=Object.assign(o,e)),i=this.chain("row-data-changing",[this,o,e],null,e);for(let e in i)this.data[e]=i[e];this.dispatch("row-data-save-after",this);for(let t in e){this.table.columnManager.getColumnsByFieldRoot(t).forEach((e=>{let t=this.getCell(e.getField());if(t){let o=e.getFieldValue(i);t.getValue()!==o&&(t.setValueProcessData(o),s&&t.cellRendered())}}))}s?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),this.dispatch("row-data-changed",this,s,e),this.dispatchExternal("rowUpdated",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),t()}))}getData(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}getCell(e){return e=this.table.columnManager.findColumn(e),this.initialized||0!==this.cells.length||this.generateCells(),this.cells.find((function(t){return t.column===e}))}getCellIndex(e){return this.cells.findIndex((function(t){return t===e}))}findCell(e){return this.cells.find((t=>t.element===e))}getCells(){return this.initialized||0!==this.cells.length||this.generateCells(),this.cells}nextRow(){return this.table.rowManager.nextDisplayRow(this,!0)||!1}prevRow(){return this.table.rowManager.prevDisplayRow(this,!0)||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}delete(){return this.dispatch("row-delete",this),this.deleteActual(),Promise.resolve()}deleteActual(e){this.detachModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}detachModules(){this.dispatch("row-deleting",this)}deleteCells(){var e=this.cells.length;for(let t=0;t{e(this.position)})))}watchPosition(e){this.positionWatchers.push(e),e(this.position)}getGroup(){return this.modules.group||!1}getComponent(){return this.component||(this.component=new v(this)),this.component}}var C={avg:function(e,t,i){var s=0,o=void 0!==i.precision?i.precision:2;return e.length&&(s=e.reduce((function(e,t){return Number(e)+Number(t)})),s/=e.length,s=!1!==o?s.toFixed(o):s),parseFloat(s).toString()},max:function(e,t,i){var s=null,o=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))>s||null===s)&&(s=e)})),null!==s?!1!==o?s.toFixed(o):s:""},min:function(e,t,i){var s=null,o=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))(e||0===t)&&e.indexOf(t)===i)).length}};class E extends s{constructor(e){super(e),this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.blocked=!1,this.recalcAfterBlock=!1,this.registerTableOption("columnCalcs",!0),this.registerColumnOption("topCalc"),this.registerColumnOption("topCalcParams"),this.registerColumnOption("topCalcFormatter"),this.registerColumnOption("topCalcFormatterParams"),this.registerColumnOption("bottomCalc"),this.registerColumnOption("bottomCalcParams"),this.registerColumnOption("bottomCalcFormatter"),this.registerColumnOption("bottomCalcFormatterParams")}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e}initialize(){this.genColumn=new f({field:"value"},this),this.subscribe("cell-value-changed",this.cellValueChanged.bind(this)),this.subscribe("column-init",this.initializeColumnCheck.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("column-moved",this.recalcActiveRows.bind(this)),this.subscribe("column-add",this.recalcActiveRows.bind(this)),this.subscribe("data-refreshed",this.recalcActiveRowsRefresh.bind(this)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("rows-visible",this.visibleRows.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this)),this.subscribe("redraw-blocked",this.blockRedraw.bind(this)),this.subscribe("redraw-restored",this.restoreRedraw.bind(this)),this.subscribe("table-redrawing",this.resizeHolderWidth.bind(this)),this.subscribe("column-resized",this.resizeHolderWidth.bind(this)),this.subscribe("column-show",this.resizeHolderWidth.bind(this)),this.subscribe("column-hide",this.resizeHolderWidth.bind(this)),this.registerTableFunction("getCalcResults",this.getResults.bind(this)),this.registerTableFunction("recalc",this.userRecalc.bind(this)),this.resizeHolderWidth()}resizeHolderWidth(){this.topElement.style.minWidth=this.table.columnManager.headersElement.offsetWidth+"px"}tableRedraw(e){this.recalc(this.table.rowManager.activeRows),e&&this.redraw()}blockRedraw(){this.blocked=!0,this.recalcAfterBlock=!1}restoreRedraw(){this.blocked=!1,this.recalcAfterBlock&&(this.recalcAfterBlock=!1,this.recalcActiveRowsRefresh())}userRecalc(){this.recalc(this.table.rowManager.activeRows)}blockCheck(){return this.blocked&&(this.recalcAfterBlock=!0),this.blocked}visibleRows(e,t){return this.topRow&&t.unshift(this.topRow),this.botRow&&t.push(this.botRow),t}rowsUpdated(e){this.table.options.groupBy?this.recalcRowGroup(e):this.recalcActiveRows()}recalcActiveRowsRefresh(){this.table.options.groupBy&&this.table.options.dataTreeStartExpanded&&this.table.options.dataTree?this.recalcAll():this.recalcActiveRows()}recalcActiveRows(){this.recalc(this.table.rowManager.activeRows)}cellValueChanged(e){(e.column.definition.topCalc||e.column.definition.bottomCalc)&&(this.table.options.groupBy?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.recalcActiveRows(),"table"!=this.table.options.columnCalcs&&this.recalcRowGroup(e.row)):this.recalcActiveRows())}initializeColumnCheck(e){(e.definition.topCalc||e.definition.bottomCalc)&&this.initializeColumn(e)}initializeColumn(e){var t=e.definition,i={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(typeof t.topCalc){case"string":E.calculations[t.topCalc]?i.topCalc=E.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":i.topCalc=t.topCalc}i.topCalc&&(e.modules.columnCalcs=i,this.topCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(t.bottomCalc){switch(typeof t.bottomCalc){case"string":E.calculations[t.bottomCalc]?i.botCalc=E.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":i.botCalc=t.bottomCalc}i.botCalc&&(e.modules.columnCalcs=i,this.botCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}}registerColumnField(){}removeCalcs(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.footerRemove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()}reinitializeCalcs(){this.topCalcs.length&&this.initializeTopRow(),this.botCalcs.length&&this.initializeBottomRow()}initializeTopRow(){var e=document.createDocumentFragment();this.topInitialized||(e.appendChild(document.createElement("br")),e.appendChild(this.topElement),this.table.columnManager.getContentsElement().insertBefore(e,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)}initializeBottomRow(){this.botInitialized||(this.footerPrepend(this.botElement),this.botInitialized=!0)}scrollHorizontal(e){this.botInitialized&&this.botRow&&(this.botElement.scrollLeft=e)}recalc(e){var t,i;if(!this.blockCheck()&&(this.topInitialized||this.botInitialized)){if(t=this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),i=this.generateRow("top",t),this.topRow=i;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(i.getElement()),i.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),i=this.generateRow("bottom",t),this.botRow=i;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(i.getElement()),i.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}}recalcRowGroup(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))}recalcAll(){(this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalcActiveRows(),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs&&this.table.modules.groupRows.getChildGroups().forEach((e=>{this.recalcGroup(e)})))}recalcGroup(e){var t,i;this.blockCheck()||e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[];return e.forEach((e=>{if(t.push(e.getData()),this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs&&e.modules.dataTree&&e.modules.dataTree.open){var i=this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(e));t=t.concat(i)}})),t}generateRow(e,t){var i,s=this.generateRowData(e,t);return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),i=new w(s,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),i.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),i.component=!1,i.getComponent=()=>(i.component||(i.component=new u(i)),i.component),i.generateCells=()=>{var t=[];this.table.columnManager.columnsByIndex.forEach((s=>{this.genColumn.setField(s.getField()),this.genColumn.hozAlign=s.hozAlign,s.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(s.definition[e+"CalcFormatter"]),params:s.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=s.definition.cssClass;var o=new p(this.genColumn,i);o.getElement(),o.column=s,o.setWidth(),s.cells.push(o),t.push(o),s.visible||o.hide()})),i.cells=t},i}generateRowData(e,t){var i,s,o={},n="top"==e?this.topCalcs:this.botCalcs,r="top"==e?"topCalc":"botCalc";return n.forEach((function(e){var n=[];e.modules.columnCalcs&&e.modules.columnCalcs[r]&&(t.forEach((function(t){n.push(e.getFieldValue(t))})),s=r+"Params",i="function"==typeof e.modules.columnCalcs[s]?e.modules.columnCalcs[s](n,t):e.modules.columnCalcs[s],e.setFieldValue(o,e.modules.columnCalcs[r](n,t,i)))})),o}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.getGroups(!0).forEach((t=>{e[t.getKey()]=this.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),s={};return i.forEach((e=>{s[e.getKey()]=this.getGroupResults(e)})),{top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:s}}adjustForScrollbar(e){this.botRow&&(this.table.rtl?this.botElement.style.paddingLeft=e+"px":this.botElement.style.paddingRight=e+"px")}}E.moduleName="columnCalcs",E.calculations=C;class y extends s{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.registerTableOption("dataTree",!1),this.registerTableOption("dataTreeFilter",!0),this.registerTableOption("dataTreeSort",!0),this.registerTableOption("dataTreeElementColumn",!1),this.registerTableOption("dataTreeBranchElement",!0),this.registerTableOption("dataTreeChildIndent",9),this.registerTableOption("dataTreeChildField","_children"),this.registerTableOption("dataTreeCollapseElement",!1),this.registerTableOption("dataTreeExpandElement",!1),this.registerTableOption("dataTreeStartExpanded",!1),this.registerTableOption("dataTreeChildColumnCalcs",!1),this.registerTableOption("dataTreeSelectPropagate",!1),this.registerComponentFunction("row","treeCollapse",this.collapseRow.bind(this)),this.registerComponentFunction("row","treeExpand",this.expandRow.bind(this)),this.registerComponentFunction("row","treeToggle",this.toggleRow.bind(this)),this.registerComponentFunction("row","getTreeParent",this.getTreeParent.bind(this)),this.registerComponentFunction("row","getTreeChildren",this.getRowChildren.bind(this)),this.registerComponentFunction("row","addTreeChild",this.addTreeChildRow.bind(this)),this.registerComponentFunction("row","isTreeExpanded",this.isRowExpanded.bind(this))}initialize(){if(this.table.options.dataTree){var e=null,t=this.table.options;switch(this.field=t.dataTreeChildField,this.indent=t.dataTreeChildIndent,this.options("movableRows")&&console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"),t.dataTreeBranchElement?!0===t.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof t.dataTreeBranchElement?((e=document.createElement("div")).innerHTML=t.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=t.dataTreeBranchElement:(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch-empty")),t.dataTreeCollapseElement?"string"==typeof t.dataTreeCollapseElement?((e=document.createElement("div")).innerHTML=t.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=t.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
    "),t.dataTreeExpandElement?"string"==typeof t.dataTreeExpandElement?((e=document.createElement("div")).innerHTML=t.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=t.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
    "),typeof t.dataTreeStartExpanded){case"boolean":this.startOpen=function(e,i){return t.dataTreeStartExpanded};break;case"function":this.startOpen=t.dataTreeStartExpanded;break;default:this.startOpen=function(e,i){return t.dataTreeStartExpanded[i]}}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("cell-value-updated",this.cellValueChanged.bind(this)),this.subscribe("edit-cancelled",this.cellValueChanged.bind(this)),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.subscribe("table-built",this.initializeElementField.bind(this)),this.subscribe("table-redrawing",this.tableRedrawing.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}tableRedrawing(e){e&&this.table.rowManager.getRows().forEach((e=>{this.reinitializeRowChildren(e)}))}initializeElementField(){var e=this.table.columnManager.getFirstVisibleColumn();this.elementField=this.table.options.dataTreeElementColumn||!!e&&e.field}getRowChildren(e){return this.getTreeChildren(e,!0)}columnMoving(){var e=[];return this.table.rowManager.rows.forEach((t=>{e=e.concat(this.getTreeChildren(t,!1,!0))})),e}rowDataChanged(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}cellValueChanged(e){e.column.getField()===this.elementField&&this.layoutRow(e.row)}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),s=i||!i&&"object"==typeof t&&null!==t;!s&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!s&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!s&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!s)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!s)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:s}}reinitializeRowChildren(e){this.getTreeChildren(e,!1,!0).forEach((function(e){e.reinitialize(!0)}))}layoutRow(e){var t=(this.elementField?e.getCell(this.elementField):e.getCells()[0]).getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,t),e.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),t.insertBefore(i.branchEl,t.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?t.style.paddingRight=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":t.style.paddingLeft=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,s=i.controlEl;t=t||e.getCells()[0].getElement(),!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.collapseRow(e)}))):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.expandRow(e)}))),i.controlEl.addEventListener("mousedown",(e=>{e.stopPropagation()})),s&&s.parentNode===t?s.parentNode.replaceChild(i.controlEl,s):t.insertBefore(i.controlEl,t.firstChild))}getRows(e){var t=[];return e.forEach(((e,i)=>{var s;t.push(e),e instanceof w&&(e.create(),(s=e.modules.dataTree).index||!1===s.children||this.getChildren(e).forEach((e=>{e.create(),t.push(e)})))})),t}getChildren(e,t){var i=e.modules.dataTree,s=[],o=[];return!1!==i.children&&(i.open||t)&&(Array.isArray(i.children)||(i.children=this.generateChildren(e)),s=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(i.children):i.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(s),s.forEach((e=>{o.push(e),this.getChildren(e).forEach((e=>{o.push(e)}))}))),o}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach((i=>{var s=new w(i||{},this.table.rowManager);s.create(),s.modules.dataTree.index=e.modules.dataTree.index+1,s.modules.dataTree.parent=e,s.modules.dataTree.children&&(s.modules.dataTree.open=this.startOpen(s.getComponent(),s.modules.dataTree.index)),t.push(s)})),t}expandRow(e,t){var i=e.modules.dataTree;!1!==i.children&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",e.getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))}isRowExpanded(e){return e.modules.dataTree.open}getTreeParent(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()}getTreeParentRoot(e){return e.modules.dataTree&&e.modules.dataTree.parent?this.getTreeParentRoot(e.modules.dataTree.parent):e}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(t.children):t.children).forEach((e=>{e instanceof w&&i.push(e)}))),i}rowDelete(e){var t,i=e.modules.dataTree.parent;i&&(!1!==(t=this.findChildIndex(e,i))&&i.data[this.field].splice(t,1),i.data[this.field].length||delete i.data[this.field],this.initializeRow(i),this.layoutRow(i)),this.refreshData(!0)}addTreeChildRow(e,t,i,s){var o=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==s&&!1!==(o=this.findChildIndex(s,e))&&e.data[this.field].splice(i?o:o+1,0,t),!1===o&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}findChildIndex(e,t){var i=!1;return"object"==typeof e?e instanceof w?i=e.data:e instanceof v?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?t.modules.dataTree&&(i=t.modules.dataTree.children.find((t=>t instanceof w&&t.element===e)))&&(i=i.data):null===e&&(i=!1):i=void 0!==e&&t.data[this.field].find((t=>t.data[this.table.options.index]==e)),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i}getTreeChildren(e,t,i){var s=e.modules.dataTree,o=[];return s&&s.children&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),s.children.forEach((e=>{e instanceof w&&(o.push(t?e.getComponent():e),i&&(o=o.concat(this.getTreeChildren(e,t,i))))}))),o}getChildField(){return this.field}redrawNeeded(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]}}y.moduleName="dataTree";var R={csv:function(e,t={},i){var s=t.delimiter?t.delimiter:",",o=[],n=[];e.forEach((e=>{var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(((e,t)=>{e&&1===e.depth&&(n[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')}));break;case"row":e.columns.forEach((e=>{if(e){switch(typeof e.value){case"object":e.value=null!==e.value?JSON.stringify(e.value):"";break;case"undefined":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}})),o.push(t.join(s))}})),n.length&&o.unshift(n.join(s)),o=o.join("\n"),t.bom&&(o="\ufeff"+o),i(o,"text/csv")},json:function(e,t,i){var s=[];e.forEach((e=>{var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((e=>{e&&(t[e.component.getTitleDownload()||e.component.getField()]=e.value)})),s.push(t)}})),i(s=JSON.stringify(s,null,"\t"),"application/json")},jsonLines:function(e,t,i){const s=[];e.forEach((e=>{const t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((e=>{e&&(t[e.component.getTitleDownload()||e.component.getField()]=e.value)})),s.push(JSON.stringify(t))}})),i(s.join("\n"),"application/x-ndjson")},pdf:function(e,t={},i){var s=[],o=[],n={},r=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},a=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},l=t.jsPDF||{},h=t.title?t.title:"";function d(e,t){var i=[];return e.columns.forEach((e=>{var s;if(e){switch(typeof e.value){case"object":e.value=null!==e.value?JSON.stringify(e.value):"";break;case"undefined":e.value=""}s={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(s.styles=t),i.push(s)}})),i}l.orientation||(l.orientation=t.orientation||"landscape"),l.unit||(l.unit="pt"),e.forEach((e=>{switch(e.type){case"header":s.push(d(e));break;case"group":o.push(d(e,r));break;case"calc":o.push(d(e,a));break;case"row":o.push(d(e))}}));var c=new jspdf.jsPDF(l);t.autoTable&&(n="function"==typeof t.autoTable?t.autoTable(c)||{}:t.autoTable),h&&(n.didDrawPage=function(e){c.text(h,40,30)}),n.head=s,n.body=o,c.autoTable(n),t.documentProcessing&&t.documentProcessing(c),i(c.output("arraybuffer"),"application/pdf")},xlsx:function(t,i,s){var o=i.sheetName||"Sheet1",n=XLSX.utils.book_new(),r=new e(this),a=!("compress"in i)||i.compress,l=i.writeOptions||{bookType:"xlsx",bookSST:!0,compression:a};function h(){var e=[],i=[],s={},o={s:{c:0,r:0},e:{c:t[0]?t[0].columns.reduce(((e,t)=>e+(t&&t.width?t.width:1)),0):0,r:t.length}};return t.forEach(((t,s)=>{var o=[];t.columns.forEach((function(e,t){e?(o.push(e.value instanceof Date||"object"!=typeof e.value?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&(e.height>1||e.width>1)&&i.push({s:{r:s,c:t},e:{r:s+e.height-1,c:t+e.width-1}})):o.push("")})),e.push(o)})),XLSX.utils.sheet_add_aoa(s,e),s["!ref"]=XLSX.utils.encode_range(o),i.length&&(s["!merges"]=i),s}if(l.type="binary",n.SheetNames=[],n.Sheets={},i.sheetOnly)s(h());else{if(i.sheets)for(var d in i.sheets)!0===i.sheets[d]?(n.SheetNames.push(d),n.Sheets[d]=h()):(n.SheetNames.push(d),r.commsSend(i.sheets[d],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(e){n.Sheets[d]=e}}));else n.SheetNames.push(o),n.Sheets[o]=h();i.documentProcessing&&(n=i.documentProcessing(n)),s(function(e){for(var t=new ArrayBuffer(e.length),i=new Uint8Array(t),s=0;s!=e.length;++s)i[s]=255&e.charCodeAt(s);return t}(XLSX.write(n,l)),"application/octet-stream")}},html:function(e,t,i){this.modExists("export",!0)&&i(this.modules.export.generateHTMLTable(e),"text/html")}};class x extends s{constructor(e){super(e),this.registerTableOption("downloadEncoder",(function(e,t){return new Blob([e],{type:t})})),this.registerTableOption("downloadReady",void 0),this.registerTableOption("downloadConfig",{}),this.registerTableOption("downloadRowRange","active"),this.registerColumnOption("download"),this.registerColumnOption("titleDownload")}initialize(){this.deprecatedOptionsCheck(),this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}deprecatedOptionsCheck(){this.deprecationCheck("downloadReady","downloadEncoder")}downloadToTab(e,t,i,s){this.download(e,t,i,s,!0)}download(e,t,i,s,o){var n=!1;if("function"==typeof e?n=e:x.downloaders[e]?n=x.downloaders[e]:console.warn("Download Error - No such download type found: ",e),n){var r=this.generateExportList(s);n.call(this.table,r,i||{},function(i,s){o?!0===o?this.triggerDownload(i,s,e,t,!0):o(i):this.triggerDownload(i,s,e,t)}.bind(this))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach((e=>{var t;"group"===e.type&&(t=e.columns[0],i&&i[e.indent]&&(t.value=i[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))})),t}triggerDownload(e,t,i,s,o){var n=document.createElement("a"),r=this.table.options.downloadEncoder(e,t);r&&(o?window.open(window.URL.createObjectURL(r)):(s=s||"Tabulator."+("function"==typeof i?"txt":i),navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,s):(n.setAttribute("href",window.URL.createObjectURL(r)),n.setAttribute("download",s),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n))),this.dispatchExternal("downloadComplete"))}commsReceived(e,t,i){if("intercept"===t)this.download(i.type,"",i.options,i.active,i.intercept)}}function T(e,t){var i=t.mask,s=void 0!==t.maskLetterChar?t.maskLetterChar:"A",o=void 0!==t.maskNumberChar?t.maskNumberChar:"9",n=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*";function r(t){var a=i[t];void 0!==a&&a!==n&&a!==s&&a!==o&&(e.value=e.value+""+a,r(t+1))}e.addEventListener("keydown",(t=>{var r=e.value.length,a=t.key;if(t.keyCode>46&&!t.ctrlKey&&!t.metaKey){if(r>=i.length)return t.preventDefault(),t.stopPropagation(),!1;switch(i[r]){case s:if(a.toUpperCase()==a.toLowerCase())return t.preventDefault(),t.stopPropagation(),!1;break;case o:if(isNaN(a))return t.preventDefault(),t.stopPropagation(),!1;break;case n:break;default:if(a!==i[r])return t.preventDefault(),t.stopPropagation(),!1}}})),e.addEventListener("keyup",(i=>{i.keyCode>46&&t.maskAutoFill&&r(e.value.length)})),e.placeholder||(e.placeholder=i),t.maskAutoFill&&r(e.value.length)}x.moduleName="download",x.downloaders=R;class M{constructor(e,t,i,s,o,n){this.edit=e,this.table=e.table,this.cell=t,this.params=this._initializeParams(n),this.data=[],this.displayItems=[],this.currentItems=[],this.focusedItem=null,this.input=this._createInputElement(),this.listEl=this._createListElement(),this.initialValues=null,this.isFilter="header"===t.getType(),this.filterTimeout=null,this.filtered=!1,this.typing=!1,this.values=[],this.popup=null,this.listIteration=0,this.lastAction="",this.filterTerm="",this.blurable=!0,this.actions={success:s,cancel:o},this._deprecatedOptionsCheck(),this._initializeValue(),i(this._onRendered.bind(this))}_deprecatedOptionsCheck(){this.params.listItemFormatter&&this.cell.getTable().deprecationAdvisor.msg("The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options"),this.params.sortValuesList&&this.cell.getTable().deprecationAdvisor.msg("The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options"),this.params.searchFunc&&this.cell.getTable().deprecationAdvisor.msg("The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options"),this.params.searchingPlaceholder&&this.cell.getTable().deprecationAdvisor.msg("The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options")}_initializeValue(){var e=this.cell.getValue();void 0===e&&void 0!==this.params.defaultValue&&(e=this.params.defaultValue),this.initialValues=this.params.multiselect?e:[e],this.isFilter&&(this.input.value=this.initialValues?this.initialValues.join(","):"",this.headerFilterInitialListGen())}_onRendered(){var e=this.cell.getElement();function t(e){e.stopPropagation()}this.isFilter||(this.input.style.height="100%",this.input.focus({preventScroll:!0})),e.addEventListener("click",t),setTimeout((()=>{e.removeEventListener("click",t)}),1e3),this.input.addEventListener("mousedown",this._preventPopupBlur.bind(this))}_createListElement(){var e=document.createElement("div");return e.classList.add("tabulator-edit-list"),e.addEventListener("mousedown",this._preventBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e}_setListWidth(){var e=this.isFilter?this.input:this.cell.getElement();this.listEl.style.minWidth=e.offsetWidth+"px",this.params.maxWidth&&(!0===this.params.maxWidth?this.listEl.style.maxWidth=e.offsetWidth+"px":"number"==typeof this.params.maxWidth?this.listEl.style.maxWidth=this.params.maxWidth+"px":this.listEl.style.maxWidth=this.params.maxWidth)}_createInputElement(){var e=this.params.elementAttributes,t=document.createElement("input");if(t.setAttribute("type",this.params.clearable?"search":"text"),t.style.padding="4px",t.style.width="100%",t.style.boxSizing="border-box",this.params.autocomplete||(t.style.cursor="default",t.style.caretColor="transparent"),e&&"object"==typeof e)for(let i in e)"+"==i.charAt(0)?(i=i.slice(1),t.setAttribute(i,t.getAttribute(i)+e["+"+i])):t.setAttribute(i,e[i]);return this.params.mask&&T(t,this.params),this._bindInputEvents(t),t}_initializeParams(e){var t,i=["values","valuesURL","valuesLookup"];return(e=Object.assign({},e)).verticalNavigation=e.verticalNavigation||"editor",e.placeholderLoading=void 0===e.placeholderLoading?"Searching ...":e.placeholderLoading,e.placeholderEmpty=void 0===e.placeholderEmpty?"No Results Found":e.placeholderEmpty,e.filterDelay=void 0===e.filterDelay?300:e.filterDelay,e.emptyValue=Object.keys(e).includes("emptyValue")?e.emptyValue:"",(t=Object.keys(e).filter((e=>i.includes(e))).length)?t>1&&console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"):console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"),e.autocomplete?e.multiselect&&(e.multiselect=!1,console.warn("list editor config error - multiselect option is not available when autocomplete is enabled")):(e.freetext&&(e.freetext=!1,console.warn("list editor config error - freetext option is only available when autocomplete is enabled")),e.filterFunc&&(e.filterFunc=!1,console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled")),e.filterRemote&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled")),e.mask&&(e.mask=!1,console.warn("list editor config error - mask option is only available when autocomplete is enabled")),e.allowEmpty&&(e.allowEmpty=!1,console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled")),e.listOnEmpty&&(e.listOnEmpty=!1,console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"))),e.filterRemote&&"function"!=typeof e.valuesLookup&&!e.valuesURL&&(e.filterRemote=!1,console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source")),e}_bindInputEvents(e){e.addEventListener("focus",this._inputFocus.bind(this)),e.addEventListener("click",this._inputClick.bind(this)),e.addEventListener("blur",this._inputBlur.bind(this)),e.addEventListener("keydown",this._inputKeyDown.bind(this)),e.addEventListener("search",this._inputSearch.bind(this)),this.params.autocomplete&&e.addEventListener("keyup",this._inputKeyUp.bind(this))}_inputFocus(e){this.rebuildOptionsList()}_filter(){this.params.filterRemote?(clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout((()=>{this.rebuildOptionsList()}),this.params.filterDelay)):this._filterList()}_inputClick(e){e.stopPropagation()}_inputBlur(e){this.blurable&&(this.popup?this.popup.hide():this._resolveValue(!0))}_inputSearch(){this._clearChoices()}_inputKeyDown(e){switch(e.keyCode){case 38:this._keyUp(e);break;case 40:this._keyDown(e);break;case 37:case 39:this._keySide(e);break;case 13:this._keyEnter();break;case 27:this._keyEsc();break;case 36:case 35:this._keyHomeEnd(e);break;case 9:this._keyTab(e);break;default:this._keySelectLetter(e)}}_inputKeyUp(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:this._keyAutoCompLetter(e)}}_preventPopupBlur(){this.popup&&this.popup.blockHide(),setTimeout((()=>{this.popup&&this.popup.restoreHide()}),10)}_preventBlur(){this.blurable=!1,setTimeout((()=>{this.blurable=!0}),10)}_keyTab(e){this.params.autocomplete&&"typing"===this.lastAction?this._resolveValue(!0):this.focusedItem&&this._chooseItem(this.focusedItem,!0)}_keyUp(e){var t=this.displayItems.indexOf(this.focusedItem);("editor"==this.params.verticalNavigation||"hybrid"==this.params.verticalNavigation&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&this._focusItem(this.displayItems[t-1]))}_keyDown(e){var t=this.displayItems.indexOf(this.focusedItem);("editor"==this.params.verticalNavigation||"hybrid"==this.params.verticalNavigation&&t=38&&e.keyCode<=90&&this._scrollToValue(e.keyCode))}_keyAutoCompLetter(e){this._filter(),this.lastAction="typing",this.typing=!0}_scrollToValue(e){clearTimeout(this.filterTimeout);var t=String.fromCharCode(e).toLowerCase();this.filterTerm+=t.toLowerCase();var i=this.displayItems.find((e=>void 0!==e.label&&e.label.toLowerCase().startsWith(this.filterTerm)));i&&this._focusItem(i),this.filterTimeout=setTimeout((()=>{this.filterTerm=""}),800)}_focusItem(e){this.lastAction="focus",this.focusedItem&&this.focusedItem.element&&this.focusedItem.element.classList.remove("focused"),this.focusedItem=e,e&&e.element&&(e.element.classList.add("focused"),e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"}))}headerFilterInitialListGen(){this._generateOptions(!0)}rebuildOptionsList(){this._generateOptions().then(this._sortOptions.bind(this)).then(this._buildList.bind(this)).then(this._showList.bind(this)).catch((e=>{Number.isInteger(e)||console.error("List generation error",e)}))}_filterList(){this._buildList(this._filterOptions()),this._showList()}_generateOptions(e){var t=[],i=++this.listIteration;return this.filtered=!1,this.params.values?t=this.params.values:this.params.valuesURL?t=this._ajaxRequest(this.params.valuesURL,this.input.value):"function"==typeof this.params.valuesLookup?t=this.params.valuesLookup(this.cell,this.input.value):this.params.valuesLookup&&(t=this._uniqueColumnValues(this.params.valuesLookupField)),t instanceof Promise?(e||this._addPlaceholder(this.params.placeholderLoading),t.then().then((e=>this.listIteration===i?this._parseList(e):Promise.reject(i)))):Promise.resolve(this._parseList(t))}_addPlaceholder(e){var t=document.createElement("div");"function"==typeof e&&(e=e(this.cell.getComponent(),this.listEl)),e&&(this._clearList(),e instanceof HTMLElement?t=e:(t.classList.add("tabulator-edit-list-placeholder"),t.innerHTML=e),this.listEl.appendChild(t),this._showList())}_ajaxRequest(e,t){return e=a(e,{},this.params.filterRemote?{term:t}:{}),fetch(e).then((e=>e.ok?e.json().catch((e=>(console.warn("List Ajax Load Error - Invalid JSON returned",e),Promise.reject(e)))):(console.error("List Ajax Load Error - Connection Error: "+e.status,e.statusText),Promise.reject(e)))).catch((e=>(console.error("List Ajax Load Error - Connection Error: ",e),Promise.reject(e))))}_uniqueColumnValues(e){var t,i={},s=this.table.getData(this.params.valuesLookup);return(t=e?this.table.columnManager.getColumnByField(e):this.cell.getColumn()._getSelf())?s.forEach((e=>{var s=t.getFieldValue(e);null!=s&&""!==s&&(i[s]=!0)})):(console.warn("unable to find matching column to create select lookup list:",e),i=[]),Object.keys(i)}_parseList(e){var t=[];return Array.isArray(e)||(e=Object.entries(e).map((([e,t])=>({label:t,value:e})))),e.forEach((e=>{"object"!=typeof e&&(e={label:e,value:e}),this._parseListItem(e,t,0)})),!this.currentItems.length&&this.params.freetext&&(this.input.value=this.initialValues,this.typing=!0,this.lastAction="typing"),this.data=t,t}_parseListItem(e,t,i){var s={};e.options?s=this._parseListGroup(e,i+1):(s={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,selected:!1,visible:!0,level:i,original:e},this.initialValues&&this.initialValues.indexOf(e.value)>-1&&this._chooseItem(s,!0)),t.push(s)}_parseListGroup(e,t){var i={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1,visible:!0,level:t,options:[],original:e};return e.options.forEach((e=>{this._parseListItem(e,i.options,t)})),i}_sortOptions(e){var t;return this.params.sort&&(t="function"==typeof this.params.sort?this.params.sort:this._defaultSortFunction.bind(this),this._sortGroup(t,e)),e}_sortGroup(e,t){t.sort(((t,i)=>e(t.label,i.label,t.value,i.value,t.original,i.original))),t.forEach((t=>{t.group&&this._sortGroup(e,t.options)}))}_defaultSortFunction(e,t){var i,s,o,n,r,a=0,l=/(\d+)|(\D+)/g,h=/\d/,d=0;if("desc"===this.params.sort&&([e,t]=[t,e]),e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((i=String(e).toLowerCase())===(s=String(t).toLowerCase()))return 0;if(!h.test(i)||!h.test(s))return i>s?1:-1;for(i=i.match(l),s=s.match(l),r=i.length>s.length?s.length:i.length;an?1:-1;return i.length>s.length}d=1}else d=t||0===t?-1:0;return d}_filterOptions(){var e=this.params.filterFunc||this._defaultFilterFunc,t=this.input.value;return t?(this.filtered=!0,this.data.forEach((i=>{this._filterItem(e,t,i)}))):this.filtered=!1,this.data}_filterItem(e,t,i){var s=!1;return i.group?(i.options.forEach((i=>{this._filterItem(e,t,i)&&(s=!0)})),i.visible=s):i.visible=e(t,i.label,i.value,i.original),i.visible}_defaultFilterFunc(e,t,i,s){return e=String(e).toLowerCase(),null!=t&&(String(t).toLowerCase().indexOf(e)>-1||String(i).toLowerCase().indexOf(e)>-1)}_clearList(){for(;this.listEl.firstChild;)this.listEl.removeChild(this.listEl.firstChild);this.displayItems=[]}_buildList(e){this._clearList(),e.forEach((e=>{this._buildItem(e)})),this.displayItems.length||this._addPlaceholder(this.params.placeholderEmpty)}_buildItem(e){var t,i=e.element;if(!this.filtered||e.visible){if(!i){if((i=document.createElement("div")).tabIndex=0,(t=this.params.itemFormatter?this.params.itemFormatter(e.label,e.value,e.original,i):e.label)instanceof HTMLElement?i.appendChild(t):i.innerHTML=t,e.group?i.classList.add("tabulator-edit-list-group"):i.classList.add("tabulator-edit-list-item"),i.classList.add("tabulator-edit-list-group-level-"+e.level),e.elementAttributes&&"object"==typeof e.elementAttributes)for(let t in e.elementAttributes)"+"==t.charAt(0)?(t=t.slice(1),i.setAttribute(t,this.input.getAttribute(t)+e.elementAttributes["+"+t])):i.setAttribute(t,e.elementAttributes[t]);e.group?i.addEventListener("click",this._groupClick.bind(this,e)):i.addEventListener("click",this._itemClick.bind(this,e)),i.addEventListener("mousedown",this._preventBlur.bind(this)),e.element=i}this._styleItem(e),this.listEl.appendChild(i),e.group?e.options.forEach((e=>{this._buildItem(e)})):this.displayItems.push(e)}}_showList(){var e=this.popup&&this.popup.isVisible();if(this.input.parentNode){if(this.params.autocomplete&&""===this.input.value&&!this.params.listOnEmpty)return void(this.popup&&this.popup.hide(!0));this._setListWidth(),this.popup||(this.popup=this.edit.popup(this.listEl)),this.popup.show(this.cell.getElement(),"bottom"),e||setTimeout((()=>{this.popup.hideOnBlur(this._resolveValue.bind(this,!0))}),10)}}_styleItem(e){e&&e.element&&(e.selected?e.element.classList.add("active"):e.element.classList.remove("active"))}_itemClick(e,t){t.stopPropagation(),this._chooseItem(e)}_groupClick(e,t){t.stopPropagation()}_cancel(){this.popup.hide(!0),this.actions.cancel()}_clearChoices(){this.typing=!0,this.currentItems.forEach((e=>{e.selected=!1,this._styleItem(e)})),this.currentItems=[],this.focusedItem=null}_chooseItem(e,t){var i;this.typing=!1,this.params.multiselect?((i=this.currentItems.indexOf(e))>-1?(this.currentItems.splice(i,1),e.selected=!1):(this.currentItems.push(e),e.selected=!0),this.input.value=this.currentItems.map((e=>e.label)).join(","),this._styleItem(e)):(this.currentItems=[e],e.selected=!0,this.input.value=e.label,this._styleItem(e),t||this._resolveValue()),this._focusItem(e)}_resolveValue(e){var t,i;if(this.popup&&this.popup.hide(!0),this.params.multiselect)t=this.currentItems.map((e=>e.value));else if(e&&this.params.autocomplete&&this.typing){if(!(this.params.freetext||this.params.allowEmpty&&""===this.input.value))return void this.actions.cancel();t=this.input.value}else t=this.currentItems[0]?this.currentItems[0].value:null==(i=Array.isArray(this.initialValues)?this.initialValues[0]:this.initialValues)||""===i?i:this.params.emptyValue;""===t&&(t=this.params.emptyValue),this.actions.success(t),this.isFilter&&(this.initialValues=t&&!Array.isArray(t)?[t]:t,this.currentItems=[])}}var k={input:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input");if(r.setAttribute("type",o.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function a(e){null==n&&""!==r.value||r.value!==n?i(r.value)&&(n=r.value):s()}return r.value=void 0!==n?n:"",t((function(){"cell"===e.getType()&&(r.focus({preventScroll:!0}),r.style.height="100%",o.selectContents&&r.select())})),r.addEventListener("change",a),r.addEventListener("blur",a),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:a();break;case 27:s();break;case 35:case 36:e.stopPropagation()}})),o.mask&&T(r,o),r},textarea:function(e,t,i,s,o){var n=e.getValue(),r=o.verticalNavigation||"hybrid",a=String(null!=n?n:""),l=document.createElement("textarea"),h=0;if(l.style.display="block",l.style.padding="2px",l.style.height="100%",l.style.width="100%",l.style.boxSizing="border-box",l.style.whiteSpace="pre-wrap",l.style.resize="none",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),l.setAttribute(e,l.getAttribute(e)+o.elementAttributes["+"+e])):l.setAttribute(e,o.elementAttributes[e]);function d(t){null==n&&""!==l.value||l.value!==n?(i(l.value)&&(n=l.value),setTimeout((function(){e.getRow().normalizeHeight()}),300)):s()}return l.value=a,t((function(){"cell"===e.getType()&&(l.focus({preventScroll:!0}),l.style.height="100%",l.scrollHeight,l.style.height=l.scrollHeight+"px",e.getRow().normalizeHeight(),o.selectContents&&l.select())})),l.addEventListener("change",d),l.addEventListener("blur",d),l.addEventListener("keyup",(function(){l.style.height="";var t=l.scrollHeight;l.style.height=t+"px",t!=h&&(h=t,e.getRow().normalizeHeight())})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:e.shiftKey&&o.shiftEnterSubmit&&d();break;case 27:s();break;case 38:("editor"==r||"hybrid"==r&&l.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==r||"hybrid"==r&&l.selectionStart!==l.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),o.mask&&T(l,o),l},number:function(e,t,i,s,o){var n=e.getValue(),r=o.verticalNavigation||"editor",a=document.createElement("input");if(a.setAttribute("type","number"),void 0!==o.max&&a.setAttribute("max",o.max),void 0!==o.min&&a.setAttribute("min",o.min),void 0!==o.step&&a.setAttribute("step",o.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),a.setAttribute(e,a.getAttribute(e)+o.elementAttributes["+"+e])):a.setAttribute(e,o.elementAttributes[e]);a.value=n;var l=function(e){h()};function h(){var e=a.value;isNaN(e)||""===e||(e=Number(e)),e!==n?i(e)&&(n=e):s()}return t((function(){"cell"===e.getType()&&(a.removeEventListener("blur",l),a.focus({preventScroll:!0}),a.style.height="100%",a.addEventListener("blur",l),o.selectContents&&a.select())})),a.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:h();break;case 27:s();break;case 38:case 40:"editor"==r&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),o.mask&&T(a,o),a},range:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),void 0!==o.max&&r.setAttribute("max",o.max),void 0!==o.min&&r.setAttribute("min",o.min),void 0!==o.step&&r.setAttribute("step",o.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function a(){var e=r.value;isNaN(e)||""===e||(e=Number(e)),e!=n?i(e)&&(n=e):s()}return r.value=n,t((function(){"cell"===e.getType()&&(r.focus({preventScroll:!0}),r.style.height="100%")})),r.addEventListener("blur",(function(e){a()})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:a();break;case 27:s()}})),r},date:function(e,t,i,s,o){var n=o.format,r=o.verticalNavigation||"editor",a=n?window.DateTime||luxon.DateTime:null,l=e.getValue(),h=document.createElement("input");function d(e){return(a.isDateTime(e)?e:"iso"===n?a.fromISO(String(e)):a.fromFormat(String(e),n)).toFormat("yyyy-MM-dd")}if(h.type="date",h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",o.max&&h.setAttribute("max",n?d(o.max):o.max),o.min&&h.setAttribute("min",n?d(o.min):o.min),o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),h.setAttribute(e,h.getAttribute(e)+o.elementAttributes["+"+e])):h.setAttribute(e,o.elementAttributes[e]);function c(){var e,t=h.value;if(null==l&&""!==t||t!==l){if(t&&n)switch(e=a.fromFormat(String(t),"yyyy-MM-dd"),n){case!0:t=e;break;case"iso":t=e.toISO();break;default:t=e.toFormat(n)}i(t)&&(l=h.value)}else s()}return l=void 0!==l?l:"",n&&(a?l=d(l):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),h.value=l,t((function(){"cell"===e.getType()&&(h.focus({preventScroll:!0}),h.style.height="100%",o.selectContents&&h.select())})),h.addEventListener("blur",(function(e){(e.relatedTarget||e.rangeParent||e.explicitOriginalTarget!==h)&&c()})),h.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:c();break;case 27:s();break;case 35:case 36:e.stopPropagation();break;case 38:case 40:"editor"==r&&(e.stopImmediatePropagation(),e.stopPropagation())}})),h},time:function(e,t,i,s,o){var n,r=o.format,a=o.verticalNavigation||"editor",l=r?window.DateTime||luxon.DateTime:null,h=e.getValue(),d=document.createElement("input");if(d.type="time",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),d.setAttribute(e,d.getAttribute(e)+o.elementAttributes["+"+e])):d.setAttribute(e,o.elementAttributes[e]);function c(){var e,t=d.value;if(null==h&&""!==t||t!==h){if(t&&r)switch(e=l.fromFormat(String(t),"hh:mm"),r){case!0:t=e;break;case"iso":t=e.toISO();break;default:t=e.toFormat(r)}i(t)&&(h=d.value)}else s()}return h=void 0!==h?h:"",r&&(l?(n=l.isDateTime(h)?h:"iso"===r?l.fromISO(String(h)):l.fromFormat(String(h),r),h=n.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),console.log("val",h),d.value=h,t((function(){"cell"==e.getType()&&(d.focus({preventScroll:!0}),d.style.height="100%",o.selectContents&&d.select())})),d.addEventListener("blur",(function(e){(e.relatedTarget||e.rangeParent||e.explicitOriginalTarget!==d)&&c()})),d.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:c();break;case 27:s();break;case 35:case 36:e.stopPropagation();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}})),d},datetime:function(e,t,i,s,o){var n,r=o.format,a=o.verticalNavigation||"editor",l=r?window.DateTime||luxon.DateTime:null,h=e.getValue(),d=document.createElement("input");if(d.type="datetime-local",d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),d.setAttribute(e,d.getAttribute(e)+o.elementAttributes["+"+e])):d.setAttribute(e,o.elementAttributes[e]);function c(){var e,t=d.value;if(null==h&&""!==t||t!==h){if(t&&r)switch(e=l.fromISO(String(t)),r){case!0:t=e;break;case"iso":t=e.toISO();break;default:t=e.toFormat(r)}i(t)&&(h=d.value)}else s()}return h=void 0!==h?h:"",r&&(l?(n=l.isDateTime(h)?h:"iso"===r?l.fromISO(String(h)):l.fromFormat(String(h),r),h=n.toFormat("yyyy-MM-dd")+"T"+n.toFormat("HH:mm")):console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js")),d.value=h,t((function(){"cell"===e.getType()&&(d.focus({preventScroll:!0}),d.style.height="100%",o.selectContents&&d.select())})),d.addEventListener("blur",(function(e){(e.relatedTarget||e.rangeParent||e.explicitOriginalTarget!==d)&&c()})),d.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:c();break;case 27:s();break;case 35:case 36:e.stopPropagation();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}})),d},select:function(e,t,i,s,o){return this.deprecationMsg("The select editor has been deprecated, please use the new list editor"),new M(this,e,t,i,s,o).input},list:function(e,t,i,s,o){return new M(this,e,t,i,s,o).input},autocomplete:function(e,t,i,s,o){return this.deprecationMsg("The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam"),o.autocomplete=!0,new M(this,e,t,i,s,o).input},star:function(e,t,i,s,o){var n=this,r=e.getElement(),a=e.getValue(),l=r.getElementsByTagName("svg").length||5,h=r.getElementsByTagName("svg")[0]?r.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],c=document.createElement("div"),u=document.createElementNS("http://www.w3.org/2000/svg","svg");function m(e){d.forEach((function(t,i){i'):("ie"==n.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')}))}function p(e){var t=document.createElement("span"),s=u.cloneNode(!0);d.push(s),t.addEventListener("mouseenter",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),m(e)})),t.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),t.addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),r.blur()})),t.appendChild(s),c.appendChild(t)}function g(e){a=e,m(e)}if(r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",c.style.verticalAlign="middle",c.style.display="inline-block",c.style.padding="4px",u.setAttribute("width",h),u.setAttribute("height",h),u.setAttribute("viewBox","0 0 512 512"),u.setAttribute("xml:space","preserve"),u.style.padding="0 1px",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+o.elementAttributes["+"+e])):c.setAttribute(e,o.elementAttributes[e]);for(var b=1;b<=l;b++)p(b);return m(a=Math.min(parseInt(a),l)),c.addEventListener("mousemove",(function(e){m(0)})),c.addEventListener("click",(function(e){i(0)})),r.addEventListener("blur",(function(e){s()})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:g(a+1);break;case 37:g(a-1);break;case 13:i(a);break;case 27:s()}})),c},progress:function(e,t,i,s,o){var n,r,a=e.getElement(),l=void 0===o.max?a.getElementsByTagName("div")[0]&&a.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,h=void 0===o.min?a.getElementsByTagName("div")[0]&&a.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,d=(l-h)/100,c=e.getValue()||0,u=document.createElement("div"),m=document.createElement("div");function p(){var e=window.getComputedStyle(a,null),t=d*Math.round(m.offsetWidth/((a.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+h;i(t),a.setAttribute("aria-valuenow",t),a.setAttribute("aria-label",c)}if(u.style.position="absolute",u.style.right="0",u.style.top="0",u.style.bottom="0",u.style.width="5px",u.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),m.setAttribute(e,m.getAttribute(e)+o.elementAttributes["+"+e])):m.setAttribute(e,o.elementAttributes[e]);return a.style.padding="4px 4px",c=Math.min(parseFloat(c),l),c=Math.max(parseFloat(c),h),c=Math.round((c-h)/d),m.style.width=c+"%",a.setAttribute("aria-valuemin",h),a.setAttribute("aria-valuemax",l),m.appendChild(u),u.addEventListener("mousedown",(function(e){n=e.screenX,r=m.offsetWidth})),u.addEventListener("mouseover",(function(){u.style.cursor="ew-resize"})),a.addEventListener("mousemove",(function(e){n&&(m.style.width=r+e.screenX-n+"px")})),a.addEventListener("mouseup",(function(e){n&&(e.stopPropagation(),e.stopImmediatePropagation(),n=!1,r=!1,p())})),a.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+a.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-a.clientWidth/100+"px";break;case 9:case 13:p();break;case 27:s()}})),a.addEventListener("blur",(function(){s()})),m},tickCross:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input"),a=o.tristate,l=void 0===o.indeterminateValue?null:o.indeterminateValue,h=!1,d=Object.keys(o).includes("trueValue"),c=Object.keys(o).includes("falseValue");if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function u(e){var t=r.checked;return d&&t?t=o.trueValue:c&&!t&&(t=o.falseValue),a?e?h?l:t:r.checked&&!h?(r.checked=!1,r.indeterminate=!0,h=!0,l):(h=!1,t):t}return r.value=n,!a||void 0!==n&&n!==l&&""!==n||(h=!0,r.indeterminate=!0),"firefox"!=this.table.browser&&"safari"!=this.table.browser&&t((function(){"cell"===e.getType()&&r.focus({preventScroll:!0})})),r.checked=d?n===o.trueValue:!0===n||"true"===n||"True"===n||1===n,r.addEventListener("change",(function(e){i(u())})),r.addEventListener("blur",(function(e){i(u(!0))})),r.addEventListener("keydown",(function(e){13==e.keyCode&&i(u()),27==e.keyCode&&s()})),r}};class L extends s{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[],this.editors=L.editors,this.registerColumnOption("editable"),this.registerColumnOption("editor"),this.registerColumnOption("editorParams"),this.registerColumnOption("cellEditing"),this.registerColumnOption("cellEdited"),this.registerColumnOption("cellEditCancelled"),this.registerTableOption("editTriggerEvent","focus"),this.registerTableFunction("getEditedCells",this.getEditedCells.bind(this)),this.registerTableFunction("clearCellEdited",this.clearCellEdited.bind(this)),this.registerTableFunction("navigatePrev",this.navigatePrev.bind(this)),this.registerTableFunction("navigateNext",this.navigateNext.bind(this)),this.registerTableFunction("navigateLeft",this.navigateLeft.bind(this)),this.registerTableFunction("navigateRight",this.navigateRight.bind(this)),this.registerTableFunction("navigateUp",this.navigateUp.bind(this)),this.registerTableFunction("navigateDown",this.navigateDown.bind(this)),this.registerComponentFunction("cell","isEdited",this.cellIsEdited.bind(this)),this.registerComponentFunction("cell","clearEdited",this.clearEdited.bind(this)),this.registerComponentFunction("cell","edit",this.editCell.bind(this)),this.registerComponentFunction("cell","cancelEdit",this.cellCancelEdit.bind(this)),this.registerComponentFunction("cell","navigatePrev",this.navigatePrev.bind(this)),this.registerComponentFunction("cell","navigateNext",this.navigateNext.bind(this)),this.registerComponentFunction("cell","navigateLeft",this.navigateLeft.bind(this)),this.registerComponentFunction("cell","navigateRight",this.navigateRight.bind(this)),this.registerComponentFunction("cell","navigateUp",this.navigateUp.bind(this)),this.registerComponentFunction("cell","navigateDown",this.navigateDown.bind(this))}initialize(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("cell-value-changed",this.updateCellClass.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("row-layout",this.rowEditableCheck.bind(this)),this.subscribe("data-refreshing",this.cancelEdit.bind(this)),this.subscribe("clipboard-paste",this.pasteBlocker.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this,void 0)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this,void 0)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this,void 0))}pasteBlocker(e){if(this.currentCell)return!0}keybindingNavigateNext(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(t,e)||i&&(t.getElement().firstChild.blur(),this.invalidEdit||(i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(t.row.getComponent())):this.table.addRow(Object.assign({},i))).then((()=>{setTimeout((()=>{t.getComponent().navigateNext()}))}))))}cellIsEdited(e){return!!e.modules.edit&&e.modules.edit.edited}cellCancelEdit(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}updateCellClass(e){this.allowEdit(e)?e.getElement().classList.add("tabulator-editable"):e.getElement().classList.remove("tabulator-editable")}clearCellEdited(e){e||(e=this.table.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.table.modules.edit.clearEdited(e._getSelf())}))}navigatePrev(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateLeft())return!0;if((s=this.table.rowManager.prevDisplayRow(e.row,!0))&&(i=this.findPrevEditableCell(s,s.cells.length)))return i.getComponent().edit(),!0}return!1}navigateNext(e=this.currentCell,t){var i,s;if(e){if(t&&t.preventDefault(),i=this.navigateRight())return!0;if((s=this.table.rowManager.nextDisplayRow(e.row,!0))&&(i=this.findNextEditableCell(s,-1)))return i.getComponent().edit(),!0}return!1}navigateLeft(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findPrevEditableCell(e.row,i)))&&(s.getComponent().edit(),!0)}navigateRight(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.findNextEditableCell(e.row,i)))&&(s.getComponent().edit(),!0)}navigateUp(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.prevDisplayRow(e.row,!0)))&&(s.cells[i].getComponent().edit(),!0)}navigateDown(e=this.currentCell,t){var i,s;return!!(e&&(t&&t.preventDefault(),i=e.getIndex(),s=this.table.rowManager.nextDisplayRow(e.row,!0)))&&(s.cells[i].getComponent().edit(),!0)}findNextEditableCell(e,i){var s=!1;if(i0)for(var o=i-1;o>=0;o--){let i=e.cells[o];if(i.column.modules.edit&&t.elVisible(i.getElement())){if(this.allowEdit(i)){s=i;break}}}return s}initializeColumnCheck(e){void 0!==e.definition.editor&&this.initializeColumn(e)}columnDeleteCheck(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}rowDeleteCheck(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}rowEditableCheck(e){e.getCells().forEach((e=>{e.column.modules.edit&&"function"==typeof e.column.modules.edit.check&&this.updateCellClass(e)}))}initializeColumn(e){var t={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(typeof e.definition.editor){case"string":this.editors[e.definition.editor]?t.editor=this.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":t.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?this.editors[e.definition.formatter]?t.editor=this.editors[e.definition.formatter]:t.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}t.editor&&(e.modules.edit=t)}getCurrentCell(){return!!this.currentCell&&this.currentCell.getComponent()}clearEditor(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),this.dispatch("edit-editor-clear",i,e),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-editing"),i.table.element.classList.remove("tabulator-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatch("edit-cancelled",e),this.dispatchExternal("cellEditCancelled",t)}}bindEditor(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);this.updateCellClass(e),i.setAttribute("tabindex",0),i.addEventListener("mousedown",(function(e){2===e.button?e.preventDefault():t.mouseClick=!0})),"dblclick"===this.options("editTriggerEvent")&&i.addEventListener("dblclick",(function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))})),"focus"!==this.options("editTriggerEvent")&&"click"!==this.options("editTriggerEvent")||i.addEventListener("click",(function(s){i.classList.contains("tabulator-editing")||(i.focus({preventScroll:!0}),t.edit(e,s,!1))})),"focus"===this.options("editTriggerEvent")&&i.addEventListener("focus",(function(i){t.recursionBlock||t.edit(e,i,!1)}))}}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,s=e.row.getElement();s.offsetTopi&&(this.table.rowManager.element.scrollTop+=s.offsetTop+s.offsetHeight-i);var o=this.table.rowManager.element.scrollLeft,n=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,r=e.getElement();this.table.modExists("frozenColumns")&&(o+=parseInt(this.table.modules.frozenColumns.leftMargin||0),n-=parseInt(this.table.modules.frozenColumns.rightMargin||0)),"virtual"===this.table.options.renderHorizontal&&(o-=parseInt(this.table.columnManager.renderer.vDomPadLeft),n-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),r.offsetLeftn&&(this.table.rowManager.element.scrollLeft+=r.offsetLeft+r.offsetWidth-n)}}allowEdit(e){var t=!!e.column.modules.edit;if(e.column.modules.edit)switch(typeof e.column.modules.edit.check){case"function":e.row.initialized&&(t=e.column.modules.edit.check(e.getComponent()));break;case"string":t=!!e.row.data[e.column.modules.edit.check];break;case"boolean":t=e.column.modules.edit.check}return t}edit(e,t,i){var s,o,n,r=this,a=function(){},l=e.getElement(),h=!1;if(!this.currentCell){if(e.column.modules.edit.blocked)return this.mouseClick=!1,this.blur(l),!1;if(t&&t.stopPropagation(),this.allowEdit(e)||i){if(r.cancelEdit(),r.currentCell=e,this.focusScrollAdjust(e),o=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.definition.cellClick&&e.column.definition.cellClick.call(this.table,t,o)),e.column.definition.cellEditing&&e.column.definition.cellEditing.call(this.table,o),this.dispatch("cell-editing",e),this.dispatchExternal("cellEditing",o),n="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(o):e.column.modules.edit.params,s=e.column.modules.edit.editor.call(r,o,(function(e){a=e}),(function(t){if(r.currentCell===e&&!h){var i=r.chain("edit-success",[e,t],!0,!0);return!0===i||"highlight"===r.table.options.validationMode?(h=!0,r.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==r.editedCells.indexOf(e)&&r.editedCells.push(e),e.setValue(t,!0),!0===i):(h=!0,r.invalidEdit=!0,r.focusCellNoEvent(e,!0),a(),setTimeout((()=>{h=!1}),10),!1)}}),(function(){r.currentCell!==e||h||r.cancelEdit()}),n),!this.currentCell||!1===s)return this.blur(l),!1;if(!(s instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",s),this.blur(l),!1;for(l.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-editing"),e.table.element.classList.add("tabulator-editing");l.firstChild;)l.removeChild(l.firstChild);l.appendChild(s),a();for(var d=l.children,c=0;c{e.push(t.getComponent())})),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,this.dispatch("edit-edited-clear",e)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)}}L.moduleName="edit",L.editors=k;class S{constructor(e,t,i,s){this.type=e,this.columns=t,this.component=i||!1,this.indent=s||0}}class D{constructor(e,t,i,s,o){this.value=e,this.component=t||!1,this.width=i,this.height=s,this.depth=o}}class P extends s{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp="",this.registerTableOption("htmlOutputConfig",!1),this.registerColumnOption("htmlOutput"),this.registerColumnOption("titleHtmlOutput")}initialize(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}generateExportList(e,t,i,s){var o,n;if(this.cloneTableStyle=t,this.config=e||{},this.colVisProp=s,"range"===i){var r=this.table.modules.selectRange.selectedColumns();o=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders(r)):[],n=this.bodyToExportRows(this.rowLookup(i),this.table.modules.selectRange.selectedColumns(!0))}else o=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],n=this.bodyToExportRows(this.rowLookup(i));return o.concat(n)}generateTable(e,t,i,s){var o=this.generateExportList(e,t,i,s);return this.generateTableElement(o)}rowLookup(e){var t=[];if("function"==typeof e)e.call(this.table).forEach((e=>{(e=this.table.rowManager.findRow(e))&&t.push(e)}));else switch(e){case!0:case"visible":t=this.table.rowManager.getVisibleRows(!1,!0);break;case"all":t=this.table.rowManager.rows;break;case"selected":t=this.table.modules.selectRow.selectedRows;break;case"range":t=this.table.modules.selectRange.selectedRows();break;default:t=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],t)}generateColumnGroupHeaders(e){var t=[];return e||(e=!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex),e.forEach((e=>{var i=this.processColumnGroup(e);i&&t.push(i)})),t}processColumnGroup(e){var t=e.columns,i=0,s={title:e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,column:e,depth:1};if(t.length){if(s.subGroups=[],s.width=0,t.forEach((e=>{var t=this.processColumnGroup(e);t&&(s.width+=t.width,s.subGroups.push(t),t.depth>i&&(i=t.depth))})),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s}columnVisCheck(e){var t=e.definition[this.colVisProp];return"function"==typeof t&&(t=t.call(this.table,e.getComponent())),!1!==t&&(e.visible||!e.visible&&t)}headersToExportRows(e){var t=[],i=0,s=[];function o(e,s){var n=i-s;if(void 0===t[s]&&(t[s]=[]),e.height=e.subGroups?1:n-e.depth+1,t[s].push(e),e.height>1)for(let i=1;i1)for(let i=1;ii&&(i=e.depth)})),e.forEach((function(e){o(e,0)})),t.forEach((e=>{var t=[];e.forEach((e=>{if(e){let i=void 0===e.title?"":e.title;t.push(new D(i,e.column.getComponent(),e.width,e.height,e.depth))}else t.push(null)})),s.push(new S("header",t))})),s}bodyToExportRows(e,t=[]){var i=[];return 0===t.length&&this.table.columnManager.columnsByIndex.forEach((e=>{this.columnVisCheck(e)&&t.push(e.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),(e=e.filter((e=>{switch(e.type){case"group":return!1!==this.config.rowGroups;case"calc":return!1!==this.config.columnCalcs;case"row":return!(this.table.options.dataTree&&!1===this.config.dataTree&&e.modules.dataTree.parent)}return!0}))).forEach(((e,s)=>{var o=e.getData(this.colVisProp),n=[],r=0;switch(e.type){case"group":r=e.level,n.push(new D(e.key,e.getComponent(),t.length,1));break;case"calc":case"row":t.forEach((e=>{n.push(new D(e._column.getFieldValue(o),e,1,1))})),this.table.options.dataTree&&!1!==this.config.dataTree&&(r=e.modules.dataTree.index)}i.push(new S(e.type,n,e.getComponent(),r))})),i}generateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),s=document.createElement("tbody"),o=this.lookupTableStyles(),n=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==n?n:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(((e,t)=>{let n;switch(e.type){case"header":i.appendChild(this.generateHeaderElement(e,r,o));break;case"group":s.appendChild(this.generateGroupElement(e,r,o));break;case"calc":s.appendChild(this.generateCalcElement(e,r,o));break;case"row":n=this.generateRowElement(e,r,o),this.mapElementStyles(t%2&&o.evenRow?o.evenRow:o.oddRow,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s.appendChild(n)}})),i.innerHTML&&t.appendChild(i),t.appendChild(s),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}generateHeaderElement(e,t,i){var s=document.createElement("tr");return e.columns.forEach((e=>{if(e){var t=document.createElement("th"),i=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,this.cloneTableStyle&&(t.style.boxSizing="border-box"),i.forEach((function(e){t.classList.add(e)})),this.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?this.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&this.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),s.appendChild(t)}})),s}generateGroupElement(e,t,i){var s=document.createElement("tr"),o=document.createElement("td"),n=e.columns[0];return s.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?n.value=t.groupHeader[e.indent](n.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1!==t.groupHeader&&(n.value=e.component._group.generator(n.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)),o.colSpan=n.width,o.innerHTML=n.value,s.classList.add("tabulator-print-table-group"),s.classList.add("tabulator-group-level-"+e.indent),n.component.isVisible()&&s.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,o,["padding-top","padding-left","padding-right","padding-bottom"]),s.appendChild(o),s}generateCalcElement(e,t,i){var s=this.generateRowElement(e,t,i);return s.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s}generateRowElement(e,t,i){var s=document.createElement("tr");if(s.classList.add("tabulator-print-table-row"),e.columns.forEach(((o,n)=>{if(o){var r,a=document.createElement("td"),l=o.component._column,h=this.table,d=h.columnManager.findColumnIndex(l),c=o.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return a},getType:function(){return"cell"},getColumn:function(){return l.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getTable:function(){return h},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach((function(e){a.classList.add(e)})),this.table.modExists("format")&&!1!==this.config.formatCells)c=this.table.modules.format.formatExportValue(u,this.colVisProp);else switch(typeof c){case"object":c=null!==c?JSON.stringify(c):"";break;case"undefined":c=""}c instanceof Node?a.appendChild(c):a.innerHTML=c,(r=i.styleCells&&i.styleCells[d]?i.styleCells[d]:i.firstCell)&&(this.mapElementStyles(r,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","text-align"]),l.definition.align&&(a.style.textAlign=l.definition.align)),this.table.options.dataTree&&!1!==this.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==n)&&(e.component._row.modules.dataTree.controlEl&&a.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),e.component._row.modules.dataTree.branchEl&&a.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),s.appendChild(a),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback()}})),t.rowFormatter&&"row"===e.type&&!1!==this.config.formatCells){Object.assign(e.component).getElement=function(){return s},t.rowFormatter(e.component)}return s}generateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.generateTableElement(e)),t.innerHTML}getHtml(e,t,i,s){var o=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,s||"htmlOutput");return this.generateHTMLTable(o)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var s={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var o=window.getComputedStyle(e);i.forEach((function(e){t.style[s[e]]||(t.style[s[e]]=o.getPropertyValue(e))}))}}}}P.moduleName="export";var z={"=":function(e,t,i,s){return t==e},"<":function(e,t,i,s){return t":function(e,t,i,s){return t>e},">=":function(e,t,i,s){return t>=e},"!=":function(e,t,i,s){return t!=e},regex:function(e,t,i,s){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,i,s){var o=e.toLowerCase().split(void 0===s.separator?" ":s.separator),n=String(null==t?"":t).toLowerCase(),r=[];return o.forEach((e=>{n.includes(e)&&r.push(!0)})),s.matchAll?r.length===o.length:!!r.length},starts:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,i,s){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}};class H extends s{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1,this.tableInitialized=!1,this.registerTableOption("filterMode","local"),this.registerTableOption("initialFilter",!1),this.registerTableOption("initialHeaderFilter",!1),this.registerTableOption("headerFilterLiveFilterDelay",300),this.registerTableOption("placeholderHeaderFilter",!1),this.registerColumnOption("headerFilter"),this.registerColumnOption("headerFilterPlaceholder"),this.registerColumnOption("headerFilterParams"),this.registerColumnOption("headerFilterEmptyCheck"),this.registerColumnOption("headerFilterFunc"),this.registerColumnOption("headerFilterFuncParams"),this.registerColumnOption("headerFilterLiveFilter"),this.registerTableFunction("searchRows",this.searchRows.bind(this)),this.registerTableFunction("searchData",this.searchData.bind(this)),this.registerTableFunction("setFilter",this.userSetFilter.bind(this)),this.registerTableFunction("refreshFilter",this.userRefreshFilter.bind(this)),this.registerTableFunction("addFilter",this.userAddFilter.bind(this)),this.registerTableFunction("getFilters",this.getFilters.bind(this)),this.registerTableFunction("setHeaderFilterFocus",this.userSetHeaderFilterFocus.bind(this)),this.registerTableFunction("getHeaderFilterValue",this.userGetHeaderFilterValue.bind(this)),this.registerTableFunction("setHeaderFilterValue",this.userSetHeaderFilterValue.bind(this)),this.registerTableFunction("getHeaderFilters",this.getHeaderFilters.bind(this)),this.registerTableFunction("removeFilter",this.userRemoveFilter.bind(this)),this.registerTableFunction("clearFilter",this.userClearFilter.bind(this)),this.registerTableFunction("clearHeaderFilter",this.userClearHeaderFilter.bind(this)),this.registerComponentFunction("column","headerFilterFocus",this.setHeaderFilterFocus.bind(this)),this.registerComponentFunction("column","reloadHeaderFilter",this.reloadHeaderFilter.bind(this)),this.registerComponentFunction("column","getHeaderFilterValue",this.getHeaderFilterValue.bind(this)),this.registerComponentFunction("column","setHeaderFilterValue",this.setHeaderFilterValue.bind(this))}initialize(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.subscribe("placeholder",this.generatePlaceholder.bind(this)),"remote"===this.table.options.filterMode&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}tableBuilt(){this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach((e=>{var t=this.table.columnManager.findColumn(e.field);if(!t)return console.warn("Column Filter Error - No matching column found:",e.field),!1;this.setHeaderFilterValue(t,e.value)})),this.tableInitialized=!0}remoteFilterParams(e,t,i,s){return s.filter=this.getFilters(!0,!0),s}generatePlaceholder(e){if(this.table.options.placeholderHeaderFilter&&Object.keys(this.headerFilters).length)return this.table.options.placeholderHeaderFilter}userSetFilter(e,t,i,s){this.setFilter(e,t,i,s),this.refreshFilter()}userRefreshFilter(){this.refreshFilter()}userAddFilter(e,t,i,s){this.addFilter(e,t,i,s),this.refreshFilter()}userSetHeaderFilterFocus(e){var t=this.table.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.setHeaderFilterFocus(t)}userGetHeaderFilterValue(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}userSetHeaderFilterValue(e,t){var i=this.table.columnManager.findColumn(e);if(!i)return console.warn("Column Filter Error - No matching column found:",e),!1;this.setHeaderFilterValue(i,t)}userRemoveFilter(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}userClearFilter(e){this.clearFilter(e),this.refreshFilter()}userClearHeaderFilter(){this.clearHeaderFilter(),this.refreshFilter()}searchRows(e,t,i){return this.search("rows",e,t,i)}searchData(e,t,i){return this.search("data",e,t,i)}initializeColumnHeaderFilter(e){e.definition.headerFilter&&this.initializeColumn(e)}initializeColumn(e,t){var i=this,s=e.getField();e.modules.filter={success:function(t){var o,n="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",r="",a="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete i.headerFilters[s];else{switch(e.modules.filter.value=t,typeof e.definition.headerFilterFunc){case"string":H.filters[e.definition.headerFilterFunc]?(r=e.definition.headerFilterFunc,o=function(i){var s=e.definition.headerFilterFuncParams||{},o=e.getFieldValue(i);return s="function"==typeof s?s(t,o,i):s,H.filters[e.definition.headerFilterFunc](t,o,i,s)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=o=function(i){var s=e.definition.headerFilterFuncParams||{},o=e.getFieldValue(i);return s="function"==typeof s?s(t,o,i):s,e.definition.headerFilterFunc(t,o,i,s)}}if(!o)if("partial"===n)o=function(i){var s=e.getFieldValue(i);return null!=s&&String(s).toLowerCase().indexOf(String(t).toLowerCase())>-1},r="like";else o=function(i){return e.getFieldValue(i)==t},r="=";i.headerFilters[s]={value:t,func:o,type:r}}e.modules.filter.value=t,a=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==a&&(i.prevHeaderFilterChangeCheck=a,i.trackChanges(),i.refreshFilter())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var s,o,n,r,a,l,h,d,c=this,u=e.modules.filter.success,m=e.getField();if(e.modules.filter.value=t,e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&0!==e},(s=document.createElement("div")).classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(o=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":o=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?o=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(o=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):o=c.table.modules.edit.editors.input}if(o){if(r={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return s},getColumn:function(){return e.getComponent()},getTable:()=>this.table,getType:()=>"header",getRow:function(){return{normalizeHeight:function(){}}}},h="function"==typeof(h=e.definition.headerFilterParams||{})?h.call(c.table,r):h,!(n=o.call(this.table.modules.edit,r,(function(e){d=e}),u,(function(){}),h)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(n instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",n);c.langBind("headerFilters|columns|"+e.definition.field,(function(t){n.setAttribute("placeholder",void 0!==t&&t?t:e.definition.headerFilterPlaceholder||c.langText("headerFilters|default"))})),n.addEventListener("click",(function(e){e.stopPropagation(),n.focus()})),n.addEventListener("focus",(e=>{var t=this.table.columnManager.contentsElement.scrollLeft;t!==this.table.rowManager.element.scrollLeft&&(this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})),a=!1,l=function(e){a&&clearTimeout(a),a=setTimeout((function(){u(n.value)}),c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=n,e.modules.filter.attrType=n.hasAttribute("type")?n.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=n.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(n.addEventListener("keyup",l),n.addEventListener("search",l),"number"==e.modules.filter.attrType&&n.addEventListener("change",(function(e){u(n.value)})),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&n.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||n.addEventListener("mousedown",(function(e){e.stopPropagation()}))),s.appendChild(n),e.contentElement.appendChild(s),i||c.headerFilterColumns.push(e),d&&d()}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")}))}showHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")}))}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}refreshFilter(){this.tableInitialized&&("remote"===this.table.options.filterMode?this.reloadData(null,!1,!1):this.refreshData(!0))}trackChanges(){this.changed=!0,this.dispatch("filter-changed")}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,s){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),this.addFilter(e)}addFilter(e,t,i,s){var o=!1;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),e.forEach((e=>{(e=this.findFilter(e))&&(this.filterList.push(e),o=!0)})),o&&this.trackChanges()}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:H.filters[e.type]?i=(t=this.table.columnManager.getColumnByField(e.field))?function(i){return H.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return H.filters[e.type](e.value,t[e.field],t,e.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e}findSubFilters(e){var t=[];return e.forEach((e=>{(e=this.findFilter(e))&&t.push(e)})),!!t.length&&t}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach((function(e){"function"==typeof e.type&&(e.type="function")})),i=i.concat(this.filtersToArray(this.filterList,t))}filtersToArray(e,t){var i=[];return e.forEach((e=>{var s;Array.isArray(e)?i.push(this.filtersToArray(e,t)):(s={field:e.field,type:e.type,value:e.value},t&&"function"==typeof s.type&&(s.type="function"),i.push(s))})),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach((e=>{var t=-1;(t="object"==typeof e.field?this.filterList.findIndex((t=>e===t)):this.filterList.findIndex((t=>e.field===t.field&&e.type===t.type&&e.value===t.value)))>-1?this.filterList.splice(t,1):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)})),this.trackChanges()}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}clearHeaderFilter(){this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((e=>{void 0!==e.modules.filter.value&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,this.reloadHeaderFilter(e)})),this.trackChanges()}search(e,t,i,s){var o=[],n=[];return Array.isArray(t)||(t=[{field:t,type:i,value:s}]),t.forEach((e=>{(e=this.findFilter(e))&&n.push(e)})),this.table.rowManager.rows.forEach((t=>{var i=!0;n.forEach((e=>{this.filterRecurse(e,t.getData())||(i=!1)})),i&&o.push("data"===e?t.getData("data"):t.getComponent())})),o}filter(e,t){var i=[],s=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters(!0)),"remote"!==this.table.options.filterMode&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach((e=>{this.filterRow(e)&&i.push(e)})):i=e.slice(0),this.subscribedExternal("dataFiltered")&&(i.forEach((e=>{s.push(e.getComponent())})),this.dispatchExternal("dataFiltered",this.getFilters(!0),s)),i}filterRow(e,t){var i=!0,s=e.getData();for(var o in this.filterList.forEach((e=>{this.filterRecurse(e,s)||(i=!1)})),this.headerFilters)this.headerFilters[o].func(s)||(i=!1);return i}filterRecurse(e,t){var i=!1;return Array.isArray(e)?e.forEach((e=>{this.filterRecurse(e,t)&&(i=!0)})):i=e.func(t),i}}H.moduleName="filter",H.filters=z;var F={plaintext:function(e,t,i){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,i){return e.getValue()},textarea:function(e,t,i){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,i){var s,o,n,r,a,l=parseFloat(e.getValue()),h="",d=t.decimal||".",c=t.thousand||",",u=t.negativeSign||"-",m=t.symbol||"",p=!!t.symbolAfter,g=void 0!==t.precision?t.precision:2;if(isNaN(l))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));if(l<0&&(l=Math.abs(l),h=u),s=!1!==g?l.toFixed(g):l,o=(s=String(s).split("."))[0],n=s.length>1?d+s[1]:"",!1!==t.thousand)for(r=/(\d+)(\d{3})/;r.test(o);)o=o.replace(r,"$1"+c+"$2");return a=o+n,!0===h?(a="("+a+")",p?a+m:m+a):p?h+a+m:h+m+a},link:function(e,i,s){var o,n=e.getValue(),r=i.urlPrefix||"",a=i.download,l=n,h=document.createElement("a");if(i.labelField&&(o=e.getData(),l=function e(t,i){var s=i[t.shift()];return t.length&&"object"==typeof s?e(t,s):s}(i.labelField.split(this.table.options.nestedFieldSeparator),o)),i.label)switch(typeof i.label){case"string":l=i.label;break;case"function":l=i.label(e)}if(l){if(i.urlField&&(o=e.getData(),n=t.retrieveNestedData(this.table.options.nestedFieldSeparator,i.urlField,o)),i.url)switch(typeof i.url){case"string":n=i.url;break;case"function":n=i.url(e)}return h.setAttribute("href",r+n),i.target&&h.setAttribute("target",i.target),i.download&&(a="function"==typeof a?a(e):!0===a?"":a,h.setAttribute("download",a)),h.innerHTML=this.emptyToSpace(this.sanitizeHTML(l)),h}return" "},image:function(e,t,i){var s=document.createElement("img"),o=e.getValue();switch(t.urlPrefix&&(o=t.urlPrefix+e.getValue()),t.urlSuffix&&(o+=t.urlSuffix),s.setAttribute("src",o),typeof t.height){case"number":s.style.height=t.height+"px";break;case"string":s.style.height=t.height}switch(typeof t.width){case"number":s.style.width=t.width+"px";break;case"string":s.style.width=t.width}return s.addEventListener("load",(function(){e.getRow().normalizeHeight()})),s},tickCross:function(e,t,i){var s=e.getValue(),o=e.getElement(),n=t.allowEmpty,r=t.allowTruthy,a=Object.keys(t).includes("trueValue"),l=void 0!==t.tickElement?t.tickElement:'',h=void 0!==t.crossElement?t.crossElement:'';return a&&s===t.trueValue||!a&&(r&&s||!0===s||"true"===s||"True"===s||1===s||"1"===s)?(o.setAttribute("aria-checked",!0),l||""):!n||"null"!==s&&""!==s&&null!=s?(o.setAttribute("aria-checked",!1),h||""):(o.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,i){var s,o=window.DateTime||luxon.DateTime,n=t.inputFormat||"yyyy-MM-dd HH:mm:ss",r=t.outputFormat||"dd/MM/yyyy HH:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue();if(void 0!==o)return(s=o.isDateTime(l)?l:"iso"===n?o.fromISO(String(l)):o.fromFormat(String(l),n)).isValid?(t.timezone&&(s=s.setZone(t.timezone)),s.toFormat(r)):!0!==a&&l?"function"==typeof a?a(l):a:l;console.error("Format Error - 'datetime' formatter is dependant on luxon.js")},datetimediff:function(e,t,i){var s,o=window.DateTime||luxon.DateTime,n=t.inputFormat||"yyyy-MM-dd HH:mm:ss",r=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",a=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:"days",h=void 0!==t.humanize&&t.humanize,d=void 0!==t.date?t.date:o.now(),c=e.getValue();if(void 0!==o)return(s=o.isDateTime(c)?c:"iso"===n?o.fromISO(String(c)):o.fromFormat(String(c),n)).isValid?h?s.diff(d,l).toHuman()+(a?" "+a:""):parseInt(s.diff(d,l)[l])+(a?" "+a:""):!0===r?c:"function"==typeof r?r(c):r;console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js")},lookup:function(e,t,i){var s=e.getValue();return void 0===t[s]?(console.warn("Missing display value for "+s),s):t[s]},star:function(e,t,i){var s=e.getValue(),o=e.getElement(),n=t&&t.stars?t.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",s=s&&!isNaN(s)?parseInt(s):0,s=Math.max(0,Math.min(s,n));for(var l=1;l<=n;l++){var h=a.cloneNode(!0);h.innerHTML=l<=s?'':'',r.appendChild(h)}return o.style.whiteSpace="nowrap",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.setAttribute("aria-label",s),r},traffic:function(e,t,i){var s,o,n=this.sanitizeHTML(e.getValue())||0,r=document.createElement("span"),a=t&&t.max?t.max:100,l=t&&t.min?t.min:0,h=t&&void 0!==t.color?t.color:["red","orange","green"],d="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(r.classList.add("tabulator-traffic-light"),o=parseFloat(n)<=a?parseFloat(n):a,o=parseFloat(o)>=l?parseFloat(o):l,s=(a-l)/100,o=Math.round((o-l)/s),typeof h){case"string":d=h;break;case"function":d=h(n);break;case"object":if(Array.isArray(h)){var c=100/h.length,u=Math.floor(o/c);u=Math.min(u,h.length-1),d=h[u=Math.max(u,0)];break}}return r.style.backgroundColor=d,r}},progress:function(e,t={},i){var s,o,n,r,a,l=this.sanitizeHTML(e.getValue())||0,h=e.getElement(),d=t.max?t.max:100,c=t.min?t.min:0,u=t.legendAlign?t.legendAlign:"center";switch(o=parseFloat(l)<=d?parseFloat(l):d,o=parseFloat(o)>=c?parseFloat(o):c,s=(d-c)/100,o=Math.round((o-c)/s),typeof t.color){case"string":n=t.color;break;case"function":n=t.color(l);break;case"object":if(Array.isArray(t.color)){let e=100/t.color.length,i=Math.floor(o/e);i=Math.min(i,t.color.length-1),i=Math.max(i,0),n=t.color[i];break}default:n="#2DC214"}switch(typeof t.legend){case"string":r=t.legend;break;case"function":r=t.legend(l);break;case"boolean":r=l;break;default:r=!1}switch(typeof t.legendColor){case"string":a=t.legendColor;break;case"function":a=t.legendColor(l);break;case"object":if(Array.isArray(t.legendColor)){let e=100/t.legendColor.length,i=Math.floor(o/e);i=Math.min(i,t.legendColor.length-1),i=Math.max(i,0),a=t.legendColor[i]}break;default:a="#000"}h.style.minWidth="30px",h.style.position="relative",h.setAttribute("aria-label",o);var p=document.createElement("div");p.style.display="inline-block",p.style.width=o+"%",p.style.backgroundColor=n,p.style.height="100%",p.setAttribute("data-max",d),p.setAttribute("data-min",c);var g=document.createElement("div");if(g.style.position="relative",g.style.width="100%",g.style.height="100%",r){var b=document.createElement("div");b.style.position="absolute",b.style.top=0,b.style.left=0,b.style.textAlign=u,b.style.width="100%",b.style.color=a,b.innerHTML=r}return i((function(){if(!(e instanceof m)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",h.appendChild(t),h=t}h.appendChild(g),g.appendChild(p),r&&g.appendChild(b)})),""},color:function(e,t,i){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,i){return''},buttonCross:function(e,t,i){return''},rownum:function(e,t,i){var s=document.createElement("span"),o=e.getRow(),n=e.getTable();return o.watchPosition((e=>{t.relativeToPage&&(e+=n.modules.page.getPageSize()*(n.modules.page.getPage()-1)),s.innerText=e})),s},handle:function(e,t,i){return e.getElement().classList.add("tabulator-row-handle"),"
    "},responsiveCollapse:function(e,t,i){var s=document.createElement("div"),o=e.getRow()._row.modules.responsiveLayout;function n(e){var t=o.element;o.open=e,t&&(o.open?(s.classList.add("open"),t.style.display=""):(s.classList.remove("open"),t.style.display="none"))}return s.classList.add("tabulator-responsive-collapse-toggle"),s.innerHTML='\n \n \n\n\n\n \n',e.getElement().classList.add("tabulator-row-handle"),s.addEventListener("click",(function(t){t.stopImmediatePropagation(),n(!o.open),e.getTable().rowManager.adjustTableSize()})),n(o.open),s},rowSelection:function(e,t,i){var s=document.createElement("input"),o=!1;if(s.type="checkbox",s.setAttribute("aria-label","Select Row"),this.table.modExists("selectRow",!0))if(s.addEventListener("click",(e=>{e.stopPropagation()})),"function"==typeof e.getRow){var n=e.getRow();n instanceof v?(s.addEventListener("change",(e=>{"click"===this.table.options.selectableRowsRangeMode&&o?o=!1:n.toggleSelect()})),"click"===this.table.options.selectableRowsRangeMode&&s.addEventListener("click",(e=>{o=!0,this.table.modules.selectRow.handleComplexRowClick(n._row,e)})),s.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,s)):s=""}else s.addEventListener("change",(e=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(t.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(s);return s}};class _ extends s{constructor(e){super(e),this.registerColumnOption("formatter"),this.registerColumnOption("formatterParams"),this.registerColumnOption("formatterPrint"),this.registerColumnOption("formatterPrintParams"),this.registerColumnOption("formatterClipboard"),this.registerColumnOption("formatterClipboardParams"),this.registerColumnOption("formatterHtmlOutput"),this.registerColumnOption("formatterHtmlOutputParams"),this.registerColumnOption("titleFormatter"),this.registerColumnOption("titleFormatterParams")}initialize(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},s=e.definition["formatter"+t];switch(typeof s){case"string":_.formatters[s]?i.formatter=_.formatters[s]:(console.warn("Formatter Error - No such formatter found: ",s),i.formatter=_.formatters.plaintext);break;case"function":i.formatter=s;break;default:i.formatter=_.formatters.plaintext}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatHeader(e,t,i){var s,o,n,r;return e.definition.titleFormatter?(s=this.getFormatter(e.definition.titleFormatter),n=t=>{e.titleFormatterRendered=t},r={getValue:function(){return t},getElement:function(){return i},getType:function(){return"header"},getColumn:function(){return e.getComponent()},getTable:()=>this.table},o="function"==typeof(o=e.definition.titleFormatterParams||{})?o():o,s.call(this,r,o,n)):t}formatValue(e){var t=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(t):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,t,i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}formatExportValue(e,t){var i,s=e.column.modules.format[t];if(s){function o(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}return i="function"==typeof s.params?s.params(e.getComponent()):s.params,s.formatter.call(this,e.getComponent(),i,o)}return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=/]/g,(function(e){return t[e]}))}return e}emptyToSpace(e){return null==e||""===e?" ":e}getFormatter(e){switch(typeof e){case"string":_.formatters[e]?e=_.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=_.formatters.plaintext);break;case"function":break;default:e=_.formatters.plaintext}return e}}_.moduleName="format",_.formatters=F;class O extends s{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.initializationMode="left",this.active=!1,this.blocked=!0,this.registerColumnOption("frozen")}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-after",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("column-add",this.reinitializeColumns.bind(this)),this.subscribe("column-deleted",this.reinitializeColumns.bind(this)),this.subscribe("column-hide",this.reinitializeColumns.bind(this)),this.subscribe("column-show",this.reinitializeColumns.bind(this)),this.subscribe("columns-loaded",this.reinitializeColumns.bind(this)),this.subscribe("table-redraw",this.layout.bind(this)),this.subscribe("layout-refreshing",this.blockLayout.bind(this)),this.subscribe("layout-refreshed",this.unblockLayout.bind(this)),this.subscribe("scrollbar-vertical",this.adjustForScrollbar.bind(this))}blockLayout(){this.blocked=!0}unblockLayout(){this.blocked=!1}layoutCell(e){this.layoutElement(e.element,e.column)}reinitializeColumns(){this.reset(),this.table.columnManager.columnsByIndex.forEach((e=>{this.initializeColumn(e)})),this.layout()}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow),this.table.modExists("groupRows")&&this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()))}layoutGroupCalcs(e){e.forEach((e=>{e.calcs.top&&this.layoutRow(e.calcs.top),e.calcs.bottom&&this.layoutRow(e.calcs.bottom),e.groupList&&e.groupList.length&&this.layoutGroupCalcs(e.groupList)}))}layoutColumnPosition(e){var t=[],i=0,s=0;this.leftColumns.forEach(((s,o)=>{if(s.modules.frozen.marginValue=i,s.modules.frozen.margin=s.modules.frozen.marginValue+"px",s.visible&&(i+=s.getWidth()),o==this.leftColumns.length-1?s.modules.frozen.edge=!0:s.modules.frozen.edge=!1,s.parent.isGroup){var n=this.getColGroupParentElement(s);t.includes(n)||(this.layoutElement(n,s),t.push(n)),n.classList.toggle("tabulator-frozen-left",s.modules.frozen.edge&&"left"===s.modules.frozen.position),n.classList.toggle("tabulator-frozen-right",s.modules.frozen.edge&&"right"===s.modules.frozen.position)}else this.layoutElement(s.getElement(),s);e&&s.cells.forEach((e=>{this.layoutElement(e.getElement(!0),s)}))})),this.rightColumns.forEach(((t,i)=>{t.modules.frozen.marginValue=s,t.modules.frozen.margin=t.modules.frozen.marginValue+"px",t.visible&&(s+=t.getWidth()),i==this.rightColumns.length-1?t.modules.frozen.edge=!0:t.modules.frozen.edge=!1,t.parent.isGroup?this.layoutElement(this.getColGroupParentElement(t),t):this.layoutElement(t.getElement(),t),e&&t.cells.forEach((e=>{this.layoutElement(e.getElement(!0),t)}))}))}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&!this.blocked&&(this.layoutColumnPosition(),this.reinitializeRows(),this.layoutCalcRows())}reinitializeRows(){var e=this.table.rowManager.getVisibleRows(!0);this.table.rowManager.getRows().filter((t=>!e.includes(t))).forEach((e=>{e.deinitialize()})),e.forEach((e=>{"row"===e.type&&this.layoutRow(e)}))}layoutRow(e){"fitDataFill"===this.table.options.layout&&this.rightColumns.length&&(this.table.rowManager.getTableElement().style.minWidth="calc(100% - "+this.rightMargin+")"),this.leftColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})),this.rightColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}))}layoutElement(e,t){var i;t.modules.frozen&&e&&(e.style.position="sticky",i=this.table.rtl?"left"===t.modules.frozen.position?"right":"left":t.modules.frozen.position,e.style[i]=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),e.classList.toggle("tabulator-frozen-left",t.modules.frozen.edge&&"left"===t.modules.frozen.position),e.classList.toggle("tabulator-frozen-right",t.modules.frozen.edge&&"right"===t.modules.frozen.position))}adjustForScrollbar(e){this.rightColumns.length&&(this.table.columnManager.getContentsElement().style.width="calc(100% - "+e+"px)")}_calcSpace(e,t){var i=0;for(let s=0;s{this.initializeRow(e)}))}initializeRow(e){var t=this.table.options.frozenRows,i=typeof t;"number"===i?e.getPosition()&&e.getPosition()+this.rows.length<=t&&this.freezeRow(e):"function"===i?t.call(this.table,e.getComponent())&&this.freezeRow(e):Array.isArray(t)&&t.includes(e.data[this.options("frozenRowsField")])&&this.freezeRow(e)}isRowFrozen(e){return this.rows.indexOf(e)>-1}isFrozen(){return!!this.rows.length}visibleRows(e,t){return this.rows.forEach((e=>{t.push(e)})),t}getRows(e){var t=e.slice(0);return this.rows.forEach((function(e){var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.rows.push(e),this.refreshData(!1,"display"),this.table.rowManager.adjustTableSize(),this.styleRows())}unfreezeRow(e){e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.refreshData(!1,"display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode&&i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach(((e,t)=>{this.table.rowManager.styleRow(e,t)}))}}A.moduleName="frozenRows";class B{constructor(e){return this._group=e,this.type="GroupComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._group.groupManager.table.componentFunctionBinder.handle("group",e._group,t)}})}getKey(){return this._group.key}getField(){return this._group.field}getElement(){return this._group.element}getRows(){return this._group.getRows(!0)}getSubGroups(){return this._group.getSubGroups(!0)}getParentGroup(){return!!this._group.parent&&this._group.parent.getComponent()}isVisible(){return this._group.visible}show(){this._group.show()}hide(){this._group.hide()}toggle(){this._group.toggleVisibility()}scrollTo(e,t){return this._group.groupManager.table.rowManager.scrollToRow(this._group,e,t)}_getSelf(){return this._group}getTable(){return this._group.groupManager.table}}class V{constructor(e,t,i,s,o,n,r){this.groupManager=e,this.parent=t,this.key=s,this.level=i,this.field=o,this.hasSubGroups=i{e.modules&&delete e.modules.group}))),this.element=!1,this.arrowElement=!1,this.elementContents=!1}createElements(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)}createValueGroups(){var e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach((t=>{this._createGroup(t,e)}))}addBindings(){this.groupManager.table.options.groupToggleElement&&("arrow"==this.groupManager.table.options.groupToggleElement?this.arrowElement:this.element).addEventListener("click",(e=>{"arrow"===this.groupManager.table.options.groupToggleElement&&(e.stopPropagation(),e.stopImmediatePropagation()),setTimeout((()=>{this.toggleVisibility()}))}))}_createGroup(e,t){var i=t+"_"+e,s=new V(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[i]);this.groups[i]=s,this.groupList.push(s)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),s=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[s]&&this.groups[s].addRow(e):(this.groups[s]||this._createGroup(i,t),this.groups[s].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var s=this.conformRowData({});e.updateData(s);var o=this.rows.indexOf(t);o>-1?i?this.rows.splice(o+1,0,e):this.rows.splice(o,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement&&(this.arrowElement.style.marginLeft=e,this.groupList.forEach((function(t){t.scrollHeader(e)})))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(i.parentNode&&i.parentNode.removeChild(i),this.groupManager.blockRedraw||(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this))):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(){var e=[];return e.push(this),this._visSet(),this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.visible?this.groupList.length?this.groupList.forEach((function(t){e=e.concat(t.getHeadersAndRows())})):("table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))),e}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach((e=>{i.push(e.getData(t||"data"))})),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach((t=>{e+=t.getRowCount()})):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,"basic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination||(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((e=>{e.getHeadersAndRows().forEach((e=>{e.detachElement()}))})):this.rows.forEach((e=>{var t=e.getElement();t.parentNode.removeChild(t)}))),this.groupManager.updateGroupRows(!0),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}show(){if(this.visible=!0,"basic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=this.generateElement();this.groupList.length?this.groupList.forEach((t=>{t.getHeadersAndRows().forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}))})):this.rows.forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i})),this.groupManager.updateGroupRows(!0)}this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}_visSet(){var e=[];"function"==typeof this.visible&&(this.rows.forEach((function(t){e.push(t.getData())})),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach((function(i){var s=i.getRowGroup(e);s&&(t=s)})):this.rows.find((function(t){return t===e}))&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getRows(e,t){var i=[];return t&&this.groupList.length?this.groupList.forEach((s=>{i=i.concat(s.getRows(e,t))})):this.rows.forEach((function(t){i.push(e?t.getComponent():t)})),i}generateGroupHeaderContents(){var e=[];for(this.getRows(!1,!0).forEach((function(t){e.push(t.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){return this.elementContents?this.element:this.generateElement()}generateElement(){this.addBindings=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",((e,t)=>{this.headerGenerator[0]=(i,s,o)=>(void 0===i?"":i)+"("+s+" "+(1===s?e:t.groups.items)+")"})),this.groupIDLookups=[],e)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs)this.table.columnManager.getRealColumns().forEach((e=>{e.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(e)||(e=[e]),e.forEach(((e,t)=>{var i,s;i="function"==typeof e?e:(s=this.table.columnManager.getColumnByField(e))?function(e){return s.getFieldValue(e)}:function(t){return t[e]},this.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!this.allowedValues&&this.allowedValues[t]})})),t&&(Array.isArray(t)||(t=[t]),t.forEach((e=>{})),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i])}else this.groupList=[],this.groups={}}rowSample(e,t){if(this.table.options.groupBy){var i=this.getGroups(!1)[0];t.push(i.getRows(!1)[0])}return t}virtualRenderFill(){var e=this.table.rowManager.tableElement,t=this.table.rowManager.getVisibleRows();if(!this.table.options.groupBy)return t;t=t.filter((e=>"group"!==e.type)),e.style.minWidth=t.length?"":this.table.columnManager.getWidth()+"px"}rowAddingIndex(e,t,i){if(this.table.options.groupBy){this.assignRowToGroup(e);var s=e.modules.group.rows;return s.length>1&&(!t||t&&-1==s.indexOf(t)?i?s[0]!==e&&(t=s[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):s[s.length-1]!==e&&(t=s[s.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}}trackChanges(){this.dispatch("group-changed")}setGroupBy(e){this.table.options.groupBy=e,this.initialized||this.initialize(),this.configureGroupSetup(),!e&&this.table.modExists("columnCalcs")&&!0===this.table.options.columnCalcs&&this.table.modules.columnCalcs.reinitializeCalcs(),this.refreshData(),this.trackChanges()}setGroupValues(e){this.table.options.groupValues=e,this.configureGroupSetup(),this.refreshData(),this.trackChanges()}setGroupStartOpen(e){this.table.options.groupStartOpen=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){this.table.options.groupHeader=e,this.configureGroupSetup(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}userGetGroups(e){return this.getGroups(!0)}userGetGroupedData(){return this.table.options.groupBy?this.getGroupedData():this.getData()}rowGetGroup(e){return!!e.modules.group&&e.modules.group.getComponent()}rowMoving(e,t,i){if(this.table.options.groupBy){!i&&t instanceof V&&(t=this.table.rowManager.prevDisplayRow(e)||t);var s=t instanceof V?t:t.modules.group,o=e instanceof V?e:e.modules.group;s===o?this.table.rowManager.moveRowInArray(s.rows,e,t,i):(o&&o.removeRow(e),s.insertRow(e,t,i))}}rowDeleting(e){this.table.options.groupBy&&e.modules.group&&e.modules.group.removeRow(e)}rowsUpdated(e){this.table.options.groupBy&&this.updateGroupRows(!0)}cellUpdated(e){this.table.options.groupBy&&this.reassignRowToGroup(e.row)}getRows(e){return this.table.options.groupBy&&this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach((e=>{e.groupList.length?t=t.concat(this.getChildGroups(e)):t.push(e)})),t}wipe(){this.table.options.groupBy&&(this.groupList.forEach((function(e){e.wipe()})),this.groupList=[],this.groups={})}pullGroupListData(e){var t=[];return e.forEach((e=>{var i={level:0,rowCount:0,headerContent:""},s=[];e.hasSubGroups?(s=this.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=s.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),t.push(i),t=t.concat(s)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,t.push(i),e.getRows().forEach((e=>{t.push(e.getData("data"))})))})),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.options("dataTree")&&(e=this.table.modules.dataTree.getTreeParentRoot(e)),this.groupList.forEach((i=>{var s=i.getRowGroup(e);s&&(t=s)})),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((e=>{this.createGroup(e,0,t)})),e.forEach((e=>{this.assignRowToExistingGroup(e,t)}))):e.forEach((e=>{this.assignRowToGroup(e,t)})),Object.values(t).forEach((e=>{e.wipe(!0)}))}createGroup(e,t,i){var s,o=t+"_"+e;i=i||[],s=new V(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[o]),this.groups[o]=s,this.groupList.push(s)}assignRowToExistingGroup(e,t){var i="0_"+this.groupIDLookups[0].func(e.getData());this.groups[i]&&this.groups[i].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s=!this.groups["0_"+i];return s&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!s}reassignRowToGroup(e){if("row"===e.type){var t=e.modules.group,i=t.getPath(),s=this.getExpectedPath(e);i.length==s.length&&i.every(((e,t)=>e===s[t]))||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach((e=>{t.push(e.func(i))})),t}updateGroupRows(e){var t=[];return this.blockRedraw||(this.groupList.forEach((e=>{t=t.concat(e.getHeadersAndRows())})),e&&this.refreshData(!0)),t}scrollHeaders(e){this.table.options.groupBy&&("virtual"===this.table.options.renderHorizontal&&(e-=this.table.columnManager.renderer.vDomPadLeft),e+="px",this.groupList.forEach((t=>{t.scrollHeader(e)})))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))}checkBasicModeGroupHeaderWidth(){var e=this.table.rowManager.tableElement,t=!0;this.table.rowManager.getDisplayRows().forEach(((i,s)=>{this.table.rowManager.styleRow(i,s),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(t=!1)})),e.style.minWidth=t?this.table.columnManager.getWidth()+"px":""}}I.moduleName="groupRows";class N extends s{constructor(e){super(e),this.history=[],this.index=-1,this.registerTableOption("history",!1)}initialize(){this.table.options.history&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.rowAdded.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}rowMoved(e,t,i){this.action("rowMove",e,{posFrom:e.getPosition(),posTo:t.getPosition(),to:t,after:i})}rowAdded(e,t,i,s){this.action("rowAdd",e,{data:t,pos:i,index:s})}rowDeleted(e){var t,i;this.table.options.groupBy?(t=(i=e.getComponent().getGroup()._getSelf().rows).indexOf(e))&&(t=i[t-1]):(t=e.table.rowManager.getRowIndex(e))&&(t=e.table.rowManager.rows[t-1]),this.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}cellUpdated(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex((function(t){return t.component===e}));t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return N.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}return console.warn(this.options("history")?"History Undo Error - No more history to undo":"History module not enabled"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return N.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}return console.warn(this.options("history")?"History Redo Error - No more history to redo":"History module not enabled"),!1}_rebindRow(e,t){this.history.forEach((function(i){if(i.component instanceof w)i.component===e&&(i.component=t);else if(i.component instanceof p&&i.component.row===e){var s=i.component.column.getField();s&&(i.component=t.getCell(s))}}))}}N.moduleName="history",N.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue),e.component.cellRendered()},rowAdd:function(e){e.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t),this.table.rowManager.checkPlaceholder()},rowMove:function(e){var t=e.data.posFrom-e.data.posTo>0;this.table.rowManager.moveRowActual(e.component,this.table.rowManager.getRowFromPosition(e.data.posFrom),t),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}},N.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue),e.component.cellRendered()},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t),this.table.rowManager.checkPlaceholder()},rowDelete:function(e){e.component.deleteActual(),this.table.rowManager.checkPlaceholder()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.getRowFromPosition(e.data.posTo),e.data.after),this.table.rowManager.regenerateRowPositions(),this.table.rowManager.reRenderInPosition()}};class W extends s{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}initialize(){this.tableElementCheck()}tableElementCheck(){this.table.originalElement&&"TABLE"===this.table.originalElement.tagName&&(this.table.originalElement.childNodes.length?this.parseTable():console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."))}parseTable(){var e=this.table.originalElement,t=this.table.options,i=e.getElementsByTagName("th"),s=e.getElementsByTagName("tbody")[0],o=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),s=s?s.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,s):this._generateBlankHeaders(i,s);for(var n=0;n{n[e.toLowerCase()]=e})),s){var a,l=s[r];l&&"object"==typeof l&&l.name&&0===l.name.indexOf("tabulator-")&&(a=l.name.replace("tabulator-",""),void 0!==n[a]&&(t[n[a]]=this._attribValue(l.value)))}}_attribValue(e){return"true"===e||"false"!==e&&e}_findCol(e){return this.table.options.columns.find((t=>t.title===e))||!1}_extractHeaders(e,t){for(var i=0;i(console.error("Import Error:",e||"Unable to import data"),Promise.reject(e))))}lookupImporter(e){var t;return e||(e=this.table.options.importFormat),(t="string"==typeof e?G.importers[e]:e)||console.error("Import Error - Importer not found:",e),t}importFromFile(e,t){var i=this.lookupImporter(e);if(i)return this.pickFile(t).then(this.importData.bind(this,i)).then(this.structureData.bind(this)).then(this.setData.bind(this)).catch((e=>(console.error("Import Error:",e||"Unable to import file"),Promise.reject(e))))}pickFile(e){return new Promise(((t,i)=>{var s=document.createElement("input");s.type="file",s.accept=e,s.addEventListener("change",(e=>{var o=s.files[0],n=new FileReader;switch(this.table.options.importReader){case"buffer":n.readAsArrayBuffer(o);break;case"binary":n.readAsBinaryString(o);break;case"url":n.readAsDataURL(o);break;default:n.readAsText(o)}n.onload=e=>{t(n.result)},n.onerror=e=>{console.warn("File Load Error - Unable to read file"),i()}})),s.click()}))}importData(e,t){var i=e.call(this.table,t);return i instanceof Promise?i:i?Promise.resolve(i):Promise.reject()}structureData(e){return Array.isArray(e)&&e.length&&Array.isArray(e[0])?this.table.options.autoColumns?this.structureArrayToObject(e):this.structureArrayToColumns(e):e}structureArrayToObject(e){var t=e.shift();return e.map((e=>{var i={};return t.forEach(((t,s)=>{i[t]=e[s]})),i}))}structureArrayToColumns(e){var t=[],i=this.table.getColumns();return i[0]&&e[0][0]&&i[0].getDefinition().title===e[0][0]&&e.shift(),e.forEach((e=>{var s={};e.forEach(((e,t)=>{var o=i[t];o&&(s[o.getField()]=e)})),t.push(s)})),t}setData(e){return this.table.setData(e)}}G.moduleName="import",G.importers=j;class U extends s{constructor(e){super(e),this.eventMap={rowClick:"row-click",rowDblClick:"row-dblclick",rowContext:"row-contextmenu",rowMouseEnter:"row-mouseenter",rowMouseLeave:"row-mouseleave",rowMouseOver:"row-mouseover",rowMouseOut:"row-mouseout",rowMouseMove:"row-mousemove",rowMouseDown:"row-mousedown",rowMouseUp:"row-mouseup",rowTap:"row",rowDblTap:"row",rowTapHold:"row",cellClick:"cell-click",cellDblClick:"cell-dblclick",cellContext:"cell-contextmenu",cellMouseEnter:"cell-mouseenter",cellMouseLeave:"cell-mouseleave",cellMouseOver:"cell-mouseover",cellMouseOut:"cell-mouseout",cellMouseMove:"cell-mousemove",cellMouseDown:"cell-mousedown",cellMouseUp:"cell-mouseup",cellTap:"cell",cellDblTap:"cell",cellTapHold:"cell",headerClick:"column-click",headerDblClick:"column-dblclick",headerContext:"column-contextmenu",headerMouseEnter:"column-mouseenter",headerMouseLeave:"column-mouseleave",headerMouseOver:"column-mouseover",headerMouseOut:"column-mouseout",headerMouseMove:"column-mousemove",headerMouseDown:"column-mousedown",headerMouseUp:"column-mouseup",headerTap:"column",headerDblTap:"column",headerTapHold:"column",groupClick:"group-click",groupDblClick:"group-dblclick",groupContext:"group-contextmenu",groupMouseEnter:"group-mouseenter",groupMouseLeave:"group-mouseleave",groupMouseOver:"group-mouseover",groupMouseOut:"group-mouseout",groupMouseMove:"group-mousemove",groupMouseDown:"group-mousedown",groupMouseUp:"group-mouseup",groupTap:"group",groupDblTap:"group",groupTapHold:"group"},this.subscribers={},this.touchSubscribers={},this.columnSubscribers={},this.touchWatchers={row:{tap:null,tapDbl:null,tapHold:null},cell:{tap:null,tapDbl:null,tapHold:null},column:{tap:null,tapDbl:null,tapHold:null},group:{tap:null,tapDbl:null,tapHold:null}},this.registerColumnOption("headerClick"),this.registerColumnOption("headerDblClick"),this.registerColumnOption("headerContext"),this.registerColumnOption("headerMouseEnter"),this.registerColumnOption("headerMouseLeave"),this.registerColumnOption("headerMouseOver"),this.registerColumnOption("headerMouseOut"),this.registerColumnOption("headerMouseMove"),this.registerColumnOption("headerMouseDown"),this.registerColumnOption("headerMouseUp"),this.registerColumnOption("headerTap"),this.registerColumnOption("headerDblTap"),this.registerColumnOption("headerTapHold"),this.registerColumnOption("cellClick"),this.registerColumnOption("cellDblClick"),this.registerColumnOption("cellContext"),this.registerColumnOption("cellMouseEnter"),this.registerColumnOption("cellMouseLeave"),this.registerColumnOption("cellMouseOver"),this.registerColumnOption("cellMouseOut"),this.registerColumnOption("cellMouseMove"),this.registerColumnOption("cellMouseDown"),this.registerColumnOption("cellMouseUp"),this.registerColumnOption("cellTap"),this.registerColumnOption("cellDblTap"),this.registerColumnOption("cellTapHold")}initialize(){this.initializeExternalEvents(),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("cell-dblclick",this.cellContentsSelectionFixer.bind(this)),this.subscribe("scroll-horizontal",this.clearTouchWatchers.bind(this)),this.subscribe("scroll-vertical",this.clearTouchWatchers.bind(this))}clearTouchWatchers(){Object.values(this.touchWatchers).forEach((e=>{for(let t in e)e[t]=null}))}cellContentsSelectionFixer(e,t){var i;if(!this.table.modExists("edit")||this.table.modules.edit.currentCell!==t){e.preventDefault();try{document.selection?((i=document.body.createTextRange()).moveToElementText(t.getElement()),i.select()):window.getSelection&&((i=document.createRange()).selectNode(t.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(i))}catch(e){}}}initializeExternalEvents(){for(let e in this.eventMap)this.subscriptionChangeExternal(e,this.subscriptionChanged.bind(this,e))}subscriptionChanged(e,t){t?this.subscribers[e]||(this.eventMap[e].includes("-")?(this.subscribers[e]=this.handle.bind(this,e),this.subscribe(this.eventMap[e],this.subscribers[e])):this.subscribeTouchEvents(e)):this.eventMap[e].includes("-")?!this.subscribers[e]||this.columnSubscribers[e]||this.subscribedExternal(e)||(this.unsubscribe(this.eventMap[e],this.subscribers[e]),delete this.subscribers[e]):this.unsubscribeTouchEvents(e)}subscribeTouchEvents(e){var t=this.eventMap[e];this.touchSubscribers[t+"-touchstart"]||(this.touchSubscribers[t+"-touchstart"]=this.handleTouch.bind(this,t,"start"),this.touchSubscribers[t+"-touchend"]=this.handleTouch.bind(this,t,"end"),this.subscribe(t+"-touchstart",this.touchSubscribers[t+"-touchstart"]),this.subscribe(t+"-touchend",this.touchSubscribers[t+"-touchend"])),this.subscribers[e]=!0}unsubscribeTouchEvents(e){var t=!0,i=this.eventMap[e];if(this.subscribers[e]&&!this.subscribedExternal(e)){delete this.subscribers[e];for(let e in this.eventMap)this.eventMap[e]===i&&this.subscribers[e]&&(t=!1);t&&(this.unsubscribe(i+"-touchstart",this.touchSubscribers[i+"-touchstart"]),this.unsubscribe(i+"-touchend",this.touchSubscribers[i+"-touchend"]),delete this.touchSubscribers[i+"-touchstart"],delete this.touchSubscribers[i+"-touchend"])}}initializeColumn(e){var t=e.definition;for(let i in this.eventMap)t[i]&&(this.subscriptionChanged(i,!0),this.columnSubscribers[i]||(this.columnSubscribers[i]=[]),this.columnSubscribers[i].push(e))}handle(e,t,i){this.dispatchEvent(e,t,i)}handleTouch(e,t,i,s){var o=this.touchWatchers[e];switch("column"===e&&(e="header"),t){case"start":o.tap=!0,clearTimeout(o.tapHold),o.tapHold=setTimeout((()=>{clearTimeout(o.tapHold),o.tapHold=null,o.tap=null,clearTimeout(o.tapDbl),o.tapDbl=null,this.dispatchEvent(e+"TapHold",i,s)}),1e3);break;case"end":o.tap&&(o.tap=null,this.dispatchEvent(e+"Tap",i,s)),o.tapDbl?(clearTimeout(o.tapDbl),o.tapDbl=null,this.dispatchEvent(e+"DblTap",i,s)):o.tapDbl=setTimeout((()=>{clearTimeout(o.tapDbl),o.tapDbl=null}),300),clearTimeout(o.tapHold),o.tapHold=null}}dispatchEvent(e,t,i){var s,o=i.getComponent();this.columnSubscribers[e]&&(i instanceof p?s=i.column.definition[e]:i instanceof f&&(s=i.definition[e]),s&&s(t,o)),this.dispatchExternal(e,t,o)}}U.moduleName="interaction";class J extends s{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1,this.registerTableOption("keybindings",{}),this.registerTableOption("tabEndNewRow",!1)}initialize(){var e=this.table.options.keybindings,t={};this.watchKeys={},this.pressedKeys=[],!1!==e&&(Object.assign(t,J.bindings),Object.assign(t,e),this.mapBindings(t),this.bindEvents()),this.subscribe("table-destroy",this.clearBindings.bind(this))}mapBindings(e){for(let t in e)J.actions[t]?e[t]&&("object"!=typeof e[t]&&(e[t]=[e[t]]),e[t].forEach((e=>{(Array.isArray(e)?e:[e]).forEach((e=>{this.mapBinding(t,e)}))}))):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:J.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach((e=>{switch(e){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:e=isNaN(e)?e.toUpperCase().charCodeAt(0):parseInt(e),i.keys.push(e),this.watchKeys[e]||(this.watchKeys[e]=[]),this.watchKeys[e].push(i)}}))}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];s&&(e.pressedKeys.push(i),s.forEach((function(i){e.checkBinding(t,i)})))},this.keydownBinding=function(t){var i=t.keyCode;if(e.watchKeys[i]){var s=e.pressedKeys.indexOf(i);s>-1&&e.pressedKeys.splice(s,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach((e=>{-1==this.pressedKeys.indexOf(e)&&(i=!1)})),i&&t.action.call(this,e),!0)}}J.moduleName="keybindings",J.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,navLeft:37,navRight:39,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:["ctrl + 90","meta + 90"],redo:["ctrl + 89","meta + 89"],copyToClipboard:["ctrl + 67","meta + 67"],rangeJumpUp:["ctrl + 38","meta + 38"],rangeJumpDown:["ctrl + 40","meta + 40"],rangeJumpLeft:["ctrl + 37","meta + 37"],rangeJumpRight:["ctrl + 39","meta + 39"],rangeExpandUp:"shift + 38",rangeExpandDown:"shift + 40",rangeExpandLeft:"shift + 37",rangeExpandRight:"shift + 39",rangeExpandJumpUp:["ctrl + shift + 38","meta + shift + 38"],rangeExpandJumpDown:["ctrl + shift + 40","meta + shift + 40"],rangeExpandJumpLeft:["ctrl + shift + 37","meta + shift + 37"],rangeExpandJumpRight:["ctrl + shift + 39","meta + shift + 39"]},J.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,i=t.scrollTop-t.element.clientHeight;e.preventDefault(),t.displayRowsCount&&(i>=0?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,i=t.scrollTop+t.element.clientHeight,s=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i<=s?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){this.dispatch("keybinding-nav-prev",e)},navNext:function(e){this.dispatch("keybinding-nav-next",e)},navLeft:function(e){this.dispatch("keybinding-nav-left",e)},navRight:function(e){this.dispatch("keybinding-nav-right",e)},navUp:function(e){this.dispatch("keybinding-nav-up",e)},navDown:function(e){this.dispatch("keybinding-nav-down",e)},rangeJumpLeft:function(e){this.dispatch("keybinding-nav-range",e,"left",!0,!1)},rangeJumpRight:function(e){this.dispatch("keybinding-nav-range",e,"right",!0,!1)},rangeJumpUp:function(e){this.dispatch("keybinding-nav-range",e,"up",!0,!1)},rangeJumpDown:function(e){this.dispatch("keybinding-nav-range",e,"down",!0,!1)},rangeExpandLeft:function(e){this.dispatch("keybinding-nav-range",e,"left",!1,!0)},rangeExpandRight:function(e){this.dispatch("keybinding-nav-range",e,"right",!1,!0)},rangeExpandUp:function(e){this.dispatch("keybinding-nav-range",e,"up",!1,!0)},rangeExpandDown:function(e){this.dispatch("keybinding-nav-range",e,"down",!1,!0)},rangeExpandJumpLeft:function(e){this.dispatch("keybinding-nav-range",e,"left",!0,!0)},rangeExpandJumpRight:function(e){this.dispatch("keybinding-nav-range",e,"right",!0,!0)},rangeExpandJumpUp:function(e){this.dispatch("keybinding-nav-range",e,"up",!0,!0)},rangeExpandJumpDown:function(e){this.dispatch("keybinding-nav-range",e,"down",!0,!0)},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}};class X extends s{constructor(e){super(e),this.menuContainer=null,this.nestedMenuBlock=!1,this.currentComponent=null,this.rootPopup=null,this.columnSubscribers={},this.registerTableOption("menuContainer",void 0),this.registerTableOption("rowContextMenu",!1),this.registerTableOption("rowClickMenu",!1),this.registerTableOption("rowDblClickMenu",!1),this.registerTableOption("groupContextMenu",!1),this.registerTableOption("groupClickMenu",!1),this.registerTableOption("groupDblClickMenu",!1),this.registerColumnOption("headerContextMenu"),this.registerColumnOption("headerClickMenu"),this.registerColumnOption("headerDblClickMenu"),this.registerColumnOption("headerMenu"),this.registerColumnOption("headerMenuIcon"),this.registerColumnOption("contextMenu"),this.registerColumnOption("clickMenu"),this.registerColumnOption("dblClickMenu")}initialize(){this.deprecatedOptionsCheck(),this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){this.deprecationCheck("menuContainer","popupContainer")||(this.table.options.popupContainer=this.table.options.menuContainer)}initializeRowWatchers(){this.table.options.rowContextMenu&&(this.subscribe("row-contextmenu",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu)),this.table.on("rowTapHold",this.loadMenuEvent.bind(this,this.table.options.rowContextMenu))),this.table.options.rowClickMenu&&this.subscribe("row-click",this.loadMenuEvent.bind(this,this.table.options.rowClickMenu)),this.table.options.rowDblClickMenu&&this.subscribe("row-dblclick",this.loadMenuEvent.bind(this,this.table.options.rowDblClickMenu))}initializeGroupWatchers(){this.table.options.groupContextMenu&&(this.subscribe("group-contextmenu",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu)),this.table.on("groupTapHold",this.loadMenuEvent.bind(this,this.table.options.groupContextMenu))),this.table.options.groupClickMenu&&this.subscribe("group-click",this.loadMenuEvent.bind(this,this.table.options.groupClickMenu)),this.table.options.groupDblClickMenu&&this.subscribe("group-dblclick",this.loadMenuEvent.bind(this,this.table.options.groupDblClickMenu))}initializeColumn(e){var t=e.definition;t.headerContextMenu&&!this.columnSubscribers.headerContextMenu&&(this.columnSubscribers.headerContextMenu=this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextMenu),this.table.on("headerTapHold",this.loadMenuTableColumnEvent.bind(this,"headerContextMenu"))),t.headerClickMenu&&!this.columnSubscribers.headerClickMenu&&(this.columnSubscribers.headerClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerClickMenu"),this.subscribe("column-click",this.columnSubscribers.headerClickMenu)),t.headerDblClickMenu&&!this.columnSubscribers.headerDblClickMenu&&(this.columnSubscribers.headerDblClickMenu=this.loadMenuTableColumnEvent.bind(this,"headerDblClickMenu"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickMenu)),t.headerMenu&&this.initializeColumnHeaderMenu(e),t.contextMenu&&!this.columnSubscribers.contextMenu&&(this.columnSubscribers.contextMenu=this.loadMenuTableCellEvent.bind(this,"contextMenu"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextMenu),this.table.on("cellTapHold",this.loadMenuTableCellEvent.bind(this,"contextMenu"))),t.clickMenu&&!this.columnSubscribers.clickMenu&&(this.columnSubscribers.clickMenu=this.loadMenuTableCellEvent.bind(this,"clickMenu"),this.subscribe("cell-click",this.columnSubscribers.clickMenu)),t.dblClickMenu&&!this.columnSubscribers.dblClickMenu&&(this.columnSubscribers.dblClickMenu=this.loadMenuTableCellEvent.bind(this,"dblClickMenu"),this.subscribe("cell-dblclick",this.columnSubscribers.dblClickMenu))}initializeColumnHeaderMenu(e){var t,i=e.definition.headerMenuIcon;(t=document.createElement("span")).classList.add("tabulator-header-popup-button"),i?("function"==typeof i&&(i=i(e.getComponent())),i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i):t.innerHTML="⋮",t.addEventListener("click",(t=>{t.stopPropagation(),t.preventDefault(),this.loadMenuEvent(e.definition.headerMenu,t,e)})),e.titleElement.insertBefore(t,e.titleElement.firstChild)}loadMenuTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadMenuEvent(i.column.definition[e],t,i)}loadMenuTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadMenuEvent(i.definition[e],t,i)}loadMenuEvent(e,t,i){i._group?i=i._group:i._row&&(i=i._row),e="function"==typeof e?e.call(this.table,t,i.getComponent()):e,this.loadMenu(t,i,e)}loadMenu(e,t,i,s,o){var n,r=!(e instanceof MouseEvent),a=document.createElement("div");if(a.classList.add("tabulator-menu"),r||e.preventDefault(),i&&i.length){if(s)n=o.child(a);else{if(this.nestedMenuBlock){if(this.rootPopup)return}else this.nestedMenuBlock=setTimeout((()=>{this.nestedMenuBlock=!1}),100);this.rootPopup&&this.rootPopup.hide(),this.rootPopup=n=this.popup(a)}i.forEach((e=>{var i=document.createElement("div"),s=e.label,o=e.disabled;e.separator?i.classList.add("tabulator-menu-separator"):(i.classList.add("tabulator-menu-item"),"function"==typeof s&&(s=s.call(this.table,t.getComponent())),s instanceof Node?i.appendChild(s):i.innerHTML=s,"function"==typeof o&&(o=o.call(this.table,t.getComponent())),o?(i.classList.add("tabulator-menu-item-disabled"),i.addEventListener("click",(e=>{e.stopPropagation()}))):e.menu&&e.menu.length?i.addEventListener("click",(s=>{s.stopPropagation(),this.loadMenu(s,t,e.menu,i,n)})):e.action&&i.addEventListener("click",(i=>{e.action(i,t.getComponent())})),e.menu&&e.menu.length&&i.classList.add("tabulator-menu-item-submenu")),a.appendChild(i)})),a.addEventListener("click",(e=>{this.rootPopup&&this.rootPopup.hide()})),n.show(s||e),n===this.rootPopup&&(this.rootPopup.hideOnBlur((()=>{this.rootPopup=null,this.currentComponent&&(this.dispatch("menu-closed",i,n),this.dispatchExternal("menuClosed",this.currentComponent.getComponent()),this.currentComponent=null)})),this.currentComponent=t,this.dispatch("menu-opened",i,n),this.dispatchExternal("menuOpened",t.getComponent()))}}}X.moduleName="menu";class q extends s{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.registerTableOption("movableColumns",!1)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initialize(){this.table.options.movableColumns&&(this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("alert-show",this.abortMove.bind(this)))}abortMove(){clearTimeout(this.checkTimeout)}initializeColumn(e){var i,s=this,o={};e.modules.frozen||e.isGroup||(i=e.getElement(),o.mousemove=function(o){e.parent===s.moving.parent&&((s.touchMove?o.touches[0].pageX:o.pageX)-t.elOffset(i).left+s.table.columnManager.contentsElement.scrollLeft>e.getWidth()/2?s.toCol===e&&s.toColAfter||(i.parentNode.insertBefore(s.placeholderElement,i.nextSibling),s.moveColumn(e,!0)):(s.toCol!==e||s.toColAfter)&&(i.parentNode.insertBefore(s.placeholderElement,i),s.moveColumn(e,!1)))}.bind(s),i.addEventListener("mousedown",(function(t){s.touchMove=!1,1===t.which&&(s.checkTimeout=setTimeout((function(){s.startMove(t,e)}),s.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&s.checkTimeout&&clearTimeout(s.checkTimeout)})),s.bindTouchEvents(e)),e.modules.moveColumn=o}bindTouchEvents(e){var t,i,s,o,n,r,a=e.getElement(),l=!1;a.addEventListener("touchstart",(a=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,t=e.nextColumn(),s=t?t.getWidth()/2:0,i=e.prevColumn(),o=i?i.getWidth()/2:0,n=0,r=0,l=!1,this.startMove(a,e)}),this.checkPeriod)}),{passive:!0}),a.addEventListener("touchmove",(a=>{var h,d;this.moving&&(this.moveHover(a),l||(l=a.touches[0].pageX),(h=a.touches[0].pageX-l)>0?t&&h-n>s&&(d=t)!==e&&(l=a.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveColumn(d,!0)):i&&-h-r>o&&(d=i)!==e&&(l=a.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveColumn(d,!1)),d&&(t=d.nextColumn(),n=s,s=t?t.getWidth()/2:0,i=d.prevColumn(),r=o,o=i?i.getWidth()/2:0))}),{passive:!0}),a.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(e)}))}startMove(e,i){var s=i.getElement(),o=this.table.columnManager.getContentsElement(),n=this.table.columnManager.getHeadersElement();this.moving=i,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-t.elOffset(s).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=i.getWidth()+"px",this.placeholderElement.style.height=i.getHeight()+"px",s.parentNode.insertBefore(this.placeholderElement,s),s.parentNode.removeChild(s),this.hoverElement=s.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),o.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom=o.clientHeight-n.offsetHeight+"px",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)}))}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)}))}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach((function(e,t){var s=e.getElement(!0);s.parentNode&&i[t]&&s.parentNode.insertBefore(i[t].getElement(),s.nextSibling)})):e.getCells().forEach((function(e,t){var s=e.getElement(!0);s.parentNode&&i[t]&&s.parentNode.insertBefore(i[t].getElement(),s)}))}endMove(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var i,s=this.table.columnManager.getContentsElement(),o=s.scrollLeft,n=(this.touchMove?e.touches[0].pageX:e.pageX)-t.elOffset(s).left+o;this.hoverElement.style.left=n-this.startX+"px",n-o{i=Math.max(0,o-5),this.table.rowManager.getElement().scrollLeft=i,this.autoScrollTimeout=!1}),1))),o+s.clientWidth-n{i=Math.min(s.clientWidth,o+5),this.table.rowManager.getElement().scrollLeft=i,this.autoScrollTimeout=!1}),1)))}}q.moduleName="moveColumn";class K extends s{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1,this.registerTableOption("movableRows",!1),this.registerTableOption("movableRowsConnectedTables",!1),this.registerTableOption("movableRowsConnectedElements",!1),this.registerTableOption("movableRowsSender",!1),this.registerTableOption("movableRowsReceiver","insert"),this.registerColumnOption("rowHandle")}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(){this.table.options.movableRows&&(this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements,this.subscribe("cell-init",this.initializeCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)))}initializeGroupHeader(e){var i=this,s={};s.mouseup=function(t){i.tableRowDrop(t,e)}.bind(i),s.mousemove=function(s){var o;s.pageY-t.elOffset(e.element).top+i.table.rowManager.element.scrollTop>e.getHeight()/2?i.toRow===e&&i.toRowAfter||((o=e.getElement()).parentNode.insertBefore(i.placeholderElement,o.nextSibling),i.moveRow(e,!0)):(i.toRow!==e||i.toRowAfter)&&(o=e.getElement()).previousSibling&&(o.parentNode.insertBefore(i.placeholderElement,o),i.moveRow(e,!1))}.bind(i),e.modules.moveRow=s}initializeRow(e){var i,s=this,o={};o.mouseup=function(t){s.tableRowDrop(t,e)}.bind(s),o.mousemove=function(i){var o=e.getElement();i.pageY-t.elOffset(o).top+s.table.rowManager.element.scrollTop>e.getHeight()/2?s.toRow===e&&s.toRowAfter||(o.parentNode.insertBefore(s.placeholderElement,o.nextSibling),s.moveRow(e,!0)):(s.toRow!==e||s.toRowAfter)&&(o.parentNode.insertBefore(s.placeholderElement,o),s.moveRow(e,!1))}.bind(s),this.hasHandle||((i=e.getElement()).addEventListener("mousedown",(function(t){1===t.which&&(s.checkTimeout=setTimeout((function(){s.startMove(t,e)}),s.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&s.checkTimeout&&clearTimeout(s.checkTimeout)})),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=o}initializeColumn(e){e.definition.rowHandle&&!1!==this.table.options.movableRows&&(this.hasHandle=!0)}initializeCell(e){if(e.column.definition.rowHandle&&!1!==this.table.options.movableRows){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",(function(i){1===i.which&&(t.checkTimeout=setTimeout((function(){t.startMove(i,e.row)}),t.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)})),this.bindTouchEvents(e.row,i)}}bindTouchEvents(e,t){var i,s,o,n,r,a,l=!1;t.addEventListener("touchstart",(t=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,i=e.nextRow(),o=i?i.getHeight()/2:0,s=e.prevRow(),n=s?s.getHeight()/2:0,r=0,a=0,l=!1,this.startMove(t,e)}),this.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",(t=>{var h,d;this.moving&&(t.preventDefault(),this.moveHover(t),l||(l=t.touches[0].pageY),(h=t.touches[0].pageY-l)>0?i&&h-r>o&&(d=i)!==e&&(l=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveRow(d,!0)):s&&-h-a>n&&(d=s)!==e&&(l=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveRow(d,!1)),d&&(i=d.nextRow(),r=o,o=i?i.getHeight()/2:0,s=d.prevRow(),a=n,n=s?s.getHeight()/2:0))})),t.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(e),this.touchMove=!1)}))}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{("row"===e.type||"group"===e.type)&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)}))}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{("row"===e.type||"group"===e.type)&&e.modules.moveRow&&e.modules.moveRow.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)}))}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.dispatchExternal("rowMoving",t.getComponent()),this.moveHover(e)}setStartPosition(e,t){var i,s,o=this.touchMove?e.touches[0].pageX:e.pageX,n=this.touchMove?e.touches[0].pageY:e.pageY;i=t.getElement(),this.connection?(s=i.getBoundingClientRect(),this.startX=s.left-o+window.pageXOffset,this.startY=s.top-n+window.pageYOffset):this.startY=n-i.getBoundingClientRect().top}endMove(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow?this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter):this.dispatchExternal("rowMoveCancelled",this.moving.getComponent()),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,s=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=Math.min(s-this.startY,this.table.rowManager.element.scrollHeight-this.hoverElement.offsetHeight)+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.dispatchExternal("movableRowsElementDrop",e,t,!!i&&i.getComponent())}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((e=>{"string"==typeof e?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):this.connectionElements.push(e)})),this.connectionElements.forEach((e=>{var t=t=>{this.elementRowDrop(t,e,this.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")})))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((e=>{e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent}))}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var s=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":s=this.senders[this.table.options.movableRowsSender];break;case"function":s=this.table.options.movableRowsSender}s?s.call(this,this.moving?this.moving.getComponent():void 0,t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,s=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=this.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver}i?s=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),s?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:t,success:s})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}}K.prototype.receivers={insert:function(e,t,i){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,i){return this.table.addRow(e.getData()),!0},update:function(e,t,i){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,i){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},K.prototype.senders={delete:function(e,t,i){e.delete()}},K.moduleName="moveRow";class Y extends s{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0,this.registerColumnOption("mutator"),this.registerColumnOption("mutatorParams"),this.registerColumnOption("mutatorData"),this.registerColumnOption("mutatorDataParams"),this.registerColumnOption("mutatorEdit"),this.registerColumnOption("mutatorEditParams"),this.registerColumnOption("mutatorClipboard"),this.registerColumnOption("mutatorClipboardParams"),this.registerColumnOption("mutateLink")}initialize(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("cell-value-changed",this.mutateLink.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}rowDataChanged(e,t,i){return this.transformRow(t,"data",i)}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((s=>{var o,n="mutator"+(s.charAt(0).toUpperCase()+s.slice(1));e.definition[n]&&(o=this.lookupMutator(e.definition[n]))&&(t=!0,i[n]={mutator:o,params:e.definition[n+"Params"]||{}})})),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":Y.mutators[e]?t=Y.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,t,i){var s,o="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&this.table.columnManager.traverse((n=>{var r,a,l;n.modules.mutate&&(r=n.modules.mutate[o]||n.modules.mutate.mutator||!1)&&(s=n.getFieldValue(void 0!==i?i:e),("data"==t&&!i||void 0!==s)&&(l=n.getComponent(),a="function"==typeof r.params?r.params(s,e,t,l):r.params,n.setFieldValue(e,r.mutator(s,e,t,a,l))))})),e}transformCell(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,s={};if(i)return s=Object.assign(s,e.row.getData()),e.column.setFieldValue(s,t),i.mutator(t,s,"edit",i.params,e.getComponent())}return t}mutateLink(e){var t=e.column.definition.mutateLink;t&&(Array.isArray(t)||(t=[t]),t.forEach((t=>{var i=e.row.getCell(t);i&&i.setValue(i.getValue(),!0,!0)})))}enable(){this.enabled=!0}disable(){this.enabled=!1}}Y.moduleName="mutator",Y.mutators={};var $={rows:function(e,t,i,s,o){var n=document.createElement("span"),r=document.createElement("span"),a=document.createElement("span"),l=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",(e=>{r.innerHTML=e})),this.table.modules.localize.langBind("pagination|counter|of",(e=>{l.innerHTML=e})),this.table.modules.localize.langBind("pagination|counter|rows",(e=>{d.innerHTML=e})),s?(a.innerHTML=" "+t+"-"+Math.min(t+e-1,s)+" ",h.innerHTML=" "+s+" ",n.appendChild(r),n.appendChild(a),n.appendChild(l),n.appendChild(h),n.appendChild(d)):(a.innerHTML=" 0 ",n.appendChild(r),n.appendChild(a),n.appendChild(d)),n},pages:function(e,t,i,s,o){var n=document.createElement("span"),r=document.createElement("span"),a=document.createElement("span"),l=document.createElement("span"),h=document.createElement("span"),d=document.createElement("span");return this.table.modules.localize.langBind("pagination|counter|showing",(e=>{r.innerHTML=e})),a.innerHTML=" "+i+" ",this.table.modules.localize.langBind("pagination|counter|of",(e=>{l.innerHTML=e})),h.innerHTML=" "+o+" ",this.table.modules.localize.langBind("pagination|counter|pages",(e=>{d.innerHTML=e})),n.appendChild(r),n.appendChild(a),n.appendChild(l),n.appendChild(h),n.appendChild(d),n}};class Z extends s{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.element=null,this.pageCounterElement=null,this.pageCounter=null,this.size=0,this.page=1,this.count=5,this.max=1,this.remoteRowCountEstimate=null,this.initialLoad=!0,this.dataChanging=!1,this.pageSizes=[],this.registerTableOption("pagination",!1),this.registerTableOption("paginationMode","local"),this.registerTableOption("paginationSize",!1),this.registerTableOption("paginationInitialPage",1),this.registerTableOption("paginationCounter",!1),this.registerTableOption("paginationCounterElement",!1),this.registerTableOption("paginationButtonCount",5),this.registerTableOption("paginationSizeSelector",!1),this.registerTableOption("paginationElement",!1),this.registerTableOption("paginationAddRow","page"),this.registerTableOption("progressiveLoad",!1),this.registerTableOption("progressiveLoadDelay",0),this.registerTableOption("progressiveLoadScrollMargin",0),this.registerTableFunction("setMaxPage",this.setMaxPage.bind(this)),this.registerTableFunction("setPage",this.setPage.bind(this)),this.registerTableFunction("setPageToRow",this.userSetPageToRow.bind(this)),this.registerTableFunction("setPageSize",this.userSetPageSize.bind(this)),this.registerTableFunction("getPageSize",this.getPageSize.bind(this)),this.registerTableFunction("previousPage",this.previousPage.bind(this)),this.registerTableFunction("nextPage",this.nextPage.bind(this)),this.registerTableFunction("getPage",this.getPage.bind(this)),this.registerTableFunction("getPageMax",this.getPageMax.bind(this)),this.registerComponentFunction("row","pageTo",this.setPageToRow.bind(this))}initialize(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("footer-redraw",this.footerRedraw.bind(this)),"page"==this.table.options.paginationAddRow&&this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),"remote"===this.table.options.paginationMode&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePageCounter(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),"scroll"===this.table.options.progressiveLoad&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}rowAddingPosition(e,t){var i,s=this.table.rowManager,o=s.getDisplayRows();return t?o.length?i=o[0]:s.activeRows.length&&(i=s.activeRows[s.activeRows.length-1],t=!1):o.length&&(i=o[o.length-1],t=!(o.length{}))}restOnRenderBefore(e,t){return t||"local"===this.mode&&this.reset(),e}rowsUpdated(){this.refreshData(!0,"all")}createElements(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(e=document.createElement("button")).classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}generatePageSizeSelectList(){var e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,-1==this.pageSizes.indexOf(this.size)&&e.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){e=[];for(let t=1;t<5;t++)e.push(this.size*t);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach((e=>{var t=document.createElement("option");t.value=e,!0===e?this.langBind("pagination|all",(function(e){t.innerHTML=e})):t.innerHTML=e,this.pageSizeSelect.appendChild(t)})),this.pageSizeSelect.value=this.size}}initializePageCounter(){var e=this.table.options.paginationCounter,t=null;e&&((t="function"==typeof e?e:Z.pageCounters[e])?(this.pageCounter=t,this.pageCounterElement=document.createElement("span"),this.pageCounterElement.classList.add("tabulator-page-counter")):console.warn("Pagination Error - No such page counter found: ",e))}initializePaginator(e){var t,i;e||(this.langBind("pagination|first",(e=>{this.firstBut.innerHTML=e})),this.langBind("pagination|first_title",(e=>{this.firstBut.setAttribute("aria-label",e),this.firstBut.setAttribute("title",e)})),this.langBind("pagination|prev",(e=>{this.prevBut.innerHTML=e})),this.langBind("pagination|prev_title",(e=>{this.prevBut.setAttribute("aria-label",e),this.prevBut.setAttribute("title",e)})),this.langBind("pagination|next",(e=>{this.nextBut.innerHTML=e})),this.langBind("pagination|next_title",(e=>{this.nextBut.setAttribute("aria-label",e),this.nextBut.setAttribute("title",e)})),this.langBind("pagination|last",(e=>{this.lastBut.innerHTML=e})),this.langBind("pagination|last_title",(e=>{this.lastBut.setAttribute("aria-label",e),this.lastBut.setAttribute("title",e)})),this.firstBut.addEventListener("click",(()=>{this.setPage(1)})),this.prevBut.addEventListener("click",(()=>{this.previousPage()})),this.nextBut.addEventListener("click",(()=>{this.nextPage()})),this.lastBut.addEventListener("click",(()=>{this.setPage(this.max)})),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.langBind("pagination|page_size",(e=>{this.pageSizeSelect.setAttribute("aria-label",e),this.pageSizeSelect.setAttribute("title",e),t.innerHTML=e})),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",(e=>{this.setPageSize("true"==this.pageSizeSelect.value||this.pageSizeSelect.value),this.setPage(1)}))),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||(this.table.options.paginationCounter&&(this.table.options.paginationCounterElement?this.table.options.paginationCounterElement instanceof HTMLElement?this.table.options.paginationCounterElement.appendChild(this.pageCounterElement):"string"==typeof this.table.options.paginationCounterElement&&((i=document.querySelector(this.table.options.paginationCounterElement))?i.appendChild(this.pageCounterElement):console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:",this.table.options.paginationCounterElement)):this.footerAppend(this.pageCounterElement)),this.footerAppend(this.element)),this.page=this.table.options.paginationInitialPage,this.count=this.table.options.paginationButtonCount),this.mode=this.table.options.paginationMode}initializeProgressive(e){this.initializePaginator(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}trackChanges(){this.dispatch("page-changed")}setMaxRows(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)}reset(e){this.initialLoad||("local"==this.mode||e)&&(this.page=1,this.trackChanges())}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return(e=parseInt(e))>0&&e<=this.max||"local"!==this.mode?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}setPageToRow(e){var t=this.displayRows(-1).indexOf(e);if(t>-1){var i=!0===this.size?1:Math.ceil((t+1)/this.size);return this.setPage(i)}return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}setPageSize(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e,this.dispatchExternal("pageSizeChanged",e)),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}_setPageCounter(e,t,i){var s;if(this.pageCounter)switch("remote"===this.mode&&(t=this.size,i=(this.page-1)*this.size+1,e=this.remoteRowCountEstimate),typeof(s=this.pageCounter.call(this,t,i,this.page,e,this.max))){case"object":if(s instanceof Node){for(;this.pageCounterElement.firstChild;)this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);this.pageCounterElement.appendChild(s)}else this.pageCounterElement.innerHTML="",null!=s&&console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:",s);break;case"undefined":this.pageCounterElement.innerHTML="";break;default:this.pageCounterElement.innerHTML=s}}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&e<=this.max&&this.pagesElement.appendChild(this._generatePageButton(e));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.langBind("pagination|page_title",(i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)})),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",(t=>{this.setPage(e)})),t}previousPage(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}nextPage(){return this.page"row"===e.type));if("local"==this.mode){t=[],this.setMaxRows(e.length),!0===this.size?(i=0,s=e.length):s=(i=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(let r=i;r{this.dataChanging=!1}));case"progressive_load":case"progressive_scroll":return this.reloadData(null,!0);default:return console.warn("Pagination Error - no such pagination mode:",this.mode),Promise.reject()}}_parseRemoteData(e){var t;if(void 0===e.last_page&&console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").last_page||"last_page")+"' property"),e.data){if(this.max=parseInt(e.last_page)||1,this.remoteRowCountEstimate=void 0!==e.last_row?e.last_row:e.last_page*this.size-(this.page==e.last_page?this.size-e.data.length:0),this.progressiveLoad){switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e.data,!1,1==this.page):this.table.rowManager.addRows(e.data),this.page{this.nextPage()}),this.table.options.progressiveLoadDelay);break;case"progressive_scroll":e=1===this.page?e.data:this.table.rowManager.getData().concat(e.data),this.table.rowManager.setData(e,1!==this.page,1==this.page),t=this.table.options.progressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+t&&this.page{this.nextPage()}))}return!1}this.dispatchExternal("pageLoaded",this.getPage())}else console.warn("Remote Pagination Error - Server response missing '"+(this.options("dataReceiveParams").data||"data")+"' property");return e.data}footerRedraw(){var e=this.table.footerManager.containerElement;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}}Z.moduleName="page",Z.pageCounters=$;var Q={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,s,o=document.cookie,n=e+"-"+t,r=o.indexOf(n+"=");return r>-1&&((i=(o=o.slice(r)).indexOf(";"))>-1&&(o=o.slice(0,i)),s=o.replace(n+"=","")),!!s&&JSON.parse(s)}},ee={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var s=new Date;s.setDate(s.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+s.toUTCString()}};class te extends s{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1,this.registerTableOption("persistence",!1),this.registerTableOption("persistenceID",""),this.registerTableOption("persistenceMode",!0),this.registerTableOption("persistenceReaderFunc",!1),this.registerTableOption("persistenceWriterFunc",!1)}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}initialize(){if(this.table.options.persistence){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:te.readers[this.table.options.persistenceReaderFunc]?this.readFunc=te.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):te.readers[this.mode]?this.readFunc=te.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:te.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=te.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):te.writers[this.mode]?this.writeFunc=te.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,headerFilter:!0===this.table.options.persistence||this.table.options.persistence.headerFilter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retrieveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retrieveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns"))),this.subscribe("table-built",this.tableBuilt.bind(this),0),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("filter-changed",this.eventSave.bind(this,"headerFilter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("column-width",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}eventSave(e){this.config[e]&&this.save(e)}tableBuilt(){var e,t,i;this.config.sort&&!1==!(e=this.load("sort"))&&(this.table.options.initialSort=e),this.config.filter&&!1==!(t=this.load("filter"))&&(this.table.options.initialFilter=t),this.config.headerFilter&&!1==!(i=this.load("headerFilter"))&&(this.table.options.initialHeaderFilter=i)}tableRedraw(e){e&&this.config.columns&&this.save("columns")}getColumnLayout(){return this.parseColumns(this.table.columnManager.getColumns())}setColumnLayout(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e,!0)),!0}initializeColumn(e){var t;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),(!0===this.config.columns?Object.keys(t):this.config.columns).forEach((e=>{var i=Object.getOwnPropertyDescriptor(t,e),s=t[e];i&&Object.defineProperty(t,e,{set:e=>{s=e,this.defWatcherBlock||this.save("columns"),i.set&&i.set(e)},get:()=>(i.get&&i.get(),s)})})),this.defWatcherBlock=!1)}load(e,t){var i=this.retrieveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retrieveData(e){return!!this.readFunc&&this.readFunc(this.id,e)}mergeDefinition(e,t,i){var s=[];return(t=t||[]).forEach(((t,o)=>{var n,r=this._findColumn(e,t);r&&(i?n=Object.keys(t):!0===this.config.columns||null==this.config.columns?(n=Object.keys(r)).push("width"):n=this.config.columns,n.forEach((e=>{"columns"!==e&&void 0!==t[e]&&(r[e]=t[e])})),r.columns&&(r.columns=this.mergeDefinition(r.columns,t.columns)),s.push(r))})),e.forEach(((e,i)=>{this._findColumn(t,e)||(s.length>i?s.splice(i,0,e):s.push(e))})),s}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find((function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}}))}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"headerFilter":t=this.table.modules.filter.getHeaderFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach((function(e){e.column=e.field,delete e.field})),e}getGroupConfig(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach((e=>{var s,o={},n=e.getDefinition();e.isGroup?(o.title=n.title,o.columns=this.parseColumns(e.getColumns())):(o.field=e.getField(),!0===this.config.columns||null==this.config.columns?((s=Object.keys(n)).push("width"),s.push("visible")):s=this.config.columns,s.forEach((t=>{switch(t){case"width":o.width=e.getWidth();break;case"visible":o.visible=e.visible;break;default:"function"!=typeof n[t]&&-1===i.indexOf(t)&&(o[t]=n[t])}}))),t.push(o)})),t}}te.moduleName="persistence",te.moduleInitOrder=-10,te.readers=Q,te.writers=ee;class ie extends s{constructor(e){super(e),this.columnSubscribers={},this.registerTableOption("rowContextPopup",!1),this.registerTableOption("rowClickPopup",!1),this.registerTableOption("rowDblClickPopup",!1),this.registerTableOption("groupContextPopup",!1),this.registerTableOption("groupClickPopup",!1),this.registerTableOption("groupDblClickPopup",!1),this.registerColumnOption("headerContextPopup"),this.registerColumnOption("headerClickPopup"),this.registerColumnOption("headerDblClickPopup"),this.registerColumnOption("headerPopup"),this.registerColumnOption("headerPopupIcon"),this.registerColumnOption("contextPopup"),this.registerColumnOption("clickPopup"),this.registerColumnOption("dblClickPopup"),this.registerComponentFunction("cell","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("column","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("row","popup",this._componentPopupCall.bind(this)),this.registerComponentFunction("group","popup",this._componentPopupCall.bind(this))}initialize(){this.initializeRowWatchers(),this.initializeGroupWatchers(),this.subscribe("column-init",this.initializeColumn.bind(this))}_componentPopupCall(e,t,i){this.loadPopupEvent(t,null,e,i)}initializeRowWatchers(){this.table.options.rowContextPopup&&(this.subscribe("row-contextmenu",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup)),this.table.on("rowTapHold",this.loadPopupEvent.bind(this,this.table.options.rowContextPopup))),this.table.options.rowClickPopup&&this.subscribe("row-click",this.loadPopupEvent.bind(this,this.table.options.rowClickPopup)),this.table.options.rowDblClickPopup&&this.subscribe("row-dblclick",this.loadPopupEvent.bind(this,this.table.options.rowDblClickPopup))}initializeGroupWatchers(){this.table.options.groupContextPopup&&(this.subscribe("group-contextmenu",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup)),this.table.on("groupTapHold",this.loadPopupEvent.bind(this,this.table.options.groupContextPopup))),this.table.options.groupClickPopup&&this.subscribe("group-click",this.loadPopupEvent.bind(this,this.table.options.groupClickPopup)),this.table.options.groupDblClickPopup&&this.subscribe("group-dblclick",this.loadPopupEvent.bind(this,this.table.options.groupDblClickPopup))}initializeColumn(e){var t=e.definition;t.headerContextPopup&&!this.columnSubscribers.headerContextPopup&&(this.columnSubscribers.headerContextPopup=this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"),this.subscribe("column-contextmenu",this.columnSubscribers.headerContextPopup),this.table.on("headerTapHold",this.loadPopupTableColumnEvent.bind(this,"headerContextPopup"))),t.headerClickPopup&&!this.columnSubscribers.headerClickPopup&&(this.columnSubscribers.headerClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerClickPopup"),this.subscribe("column-click",this.columnSubscribers.headerClickPopup)),t.headerDblClickPopup&&!this.columnSubscribers.headerDblClickPopup&&(this.columnSubscribers.headerDblClickPopup=this.loadPopupTableColumnEvent.bind(this,"headerDblClickPopup"),this.subscribe("column-dblclick",this.columnSubscribers.headerDblClickPopup)),t.headerPopup&&this.initializeColumnHeaderPopup(e),t.contextPopup&&!this.columnSubscribers.contextPopup&&(this.columnSubscribers.contextPopup=this.loadPopupTableCellEvent.bind(this,"contextPopup"),this.subscribe("cell-contextmenu",this.columnSubscribers.contextPopup),this.table.on("cellTapHold",this.loadPopupTableCellEvent.bind(this,"contextPopup"))),t.clickPopup&&!this.columnSubscribers.clickPopup&&(this.columnSubscribers.clickPopup=this.loadPopupTableCellEvent.bind(this,"clickPopup"),this.subscribe("cell-click",this.columnSubscribers.clickPopup)),t.dblClickPopup&&!this.columnSubscribers.dblClickPopup&&(this.columnSubscribers.dblClickPopup=this.loadPopupTableCellEvent.bind(this,"dblClickPopup"),this.subscribe("cell-click",this.columnSubscribers.dblClickPopup))}initializeColumnHeaderPopup(e){var t,i=e.definition.headerPopupIcon;(t=document.createElement("span")).classList.add("tabulator-header-popup-button"),i?("function"==typeof i&&(i=i(e.getComponent())),i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i):t.innerHTML="⋮",t.addEventListener("click",(t=>{t.stopPropagation(),t.preventDefault(),this.loadPopupEvent(e.definition.headerPopup,t,e)})),e.titleElement.insertBefore(t,e.titleElement.firstChild)}loadPopupTableCellEvent(e,t,i){i._cell&&(i=i._cell),i.column.definition[e]&&this.loadPopupEvent(i.column.definition[e],t,i)}loadPopupTableColumnEvent(e,t,i){i._column&&(i=i._column),i.definition[e]&&this.loadPopupEvent(i.definition[e],t,i)}loadPopupEvent(e,t,i,s){var o;i._group?i=i._group:i._row&&(i=i._row),e="function"==typeof e?e.call(this.table,t,i.getComponent(),(function(e){o=e})):e,this.loadPopup(t,i,e,o,s)}loadPopup(e,t,i,s,o){var n,r,a=!(e instanceof MouseEvent);i instanceof HTMLElement?n=i:(n=document.createElement("div")).innerHTML=i,n.classList.add("tabulator-popup"),n.addEventListener("click",(e=>{e.stopPropagation()})),a||e.preventDefault(),r=this.popup(n),"function"==typeof s&&r.renderCallback(s),e?r.show(e):r.show(t.getElement(),o||"center"),r.hideOnBlur((()=>{this.dispatchExternal("popupClosed",t.getComponent())})),this.dispatchExternal("popupOpened",t.getComponent())}}ie.moduleName="popup";class se extends s{constructor(e){super(e),this.element=!1,this.manualBlock=!1,this.beforeprintEventHandler=null,this.afterprintEventHandler=null,this.registerTableOption("printAsHtml",!1),this.registerTableOption("printFormatter",!1),this.registerTableOption("printHeader",!1),this.registerTableOption("printFooter",!1),this.registerTableOption("printStyled",!0),this.registerTableOption("printRowRange","visible"),this.registerTableOption("printConfig",{}),this.registerColumnOption("print"),this.registerColumnOption("titlePrint")}initialize(){this.table.options.printAsHtml&&(this.beforeprintEventHandler=this.replaceTable.bind(this),this.afterprintEventHandler=this.cleanup.bind(this),window.addEventListener("beforeprint",this.beforeprintEventHandler),window.addEventListener("afterprint",this.afterprintEventHandler),this.subscribe("table-destroy",this.destroy.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}destroy(){this.table.options.printAsHtml&&(window.removeEventListener("beforeprint",this.beforeprintEventHandler),window.removeEventListener("afterprint",this.afterprintEventHandler))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var s,o,n=window.scrollX,r=window.scrollY,a=document.createElement("div"),l=document.createElement("div"),h=this.table.modules.export.generateTable(void 0!==i?i:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(a.classList.add("tabulator-print-header"),"string"==typeof(s="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?a.innerHTML=s:a.appendChild(s),this.element.appendChild(a)),this.element.appendChild(h),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),"string"==typeof(o="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?l.innerHTML=o:l.appendChild(o),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,h),window.print(),this.cleanup(),window.scrollTo(n,r),this.manualBlock=!1}}se.moduleName="print";class oe extends s{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0,this.registerTableOption("reactiveData",!1)}initialize(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this,"cellsave")),this.subscribe("cell-value-save-after",this.unblock.bind(this,"cellsave")),this.subscribe("row-data-save-before",this.block.bind(this,"rowsave")),this.subscribe("row-data-save-after",this.unblock.bind(this,"rowsave")),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}watchData(e){var t,i=this;this.currentVersion++,t=this.currentVersion,this.unwatchData(),this.data=e,this.origFuncs.push=e.push,Object.defineProperty(this.data,"push",{enumerable:!1,configurable:!0,value:function(){var s,o=Array.from(arguments);return i.blocked||t!==i.currentVersion||(i.block("data-push"),o.forEach((e=>{i.table.rowManager.addRowActual(e,!1)})),s=i.origFuncs.push.apply(e,arguments),i.unblock("data-push")),s}}),this.origFuncs.unshift=e.unshift,Object.defineProperty(this.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var s,o=Array.from(arguments);return i.blocked||t!==i.currentVersion||(i.block("data-unshift"),o.forEach((e=>{i.table.rowManager.addRowActual(e,!0)})),s=i.origFuncs.unshift.apply(e,arguments),i.unblock("data-unshift")),s}}),this.origFuncs.shift=e.shift,Object.defineProperty(this.data,"shift",{enumerable:!1,configurable:!0,value:function(){var s,o;return i.blocked||t!==i.currentVersion||(i.block("data-shift"),i.data.length&&(s=i.table.rowManager.getRowFromDataObject(i.data[0]))&&s.deleteActual(),o=i.origFuncs.shift.call(e),i.unblock("data-shift")),o}}),this.origFuncs.pop=e.pop,Object.defineProperty(this.data,"pop",{enumerable:!1,configurable:!0,value:function(){var s,o;return i.blocked||t!==i.currentVersion||(i.block("data-pop"),i.data.length&&(s=i.table.rowManager.getRowFromDataObject(i.data[i.data.length-1]))&&s.deleteActual(),o=i.origFuncs.pop.call(e),i.unblock("data-pop")),o}}),this.origFuncs.splice=e.splice,Object.defineProperty(this.data,"splice",{enumerable:!1,configurable:!0,value:function(){var s,o,n=Array.from(arguments),r=n[0]<0?e.length+n[0]:n[0],a=n[1],l=!!n[2]&&n.slice(2);if(!i.blocked&&t===i.currentVersion){if(i.block("data-splice"),l&&((s=!!e[r]&&i.table.rowManager.getRowFromDataObject(e[r]))?l.forEach((e=>{i.table.rowManager.addRowActual(e,!0,s,!0)})):(l=l.slice().reverse()).forEach((e=>{i.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==a){var h=e.slice(r,void 0===n[1]?n[1]:r+a);h.forEach(((e,t)=>{var s=i.table.rowManager.getRowFromDataObject(e);s&&s.deleteActual(t!==h.length-1)}))}(l||0!==a)&&i.table.rowManager.reRenderInPosition(),o=i.origFuncs.splice.apply(e,arguments),i.unblock("data-splice")}return o}})}unwatchData(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e)}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],s={};i&&(s.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-push");var o=s.push.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-push")}return o}}),s.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-unshift");var o=s.unshift.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-unshift")}return o}}),s.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-shift");var o=s.shift.call(i);this.rebuildTree(e),t.unblock("tree-shift")}return o}}),s.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-pop");var o=s.pop.call(i);this.rebuildTree(e),t.unblock("tree-pop")}return o}}),s.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:()=>{if(!t.blocked){t.block("tree-splice");var o=s.splice.apply(i,arguments);this.rebuildTree(e),t.unblock("tree-splice")}return o}}))}rebuildTree(e){this.table.modules.dataTree.initializeRow(e),this.table.modules.dataTree.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}watchKey(e,t,i){var s=this,o=Object.getOwnPropertyDescriptor(t,i),n=t[i],r=this.currentVersion;Object.defineProperty(t,i,{set:t=>{if(n=t,!s.blocked&&r===s.currentVersion){s.block("key");var a={};a[i]=t,e.updateData(a),s.unblock("key")}o.set&&o.set(t)},get:()=>(o.get&&o.get(),n)})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(e){this.blocked||(this.blocked=e)}unblock(e){this.blocked===e&&(this.blocked=!1)}}oe.moduleName="reactiveData";class ne extends s{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.latestX=!1,this.handle=null,this.initialNextColumn=null,this.nextColumn=null,this.initialized=!1,this.registerColumnOption("resizable",!0),this.registerTableOption("resizableColumnFit",!1)}initialize(){this.subscribe("column-rendered",this.layoutColumnHeader.bind(this))}initializeEventWatchers(){this.initialized||(this.subscribe("cell-rendered",this.layoutCellHandles.bind(this)),this.subscribe("cell-delete",this.deInitializeComponent.bind(this)),this.subscribe("cell-height",this.resizeHandle.bind(this)),this.subscribe("column-moved",this.columnLayoutUpdated.bind(this)),this.subscribe("column-hide",this.deInitializeColumn.bind(this)),this.subscribe("column-show",this.columnLayoutUpdated.bind(this)),this.subscribe("column-width",this.columnWidthUpdated.bind(this)),this.subscribe("column-delete",this.deInitializeComponent.bind(this)),this.subscribe("column-height",this.resizeHandle.bind(this)),this.initialized=!0)}layoutCellHandles(e){"row"===e.row.type&&(this.deInitializeComponent(e),this.initializeColumn("cell",e,e.column,e.element))}layoutColumnHeader(e){e.definition.resizable&&(this.initializeEventWatchers(),this.deInitializeComponent(e),this.initializeColumn("header",e,e,e.element))}columnLayoutUpdated(e){var t=e.prevColumn();this.reinitializeColumn(e),t&&this.reinitializeColumn(t)}columnWidthUpdated(e){e.modules.frozen&&(this.table.modules.frozenColumns.leftColumns.includes(e)?this.table.modules.frozenColumns.leftColumns.forEach((e=>{this.reinitializeColumn(e)})):this.table.modules.frozenColumns.rightColumns.includes(e)&&this.table.modules.frozenColumns.rightColumns.forEach((e=>{this.reinitializeColumn(e)})))}frozenColumnOffset(e){var t=!1;return e.modules.frozen&&(t=e.modules.frozen.marginValue,"left"===e.modules.frozen.position?t+=e.getWidth()-3:t&&(t-=3)),!1!==t&&t+"px"}reinitializeColumn(e){var t=this.frozenColumnOffset(e);e.cells.forEach((i=>{i.modules.resize&&i.modules.resize.handleEl&&(t&&(i.modules.resize.handleEl.style[e.modules.frozen.position]=t,i.modules.resize.handleEl.style["z-index"]=11),i.element.after(i.modules.resize.handleEl))})),e.modules.resize&&e.modules.resize.handleEl&&(t&&(e.modules.resize.handleEl.style[e.modules.frozen.position]=t),e.element.after(e.modules.resize.handleEl))}initializeColumn(e,t,i,s){var o=this,n=i.definition.resizable,r={},a=i.getLastColumn();if("header"===e&&(r={variableHeight:"textarea"==i.definition.formatter||i.definition.variableHeight}),(!0===n||n==e)&&this._checkResizability(a)){var l=document.createElement("span");l.className="tabulator-col-resize-handle",l.addEventListener("click",(function(e){e.stopPropagation()}));var h=function(e){o.startColumn=i,o.initialNextColumn=o.nextColumn=a.nextColumn(),o._mouseDown(e,a,l)};l.addEventListener("mousedown",h),l.addEventListener("touchstart",h,{passive:!0}),l.addEventListener("dblclick",(e=>{var t=a.getWidth();e.stopPropagation(),a.reinitializeWidth(!0),t!==a.getWidth()&&(o.dispatch("column-resized",a),o.table.externalEvents.dispatch("columnResized",a.getComponent()))})),i.modules.frozen&&(l.style.position="sticky",l.style[i.modules.frozen.position]=this.frozenColumnOffset(i)),r.handleEl=l,s.parentNode&&i.visible&&s.after(l)}t.modules.resize=r}deInitializeColumn(e){this.deInitializeComponent(e),e.cells.forEach((e=>{this.deInitializeComponent(e)}))}deInitializeComponent(e){var t;e.modules.resize&&(t=e.modules.resize.handleEl)&&t.parentElement&&t.parentElement.removeChild(t)}resizeHandle(e,t){e.modules.resize&&e.modules.resize.handleEl&&(e.modules.resize.handleEl.style.height=t)}_checkResizability(e){return e.definition.resizable}_mouseDown(e,t,i){var s=this;function o(e){var i,o,n=void 0===e.screenX?e.touches[0].screenX:e.screenX,r=n-s.startX,a=n-s.latestX;if(s.latestX=n,s.table.rtl&&(r=-r,a=-a),i=t.width==t.minWidth||t.width==t.maxWidth,t.setWidth(s.startWidth+r),o=t.width==t.minWidth||t.width==t.maxWidth,a<0&&(s.nextColumn=s.initialNextColumn),s.table.options.resizableColumnFit&&s.nextColumn&&(!i||!o)){let e=s.nextColumn.getWidth();a>0&&e<=s.nextColumn.minWidth&&(s.nextColumn=s.nextColumn.nextColumn()),s.nextColumn&&s.nextColumn.setWidth(s.nextColumn.getWidth()-a)}s.table.columnManager.rerenderColumns(!0),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.startWidth!==t.getWidth()&&(s.table.columnManager.verticalAlignHeaders(),s.dispatch("column-resized",t),s.table.externalEvents.dispatch("columnResized",t.getComponent()))}s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.latestX=s.startX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)}}ne.moduleName="resizeColumns";class re extends s{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null,this.registerTableOption("resizableRows",!1)}initialize(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}initializeRow(e){var t=this,i=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var o=document.createElement("div");o.className="tabulator-row-resize-handle prev",s.addEventListener("click",(function(e){e.stopPropagation()}));var n=function(i){t.startRow=e,t._mouseDown(i,e,s)};s.addEventListener("mousedown",n),s.addEventListener("touchstart",n,{passive:!0}),o.addEventListener("click",(function(e){e.stopPropagation()}));var r=function(i){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(i,s,o))};o.addEventListener("mousedown",r),o.addEventListener("touchstart",r,{passive:!0}),i.appendChild(s),i.appendChild(o)}_mouseDown(e,t,i){var s=this;function o(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.dispatchExternal("rowResized",t.getComponent())}s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)}}re.moduleName="resizeRows";class ae extends s{constructor(e){super(e),this.binding=!1,this.visibilityObserver=!1,this.resizeObserver=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1,this.visible=!1,this.initialized=!1,this.initialRedraw=!1,this.registerTableOption("autoResize",!0)}initialize(){if(this.table.options.autoResize){var e,t=this.table;this.tableHeight=t.element.clientHeight,this.tableWidth=t.element.clientWidth,t.element.parentNode&&(this.containerHeight=t.element.parentNode.clientHeight,this.containerWidth=t.element.parentNode.clientWidth),"undefined"!=typeof IntersectionObserver&&"undefined"!=typeof ResizeObserver&&"virtual"===t.rowManager.getRenderMode()?(this.initializeVisibilityObserver(),this.autoResize=!0,this.resizeObserver=new ResizeObserver((e=>{if(!t.browserMobile||t.browserMobile&&(!t.modules.edit||t.modules.edit&&!t.modules.edit.currentCell)){var i=Math.floor(e[0].contentRect.height),s=Math.floor(e[0].contentRect.width);this.tableHeight==i&&this.tableWidth==s||(this.tableHeight=i,this.tableWidth=s,t.element.parentNode&&(this.containerHeight=t.element.parentNode.clientHeight,this.containerWidth=t.element.parentNode.clientWidth),this.redrawTable())}})),this.resizeObserver.observe(t.element),e=window.getComputedStyle(t.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(e.getPropertyValue("max-height")||e.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((e=>{if(!t.browserMobile||t.browserMobile&&(!t.modules.edit||t.modules.edit&&!t.modules.edit.currentCell)){var i=Math.floor(e[0].contentRect.height),s=Math.floor(e[0].contentRect.width);this.containerHeight==i&&this.containerWidth==s||(this.containerHeight=i,this.containerWidth=s,this.tableHeight=t.element.clientHeight,this.tableWidth=t.element.clientWidth),this.redrawTable()}})),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!t.browserMobile||t.browserMobile&&(!t.modules.edit||t.modules.edit&&!t.modules.edit.currentCell))&&(t.columnManager.rerenderColumns(!0),t.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver((e=>{this.visible=e[0].isIntersecting,this.initialized?this.visible&&(this.redrawTable(this.initialRedraw),this.initialRedraw=!1):(this.initialized=!0,this.initialRedraw=!this.visible)})),this.visibilityObserver.observe(this.table.element)}redrawTable(e){this.initialized&&this.visible&&(this.table.columnManager.rerenderColumns(!0),this.table.redraw(e))}tableResized(){this.table.rowManager.redraw()}clearBindings(){this.binding&&window.removeEventListener("resize",this.binding),this.resizeObserver&&this.resizeObserver.unobserve(this.table.element),this.visibilityObserver&&this.visibilityObserver.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}ae.moduleName="resizeTable";class le extends s{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1,this.registerTableOption("responsiveLayout",!1),this.registerTableOption("responsiveLayoutCollapseStartOpen",!0),this.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),this.registerTableOption("responsiveLayoutCollapseFormatter",!1),this.registerColumnOption("responsive")}initialize(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),"collapse"===this.table.options.responsiveLayout&&(this.subscribe("row-data-changed",this.generateCollapsedRowContent.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}tableRedraw(e){-1===["fitColumns","fitDataStretch"].indexOf(this.layoutMode())&&(e||this.update())}initializeResponsivity(){var e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(((t,i)=>{t.modules.responsive&&t.modules.responsive.order&&t.modules.responsive.visible&&(t.modules.responsive.index=i,e.push(t),t.visible||"collapse"!==this.mode||this.hiddenColumns.push(t))})),e=(e=e.reverse()).sort(((e,t)=>t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index)),this.columns=e,"collapse"===this.mode&&this.generateCollapsedContent();for(let e of this.table.columnManager.columnsByIndex)if("responsiveCollapse"==e.definition.formatter){this.collapseHandleColumn=e;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}}initializeRow(e){var t;"calc"!==e.type&&((t=document.createElement("div")).classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initializeResponsivity())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&((t=this.hiddenColumns.indexOf(e))>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=!0;e;){let t="fitColumns"==this.table.modules.layout.getMode()?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),i=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-t;if(i<0){let t=this.columns[this.index];t?(this.hideColumn(t),this.index++):e=!1}else{let t=this.columns[this.index-1];t&&i>0&&i>=t.getWidth()?(this.showColumn(t),this.index--):e=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){this.table.rowManager.getDisplayRows().forEach((e=>{this.generateCollapsedRowContent(e)}))}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);(i=this.collapseFormatter(this.generateCollapsedRowData(e)))&&t.appendChild(i)}}generateCollapsedRowData(e){var t,i=e.getData(),s=[];return this.hiddenColumns.forEach((o=>{var n=o.getFieldValue(i);if(o.definition.title&&o.field)if(o.modules.format&&this.table.options.responsiveLayoutCollapseUseFormatters){function r(e){e()}t={value:!1,data:{},getValue:function(){return n},getData:function(){return i},getType:function(){return"cell"},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return o.getComponent()},getTable:()=>this.table},s.push({field:o.field,title:o.definition.title,value:o.modules.format.formatter.call(this.table.modules.format,t,o.modules.format.params,r)})}else s.push({field:o.field,title:o.definition.title,value:n})})),s}formatCollapsedData(e){var t=document.createElement("table");return e.forEach((function(e){var i,s=document.createElement("tr"),o=document.createElement("td"),n=document.createElement("td"),r=document.createElement("strong");o.appendChild(r),this.langBind("columns|"+e.field,(function(t){r.innerHTML=t||e.title})),e.value instanceof Node?((i=document.createElement("div")).appendChild(e.value),n.appendChild(i)):n.innerHTML=e.value,s.appendChild(o),s.appendChild(n),t.appendChild(s)}),this),Object.keys(e).length?t:""}}le.moduleName="responsiveLayout";class he extends s{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null,this.registerTableOption("selectableRows","highlight"),this.registerTableOption("selectableRowsRangeMode","drag"),this.registerTableOption("selectableRowsRollingSelection",!0),this.registerTableOption("selectableRowsPersistence",!0),this.registerTableOption("selectableRowsCheck",(function(e,t){return!0})),this.registerTableFunction("selectRow",this.selectRows.bind(this)),this.registerTableFunction("deselectRow",this.deselectRows.bind(this)),this.registerTableFunction("toggleSelectRow",this.toggleRow.bind(this)),this.registerTableFunction("getSelectedRows",this.getSelectedRows.bind(this)),this.registerTableFunction("getSelectedData",this.getSelectedData.bind(this)),this.registerComponentFunction("row","select",this.selectRows.bind(this)),this.registerComponentFunction("row","deselect",this.deselectRows.bind(this)),this.registerComponentFunction("row","toggleSelect",this.toggleRow.bind(this)),this.registerComponentFunction("row","isSelected",this.isRowSelected.bind(this))}initialize(){this.deprecatedOptionsCheck(),"highlight"===this.table.options.selectableRows&&this.table.options.selectableRange&&(this.table.options.selectableRows=!1),!1!==this.table.options.selectableRows&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.rowRetrieve.bind(this)),this.table.options.selectableRows&&!this.table.options.selectableRowsPersistence&&this.subscribe("data-refreshing",this.deselectRows.bind(this)))}deprecatedOptionsCheck(){this.deprecationCheck("selectable","selectableRows",!0),this.deprecationCheck("selectableRollingSelection","selectableRowsRollingSelection",!0),this.deprecationCheck("selectableRangeMode","selectableRowsRangeMode",!0),this.deprecationCheck("selectablePersistence","selectableRowsPersistence",!0),this.deprecationCheck("selectableCheck","selectableRowsCheck",!0)}rowRetrieve(e,t){return"selected"===e?this.selectedRows:t}rowDeleted(e){this._deselectRow(e,!0)}clearSelectionData(e){var t=this.selectedRows.length;this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t&&!0!==e&&this._rowSelectionChanged()}initializeRow(e){var t=this,i=t.checkRowSelectability(e),s=e.getElement(),o=function(){setTimeout((function(){t.selecting=!1}),50),document.body.removeEventListener("mouseup",o)};e.modules.select={selected:!1},s.classList.toggle("tabulator-selectable",i),s.classList.toggle("tabulator-unselectable",!i),t.checkRowSelectability(e)&&t.table.options.selectableRows&&"highlight"!=t.table.options.selectableRows&&("click"===t.table.options.selectableRowsRangeMode?s.addEventListener("click",this.handleComplexRowClick.bind(this,e)):(s.addEventListener("click",(function(i){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)})),s.addEventListener("mousedown",(function(i){if(i.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",o),document.body.addEventListener("keyup",o),t.toggleRow(e),!1})),s.addEventListener("mouseenter",(function(i){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))})),s.addEventListener("mouseout",(function(i){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))}))))}handleComplexRowClick(e,t){if(t.shiftKey){this.table._clearSelection(),this.lastClickedRow=this.lastClickedRow||e;var i=this.table.rowManager.getDisplayRowIndex(this.lastClickedRow),s=this.table.rowManager.getDisplayRowIndex(e),o=i<=s?i:s,n=i>=s?i:s,r=this.table.rowManager.getDisplayRows().slice(0).splice(o,n-o+1);t.ctrlKey||t.metaKey?(r.forEach((t=>{t!==this.lastClickedRow&&(!0===this.table.options.selectableRows||this.isRowSelected(e)||this.selectedRows.lengththis.table.options.selectableRows&&(r=r.slice(0,this.table.options.selectableRows)),this.selectRows(r)),this.table._clearSelection()}else t.ctrlKey||t.metaKey?(this.toggleRow(e),this.lastClickedRow=e):(this.deselectRows(void 0,!0),this.selectRows(e),this.lastClickedRow=e)}checkRowSelectability(e){return!(!e||"row"!==e.type)&&this.table.options.selectableRowsCheck.call(this.table,e.getComponent())}toggleRow(e){this.checkRowSelectability(e)&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t,i,s=[];switch(typeof e){case"undefined":t=this.table.rowManager.rows;break;case"number":t=this.table.rowManager.findRow(e);break;case"string":(t=this.table.rowManager.findRow(e))||(t=this.table.rowManager.getRows(e));break;default:t=e}Array.isArray(t)?t.length&&(t.forEach((e=>{(i=this._selectRow(e,!0,!0))&&s.push(i)})),this._rowSelectionChanged(!1,s)):t&&this._selectRow(t,!1,!0)}_selectRow(e,t,i){if(!isNaN(this.table.options.selectableRows)&&!0!==this.table.options.selectableRows&&!i&&this.selectedRows.length>=this.table.options.selectableRows){if(!this.table.options.selectableRowsRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var s=this.table.rowManager.findRow(e);if(s){if(-1==this.selectedRows.indexOf(s))return s.getElement().classList.add("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!0,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!0),this.selectedRows.push(s),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!0),this.dispatchExternal("rowSelected",s.getComponent()),this._rowSelectionChanged(t,s),s}else t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return-1!==this.selectedRows.indexOf(e)}deselectRows(e,t){var i,s,o=[];switch(typeof e){case"undefined":i=Object.assign([],this.selectedRows);break;case"number":i=this.table.rowManager.findRow(e);break;case"string":(i=this.table.rowManager.findRow(e))||(i=this.table.rowManager.getRows(e));break;default:i=e}Array.isArray(i)?i.length&&(i.forEach((e=>{(s=this._deselectRow(e,!0,!0))&&o.push(s)})),this._rowSelectionChanged(t,[],o)):i&&this._deselectRow(i,t,!0)}_deselectRow(e,t){var i,s,o=this,n=o.table.rowManager.findRow(e);if(n){if((i=o.selectedRows.findIndex((function(e){return e==n})))>-1)return(s=n.getElement())&&s.classList.remove("tabulator-selected"),n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),o.selectedRows.splice(i,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),this.dispatchExternal("rowDeselected",n.getComponent()),o._rowSelectionChanged(t,void 0,n),n}else t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getData())})),e}getSelectedRows(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getComponent())})),e}_rowSelectionChanged(e,t=[],i=[]){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||(Array.isArray(t)||(t=[t]),t=t.map((e=>e.getComponent())),Array.isArray(i)||(i=[i]),i=i.map((e=>e.getComponent())),this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows(),t,i))}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0);if(t)for(let e of i)this._selectRow(e,!0);else for(let e of i)this._deselectRow(e,!0)}}function de(e,t,i,s,o,n,r){var a=window.DateTime||luxon.DateTime,l=r.format||"dd/MM/yyyy HH:mm:ss",h=r.alignEmptyValues,d=0;if(void 0!==a){if(a.isDateTime(e)||(e="iso"===l?a.fromISO(String(e)):a.fromFormat(String(e),l)),a.isDateTime(t)||(t="iso"===l?a.fromISO(String(t)):a.fromFormat(String(t),l)),e.isValid){if(t.isValid)return e-t;d=1}else d=t.isValid?-1:0;return("top"===h&&"desc"===n||"bottom"===h&&"asc"===n)&&(d*=-1),d}console.error("Sort Error - 'datetime' sorter is dependant on luxon.js")}he.moduleName="selectRow";var ce={number:function(e,t,i,s,o,n,r){var a=r.alignEmptyValues,l=r.decimalSeparator,h=r.thousandSeparator,d=0;if(e=String(e),t=String(t),h&&(e=e.split(h).join(""),t=t.split(h).join("")),l&&(e=e.split(l).join("."),t=t.split(l).join(".")),e=parseFloat(e),t=parseFloat(t),isNaN(e))d=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;d=1}return("top"===a&&"desc"===n||"bottom"===a&&"asc"===n)&&(d*=-1),d},string:function(e,t,i,s,o,n,r){var a,l=r.alignEmptyValues,h=0;if(e){if(t){switch(typeof r.locale){case"boolean":r.locale&&(a=this.langLocale());break;case"string":a=r.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),a)}h=1}else h=t?-1:0;return("top"===l&&"desc"===n||"bottom"===l&&"asc"===n)&&(h*=-1),h},date:function(e,t,i,s,o,n,r){return r.format||(r.format="dd/MM/yyyy"),de.call(this,e,t,i,s,o,n,r)},time:function(e,t,i,s,o,n,r){return r.format||(r.format="HH:mm"),de.call(this,e,t,i,s,o,n,r)},datetime:de,boolean:function(e,t,i,s,o,n,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,i,s,o,n,r){var a=r.type||"length",l=r.alignEmptyValues,h=0;function d(e){var t;switch(a){case"length":t=e.length;break;case"sum":t=e.reduce((function(e,t){return e+t}));break;case"max":t=Math.max.apply(null,e);break;case"min":t=Math.min.apply(null,e);break;case"avg":t=e.reduce((function(e,t){return e+t}))/e.length}return t}if(Array.isArray(e)){if(Array.isArray(t))return d(t)-d(e);h=1}else h=Array.isArray(t)?-1:0;return("top"===l&&"desc"===n||"bottom"===l&&"asc"===n)&&(h*=-1),h},exists:function(e,t,i,s,o,n,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,i,s,o,n,r){var a,l,h,d,c,u=0,m=/(\d+)|(\D+)/g,p=/\d/,g=r.alignEmptyValues,b=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((a=String(e).toLowerCase())===(l=String(t).toLowerCase()))return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(m),l=l.match(m),c=a.length>l.length?l.length:a.length;ud?1:-1;return a.length>l.length}b=1}else b=t||0===t?-1:0;return("top"===g&&"desc"===n||"bottom"===g&&"asc"===n)&&(b*=-1),b}};class ue extends s{constructor(e){super(e),this.sortList=[],this.changed=!1,this.registerTableOption("sortMode","local"),this.registerTableOption("initialSort",!1),this.registerTableOption("columnHeaderSortMulti",!0),this.registerTableOption("sortOrderReverse",!1),this.registerTableOption("headerSortElement","
    "),this.registerTableOption("headerSortClickElement","header"),this.registerColumnOption("sorter"),this.registerColumnOption("sorterParams"),this.registerColumnOption("headerSort",!0),this.registerColumnOption("headerSortStartingDir"),this.registerColumnOption("headerSortTristate")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),"remote"===this.table.options.sortMode&&this.subscribe("data-params",this.remoteSortParams.bind(this))}tableBuilt(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}remoteSortParams(e,t,i,s){var o=this.getSort();return o.forEach((e=>{delete e.column})),s.sort=o,s}userSetSort(e,t){this.setSort(e,t),this.refreshSort()}clearSort(){this.clear(),this.refreshSort()}initializeColumn(e){var t,i,s=!1;switch(typeof e.definition.sorter){case"string":ue.sorters[e.definition.sorter]?s=ue.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}if(e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:e.definition.headerSortTristate},!1!==e.definition.headerSort){if((t=e.getElement()).classList.add("tabulator-sortable"),(i=document.createElement("div")).classList.add("tabulator-col-sorter"),"icon"===this.table.options.headerSortClickElement)i.classList.add("tabulator-col-sorter-element");else t.classList.add("tabulator-col-sorter-element");switch(this.table.options.headerSortElement){case"function":break;case"object":i.appendChild(this.table.options.headerSortElement);break;default:i.innerHTML=this.table.options.headerSortElement}e.titleHolderElement.appendChild(i),e.modules.sort.element=i,this.setColumnHeaderSortIcon(e,"none"),"icon"===this.table.options.headerSortClickElement&&i.addEventListener("mousedown",(e=>{e.stopPropagation()})),("icon"===this.table.options.headerSortClickElement?i:t).addEventListener("click",(t=>{var i="",s=[],o=!1;if(e.modules.sort){if(e.modules.sort.tristate)i="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":i="desc";break;case"desc":i="asc";break;default:i=e.modules.sort.startingDir}this.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(o=(s=this.getSort()).findIndex((t=>t.field===e.getField())),o>-1?(s[o].dir=i,o=s.splice(o,1)[0],"none"!=i&&s.push(o)):"none"!=i&&s.push({column:e,dir:i}),this.setSort(s)):"none"==i?this.clear():this.setSort(e,i),this.refreshSort()}}))}}refreshSort(){"remote"===this.table.options.sortMode?this.reloadData(null,!1,!1):this.refreshData(!0)}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=[];return this.sortList.forEach((function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})})),e}setSort(e,t){var i=this,s=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach((function(e){var t;(t=i.table.columnManager.findColumn(e.column))?(e.column=t,s.push(e),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)})),i.sortList=s,this.dispatch("sort-changed")}clear(){this.setSort([])}findSorter(e){var t,i=this.table.rowManager.activeRows[0],s="string";if(i&&(i=i.getData(),e.getField()))switch(typeof(t=e.getFieldValue(i))){case"undefined":s="string";break;case"boolean":s="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(s="alphanum"):s="number"}return ue.sorters[s]}sort(e){var t=this,i=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,s=[],o=[];return this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",t.getSort()),t.clearColumnHeaders(),"remote"!==this.table.options.sortMode?(i.forEach((function(e,i){var o;e.column&&((o=e.column.modules.sort)&&(o.sorter||(o.sorter=t.findSorter(e.column)),e.params="function"==typeof o.params?o.params(e.column.getComponent(),e.dir):o.params,s.push(e)),t.setColumnHeader(e.column,e.dir))})),s.length&&t._sortItems(e,s)):i.forEach((function(e,i){t.setColumnHeader(e.column,e.dir)})),this.subscribedExternal("dataSorted")&&(e.forEach((e=>{o.push(e.getComponent())})),this.dispatchExternal("dataSorted",t.getSort(),o)),e}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach((e=>{e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"),this.setColumnHeaderSortIcon(e,"none"))}))}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort","asc"===t?"ascending":"descending"),this.setColumnHeaderSortIcon(e,t)}setColumnHeaderSortIcon(e,t){var i,s=e.modules.sort.element;if(e.definition.headerSort&&"function"==typeof this.table.options.headerSortElement){for(;s.firstChild;)s.removeChild(s.firstChild);"object"==typeof(i=this.table.options.headerSortElement.call(this.table,e.getComponent(),t))?s.appendChild(i):s.innerHTML=i}}_sortItems(e,t){var i=t.length-1;e.sort(((e,s)=>{for(var o,n=i;n>=0;n--){let i=t[n];if(0!==(o=this._sortRow(e,s,i.column,i.dir,i.params)))break}return o}))}_sortRow(e,t,i,s,o){var n,r,a="asc"==s?e:t,l="asc"==s?t:e;return e=void 0!==(e=i.getFieldValue(a.getData()))?e:"",t=void 0!==(t=i.getFieldValue(l.getData()))?t:"",n=a.getComponent(),r=l.getComponent(),i.modules.sort.sorter.call(this,e,t,n,r,i.getComponent(),s,o)}}ue.moduleName="sort",ue.sorters=ce;class me{constructor(e){return this._range=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._range.table.componentFunctionBinder.handle("range",e._range,t)}})}getElement(){return this._range.element}getData(){return this._range.getData()}getCells(){return this._range.getCells(!0)}getStructuredCells(){return this._range.getStructuredCells()}getRows(){return this._range.getRows().map((e=>e.getComponent()))}getColumns(){return this._range.getColumns().map((e=>e.getComponent()))}getBounds(){return this._range.getBounds()}getTopEdge(){return this._range.top}getBottomEdge(){return this._range.bottom}getLeftEdge(){return this._range.left}getRightEdge(){return this._range.right}setBounds(e,t){this._range.destroyedGuard("setBounds")&&this._range.setBounds(e?e._cell:e,t?t._cell:t)}setStartBound(e){this._range.destroyedGuard("setStartBound")&&(this._range.setEndBound(e?e._cell:e),this._range.rangeManager.layoutElement())}setEndBound(e){this._range.destroyedGuard("setEndBound")&&(this._range.setEndBound(e?e._cell:e),this._range.rangeManager.layoutElement())}clearValues(){this._range.destroyedGuard("clearValues")&&this._range.clearValues()}remove(){this._range.destroyedGuard("remove")&&this._range.destroy(!0)}}class pe extends e{constructor(e,t,i,s){super(e),this.rangeManager=t,this.element=null,this.initialized=!1,this.initializing={start:!1,end:!1},this.destroyed=!1,this.top=0,this.bottom=0,this.left=0,this.right=0,this.table=e,this.start={row:0,col:0},this.end={row:0,col:0},this.rangeManager.rowHeader&&(this.left=1,this.right=1,this.start.col=1,this.end.col=1),this.initElement(),setTimeout((()=>{this.initBounds(i,s)}))}initElement(){this.element=document.createElement("div"),this.element.classList.add("tabulator-range")}initBounds(e,t){this._updateMinMax(),e&&this.setBounds(e,t||e)}setStart(e,t){this.start.row===e&&this.start.col===t||(this.start.row=e,this.start.col=t,this.initializing.start=!0,this._updateMinMax())}setEnd(e,t){this.end.row===e&&this.end.col===t||(this.end.row=e,this.end.col=t,this.initializing.end=!0,this._updateMinMax())}setBounds(e,t,i){e&&this.setStartBound(e),this.setEndBound(t||e),this.rangeManager.layoutElement(i)}setStartBound(e){var t,i;"column"===e.type?this.rangeManager.columnSelection&&this.setStart(0,e.getPosition()-1):(t=e.row.position-1,i=e.column.getPosition()-1,e.column===this.rangeManager.rowHeader?this.setStart(t,1):this.setStart(t,i))}setEndBound(e){var t,i,s,o=this._getTableRows().length;"column"===e.type?this.rangeManager.columnSelection&&("column"===this.rangeManager.selecting?this.setEnd(o-1,e.getPosition()-1):"cell"===this.rangeManager.selecting&&this.setEnd(0,e.getPosition()-1)):(t=e.row.position-1,i=e.column.getPosition()-1,s=e.column===this.rangeManager.rowHeader,"row"===this.rangeManager.selecting?this.setEnd(t,this._getTableColumns().length-1):"row"!==this.rangeManager.selecting&&s?this.setEnd(t,0):"column"===this.rangeManager.selecting?this.setEnd(o-1,i):this.setEnd(t,i))}_updateMinMax(){this.top=Math.min(this.start.row,this.end.row),this.bottom=Math.max(this.start.row,this.end.row),this.left=Math.min(this.start.col,this.end.col),this.right=Math.max(this.start.col,this.end.col),this.initialized?this.dispatchExternal("rangeChanged",this.getComponent()):this.initializing.start&&this.initializing.end&&(this.initialized=!0,this.dispatchExternal("rangeAdded",this.getComponent()))}_getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}_getTableRows(){return this.table.rowManager.getDisplayRows()}layout(){var e,t,i,s,o,n,r=this.table.rowManager.renderer.vDomTop,a=this.table.rowManager.renderer.vDomBottom,l=this.table.columnManager.renderer.leftCol,h=this.table.columnManager.renderer.rightCol;null==r&&(r=0),null==a&&(a=1/0),null==l&&(l=0),null==h&&(h=1/0),this.overlaps(l,r,h,a)&&(e=Math.max(this.top,r),t=Math.min(this.bottom,a),i=Math.max(this.left,l),s=Math.min(this.right,h),o=this.rangeManager.getCell(e,i),n=this.rangeManager.getCell(t,s),this.element.classList.add("tabulator-range-active"),this.element.style.left=o.row.getElement().offsetLeft+o.getElement().offsetLeft+"px",this.element.style.top=o.row.getElement().offsetTop+"px",this.element.style.width=n.getElement().offsetLeft+n.getElement().offsetWidth-o.getElement().offsetLeft+"px",this.element.style.height=n.row.getElement().offsetTop+n.row.getElement().offsetHeight-o.row.getElement().offsetTop+"px")}atTopLeft(e){return e.row.position-1===this.top&&e.column.getPosition()-1===this.left}atBottomRight(e){return e.row.position-1===this.bottom&&e.column.getPosition()-1===this.right}occupies(e){return this.occupiesRow(e.row)&&this.occupiesColumn(e.column)}occupiesRow(e){return this.top<=e.position-1&&e.position-1<=this.bottom}occupiesColumn(e){return this.left<=e.getPosition()-1&&e.getPosition()-1<=this.right}overlaps(e,t,i,s){return!(this.left>i||e>this.right||this.top>s||t>this.bottom)}getData(){var e=[],t=this.getRows(),i=this.getColumns();return t.forEach((t=>{var s=t.getData(),o={};i.forEach((e=>{o[e.field]=s[e.field]})),e.push(o)})),e}getCells(e,t){var i=[],s=this.getRows(),o=this.getColumns();return e?i=s.map((e=>{var i=[];return e.getCells().forEach((e=>{o.includes(e.column)&&i.push(t?e.getComponent():e)})),i})):s.forEach((e=>{e.getCells().forEach((e=>{o.includes(e.column)&&i.push(t?e.getComponent():e)}))})),i}getStructuredCells(){return this.getCells(!0,!0)}getRows(){return this._getTableRows().slice(this.top,this.bottom+1)}getColumns(){return this._getTableColumns().slice(this.left,this.right+1)}clearValues(){var e=this.getCells(),t=this.table.options.selectableRangeClearCellsValue;this.table.blockRedraw(),e.forEach((e=>{e.setValue(t)})),this.table.restoreRedraw()}getBounds(e){var t=this.getCells(!1,e),i={start:null,end:null};return t.length?(i.start=t[0],i.end=t[t.length-1]):console.warn("No bounds defined on range"),i}getComponent(){return this.component||(this.component=new me(this)),this.component}destroy(e){this.destroyed=!0,this.element.remove(),e&&this.rangeManager.rangeRemoved(this),this.initialized&&this.dispatchExternal("rangeRemoved",this.getComponent())}destroyedGuard(e){return this.destroyed&&console.warn("You cannot call the "+e+" function on a destroyed range"),!this.destroyed}}class ge extends s{constructor(e){super(e),this.selecting="cell",this.mousedown=!1,this.ranges=[],this.overlay=null,this.rowHeader=null,this.layoutChangeTimeout=null,this.columnSelection=!1,this.rowSelection=!1,this.maxRanges=0,this.activeRange=!1,this.blockKeydown=!1,this.keyDownEvent=this._handleKeyDown.bind(this),this.mouseUpEvent=this._handleMouseUp.bind(this),this.registerTableOption("selectableRange",!1),this.registerTableOption("selectableRangeColumns",!1),this.registerTableOption("selectableRangeRows",!1),this.registerTableOption("selectableRangeClearCells",!1),this.registerTableOption("selectableRangeClearCellsValue",void 0),this.registerTableFunction("getRangesData",this.getRangesData.bind(this)),this.registerTableFunction("getRanges",this.getRanges.bind(this)),this.registerTableFunction("addRange",this.addRangeFromComponent.bind(this)),this.registerComponentFunction("cell","getRanges",this.cellGetRanges.bind(this)),this.registerComponentFunction("row","getRanges",this.rowGetRanges.bind(this)),this.registerComponentFunction("column","getRanges",this.colGetRanges.bind(this))}initialize(){this.options("selectableRange")&&(this.options("selectableRows")?console.warn("SelectRange functionality cannot be used in conjunction with row selection"):(this.maxRanges=this.options("selectableRange"),this.initializeTable(),this.initializeWatchers()))}initializeTable(){this.overlay=document.createElement("div"),this.overlay.classList.add("tabulator-range-overlay"),this.rangeContainer=document.createElement("div"),this.rangeContainer.classList.add("tabulator-range-container"),this.activeRangeCellElement=document.createElement("div"),this.activeRangeCellElement.classList.add("tabulator-range-cell-active"),this.overlay.appendChild(this.rangeContainer),this.overlay.appendChild(this.activeRangeCellElement),this.table.rowManager.element.addEventListener("keydown",this.keyDownEvent),this.resetRanges(),this.table.rowManager.element.appendChild(this.overlay),this.table.columnManager.element.setAttribute("tabindex",0),this.table.element.classList.add("tabulator-ranges")}initializeWatchers(){this.columnSelection=this.options("selectableRangeColumns"),this.rowSelection=this.options("selectableRangeRows"),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-mousedown",this.handleColumnMouseDown.bind(this)),this.subscribe("column-mousemove",this.handleColumnMouseMove.bind(this)),this.subscribe("column-resized",this.handleColumnResized.bind(this)),this.subscribe("column-width",this.layoutChange.bind(this)),this.subscribe("column-height",this.layoutChange.bind(this)),this.subscribe("column-resized",this.layoutChange.bind(this)),this.subscribe("columns-loaded",this.updateHeaderColumn.bind(this)),this.subscribe("cell-height",this.layoutChange.bind(this)),this.subscribe("cell-rendered",this.renderCell.bind(this)),this.subscribe("cell-mousedown",this.handleCellMouseDown.bind(this)),this.subscribe("cell-mousemove",this.handleCellMouseMove.bind(this)),this.subscribe("cell-click",this.handleCellClick.bind(this)),this.subscribe("cell-editing",this.handleEditingCell.bind(this)),this.subscribe("page-changed",this.redraw.bind(this)),this.subscribe("scroll-vertical",this.layoutChange.bind(this)),this.subscribe("scroll-horizontal",this.layoutChange.bind(this)),this.subscribe("data-destroy",this.tableDestroyed.bind(this)),this.subscribe("data-processed",this.resetRanges.bind(this)),this.subscribe("table-layout",this.layoutElement.bind(this)),this.subscribe("table-redraw",this.redraw.bind(this)),this.subscribe("table-destroy",this.tableDestroyed.bind(this)),this.subscribe("edit-editor-clear",this.finishEditingCell.bind(this)),this.subscribe("edit-blur",this.restoreFocus.bind(this)),this.subscribe("keybinding-nav-prev",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-next",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-left",this.keyNavigate.bind(this,"left")),this.subscribe("keybinding-nav-right",this.keyNavigate.bind(this,"right")),this.subscribe("keybinding-nav-up",this.keyNavigate.bind(this,"up")),this.subscribe("keybinding-nav-down",this.keyNavigate.bind(this,"down")),this.subscribe("keybinding-nav-range",this.keyNavigateRange.bind(this))}initializeColumn(e){this.columnSelection&&e.definition.headerSort&&"icon"!==this.options("headerSortClickElement")&&console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."),e.modules.edit}updateHeaderColumn(){this.rowSelection&&(this.rowHeader=this.table.columnManager.getVisibleColumnsByIndex()[0],this.rowHeader&&(this.rowHeader.definition.cssClass=this.rowHeader.definition.cssClass+" tabulator-range-row-header",this.rowHeader.definition.headerSort&&console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"),this.rowHeader.definition.editor&&console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior")))}getRanges(){return this.ranges.map((e=>e.getComponent()))}getRangesData(){return this.ranges.map((e=>e.getData()))}addRangeFromComponent(e,t){return e=e?e._cell:null,t=t?t._cell:null,this.addRange(e,t)}cellGetRanges(e){var t=[];return t=e.column===this.rowHeader?this.ranges.filter((t=>t.occupiesRow(e.row))):this.ranges.filter((t=>t.occupies(e))),t.map((e=>e.getComponent()))}rowGetRanges(e){var t=this.ranges.filter((t=>t.occupiesRow(e)));return t.map((e=>e.getComponent()))}colGetRanges(e){var t=this.ranges.filter((t=>t.occupiesColumn(e)));return t.map((e=>e.getComponent()))}_handleMouseUp(e){this.mousedown=!1,document.removeEventListener("mouseup",this.mouseUpEvent)}_handleKeyDown(e){if(!this.blockKeydown&&(!this.table.modules.edit||this.table.modules.edit&&!this.table.modules.edit.currentCell)){if("Enter"===e.key){if(this.table.modules.edit&&this.table.modules.edit.currentCell)return;this.table.modules.edit.editCell(this.getActiveCell()),e.preventDefault()}"Backspace"!==e.key&&"Delete"!==e.key||!this.options("selectableRangeClearCells")||this.activeRange&&this.activeRange.clearValues()}}initializeFocus(e){var t;try{document.selection?((t=document.body.createTextRange()).moveToElementText(e.getElement()),t.select()):window.getSelection&&((t=document.createRange()).selectNode(e.getElement()),window.getSelection().removeAllRanges(),window.getSelection().addRange(t))}catch(e){}}restoreFocus(e){return this.table.rowManager.element.focus(),!0}handleColumnResized(e){var t;"column"!==this.selecting&&"all"!==this.selecting||(t=this.ranges.some((t=>t.occupiesColumn(e))),t&&this.ranges.forEach((t=>{t.getColumns(!0).forEach((t=>{t!==e&&t.setWidth(e.width)}))})))}handleColumnMouseDown(e,t){(2!==e.button||"column"!==this.selecting&&"all"!==this.selecting||!this.activeRange.occupiesColumn(t))&&(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleColumnMouseMove(e,t){t!==this.rowHeader&&this.mousedown&&"all"!==this.selecting&&this.activeRange.setBounds(!1,t,!0)}renderCell(e){var t=e.getElement(),i=this.ranges.findIndex((t=>t.occupies(e)));t.classList.toggle("tabulator-range-selected",-1!==i),t.classList.toggle("tabulator-range-only-cell-selected",1===this.ranges.length&&this.ranges[0].atTopLeft(e)&&this.ranges[0].atBottomRight(e)),t.dataset.range=i}handleCellMouseDown(e,t){2===e.button&&(this.activeRange.occupies(t)||("row"===this.selecting||"all"===this.selecting)&&this.activeRange.occupiesRow(t.row))||(this.mousedown=!0,document.addEventListener("mouseup",this.mouseUpEvent),this.newSelection(e,t))}handleCellMouseMove(e,t){this.mousedown&&"all"!==this.selecting&&this.activeRange.setBounds(!1,t,!0)}handleCellClick(e,t){this.initializeFocus(t)}handleEditingCell(e){this.activeRange&&this.activeRange.setBounds(e)}finishEditingCell(){this.blockKeydown=!0,this.table.rowManager.element.focus(),setTimeout((()=>{this.blockKeydown=!1}),10)}keyNavigate(e,t){this.navigate(!1,!1,e)&&t.preventDefault()}keyNavigateRange(e,t,i,s){this.navigate(i,s,t)&&e.preventDefault()}navigate(e,t,i){var s,o,n,r,a,l,h;if(this.table.modules.edit&&this.table.modules.edit.currentCell)return!1;if(this.ranges.length>1&&(this.ranges=this.ranges.filter((e=>e===this.activeRange?(e.setEnd(e.start.row,e.start.col),!0):(e.destroy(),!1)))),o=this.activeRange,r=(n=t?o.end:o.start).row,a=n.col,e)switch(i){case"left":a=this.findJumpCellLeft(o.start.row,n.col);break;case"right":a=this.findJumpCellRight(o.start.row,n.col);break;case"up":r=this.findJumpCellUp(n.row,o.start.col);break;case"down":r=this.findJumpCellDown(n.row,o.start.col)}else{if(t&&("row"===this.selecting&&("left"===i||"right"===i)||"column"===this.selecting&&("up"===i||"down"===i)))return;switch(i){case"left":a=Math.max(a-1,0);break;case"right":a=Math.min(a+1,this.getTableColumns().length-1);break;case"up":r=Math.max(r-1,0);break;case"down":r=Math.min(r+1,this.getTableRows().length-1)}}return s=a!==n.col||r!==n.row,t||o.setStart(r,a),o.setEnd(r,a),t||(this.selecting="cell"),s?(l=this.getRowByRangePos(o.end.row),h=this.getColumnByRangePos(o.end.col),"left"!==i&&"right"!==i||null!==h.getElement().parentNode?"up"!==i&&"down"!==i||null!==l.getElement().parentNode?this.autoScroll(o,l.getElement(),h.getElement()):l.getComponent().scrollTo(void 0,!1):h.getComponent().scrollTo(void 0,!1),this.layoutElement(),!0):void 0}rangeRemoved(e){this.ranges=this.ranges.filter((t=>t!==e)),this.activeRange===e&&(this.ranges.length?this.activeRange=this.ranges[this.ranges.length-1]:this.addRange()),this.layoutElement()}findJumpCell(e,t,i,s){var o;t&&(e=e.reverse());for(let t of e){let e=t.getValue();if(i){if(o=t,e)break}else if(s){if(o=t,e)break}else{if(!e)break;o=t}}return o}findJumpCellLeft(e,t){var i=this.getRowByRangePos(e).cells.filter((e=>e.column.visible)),s=!i[t].getValue(),o=!!i[t]&&!i[t].getValue(),n=t,r=this.rowHeader?i.slice(1,t):i.slice(0,t),a=this.findJumpCell(r,!0,s,o);return a&&(n=a.column.getPosition()-1),n}findJumpCellRight(e,t){var i=this.getRowByRangePos(e).cells.filter((e=>e.column.visible)),s=!i[t].getValue(),o=!!i[t+1]&&!i[t+1].getValue(),n=t,r=this.findJumpCell(i.slice(t+1,i.length),!1,s,o);return r&&(n=r.column.getPosition()-1),n}findJumpCellUp(e,t){var i=this.getColumnByRangePos(t).cells.filter((e=>this.table.rowManager.activeRows.includes(e.row))),s=!i[e].getValue(),o=!!i[e-1]&&!i[e-1].getValue(),n=e,r=this.findJumpCell(i.slice(0,n),!0,s,o);return r&&(n=r.row.position-1),n}findJumpCellDown(e,t){var i=this.getColumnByRangePos(t).cells.filter((e=>this.table.rowManager.activeRows.includes(e.row))),s=!i[e].getValue(),o=!!i[e+1]&&!i[e+1].getValue(),n=e,r=this.findJumpCell(i.slice(n+1,i.length),!1,s,o);return r&&(n=r.row.position-1),n}newSelection(e,t){var i;if("column"===t.type){if(!this.columnSelection)return;if(t===this.rowHeader){i=this.resetRanges(),this.selecting="all";var s,o=this.getCell(-1,-1);return s=this.rowHeader?this.getCell(0,1):this.getCell(0,0),void i.setBounds(s,o)}this.selecting="column"}else t.column===this.rowHeader?this.selecting="row":this.selecting="cell";e.shiftKey?this.activeRange.setBounds(!1,t):e.ctrlKey?this.addRange().setBounds(t):this.resetRanges().setBounds(t)}autoScroll(e,t,i){var s,o,n,r,a,l=this.table.rowManager.element;void 0===t&&(t=this.getRowByRangePos(e.end.row).getElement()),void 0===i&&(i=this.getColumnByRangePos(e.end.col).getElement()),this.rowHeader&&(s=this.rowHeader.getElement()),o={left:i.offsetLeft,right:i.offsetLeft+i.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight},n={left:l.scrollLeft,right:Math.ceil(l.scrollLeft+l.clientWidth),top:l.scrollTop,bottom:l.scrollTop+l.offsetHeight-this.table.rowManager.scrollbarWidth},s&&(n.left+=s.offsetWidth),r=n.leftn.right&&(l.scrollLeft=o.right-l.clientWidth)),a||(o.topn.bottom&&(l.scrollTop=o.bottom-l.clientHeight))}layoutChange(){this.overlay.style.visibility="hidden",clearTimeout(this.layoutChangeTimeout),this.layoutChangeTimeout=setTimeout(this.layoutRanges.bind(this),200)}redraw(e){e&&(this.selecting="cell",this.resetRanges(),this.layoutElement())}layoutElement(e){(e?this.table.rowManager.getVisibleRows(!0):this.table.rowManager.getRows()).forEach((e=>{"row"===e.type&&(this.layoutRow(e),e.cells.forEach((e=>this.renderCell(e))))})),this.getTableColumns().forEach((e=>{this.layoutColumn(e)})),this.layoutRanges()}layoutRow(e){var t=e.getElement(),i=!1,s=this.ranges.some((t=>t.occupiesRow(e)));"row"===this.selecting?i=s:"all"===this.selecting&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutColumn(e){var t=e.getElement(),i=!1,s=this.ranges.some((t=>t.occupiesColumn(e)));"column"===this.selecting?i=s:"all"===this.selecting&&(i=!0),t.classList.toggle("tabulator-range-selected",i),t.classList.toggle("tabulator-range-highlight",s)}layoutRanges(){var e;this.table.initialized&&(e=this.getActiveCell())&&(this.activeRangeCellElement.style.left=e.row.getElement().offsetLeft+e.getElement().offsetLeft+"px",this.activeRangeCellElement.style.top=e.row.getElement().offsetTop+"px",this.activeRangeCellElement.style.width=e.getElement().offsetLeft+e.getElement().offsetWidth-e.getElement().offsetLeft+"px",this.activeRangeCellElement.style.height=e.row.getElement().offsetTop+e.row.getElement().offsetHeight-e.row.getElement().offsetTop+"px",this.ranges.forEach((e=>e.layout())),this.overlay.style.visibility="visible")}getCell(e,t){var i;return t<0&&(t=this.getTableColumns().length+t)<0?null:(e<0&&(e=this.getTableRows().length+e),(i=this.table.rowManager.getRowFromPosition(e+1))?i.getCells(!1,!0).filter((e=>e.column.visible))[t]:null)}getActiveCell(){return this.getCell(this.activeRange.start.row,this.activeRange.start.col)}getRowByRangePos(e){return this.getTableRows()[e]}getColumnByRangePos(e){return this.getTableColumns()[e]}getTableRows(){return this.table.rowManager.getDisplayRows()}getTableColumns(){return this.table.columnManager.getVisibleColumnsByIndex()}addRange(e,t){var i;return!0!==this.maxRanges&&this.ranges.length>=this.maxRanges&&this.ranges.shift().destroy(),i=new pe(this.table,this,e,t),this.activeRange=i,this.ranges.push(i),this.rangeContainer.appendChild(i.element),i}resetRanges(){var e,t;return this.ranges.forEach((e=>e.destroy())),this.ranges=[],e=this.addRange(),this.table.rowManager.activeRows.length&&(t=this.table.rowManager.activeRows[0].cells[this.rowHeader?1:0])&&(e.setBounds(t),this.initializeFocus(t)),e}tableDestroyed(){document.removeEventListener("mouseup",this.mouseUpEvent),this.table.rowManager.element.removeEventListener("keydown",this.keyDownEvent)}selectedRows(e){return e?this.activeRange.getRows().map((e=>e.getComponent())):this.activeRange.getRows()}selectedColumns(e){return e?this.activeRange.getColumns().map((e=>e.getComponent())):this.activeRange.getColumns()}}ge.moduleName="selectRange";class be extends s{constructor(e){super(e),this.tooltipSubscriber=null,this.headerSubscriber=null,this.timeout=null,this.popupInstance=null,this.registerTableOption("tooltipGenerationMode",void 0),this.registerTableOption("tooltipDelay",300),this.registerColumnOption("tooltip"),this.registerColumnOption("headerTooltip")}initialize(){this.deprecatedOptionsCheck(),this.subscribe("column-init",this.initializeColumn.bind(this))}deprecatedOptionsCheck(){this.deprecationCheckMsg("tooltipGenerationMode","This option is no longer needed as tooltips are always generated on hover now")}initializeColumn(e){e.definition.headerTooltip&&!this.headerSubscriber&&(this.headerSubscriber=!0,this.subscribe("column-mousemove",this.mousemoveCheck.bind(this,"headerTooltip")),this.subscribe("column-mouseout",this.mouseoutCheck.bind(this,"headerTooltip"))),e.definition.tooltip&&!this.tooltipSubscriber&&(this.tooltipSubscriber=!0,this.subscribe("cell-mousemove",this.mousemoveCheck.bind(this,"tooltip")),this.subscribe("cell-mouseout",this.mouseoutCheck.bind(this,"tooltip")))}mousemoveCheck(e,t,i){var s="tooltip"===e?i.column.definition.tooltip:i.definition.headerTooltip;s&&(this.clearPopup(),this.timeout=setTimeout(this.loadTooltip.bind(this,t,i,s),this.table.options.tooltipDelay))}mouseoutCheck(e,t,i){this.popupInstance||this.clearPopup()}clearPopup(e,t,i){clearTimeout(this.timeout),this.timeout=null,this.popupInstance&&this.popupInstance.hide()}loadTooltip(e,t,i){var s,o,n;"function"==typeof i&&(i=i(e,t.getComponent(),(function(e){o=e}))),i instanceof HTMLElement?s=i:(s=document.createElement("div"),!0===i&&(t instanceof p?i=t.value:t.definition.field?this.langBind("columns|"+t.definition.field,(e=>{s.innerHTML=i=e||t.definition.title})):i=t.definition.title),s.innerHTML=i),(i||0===i||!1===i)&&(s.classList.add("tabulator-tooltip"),s.addEventListener("mousemove",(e=>e.preventDefault())),this.popupInstance=this.popup(s),"function"==typeof o&&this.popupInstance.renderCallback(o),n=this.popupInstance.containerEventCoords(e),this.popupInstance.show(n.x+15,n.y+15).hideOnBlur((()=>{this.dispatchExternal("TooltipClosed",t.getComponent()),this.popupInstance=null})),this.dispatchExternal("TooltipOpened",t.getComponent()))}}be.moduleName="tooltip";var fe={integer:function(e,t,i){return""===t||null==t||(t=Number(t),!isNaN(t)&&isFinite(t)&&Math.floor(t)===t)},float:function(e,t,i){return""===t||null==t||(t=Number(t),!isNaN(t)&&isFinite(t)&&t%1!=0)},numeric:function(e,t,i){return""===t||null==t||!isNaN(t)},string:function(e,t,i){return""===t||null==t||isNaN(t)},alphanumeric:function(e,t,i){return""===t||null==t||new RegExp(/^[a-z0-9]+$/i).test(t)},max:function(e,t,i){return""===t||null==t||parseFloat(t)<=i},min:function(e,t,i){return""===t||null==t||parseFloat(t)>=i},starts:function(e,t,i){return""===t||null==t||String(t).toLowerCase().startsWith(String(i).toLowerCase())},ends:function(e,t,i){return""===t||null==t||String(t).toLowerCase().endsWith(String(i).toLowerCase())},minLength:function(e,t,i){return""===t||null==t||String(t).length>=i},maxLength:function(e,t,i){return""===t||null==t||String(t).length<=i},in:function(e,t,i){return""===t||null==t||("string"==typeof i&&(i=i.split("|")),i.indexOf(t)>-1)},regex:function(e,t,i){return""===t||null==t||new RegExp(i).test(t)},unique:function(e,t,i){if(""===t||null==t)return!0;var s=!0,o=e.getData(),n=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(e){var i=e.getData();i!==o&&t==n.getFieldValue(i)&&(s=!1)})),s},required:function(e,t,i){return""!==t&&null!=t}};class ve extends s{constructor(e){super(e),this.invalidCells=[],this.registerTableOption("validationMode","blocking"),this.registerColumnOption("validator"),this.registerTableFunction("getInvalidCells",this.getInvalidCells.bind(this)),this.registerTableFunction("clearCellValidation",this.userClearCellValidation.bind(this)),this.registerTableFunction("validate",this.userValidate.bind(this)),this.registerComponentFunction("cell","isValid",this.cellIsValid.bind(this)),this.registerComponentFunction("cell","clearValidation",this.clearValidation.bind(this)),this.registerComponentFunction("cell","validate",this.cellValidate.bind(this)),this.registerComponentFunction("column","validate",this.columnValidate.bind(this)),this.registerComponentFunction("row","validate",this.rowValidate.bind(this))}initialize(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("edit-success",this.editValidate.bind(this)),this.subscribe("edit-editor-clear",this.editorClear.bind(this)),this.subscribe("edit-edited-clear",this.editedClear.bind(this))}editValidate(e,t,i){var s="manual"===this.table.options.validationMode||this.validate(e.column.modules.validate,e,t);return!0!==s&&setTimeout((()=>{e.getElement().classList.add("tabulator-validation-fail"),this.dispatchExternal("validationFailed",e.getComponent(),t,s)})),s}editorClear(e,t){t&&e.column.modules.validate&&this.cellValidate(e),e.getElement().classList.remove("tabulator-validation-fail")}editedClear(e){e.modules.validate&&(e.modules.validate.invalid=!1)}cellIsValid(e){return e.modules.validate&&e.modules.validate.invalid||!0}cellValidate(e){return this.validate(e.column.modules.validate,e,e.getValue())}columnValidate(e){var t=[];return e.cells.forEach((e=>{!0!==this.cellValidate(e)&&t.push(e.getComponent())})),!t.length||t}rowValidate(e){var t=[];return e.cells.forEach((e=>{!0!==this.cellValidate(e)&&t.push(e.getComponent())})),!t.length||t}userClearCellValidation(e){e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.clearValidation(e._getSelf())}))}userValidate(e){var t=[];return this.table.rowManager.rows.forEach((e=>{var i=(e=e.getComponent()).validate();!0!==i&&(t=t.concat(i))})),!t.length||t}initializeColumnCheck(e){void 0!==e.definition.validator&&this.initializeColumn(e)}initializeColumn(e){var t,i=this,s=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach((e=>{(t=i._extractValidator(e))&&s.push(t)})):(t=this._extractValidator(e.definition.validator))&&s.push(t),e.modules.validate=!!s.length&&s)}_extractValidator(e){var t,i,s;switch(typeof e){case"string":return(s=e.indexOf(":"))>-1?(t=e.substring(0,s),i=e.substring(s+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i="function"==typeof e?e:ve.validators[e];return i?{type:"function"==typeof e?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var s=this,o=[],n=this.invalidCells.indexOf(t);return e&&e.forEach((e=>{e.func.call(s,t.getComponent(),i,e.params)||o.push({type:e.type,parameters:e.params})})),t.modules.validate||(t.modules.validate={}),o.length?(t.modules.validate.invalid=o,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==n&&this.invalidCells.push(t)):(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),n>-1&&this.invalidCells.splice(n,1)),!o.length||o}getInvalidCells(){var e=[];return this.invalidCells.forEach((t=>{e.push(t.getComponent())})),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))}}ve.moduleName="validate",ve.validators=fe;var we=Object.freeze({__proto__:null,AccessorModule:o,AjaxModule:d,ClipboardModule:c,ColumnCalcsModule:E,DataTreeModule:y,DownloadModule:x,EditModule:L,ExportModule:P,FilterModule:H,FormatModule:_,FrozenColumnsModule:O,FrozenRowsModule:A,GroupRowsModule:I,HistoryModule:N,HtmlTableImportModule:W,ImportModule:G,InteractionModule:U,KeybindingsModule:J,MenuModule:X,MoveColumnsModule:q,MoveRowsModule:K,MutatorModule:Y,PageModule:Z,PersistenceModule:te,PopupModule:ie,PrintModule:se,ReactiveDataModule:oe,ResizeColumnsModule:ne,ResizeRowsModule:re,ResizeTableModule:ae,ResponsiveLayoutModule:le,SelectRowModule:he,SortModule:ue,SelectRangeModule:ge,TooltipModule:be,ValidateModule:ve});class Ce{constructor(e,t,i={}){this.table=e,this.msgType=t,this.registeredDefaults=Object.assign({},i)}register(e,t){this.registeredDefaults[e]=t}generate(e,t={}){var i=Object.assign({},this.registeredDefaults),s=this.table.options.debugInvalidOptions||!0===t.debugInvalidOptions;Object.assign(i,e);for(let e in t)i.hasOwnProperty(e)||(s&&console.warn("Invalid "+this.msgType+" option:",e),i[e]=t.key);for(let e in i)e in t?i[e]=t[e]:Array.isArray(i[e])?i[e]=Object.assign([],i[e]):"object"==typeof i[e]&&null!==i[e]?i[e]=Object.assign({},i[e]):void 0===i[e]&&delete i[e];return i}}class Ee extends e{constructor(e){super(e),this.elementVertical=e.rowManager.element,this.elementHorizontal=e.columnManager.element,this.tableElement=e.rowManager.tableElement,this.verticalFillMode="fit"}initialize(){}clearRows(){}clearColumns(){}reinitializeColumnWidths(e){}renderRows(){}renderColumns(){}rerenderRows(e){e&&e()}rerenderColumns(e,t){}renderRowCells(e){}rerenderRowCells(e,t){}scrollColumns(e,t){}scrollRows(e,t){}resize(){}scrollToRow(e){}scrollToRowNearestTop(e){}visibleRows(e){return[]}rows(){return this.table.rowManager.getDisplayRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}clear(){this.clearRows(),this.clearColumns()}render(){this.renderRows(),this.renderColumns()}rerender(e){this.rerenderRows(),this.rerenderColumns()}scrollToRowPosition(e,i,s){var o=this.rows().indexOf(e),n=e.getElement(),r=0;return new Promise(((a,l)=>{if(o>-1){if(void 0===s&&(s=this.table.options.scrollToRowIfVisible),!s&&t.elVisible(n)&&(r=t.elOffset(n).top-t.elOffset(this.elementVertical).top)>0&&r{i.appendChild(e.getElement())})),e.element.appendChild(i),t||e.cells.forEach((e=>{e.cellRendered()}))}reinitializeColumnWidths(e){e.forEach((function(e){e.reinitializeWidth()}))}}class Re extends Ee{constructor(e){super(e),this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.windowBuffer=200,this.visibleRows=null,this.initialized=!1,this.isFitData=!1,this.columns=[]}initialize(){this.compatibilityCheck(),this.layoutCheck(),this.vertScrollListen()}compatibilityCheck(){"fitDataTable"==this.options("layout")&&console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"),this.options("responsiveLayout")&&console.warn("Horizontal Virtual DOM is not compatible with responsive columns"),this.options("rtl")&&console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction")}layoutCheck(){this.isFitData=this.options("layout").startsWith("fitData")}vertScrollListen(){this.subscribe("scroll-vertical",this.clearVisRowCache.bind(this)),this.subscribe("data-refreshed",this.clearVisRowCache.bind(this))}clearVisRowCache(){this.visibleRows=null}renderColumns(e,t){this.dataChange()}scrollColumns(e,t){this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.windowBuffer)))}calcWindowBuffer(){var e=this.elementVertical.clientWidth;this.table.columnManager.columnsByIndex.forEach((t=>{if(t.visible){var i=t.getWidth();i>e&&(e=i)}})),this.windowBuffer=2*e}rerenderColumns(e,t){var i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol},s=0;e&&!this.initialized||(this.clear(),this.calcWindowBuffer(),this.scrollLeft=this.elementVertical.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.windowBuffer,this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,this.table.columnManager.columnsByIndex.forEach((e=>{var t,i={};e.visible&&(e.modules.frozen||(t=e.getWidth(),i.leftPos=s,i.rightPos=s+t,i.width=t,this.isFitData&&(i.fitDataCheck=!e.modules.vdomHoz||e.modules.vdomHoz.fitDataCheck),s+t>this.vDomScrollPosLeft&&s{t.appendChild(e.getElement())})),e.element.appendChild(t),e.cells.forEach((e=>{e.cellRendered()}))}}rerenderRowCells(e,t){this.reinitializeRow(e,t)}reinitializeColumnWidths(e){for(let e=this.leftCol;e<=this.rightCol;e++)this.columns[e].reinitializeWidth()}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e,t,i=!1;if(this.isFitData){if(this.table.columnManager.columnsByIndex.forEach((e=>{!e.definition.width&&e.visible&&(i=!0)})),i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.windowBuffer,e=this.chain("rows-sample",[1],[],(()=>this.table.rowManager.getDisplayRows()))[0])){t=e.getElement(),e.generateCells(),this.tableElement.appendChild(t);for(let i=0;i{e!==this.columns[i]&&(t=!1)})),!t)}reinitializeRows(){var e=this.getVisibleRows(),t=this.table.rowManager.getRows().filter((t=>!e.includes(t)));e.forEach((e=>{this.reinitializeRow(e,!0)})),t.forEach((e=>{e.deinitialize()}))}getVisibleRows(){return this.visibleRows||(this.visibleRows=this.table.rowManager.getVisibleRows()),this.visibleRows}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,Math.abs(e)>this.windowBuffer/2?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let s=e;s{if("group"!==e.type){var t=e.getCell(i);e.getElement().insertBefore(t.getElement(),e.getCell(this.columns[this.rightCol]).getElement().nextSibling),t.cellRendered()}})),this.fitDataColActualWidthCheck(i),this.rightCol++,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.rightCol=this.rightCol)})),this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth()):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}addColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol-1];if(i)if(i.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){e=!0,this.getVisibleRows().forEach((e=>{if("group"!==e.type){var t=e.getCell(i);e.getElement().insertBefore(t.getElement(),e.getCell(this.columns[this.leftCol]).getElement()),t.cellRendered()}})),this.leftCol--,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.leftCol=this.leftCol)})),this.leftCol<=0?this.vDomPadLeft=0:this.vDomPadLeft-=i.getWidth();let t=this.fitDataColActualWidthCheck(i);t&&(this.scrollLeft=this.elementVertical.scrollLeft=this.elementVertical.scrollLeft+t,this.vDomPadRight-=t)}else t=!1;else t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}removeColRight(){for(var e=!1,t=!0;t;){let i=this.columns[this.rightCol];i&&i.modules.vdomHoz.leftPos>this.vDomScrollPosRight?(e=!0,this.getVisibleRows().forEach((e=>{if("group"!==e.type){var t=e.getCell(i);try{e.getElement().removeChild(t.getElement())}catch(e){console.warn("Could not removeColRight",e.message)}}})),this.vDomPadRight+=i.getWidth(),this.rightCol--,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.rightCol=this.rightCol)}))):t=!1}e&&(this.tableElement.style.paddingRight=this.vDomPadRight+"px")}removeColLeft(){for(var e=!1,t=!0;t;){let i=this.columns[this.leftCol];i&&i.modules.vdomHoz.rightPos{if("group"!==e.type){var t=e.getCell(i);try{e.getElement().removeChild(t.getElement())}catch(e){console.warn("Could not removeColLeft",e.message)}}})),this.vDomPadLeft+=i.getWidth(),this.leftCol++,this.getVisibleRows().forEach((e=>{"group"!==e.type&&(e.modules.vdomHoz.leftCol=this.leftCol)}))):t=!1}e&&(this.tableElement.style.paddingLeft=this.vDomPadLeft+"px")}fitDataColActualWidthCheck(e){var t,i;return e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),(i=(t=e.getWidth())-e.modules.vdomHoz.width)&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.columns.indexOf(e)+1,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1),i}initializeRow(e){if("group"!==e.type){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol},this.table.modules.frozenColumns&&this.table.modules.frozenColumns.leftColumns.forEach((t=>{this.appendCell(e,t)}));for(let t=this.leftCol;t<=this.rightCol;t++)this.appendCell(e,this.columns[t]);this.table.modules.frozenColumns&&this.table.modules.frozenColumns.rightColumns.forEach((t=>{this.appendCell(e,t)}))}}appendCell(e,t){if(t&&t.visible){let i=e.getCell(t);e.getElement().appendChild(i.getElement()),i.cellRendered()}}reinitializeRow(e,t){if("group"!==e.type&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class xe extends e{constructor(e){super(e),this.blockHozScrollEvent=!1,this.headersElement=null,this.contentsElement=null,this.element=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.optionsList=new Ce(this.table,"column definition",b),this.redrawBlock=!1,this.redrawBlockUpdate=null,this.renderer=null}initialize(){this.initializeRenderer(),this.headersElement=this.createHeadersElement(),this.contentsElement=this.createHeaderContentsElement(),this.element=this.createHeaderElement(),this.contentsElement.insertBefore(this.headersElement,this.contentsElement.firstChild),this.element.insertBefore(this.contentsElement,this.element.firstChild),this.initializeScrollWheelWatcher(),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("scrollbar-vertical",this.padVerticalScrollbar.bind(this))}padVerticalScrollbar(e){this.table.rtl?this.headersElement.style.marginLeft=e+"px":this.headersElement.style.marginRight=e+"px"}initializeRenderer(){var e,t={virtual:Re,basic:ye};(e="string"==typeof this.table.options.renderHorizontal?t[this.table.options.renderHorizontal]:this.table.options.renderHorizontal)?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize()):console.error("Unable to find matching renderer:",this.table.options.renderHorizontal)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e.setAttribute("role","row"),e}createHeaderContentsElement(){var e=document.createElement("div");return e.classList.add("tabulator-header-contents"),e.setAttribute("role","rowgroup"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),e.setAttribute("role","rowgroup"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}getElement(){return this.element}getContentsElement(){return this.contentsElement}getHeadersElement(){return this.headersElement}scrollHorizontal(e){this.contentsElement.scrollLeft=e,this.scrollLeft=e,this.renderer.scrollColumns(e)}initializeScrollWheelWatcher(){this.contentsElement.addEventListener("wheel",(e=>{var t;e.deltaX&&(t=this.contentsElement.scrollLeft+e.deltaX,this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))}))}generateColumnsFromRowData(e){var t,i,s=[],o=this.table.options.autoColumnsDefinitions;if(e&&e.length){for(var n in t=e[0]){let e={field:n,title:n},o=t[n];switch(typeof o){case"undefined":i="string";break;case"boolean":i="boolean";break;case"object":i=Array.isArray(o)?"array":"string";break;default:i=isNaN(o)||""===o?o.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}e.sorter=i,s.push(e)}if(o)switch(typeof o){case"function":this.table.options.columns=o.call(this.table,s);break;case"object":Array.isArray(o)?s.forEach((e=>{var t=o.find((t=>t.field===e.field));t&&Object.assign(e,t)})):s.forEach((e=>{o[e.field]&&Object.assign(e,o[e.field])})),this.table.options.columns=s}else this.table.options.columns=s;this.setColumns(this.table.options.columns)}}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),e.forEach(((e,t)=>{this._addColumn(e)})),this._reIndexColumns(),this.dispatch("columns-loaded"),this.rerenderColumns(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var s=new f(e,this),o=s.getElement(),n=i?this.findColumnIndex(i):i;if(i&&n>-1){var r=i.getTopColumn(),a=this.columns.indexOf(r),l=r.getElement();t?(this.columns.splice(a,0,s),l.parentNode.insertBefore(o,l)):(this.columns.splice(a+1,0,s),l.parentNode.insertBefore(o,l.nextSibling))}else t?(this.columns.unshift(s),this.headersElement.insertBefore(s.getElement(),this.headersElement.firstChild)):(this.columns.push(s),this.headersElement.appendChild(s.getElement()));return s.columnRendered(),s}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach((function(e){e.reRegisterPosition()}))}verticalAlignHeaders(){var e=0;this.redrawBlock||(this.headersElement.style.height="",this.columns.forEach((e=>{e.clearVerticalAlign()})),this.columns.forEach((t=>{var i=t.getHeight();i>e&&(e=i)})),this.headersElement.style.height=e+"px",this.columns.forEach((t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)})),this.table.rowManager.adjustTableSize())}findColumn(e){var t;if("object"!=typeof e)return this.columnsByField[e]||!1;if(e instanceof f)return e;if(e instanceof g)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t=[],this.columns.forEach((e=>{t.push(e),t=t.concat(e.getColumns(!0))})),t.find((t=>t.element===e))||!1}return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach((i=>{(this.table.options.nestedFieldSeparator?i.split(this.table.options.nestedFieldSeparator)[0]:i)===e&&t.push(this.columnsByField[i])})),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibleColumn(){var e=this.columnsByIndex.findIndex((e=>e.visible));return e>-1&&this.columnsByIndex[e]}getVisibleColumnsByIndex(){return this.columnsByIndex.filter((e=>e.visible))}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex((t=>e===t))}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach(((t,i)=>{e(t,i)}))}getDefinitions(e){var t=[];return this.columnsByIndex.forEach((i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())})),t}getDefinitionTree(){var e=[];return this.columns.forEach((t=>{e.push(t.getDefinition(!0))})),e}getComponents(e){var t=[];return(e?this.columns:this.columnsByIndex).forEach((e=>{t.push(e.getComponent())})),t}getWidth(){var e=0;return this.columnsByIndex.forEach((t=>{t.visible&&(e+=t.getWidth())})),e}moveColumn(e,t,i){t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this.moveColumnActual(e,t,i),this.verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}_moveColumnInArray(e,t,i,s,o){var n,r=e.indexOf(t);r>-1&&(e.splice(r,1),(n=e.indexOf(i))>-1?s&&(n+=1):n=r,e.splice(n,0,t),o&&(this.chain("column-moving-rows",[t,i,s],null,[])||[]).concat(this.table.rowManager.rows).forEach((function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(n,0,t)}})))}scrollToColumn(e,t,i){var s=0,o=e.getLeftOffset(),n=0,r=e.getElement();return new Promise(((a,l)=>{if(void 0===t&&(t=this.table.options.scrollToColumnPosition),void 0===i&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":n=-this.element.clientWidth/2;break;case"right":n=r.clientWidth-this.headersElement.clientWidth}if(!i&&o>0&&o+r.offsetWidth{t.push(i.generateCell(e))})),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var s,o,n;i.visible&&(s=i.definition.width||0,o=parseInt(i.minWidth),n="string"==typeof s?s.indexOf("%")>-1?e/100*parseInt(s):parseInt(s):s,t+=n>o?n:o)})),t}addColumn(e,t,i){return new Promise(((s,o)=>{var n=this._addColumn(e,t,i);this._reIndexColumns(),this.dispatch("column-add",e,t,i),"fitColumns"!=this.layoutMode()&&n.reinitializeWidth(),this.redraw(!0),this.table.rowManager.reinitialize(),this.rerenderColumns(),s(n)}))}deregisterColumn(e){var t,i=e.getField();i&&delete this.columnsByField[i],(t=this.columnsByIndex.indexOf(e))>-1&&this.columnsByIndex.splice(t,1),(t=this.columns.indexOf(e))>-1&&this.columns.splice(t,1),this.verticalAlignHeaders(),this.redraw()}rerenderColumns(e,t){this.redrawBlock?(!1===e||!0===e&&null===this.redrawBlockUpdate)&&(this.redrawBlockUpdate=e):this.renderer.rerenderColumns(e,t)}blockRedraw(){this.redrawBlock=!0,this.redrawBlockUpdate=null}restoreRedraw(){this.redrawBlock=!1,this.verticalAlignHeaders(),this.renderer.rerenderColumns(this.redrawBlockUpdate)}redraw(e){t.elVisible(this.element)&&this.verticalAlignHeaders(),e&&(this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(e),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}class Te extends Ee{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.scrollTop=0,e.scrollLeft=0,e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility=""}renderRows(){var e=this.tableElement,t=!0,i=document.createDocumentFragment(),s=this.rows();s.forEach(((e,s)=>{this.styleRow(e,s),e.initialize(!1,!0),"group"!==e.type&&(t=!1),i.appendChild(e.getElement())})),e.appendChild(i),s.forEach((e=>{e.rendered(),e.heightInitialized||e.calcHeight(!0)})),s.forEach((e=>{e.heightInitialized||e.setCellHeight()})),e.style.minWidth=t?this.table.columnManager.getWidth()+"px":""}rerenderRows(e){this.clearRows(),e&&e(),this.renderRows(),this.rows().length||this.table.rowManager.tableEmpty()}scrollToRowNearestTop(e){var i=t.elOffset(e.getElement()).top;return!(Math.abs(this.elementVertical.scrollTop-i)>Math.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-i))}scrollToRow(e){var i=e.getElement();this.elementVertical.scrollTop=t.elOffset(i).top-t.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}visibleRows(e){return this.rows()}}class Me extends Ee{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}renderRows(){this._virtualRenderFill()}rerenderRows(e){for(var t=this.elementVertical.scrollTop,i=!1,s=!1,o=this.table.rowManager.scrollLeft,n=this.rows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(n[r]){var a=t-n[r].getElement().offsetTop;if(!(!1===s||Math.abs(a){e.deinitializeHeight()})),e&&e(),this.rows().length?this._virtualRenderFill(!1===i?this.rows.length-1:i,!0,s||0):(this.clear(),this.table.rowManager.tableEmpty()),this.scrollColumns(o)}scrollColumns(e){this.table.rowManager.scrollHorizontal(e)}scrollRows(e,t){var i=e-this.vDomScrollPosTop,s=e-this.vDomScrollPosBottom,o=2*this.vDomWindowBuffer,n=this.rows();if(this.scrollTop=e,-i>o||s>o){var r=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*n.length)),this.scrollColumns(r)}else t?(i<0&&this._addTopRow(n,-i),s<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(n,-s):this.vDomScrollPosBottom=this.scrollTop)):(s>=0&&this._addBottomRow(n,s),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(n,i):this.vDomScrollPosTop=this.scrollTop))}resize(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}scrollToRowNearestTop(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}scrollToRow(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}visibleRows(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,s=!1,o=0,n=0,r=this.rows();if(e)o=this.vDomTop,n=this.vDomBottom;else for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(r[a])if(s){if(!(i-r[a].getElement().offsetTop>=0))break;n=a}else if(t-r[a].getElement().offsetTop>=0)o=a;else{if(s=!0,!(i-r[a].getElement().offsetTop>=0))break;n=a}return r.slice(o,n+1)}_virtualRenderFill(e,i,s){var o,n,r=this.tableElement,a=this.elementVertical,l=0,h=0,d=0,c=0,u=0,m=0,p=this.rows(),g=p.length,b=0,f=[],v=0,w=0,C=this.table.rowManager.fixedHeight,E=this.elementVertical.clientHeight,y=this.table.options.rowHeight,R=!0;if(s=s||0,e=e||0){for(;r.firstChild;)r.removeChild(r.firstChild);(c=(g-e+1)*this.vDomRowHeight){e.rendered(),e.heightInitialized||e.calcHeight(!0)})),f.forEach((e=>{e.heightInitialized||e.setCellHeight()})),f.forEach((e=>{d=e.getHeight(),vthis.vDomWindowBuffer&&(this.vDomWindowBuffer=2*d),v++})),R=this.table.rowManager.adjustTableSize(),E=this.elementVertical.clientHeight,R&&(C||this.table.options.maxHeight)&&(y=h/v,w=Math.max(this.vDomWindowMinTotalRows,Math.ceil(E/y+this.vDomWindowBuffer/y)))}e?(this.vDomTopPad=i?this.vDomRowHeight*this.vDomTop+s:this.scrollTop-u,this.vDomBottomPad=this.vDomBottom==g-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-h-u,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((h+u)/v),this.vDomBottomPad=this.vDomRowHeight*(g-this.vDomBottom-1),this.vDomScrollHeight=u+h+this.vDomBottomPad-E),r.style.paddingTop=this.vDomTopPad+"px",r.style.paddingBottom=this.vDomBottomPad+"px",i&&(this.scrollTop=this.vDomTopPad+u+s-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-E:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-E),this.elementVertical.scrollWidth>this.elementVertical.clientWidth&&i&&(this.scrollTop+=this.elementVertical.offsetHeight-E),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,a.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}_addTopRow(e,t){for(var i=this.tableElement,s=[],o=0,n=this.vDomTop-1,r=0,a=!0;a;)if(this.vDomTop){let l,h,d=e[n];d&&r=l?(this.styleRow(d,n),i.insertBefore(d.getElement(),i.firstChild),d.initialized&&d.heightInitialized||s.push(d),d.initialize(),h||(l=d.getElement().offsetHeight,l>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l)),t-=l,o+=l,this.vDomTop--,n--,r++):a=!1):a=!1}else a=!1;for(let e of s)e.clearCellHeight();this._quickNormalizeRowHeight(s),o&&(this.vDomTopPad-=o,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n<1&&(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=o)}_removeTopRow(e,t){for(var i=[],s=0,o=0,n=!0;n;){let r,a=e[this.vDomTop];a&&o=r?(this.vDomTop++,t-=r,s+=r,i.push(a),o++):n=!1):n=!1}for(let e of i){let t=e.getElement();t.parentNode&&t.parentNode.removeChild(t)}s&&(this.vDomTopPad+=s,this.tableElement.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?s:s+this.vDomWindowBuffer)}_addBottomRow(e,t){for(var i=this.tableElement,s=[],o=0,n=this.vDomBottom+1,r=0,a=!0;a;){let l,h,d=e[n];d&&r=l?(this.styleRow(d,n),i.appendChild(d.getElement()),d.initialized&&d.heightInitialized||s.push(d),d.initialize(),h||(l=d.getElement().offsetHeight,l>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l)),t-=l,o+=l,this.vDomBottom++,n++,r++):a=!1):a=!1}for(let e of s)e.clearCellHeight();this._quickNormalizeRowHeight(s),o&&(this.vDomBottomPad-=o,(this.vDomBottomPad<0||n==e.length-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=o)}_removeBottomRow(e,t){for(var i=[],s=0,o=0,n=!0;n;){let r,a=e[this.vDomBottom];a&&o=r?(this.vDomBottom--,t-=r,s+=r,i.push(a),o++):n=!1):n=!1}for(let e of i){let t=e.getElement();t.parentNode&&t.parentNode.removeChild(t)}s&&(this.vDomBottomPad+=s,this.vDomBottomPad<0&&(this.vDomBottomPad=0),this.tableElement.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=s)}_quickNormalizeRowHeight(e){for(let t of e)t.calcHeight();for(let t of e)t.setCellHeight()}}class ke extends e{constructor(e){super(e),this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.placeholder=null,this.placeholderContents=null,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRowsPipeline=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRenderInPosition=!1,this.dataPipeline=[],this.displayPipeline=[],this.scrollbarWidth=0,this.renderer=null}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableholder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e.setAttribute("role","rowgroup"),e}initializePlaceholder(){var e=this.table.options.placeholder;if("function"==typeof e&&(e=e.call(this.table)),e=this.chain("placeholder",[e],e,e)||e){let t=document.createElement("div");if(t.classList.add("tabulator-placeholder"),"string"==typeof e){let i=document.createElement("div");i.classList.add("tabulator-placeholder-contents"),i.innerHTML=e,t.appendChild(i),this.placeholderContents=i}else"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(t.appendChild(e),this.placeholderContents=e):(console.warn("Invalid placeholder provided, must be string or HTML Element",e),this.el=null);this.placeholder=t}}getElement(){return this.element}getTableElement(){return this.tableElement}initialize(){this.initializePlaceholder(),this.initializeRenderer(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",(()=>{var e=this.element.scrollLeft,t=this.scrollLeft>e,i=this.element.scrollTop,s=this.scrollTop>i;this.scrollLeft!=e&&(this.scrollLeft=e,this.dispatch("scroll-horizontal",e,t),this.dispatchExternal("scrollHorizontal",e,t),this._positionPlaceholder()),this.scrollTop!=i&&(this.scrollTop=i,this.renderer.scrollRows(i,s),this.dispatch("scroll-vertical",i,s),this.dispatchExternal("scrollVertical",i,s))}))}findRow(e){if("object"!=typeof e){if(void 0===e)return!1;return this.rows.find((t=>t.data[this.table.options.index]==e))||!1}if(e instanceof w)return e;if(e instanceof v)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return this.rows.find((t=>t.getElement()===e))||!1}return!1}getRowFromDataObject(e){return this.rows.find((t=>t.data===e))||!1}getRowFromPosition(e){return this.getDisplayRows().find((t=>t.getPosition()===e&&t.isDisplayed()))}scrollToRow(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}setData(e,t,i){return new Promise(((s,o)=>{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition((()=>{this._setDataActual(e)})):(this.table.options.autoColumns&&i&&this.table.initialized&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),s()}))}_setDataActual(e,t){this.dispatchExternal("dataProcessing",e),this._wipeElements(),Array.isArray(e)?(this.dispatch("data-processing",e),e.forEach(((e,t)=>{if(e&&"object"==typeof e){var i=new w(e,this);this.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",e)})),this.refreshActiveData(!1,!1,t),this.dispatch("data-processed",e),this.dispatchExternal("dataProcessed",e)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",typeof e,"\nData: ",e)}_wipeElements(){this.dispatch("rows-wipe"),this.destroy(),this.adjustTableSize(),this.dispatch("rows-wiped")}destroy(){this.rows.forEach((e=>{e.wipe()})),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0}deleteRow(e,t){var i=this.rows.indexOf(e),s=this.activeRows.indexOf(e);s>-1&&this.activeRows.splice(s,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator((t=>{var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t||this.reRenderInPosition(),this.regenerateRowPositions(),this.dispatchExternal("rowDeleted",e.getComponent()),this.displayRowsCount||this.tableEmpty(),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}addRow(e,t,i,s){return this.addRowActual(e,t,i,s)}addRows(e,t,i,s){var o=[];return new Promise(((n,r)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),(void 0===i&&t||void 0!==i&&!t)&&e.reverse(),e.forEach(((e,s)=>{var n=this.addRow(e,t,i,!0);o.push(n),this.dispatch("row-added",n,e,t,i)})),this.refreshActiveData(!!s&&"displayPipeline",!1,!0),this.regenerateRowPositions(),this.displayRowsCount&&this._clearPlaceholder(),n(o)}))}findAddRowPos(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e}addRowActual(e,t,i,s){var o,n,r=e instanceof w?e:new w(e||{},this),a=this.findAddRowPos(t),l=-1;return i||(n=this.chain("row-adding-position",[r,a],null,{index:i,top:a}),i=n.index,a=n.top),void 0!==i&&(i=this.findRow(i)),(i=this.chain("row-adding-index",[r,i,a],null,i))&&(l=this.rows.indexOf(i)),i&&l>-1?(o=this.activeRows.indexOf(i),this.displayRowIterator((function(e){var t=e.indexOf(i);t>-1&&e.splice(a?t:t+1,0,r)})),o>-1&&this.activeRows.splice(a?o:o+1,0,r),this.rows.splice(a?l:l+1,0,r)):a?(this.displayRowIterator((function(e){e.unshift(r)})),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator((function(e){e.push(r)})),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",r.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s||this.reRenderInPosition(),r}moveRow(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowPositions(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}moveRowActual(e,t,i){this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator((s=>{this.moveRowInArray(s,e,t,i)})),this.dispatch("row-moving",e,t,i)}moveRowInArray(e,t,i,s){var o,n,r;if(t!==i&&((o=e.indexOf(t))>-1&&(e.splice(o,1),(n=e.indexOf(i))>-1?s?e.splice(n+1,0,t):e.splice(n,0,t):e.splice(o,0,t)),e===this.getDisplayRows())){r=n>o?n:o+1;for(let t=o-1&&t}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),s=!1;return!1!==i&&i-1)&&i}getData(e,t){var i=[];return this.getRows(e).forEach((function(e){"row"==e.type&&i.push(e.getData(t||"data"))})),i}getComponents(e){var t=[];return this.getRows(e).forEach((function(e){t.push(e.getComponent())})),t}getDataCount(e){return this.getRows(e).length}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}registerDataPipelineHandler(e,t){void 0!==t?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort(((e,t)=>e.priority-t.priority))):console.error("Data pipeline handlers must have a priority in order to be registered")}registerDisplayPipelineHandler(e,t){void 0!==t?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort(((e,t)=>e.priority-t.priority))):console.error("Display pipeline handlers must have a priority in order to be registered")}refreshActiveData(e,i,s){var o=this.table,n="",r=0,a=["all","dataPipeline","display","displayPipeline","end"];if(!this.table.destroyed){if("function"==typeof e)if((r=this.dataPipeline.findIndex((t=>t.handler===e)))>-1)n="dataPipeline",i&&(r==this.dataPipeline.length-1?n="display":r++);else{if(!((r=this.displayPipeline.findIndex((t=>t.handler===e)))>-1))return void console.error("Unable to refresh data, invalid handler provided",e);n="displayPipeline",i&&(r==this.displayPipeline.length-1?n="end":r++)}else n=e||"all",r=0;if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===n&&r{"row"===e.type&&(e.setPosition(t),t++)}))}setActiveRows(e){this.activeRows=this.activeRows=Object.assign([],e),this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length}setDisplayRows(e,t){this.displayRows[t]=e,t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length)}getDisplayRows(e){return void 0===e?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e,t){var i=Object.assign([],this.renderer.visibleRows(!t));return e&&(i=this.chain("rows-visible",[t],i,i)),i}displayRowIterator(e){this.activeRowsPipeline.forEach(e),this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t=[];switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!1,!0);break;default:t=this.chain("rows-retrieve",e,null,this.rows)||this.rows}return t}reRenderInPosition(e){this.redrawBlock?e?e():this.redrawBlockRenderInPosition=!0:(this.dispatchExternal("renderStarted"),this.renderer.rerenderRows(e),this.fixedHeight||this.adjustTableSize(),this.scrollBarCheck(),this.dispatchExternal("renderComplete"))}scrollBarCheck(){var e=0;this.element.scrollHeight>this.element.clientHeight&&(e=this.element.offsetWidth-this.element.clientWidth),e!==this.scrollbarWidth&&(this.scrollbarWidth=e,this.dispatch("scrollbar-vertical",e))}initializeRenderer(){var e,t={virtual:Me,basic:Te};(e="string"==typeof this.table.options.renderVertical?t[this.table.options.renderVertical]:this.table.options.renderVertical)?(this.renderMode=this.table.options.renderVertical,this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize(),!this.table.element.clientHeight&&!this.table.options.height||this.table.options.minHeight&&this.table.options.maxHeight?this.fixedHeight=!1:this.fixedHeight=!0):console.error("Unable to find matching renderer:",this.table.options.renderVertical)}getRenderMode(){return this.renderMode}renderTable(){this.dispatchExternal("renderStarted"),this.element.scrollTop=0,this._clearTable(),this.displayRowsCount?(this.renderer.renderRows(),this.firstRender&&(this.firstRender=!1,this.fixedHeight||this.adjustTableSize(),this.layoutRefresh(!0))):this.renderEmptyScroll(),this.fixedHeight||this.adjustTableSize(),this.dispatch("table-layout"),this.displayRowsCount||this._showPlaceholder(),this.scrollBarCheck(),this.dispatchExternal("renderComplete")}renderEmptyScroll(){this.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearTable(){this._clearPlaceholder(),this.scrollTop=0,this.scrollLeft=0,this.renderer.clearRows()}tableEmpty(){this.renderEmptyScroll(),this._showPlaceholder()}checkPlaceholder(){this.displayRowsCount?this._clearPlaceholder():this.tableEmpty()}_showPlaceholder(){this.placeholder&&(this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.initializePlaceholder(),this.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.placeholder),this._positionPlaceholder(),this.adjustTableSize())}_clearPlaceholder(){this.placeholder&&this.placeholder.parentNode&&this.placeholder.parentNode.removeChild(this.placeholder),this.tableElement.style.minWidth="",this.tableElement.style.display=""}_positionPlaceholder(){this.placeholder&&this.placeholder.parentNode&&(this.placeholder.style.width=this.table.columnManager.getWidth()+"px",this.placeholderContents.style.width=this.table.rowManager.element.clientWidth+"px",this.placeholderContents.style.marginLeft=this.scrollLeft+"px")}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}normalizeHeight(){this.activeRows.forEach((function(e){e.normalizeHeight()}))}adjustTableSize(){let e,t=this.element.clientHeight,i=!1;if("fill"===this.renderer.verticalFillMode){let s=Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));if(this.fixedHeight){e=isNaN(this.table.options.minHeight)?this.table.options.minHeight:this.table.options.minHeight+"px";const t="calc(100% - "+s+"px)";this.element.style.minHeight=e||"calc(100% - "+s+"px)",this.element.style.height=t,this.element.style.maxHeight=t}else this.element.style.height="",this.element.style.height=this.table.element.clientHeight-s+"px",this.element.scrollTop=this.scrollTop;this.renderer.resize(),this.fixedHeight||t==this.element.clientHeight||(i=!0,this.subscribed("table-resize")?this.dispatch("table-resize"):this.redraw()),this.scrollBarCheck()}return this._positionPlaceholder(),i}reinitialize(){this.rows.forEach((function(e){e.reinitialize(!0)}))}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.handler,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRenderInPosition&&this.reRenderInPosition(),this.redrawBlockRenderInPosition=!1}redraw(e){this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():(this.reRenderInPosition(),this.scrollHorizontal(this.scrollLeft))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class Le extends e{constructor(e){super(e),this.active=!1,this.element=this.createElement(),this.containerElement=this.createContainerElement(),this.external=!1}initialize(){this.initializeElement()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}createContainerElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer-contents"),this.element.appendChild(e),e}initializeElement(){if(this.table.options.footerElement)if("string"==typeof this.table.options.footerElement)"<"===this.table.options.footerElement[0]?this.containerElement.innerHTML=this.table.options.footerElement:(this.external=!0,this.containerElement=document.querySelector(this.table.options.footerElement));else this.element=this.table.options.footerElement}getElement(){return this.element}append(e){this.activate(),this.containerElement.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e){this.activate(),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display=""))}redraw(){this.dispatch("footer-redraw")}}class Se extends e{constructor(e){super(e),this.el=null,this.abortClasses=["tabulator-headers","tabulator-table"],this.previousTargets={},this.listeners=["click","dblclick","contextmenu","mouseenter","mouseleave","mouseover","mouseout","mousemove","mouseup","mousedown","touchstart","touchend"],this.componentMap={"tabulator-cell":"cell","tabulator-row":"row","tabulator-group":"group","tabulator-col":"column"},this.pseudoTrackers={row:{subscriber:null,target:null},cell:{subscriber:null,target:null},group:{subscriber:null,target:null},column:{subscriber:null,target:null}},this.pseudoTracking=!1}initialize(){this.el=this.table.element,this.buildListenerMap(),this.bindSubscriptionWatchers()}buildListenerMap(){var e={};this.listeners.forEach((t=>{e[t]={handler:null,components:[]}})),this.listeners=e}bindPseudoEvents(){Object.keys(this.pseudoTrackers).forEach((e=>{this.pseudoTrackers[e].subscriber=this.pseudoMouseEnter.bind(this,e),this.subscribe(e+"-mouseover",this.pseudoTrackers[e].subscriber)})),this.pseudoTracking=!0}pseudoMouseEnter(e,t,i){this.pseudoTrackers[e].target!==i&&(this.pseudoTrackers[e].target&&this.dispatch(e+"-mouseleave",t,this.pseudoTrackers[e].target),this.pseudoMouseLeave(e,t),this.pseudoTrackers[e].target=i,this.dispatch(e+"-mouseenter",t,i))}pseudoMouseLeave(e,t){var i=Object.keys(this.pseudoTrackers),s={row:["cell"],cell:["row"]};(i=i.filter((t=>{var i=s[e];return t!==e&&(!i||i&&!i.includes(t))}))).forEach((e=>{var i=this.pseudoTrackers[e].target;this.pseudoTrackers[e].target&&(this.dispatch(e+"-mouseleave",t,i),this.pseudoTrackers[e].target=null)}))}bindSubscriptionWatchers(){var e=Object.keys(this.listeners),t=Object.values(this.componentMap);for(let i of t)for(let t of e){let e=i+"-"+t;this.subscriptionChange(e,this.subscriptionChanged.bind(this,i,t))}this.subscribe("table-destroy",this.clearWatchers.bind(this))}subscriptionChanged(e,t,i){var s=this.listeners[t].components,o=s.indexOf(e),n=!1;i?-1===o&&(s.push(e),n=!0):this.subscribed(e+"-"+t)||o>-1&&(s.splice(o,1),n=!0),"mouseenter"!==t&&"mouseleave"!==t||this.pseudoTracking||this.bindPseudoEvents(),n&&this.updateEventListeners()}updateEventListeners(){for(let e in this.listeners){let t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}track(e,t){var i=t.composedPath&&t.composedPath()||t.path,s=this.findTargets(i);s=this.bindComponents(e,s),this.triggerEvents(e,t,s),!this.pseudoTracking||"mouseover"!=e&&"mouseleave"!=e||Object.keys(s).length||this.pseudoMouseLeave("none",t)}findTargets(e){var t={};let i=Object.keys(this.componentMap);for(let s of e){let e=s.classList?[...s.classList]:[];if(e.filter((e=>this.abortClasses.includes(e))).length)break;let o=e.filter((e=>i.includes(e)));for(let e of o)t[this.componentMap[e]]||(t[this.componentMap[e]]=s)}return t.group&&t.group===t.row&&delete t.row,t}bindComponents(e,t){var i=Object.keys(t).reverse(),s=this.listeners[e],o={},n={};for(let e of i){let i,r=t[e],a=this.previousTargets[e];if(a&&a.target===r)i=a.component;else switch(e){case"row":case"group":if(s.components.includes("row")||s.components.includes("cell")||s.components.includes("group")){i=this.table.rowManager.getVisibleRows(!0).find((e=>e.getElement()===r)),t.row&&t.row.parentNode&&t.row.parentNode.closest(".tabulator-row")&&(t[e]=!1)}break;case"column":s.components.includes("column")&&(i=this.table.columnManager.findColumn(r));break;case"cell":s.components.includes("cell")&&(o.row instanceof w?i=o.row.findCell(r):t.row&&console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"))}i&&(o[e]=i,n[e]={target:r,component:i})}return this.previousTargets=n,o}triggerEvents(e,t,i){var s=this.listeners[e];for(let o in i)i[o]&&s.components.includes(o)&&this.dispatch(o+"-"+e,t,i[o])}clearWatchers(){for(let e in this.listeners){let t=this.listeners[e];t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}}class De{constructor(e){this.table=e,this.bindings={}}bind(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,i):this.bindings[e][t]=i}handle(e,t,i){if(this.bindings[e]&&this.bindings[e][i]&&"function"==typeof this.bindings[e][i].bind)return this.bindings[e][i].bind(null,t);"then"===i||"string"!=typeof i||i.startsWith("_")||this.table.options.debugInvalidComponentFuncs&&console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}class Pe extends e{constructor(e){super(e),this.requestOrder=0,this.loading=!1}initialize(){}load(e,t,i,s,o,n){var r=++this.requestOrder;return this.table.destroyed?Promise.resolve():(this.dispatchExternal("dataLoading",e),!e||0!=e.indexOf("{")&&0!=e.indexOf("[")||(e=JSON.parse(e)),this.confirm("data-loading",[e,t,i,o])?(this.loading=!0,o||this.alertLoader(),t=this.chain("data-params",[e,i,o],t||{},t||{}),t=this.mapParams(t,this.table.options.dataSendParams),this.chain("data-load",[e,t,i,o],!1,Promise.resolve([])).then((e=>{if(this.table.destroyed)console.warn("Data Load Response Blocked - Table has been destroyed");else{Array.isArray(e)||"object"!=typeof e||(e=this.mapParams(e,this.objectInvert(this.table.options.dataReceiveParams)));var t=this.chain("data-loaded",e,null,e);r==this.requestOrder?(this.clearAlert(),!1!==t&&(this.dispatchExternal("dataLoaded",t),this.table.rowManager.setData(t,s,void 0===n?!s:n))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")}})).catch((e=>{console.error("Data Load Error: ",e),this.dispatchExternal("dataLoadError",e),o||this.alertError(),setTimeout((()=>{this.clearAlert()}),this.table.options.dataLoaderErrorTimeout)})).finally((()=>{this.loading=!1}))):(this.dispatchExternal("dataLoaded",e),e||(e=[]),this.table.rowManager.setData(e,s,void 0===n?!s:n),Promise.resolve()))}mapParams(e,t){var i={};for(let s in e)i[t.hasOwnProperty(s)?t[s]:s]=e[s];return i}objectInvert(e){var t={};for(let i in e)t[e[i]]=i;return t}blockActiveLoad(){this.requestOrder++}alertLoader(){("function"==typeof this.table.options.dataLoader?this.table.options.dataLoader():this.table.options.dataLoader)&&this.table.alertManager.alert(this.table.options.dataLoaderLoading||this.langText("data|loading"))}alertError(){this.table.alertManager.alert(this.table.options.dataLoaderError||this.langText("data|error"),"error")}clearAlert(){this.table.alertManager.clear()}}class ze{constructor(e,t,i){this.table=e,this.events={},this.optionsList=t||{},this.subscriptionNotifiers={},this.dispatch=i?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=i}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((e=>e===t)))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}else delete this.events[e];this._notifySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}subscribed(e){return this.events[e]&&this.events[e].length}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((e=>{e(t)}))}_dispatch(){var e,t=Array.from(arguments),i=t.shift();return this.events[i]&&this.events[i].forEach(((i,s)=>{let o=i.apply(this.table,t);s||(e=o)})),e}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="ExternalEvent:"+e[0],(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}}class He{constructor(e){this.events={},this.subscriptionNotifiers={},this.dispatch=e?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=e?this._debugChain.bind(this):this._chain.bind(this),this.confirm=e?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=e}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifySubscriptionChange(e,!0)}subscribe(e,t,i=1e4){this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort(((e,t)=>e.priority-t.priority)),this._notifySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((e=>e.callback===t)))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}this._notifySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}subscribed(e){return this.events[e]&&this.events[e].length}_chain(e,t,i,s){var o=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach(((e,i)=>{o=e.callback.apply(this,t.concat([o]))})),o):"function"==typeof s?s():s}_confirm(e,t){var i=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach(((e,s)=>{e.callback.apply(this,t)&&(i=!0)})),i}_notifySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((e=>{e(t)}))}_dispatch(){var e=Array.from(arguments),t=e.shift();this.events[t]&&this.events[t].forEach((t=>{t.callback.apply(this,e)}))}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}_debugChain(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._chain(...arguments)}_debugConfirm(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._confirm(...arguments)}}class Fe extends e{constructor(e){super(e)}_warnUser(){this.options("debugDeprecation")&&console.warn(...arguments)}check(e,t,i){var s="";return void 0===this.options(e)||(s="Deprecated Setup Option - Use of the %c"+e+"%c option is now deprecated",t?(s=s+", Please use the %c"+t+"%c option instead",this._warnUser(s,"font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;"),i&&(this.table.options[t]=this.table.options[e])):this._warnUser(s,"font-weight: bold;","font-weight: normal;"),!1)}checkMsg(e,t){return void 0===this.options(e)||(this._warnUser("%cDeprecated Setup Option - Use of the %c"+e+" %c option is now deprecated, "+t,"font-weight: normal;","font-weight: bold;","font-weight: normal;"),!1)}msg(e){this._warnUser(e)}}class _e{static register(e){_e.tables.push(e)}static deregister(e){var t=_e.tables.indexOf(e);t>-1&&_e.tables.splice(t,1)}static lookupTable(e,t){var i,s,o=[];if("string"==typeof e){if((i=document.querySelectorAll(e)).length)for(var n=0;n{e.widthFixed||e.reinitializeWidth(),(this.table.options.responsiveLayout?e.modules.responsive.visible:e.visible)&&(n=e),e.visible&&(i+=e.getWidth())})),n?(o=s-i+n.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(n.setWidth(0),this.table.modules.responsiveLayout.update()),o>0?n.setWidth(o):n.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e,t){var i,s,o=this.table.rowManager.element.getBoundingClientRect().width,n=0,r=0,a=0,l=[],h=[],d=0,c=0;function u(e){return"string"==typeof e?e.indexOf("%")>-1?o/100*parseInt(e):parseInt(e):e}function m(e,t,i,s){var o=[],n=0,r=0,l=0,h=a,d=0,c=0,p=[];function g(e){return i*(e.column.definition.widthGrow||1)}function b(e){return u(e.width)-i*(e.column.definition.widthShrink||0)}return e.forEach((function(e,n){var r=s?b(e):g(e);e.column.minWidth>=r?o.push(e):e.column.maxWidth&&e.column.maxWidththis.table.rowManager.element.clientHeight&&(o-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach((function(e){var t,i,s;e.visible&&(t=e.definition.width,i=parseInt(e.minWidth),t?(s=u(t),n+=s>i?s:i,e.definition.widthShrink&&(h.push({column:e,width:s>i?s:i}),d+=e.definition.widthShrink)):(l.push({column:e,width:0}),a+=e.definition.widthGrow||1))})),r=o-n,i=Math.floor(r/a),c=m(l,r,i,!1),l.length&&c>0&&(l[l.length-1].width+=c),l.forEach((function(e){r-=e.width})),(s=Math.abs(c)+r)>0&&d&&(c=m(h,s,Math.floor(s/d),!0)),c&&h.length&&(h[h.length-1].width-=c),l.forEach((function(e){e.column.setWidth(e.width)})),h.forEach((function(e){e.column.setWidth(e.width)}))}};class Be extends s{constructor(e){super(e,"layout"),this.mode=null,this.registerTableOption("layout","fitData"),this.registerTableOption("layoutColumnsOnNewData",!1),this.registerColumnOption("widthGrow"),this.registerColumnOption("widthShrink")}initialize(){var e=this.table.options.layout;Be.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode),this.subscribe("column-init",this.initializeColumn.bind(this))}initializeColumn(e){e.definition.widthGrow&&(e.definition.widthGrow=Number(e.definition.widthGrow)),e.definition.widthShrink&&(e.definition.widthShrink=Number(e.definition.widthShrink))}getMode(){return this.mode}layout(e){this.dispatch("layout-refreshing"),Be.modes[this.mode].call(this,this.table.columnManager.columnsByIndex,e),this.dispatch("layout-refreshed")}}Be.moduleName="layout",Be.modes=Ae;class Ve extends s{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={},this.registerTableOption("locale",!1),this.registerTableOption("langs",{})}initialize(){this.langList=t.deepClone(Ve.langs),!1!==this.table.options.columnDefaults.headerFilterPlaceholder&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);for(let e in this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&"object"==typeof e[i]?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){if(!0===(e=e||"default")&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let t=e.split("-")[0];this.langList[t]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,t),e=t):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=t.deepClone(this.langList.default||{}),"default"!=e&&function e(t,i){for(var s in t)"object"==typeof t[s]?(i[s]||(i[s]={}),e(t[s],i[s])):i[s]=t[s]}(this.langList[e],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=(t?e+"|"+t:e).split("|");return this._getLangElement(i,this.locale)||""}_getLangElement(e,t){var i=this.lang;return e.forEach((function(e){var t;i&&(t=i[e],i=void 0!==t&&t)})),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach((t=>{t(this.getText(e),this.lang)}))}}Ve.moduleName="localize",Ve.langs={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All",counter:{showing:"Showing",of:"of",rows:"rows",pages:"pages"}},headerFilters:{default:"filter column...",columns:{}}}};class Ie extends s{constructor(e){super(e)}initialize(){this.registerTableFunction("tableComms",this.receive.bind(this))}getConnections(e){var t=[];return _e.lookupTable(e).forEach((e=>{this.table!==e&&t.push(e)})),t}send(e,t,i,s){var o=this.getConnections(e);o.forEach((e=>{e.tableComms(this.table.element,t,i,s)})),!o.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,s){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,s);console.warn("Inter-table Comms Error - no such module:",t)}}Ie.moduleName="comms";var Ne=Object.freeze({__proto__:null,LayoutModule:Be,LocalizeModule:Ve,CommsModule:Ie});class We{constructor(e,t){this.bindStaticFunctionality(e),this.bindModules(e,Ne,!0),t&&this.bindModules(e,t)}bindStaticFunctionality(e){e.moduleBindings={},e.extendModule=function(t,i,s){if(e.moduleBindings[t]){var o=e.moduleBindings[t][i];if(o)if("object"==typeof s)for(let e in s)o[e]=s[e];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",i)}else console.warn("Module Error - module does not exist:",t)},e.registerModule=function(t){Array.isArray(t)||(t=[t]),t.forEach((t=>{e.registerModuleBinding(t)}))},e.registerModuleBinding=function(t){e.moduleBindings[t.moduleName]=t},e.findTable=function(e){var t=_e.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t},e.prototype.bindModules=function(){var t=[],i=[],s=[];for(var o in this.modules={},e.moduleBindings){let n=e.moduleBindings[o],r=new n(this);this.modules[o]=r,n.prototype.moduleCore?this.modulesCore.push(r):n.moduleInitOrder?n.moduleInitOrder<0?t.push(r):i.push(r):s.push(r)}t.sort(((e,t)=>e.moduleInitOrder>t.moduleInitOrder?1:-1)),i.sort(((e,t)=>e.moduleInitOrder>t.moduleInitOrder?1:-1)),this.modulesRegular=t.concat(s.concat(i))}}bindModules(e,t,i){var s=Object.values(t);i&&s.forEach((e=>{e.prototype.moduleCore=!0})),e.registerModule(s)}}class je extends e{constructor(e){super(e),this.element=this._createAlertElement(),this.msgElement=this._createMsgElement(),this.type=null,this.element.appendChild(this.msgElement)}_createAlertElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert"),e}_createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-alert-msg"),e.setAttribute("role","alert"),e}_typeClass(){return"tabulator-alert-state-"+this.type}alert(e,t="msg"){if(e){for(this.clear(),this.dispatch("alert-show",t),this.type=t;this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.add(this._typeClass()),"function"==typeof e&&(e=e()),e instanceof HTMLElement?this.msgElement.appendChild(e):this.msgElement.innerHTML=e,this.table.element.appendChild(this.element)}}clear(){this.dispatch("alert-hide",this.type),this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.msgElement.classList.remove(this._typeClass())}}class Ge{constructor(e,t){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.alertManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.originalElement=null,this.componentFunctionBinder=new De(this),this.dataLoader=!1,this.modules={},this.modulesCore=[],this.modulesRegular=[],this.deprecationAdvisor=new Fe(this),this.optionsList=new Ce(this,"table constructor"),this.initialized=!1,this.destroyed=!1,this.initializeElement(e)&&(this.initializeCoreSystems(t),setTimeout((()=>{this._create()}))),_e.register(this)}initializeElement(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}initializeCoreSystems(e){this.columnManager=new xe(this),this.rowManager=new ke(this),this.footerManager=new Le(this),this.dataLoader=new Pe(this),this.alertManager=new je(this),this.bindModules(),this.options=this.optionsList.generate(Ge.defaultOptions,e),this._clearObjectPointers(),this._mapDeprecatedFunctionality(),this.externalEvents=new ze(this,this.options,this.options.debugEventsExternal),this.eventBus=new He(this.options.debugEventsInternal),this.interactionMonitor=new Se(this),this.dataLoader.initialize(),this.footerManager.initialize()}_mapDeprecatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this._rtlCheck(),this._buildElement(),this._initializeTable(),this._loadInitialData(),this.initialized=!0,this.externalEvents.dispatch("tableBuilt")}_rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==e.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),Array.isArray(this.options.data)&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}_buildElement(){var e,t=this.element,i=this.options;if("TABLE"===t.tagName){this.originalElement=this.element,e=document.createElement("div");var s=t.attributes;for(var o in s)"object"==typeof s[o]&&e.setAttribute(s[o].name,s[o].value);t.parentNode.replaceChild(e,t),this.element=t=e}for(t.classList.add("tabulator"),t.setAttribute("role","grid");t.firstChild;)t.removeChild(t.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",t.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",t.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",t.style.maxHeight=i.maxHeight)}_initializeTable(){var e=this.element,t=this.options;this.interactionMonitor.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modulesCore.forEach((e=>{e.initialize()})),e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&t.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modulesRegular.forEach((e=>{e.initialize()})),this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built")}_loadInitialData(){this.dataLoader.load(this.options.data),this.columnManager.verticalAlignHeaders()}destroy(){var e=this.element;for(this.destroyed=!0,_e.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.destroy();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator"),this.externalEvents.dispatch("tableDestroyed")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):e.indexOf("Mac OS")>-1?(this.browser="safari",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.slice(0,4))}initGuard(e,t){var i,s;return this.options.debugInitialization&&!this.initialized&&(e||(e=" "==(s="Error"==(i=(new Error).stack.split("\n"))[0]?i[2]:i[1])[0]?s.trim().split(" ")[1].split(".")[1]:s.trim().split("@")[0]),console.warn("Table Not Initialized - Calling the "+e+" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function."+(t?" "+t:""))),this.initialized}blockRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-blocking"),this.rowManager.blockRedraw(),this.columnManager.blockRedraw(),this.eventBus.dispatch("redraw-blocked")}restoreRedraw(){this.initGuard(),this.eventBus.dispatch("redraw-restoring"),this.rowManager.restoreRedraw(),this.columnManager.restoreRedraw(),this.eventBus.dispatch("redraw-restored")}setData(e,t,i){return this.initGuard(!1,"To set initial data please use the 'data' property in the table constructor."),this.dataLoader.load(e,t,i,!1)}clearData(){this.initGuard(),this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}replaceData(e,t,i){return this.initGuard(),this.dataLoader.load(e,t,i,!0,!0)}updateData(e){var t=0;return this.initGuard(),new Promise(((i,s)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e&&e.length>0?e.forEach((e=>{var o=this.rowManager.findRow(e[this.options.index]);o?(t++,o.updateData(e).then((()=>{--t||i()})).catch((t=>{s("Update Error - Unable to update row",e,t)}))):s("Update Error - Unable to find row",e)})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))}addData(e,t,i){return this.initGuard(),new Promise(((s,o)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then((e=>{var t=[];e.forEach((function(e){t.push(e.getComponent())})),s(t)})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}updateOrAddData(e){var t=[],i=0;return this.initGuard(),new Promise(((s,o)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e&&e.length>0?e.forEach((e=>{var o=this.rowManager.findRow(e[this.options.index]);i++,o?o.updateData(e).then((()=>{i--,t.push(o.getComponent()),i||s(t)})):this.rowManager.addRows(e).then((e=>{i--,t.push(e[0].getComponent()),i||s(t)}))})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e){var t=this.rowManager.getRowFromPosition(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){var t=[];this.initGuard(),Array.isArray(e)||(e=[e]);for(let i of e){let e=this.rowManager.findRow(i,!0);if(!e)return console.error("Delete Error - No matching row found:",i),Promise.reject("Delete Error - No matching row found");t.push(e)}return t.sort(((e,t)=>this.rowManager.rows.indexOf(e)>this.rowManager.rows.indexOf(t)?1:-1)),t.forEach((e=>{e.delete()})),this.rowManager.reRenderInPosition(),Promise.resolve()}addRow(e,t,i){return this.initGuard(),"string"==typeof e&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i,!0).then((e=>e[0].getComponent()))}updateOrAddRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((()=>i.getComponent())):this.rowManager.addRows(t).then((e=>e[0].getComponent()))}updateRow(e,t){var i=this.rowManager.findRow(e);return this.initGuard(),"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((()=>Promise.resolve(i.getComponent()))):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}scrollToRow(e,t,i){var s=this.rowManager.findRow(e);return s?this.rowManager.scrollToRow(s,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}moveRow(e,t,i){var s=this.rowManager.findRow(e);this.initGuard(),s?s.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e){var t=this.rowManager.findRow(e);return t?t.getPosition():(console.warn("Position Error - No matching row found:",e),!1)}setColumns(e){this.initGuard(!1,"To set initial columns please use the 'columns' property in the table constructor"),this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}showColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show()}hideColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide()}toggleColumn(e){var t=this.columnManager.findColumn(e);if(this.initGuard(),!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()}addColumn(e,t,i){var s=this.columnManager.findColumn(i);return this.initGuard(),this.columnManager.addColumn(e,t,s).then((e=>e.getComponent()))}deleteColumn(e){var t=this.columnManager.findColumn(e);return this.initGuard(),t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}updateColumnDefinition(e,t){var i=this.columnManager.findColumn(e);return this.initGuard(),i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}moveColumn(e,t,i){var s=this.columnManager.findColumn(e),o=this.columnManager.findColumn(t);this.initGuard(),s?o?this.columnManager.moveColumn(s,o,i):console.warn("Move Error - No matching column found:",o):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise(((s,o)=>{var n=this.columnManager.findColumn(e);return n?this.columnManager.scrollToColumn(n,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))}))}redraw(e){this.initGuard(),this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw(!0)}on(e,t){this.externalEvents.subscribe(e,t)}off(e,t){this.externalEvents.unsubscribe(e,t)}dispatchEvent(){Array.from(arguments).shift(),this.externalEvents.dispatch(...arguments)}alert(e,t){this.initGuard(),this.alertManager.alert(e,t)}clearAlert(){this.initGuard(),this.alertManager.clear()}modExists(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)}module(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}}Ge.defaultOptions={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,debugInvalidComponentFuncs:!0,debugInitialization:!0,debugDeprecation:!0,height:!1,minHeight:!1,maxHeight:!1,columnHeaderVertAlign:"top",popupContainer:!1,columns:[],columnDefaults:{},data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,rowHeight:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataLoaderErrorTimeout:3e3,dataSendParams:{},dataReceiveParams:{}},new We(Ge);class Ue extends Ge{}new We(Ue,we);class Je{constructor(e){this.type=e,this.element=this._createElement()}_createElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e}getElement(){return this.element}getComponent(){return!1}getData(){return{}}getHeight(){return this.element.outerHeight}initialize(){}reinitialize(){}normalizeHeight(){}generateCells(){}reinitializeHeight(){}calcHeight(){}setCellHeight(){}clearCellHeight(){}rendered(){}}export{o as AccessorModule,d as AjaxModule,u as CalcComponent,m as CellComponent,c as ClipboardModule,E as ColumnCalcsModule,g as ColumnComponent,y as DataTreeModule,x as DownloadModule,L as EditModule,P as ExportModule,H as FilterModule,_ as FormatModule,O as FrozenColumnsModule,A as FrozenRowsModule,B as GroupComponent,I as GroupRowsModule,N as HistoryModule,W as HtmlTableImportModule,G as ImportModule,U as InteractionModule,J as KeybindingsModule,X as MenuModule,s as Module,q as MoveColumnsModule,K as MoveRowsModule,Y as MutatorModule,Z as PageModule,te as PersistenceModule,ie as PopupModule,se as PrintModule,Je as PseudoRow,oe as ReactiveDataModule,Ee as Renderer,ne as ResizeColumnsModule,re as ResizeRowsModule,ae as ResizeTableModule,le as ResponsiveLayoutModule,v as RowComponent,ge as SelectRangeModule,he as SelectRowModule,ue as SortModule,Ge as Tabulator,Ue as TabulatorFull,be as TooltipModule,ve as ValidateModule}; -//# sourceMappingURL=tabulator_esm.min.js.map diff --git a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.min.js.map b/tmp/tabulator-5.6.1/dist/js/tabulator_esm.min.js.map deleted file mode 100644 index b4bd0f8..0000000 --- a/tmp/tabulator-5.6.1/dist/js/tabulator_esm.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tabulator_esm.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/Popup.js","../../src/js/core/Module.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/column/Column.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/List.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/date.js","../../src/js/modules/Edit/defaults/editors/time.js","../../src/js/modules/Edit/defaults/editors/datetime.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/defaults/importers/array.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Popup/Popup.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/SelectRange/RangeComponent.js","../../src/js/modules/SelectRange/Range.js","../../src/js/modules/SelectRange/SelectRange.js","../../src/js/modules/Tooltip/Tooltip.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/DeprecationAdvisor.js","../../src/js/core/tools/TableRegistry.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/tools/Alert.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/core/TabulatorFull.js","../../src/js/core/row/PseudoRow.js"],"sourcesContent":["export default class CoreFeature{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\t}\n\n\t//////////////////////////////////////////\n\t/////////////// DataLoad /////////////////\n\t//////////////////////////////////////////\n\n\treloadData(data, silent, columnsChanged){\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\n\t}\n\n\t//////////////////////////////////////////\n\t///////////// Localization ///////////////\n\t//////////////////////////////////////////\n\n\tlangText(){\n\t\treturn this.table.modules.localize.getText(...arguments);\n\t}\n\n\tlangBind(){\n\t\treturn this.table.modules.localize.bind(...arguments);\n\t}\n\n\tlangLocale(){\n\t\treturn this.table.modules.localize.getLocale(...arguments);\n\t}\n\n\n\t//////////////////////////////////////////\n\t////////// Inter Table Comms /////////////\n\t//////////////////////////////////////////\n\n\tcommsConnections(){\n\t\treturn this.table.modules.comms.getConnections(...arguments);\n\t}\n\n\tcommsSend(){\n\t\treturn this.table.modules.comms.send(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Layout /////////////////\n\t//////////////////////////////////////////\n\n\tlayoutMode(){\n\t\treturn this.table.modules.layout.getMode();\n\t}\n\n\tlayoutRefresh(force){\n\t\treturn this.table.modules.layout.layout(force);\n\t}\n\n\n\t//////////////////////////////////////////\n\t/////////////// Event Bus ////////////////\n\t//////////////////////////////////////////\n\n\tsubscribe(){\n\t\treturn this.table.eventBus.subscribe(...arguments);\n\t}\n\n\tunsubscribe(){\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.table.eventBus.subscribed(key);\n\t}\n\n\tsubscriptionChange(){\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\n\t}\n\n\tdispatch(){\n\t\treturn this.table.eventBus.dispatch(...arguments);\n\t}\n\n\tchain(){\n\t\treturn this.table.eventBus.chain(...arguments);\n\t}\n\n\tconfirm(){\n\t\treturn this.table.eventBus.confirm(...arguments);\n\t}\n\n\tdispatchExternal(){\n\t\treturn this.table.externalEvents.dispatch(...arguments);\n\t}\n\n\tsubscribedExternal(key){\n\t\treturn this.table.externalEvents.subscribed(key);\n\t}\n\n\tsubscriptionChangeExternal(){\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Options /////////////////\n\t//////////////////////////////////////////\n\n\toptions(key){\n\t\treturn this.table.options[key];\n\t}\n\n\tsetOption(key, value){\n\t\tif(typeof value !== \"undefined\"){\n\t\t\tthis.table.options[key] = value;\n\t\t}\n\n\t\treturn this.table.options[key];\n\t}\n\n\t//////////////////////////////////////////\n\t/////////// Deprecation Checks ///////////\n\t//////////////////////////////////////////\n\n\tdeprecationCheck(oldOption, newOption, convert){\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption, convert);\n\t}\n\n\tdeprecationCheckMsg(oldOption, msg){\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\n\t}\n\n\tdeprecationMsg(msg){\n\t\treturn this.table.deprecationAdvisor.msg(msg);\n\t}\n\t//////////////////////////////////////////\n\t//////////////// Modules /////////////////\n\t//////////////////////////////////////////\n\n\tmodule(key){\n\t\treturn this.table.module(key);\n\t}\n}","export default class Helpers{\n\n\tstatic elVisible(el){\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t}\n\n\tstatic elOffset(el){\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t}\n\n\tstatic retrieveNestedData(separator, field, data){\n\t\tvar structure = separator ? field.split(separator) : [field],\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdata = data[structure[i]];\n\n\t\t\toutput = data;\n\n\t\t\tif(!data){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tstatic deepClone(obj, clone, list = []){\n\t\tvar objectProto = {}.__proto__,\n\t\tarrayProto = [].__proto__;\n\n\t\tif (!clone){\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\t\t}\n\n\t\tfor(var i in obj) {\n\t\t\tlet subject = obj[i],\n\t\t\tmatch, copy;\n\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\n\t\t\t\tmatch = list.findIndex((item) => {\n\t\t\t\t\treturn item.subject === subject;\n\t\t\t\t});\n\n\t\t\t\tif(match > -1){\n\t\t\t\t\tclone[i] = list[match].copy;\n\t\t\t\t}else{\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\n\n\t\t\t\t\tlist.unshift({subject, copy});\n\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn clone;\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\nimport Helpers from './Helpers.js';\n\nexport default class Popup extends CoreFeature{\n\tconstructor(table, element, parent){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = element;\n\t\tthis.container = this._lookupContainer();\n\t\t\n\t\tthis.parent = parent;\n\t\t\n\t\tthis.reversedX = false;\n\t\tthis.childPopup = null;\n\t\tthis.blurable = false;\n\t\tthis.blurCallback = null;\n\t\tthis.blurEventsBound = false;\n\t\tthis.renderedCallback = null;\n\t\t\n\t\tthis.visible = false;\n\t\tthis.hideable = true;\n\t\t\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\n\t\t\n\t\tthis.blurEvent = this.hide.bind(this, false);\n\t\tthis.escEvent = this._escapeCheck.bind(this);\n\t\t\n\t\tthis.destroyBinding = this.tableDestroyed.bind(this);\n\t\tthis.destroyed = false;\n\t}\n\t\n\ttableDestroyed(){\n\t\tthis.destroyed = true;\n\t\tthis.hide(true);\n\t}\n\t\n\t_lookupContainer(){\n\t\tvar container = this.table.options.popupContainer;\n\t\t\n\t\tif(typeof container === \"string\"){\n\t\t\tcontainer = document.querySelector(container);\n\t\t\t\n\t\t\tif(!container){\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t\t}\n\t\t}else if (container === true){\n\t\t\tcontainer = this.table.element;\n\t\t}\n\t\t\n\t\tif(container && !this._checkContainerIsParent(container)){\n\t\t\tcontainer = false;\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t}\n\t\t\n\t\tif(!container){\n\t\t\tcontainer = document.body;\n\t\t}\n\t\t\n\t\treturn container;\n\t}\n\t\n\t_checkContainerIsParent(container, element = this.table.element){\n\t\tif(container === element){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\n\t\t}\n\t}\n\t\n\trenderCallback(callback){\n\t\tthis.renderedCallback = callback;\n\t}\n\t\n\tcontainerEventCoords(e){\n\t\tvar touch = !(e instanceof MouseEvent);\n\t\t\n\t\tvar x = touch ? e.touches[0].pageX : e.pageX;\n\t\tvar y = touch ? e.touches[0].pageY : e.pageY;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\tx -= parentOffset.left;\n\t\t\ty -= parentOffset.top;\n\t\t}\n\t\t\n\t\treturn {x, y};\n\t}\n\t\n\telementPositionCoords(element, position = \"right\"){\n\t\tvar offset = Helpers.elOffset(element),\n\t\tcontainerOffset, x, y;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\toffset.left -= containerOffset.left;\n\t\t\toffset.top -= containerOffset.top;\n\t\t}\n\t\t\n\t\tswitch(position){\n\t\t\tcase \"right\":\n\t\t\t\tx = offset.left + element.offsetWidth;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"bottom\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top + element.offsetHeight;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"left\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"top\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"center\":\n\t\t\t\tx = offset.left + (element.offsetWidth / 2);\n\t\t\t\ty = offset.top + (element.offsetHeight / 2);\n\t\t\t\tbreak;\n\t\t\t\n\t\t}\n\t\t\n\t\treturn {x, y, offset};\n\t}\n\t\n\tshow(origin, position){\n\t\tvar x, y, parentEl, parentOffset, coords;\n\t\t\n\t\tif(this.destroyed || this.table.destroyed){\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tif(origin instanceof HTMLElement){\n\t\t\tparentEl = origin;\n\t\t\tcoords = this.elementPositionCoords(origin, position);\n\t\t\t\n\t\t\tparentOffset = coords.offset;\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t}else if(typeof origin === \"number\"){\n\t\t\tparentOffset = {top:0, left:0};\n\t\t\tx = origin;\n\t\t\ty = position;\n\t\t}else{\n\t\t\tcoords = this.containerEventCoords(origin);\n\t\t\t\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t\tthis.reversedX = false;\n\t\t}\n\t\t\n\t\tthis.element.style.top = y + \"px\";\n\t\tthis.element.style.left = x + \"px\";\n\t\t\n\t\tthis.container.appendChild(this.element);\n\t\t\n\t\tif(typeof this.renderedCallback === \"function\"){\n\t\t\tthis.renderedCallback();\n\t\t}\n\t\t\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\n\t\t\n\t\tthis.visible = true;\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\n\t\t\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_fitToScreen(x, y, parentEl, parentOffset, position){\n\t\tvar scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\n\t\t\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\n\t\tif((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\n\t\t\tthis.element.style.left = \"\";\n\t\t\t\n\t\t\tif(parentEl){\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - x) + \"px\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.reversedX = true;\n\t\t}\n\t\t\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\t\tif((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\n\t\t\tif(parentEl){\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"bottom\":\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisVisible(){\n\t\treturn this.visible;\n\t}\n\t\n\thideOnBlur(callback){\n\t\tthis.blurable = true;\n\t\t\n\t\tif(this.visible){\n\t\t\tsetTimeout(() => {\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\n\t\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\n\n\t\t\t\t\tthis.blurEventsBound = true;\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t\t\n\t\t\tthis.blurCallback = callback;\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_escapeCheck(e){\n\t\tif(e.keyCode == 27){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\t\n\tblockHide(){\n\t\tthis.hideable = false;\n\t}\n\t\n\trestoreHide(){\n\t\tthis.hideable = true;\n\t}\n\t\n\thide(silent = false){\n\t\tif(this.visible && this.hideable){\n\t\t\tif(this.blurable && this.blurEventsBound){\n\t\t\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\t\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\twindow.removeEventListener(\"resize\", this.blurEvent);\n\t\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n\t\t\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\n\n\t\t\t\tthis.blurEventsBound = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.childPopup){\n\t\t\t\tthis.childPopup.hide();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.childPopup = null;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.visible = false;\n\t\t\t\n\t\t\tif(this.blurCallback && !silent){\n\t\t\t\tthis.blurCallback();\n\t\t\t}\n\t\t\t\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\tchild(element){\n\t\tif(this.childPopup){\n\t\t\tthis.childPopup.hide();\n\t\t}\n\t\t\n\t\tthis.childPopup = new Popup(this.table, element, this);\n\t\t\n\t\treturn this.childPopup;\n\t}\n}","import CoreFeature from './CoreFeature.js';\nimport Popup from './tools/Popup.js';\n\nclass Module extends CoreFeature{\n\t\n\tconstructor(table, name){\n\t\tsuper(table);\n\t\t\n\t\tthis._handler = null;\n\t}\n\t\n\tinitialize(){\n\t\t// setup module when table is initialized, to be overridden in module\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Options Registration ///////\n\t///////////////////////////////////\n\t\n\tregisterTableOption(key, value){\n\t\tthis.table.optionsList.register(key, value);\n\t}\n\t\n\tregisterColumnOption(key, value){\n\t\tthis.table.columnManager.optionsList.register(key, value);\n\t}\n\t\n\t///////////////////////////////////\n\t/// Public Function Registration ///\n\t///////////////////////////////////\n\t\n\tregisterTableFunction(name, func){\n\t\tif(typeof this.table[name] === \"undefined\"){\n\t\t\tthis.table[name] = (...args) => {\n\t\t\t\tthis.table.initGuard(name);\n\t\t\t\t\n\t\t\t\treturn func(...args);\n\t\t\t};\n\t\t}else{\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name);\n\t\t}\n\t}\n\t\n\tregisterComponentFunction(component, func, handler){\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Data Pipeline //////////\n\t///////////////////////////////////\n\t\n\tregisterDataHandler(handler, priority){\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tregisterDisplayHandler(handler, priority){\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tdisplayRows(adjust){\n\t\tvar index = this.table.rowManager.displayRows.length - 1, \n\t\tlookupIndex;\n\t\t\n\t\tif(this._handler){\n\t\t\tlookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => {\n\t\t\t\treturn item.handler === this._handler;\n\t\t\t});\n\n\t\t\tif(lookupIndex > -1){\n\t\t\t\tindex = lookupIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(adjust){\n\t\t\tindex = index + adjust;\n\t\t}\n\n\t\tif(this._handler){\n\t\t\tif(index > -1){\n\t\t\t\treturn this.table.rowManager.getDisplayRows(index);\n\t\t\t}else{\n\t\t\t\treturn this.activeRows();\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\tactiveRows(){\n\t\treturn this.table.rowManager.activeRows;\n\t}\n\t\n\trefreshData(renderInPosition, handler){\n\t\tif(!handler){\n\t\t\thandler = this._handler;\n\t\t}\n\t\t\n\t\tif(handler){\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Footer Management ////////\n\t///////////////////////////////////\n\t\n\tfooterAppend(element){\n\t\treturn this.table.footerManager.append(element);\n\t}\n\t\n\tfooterPrepend(element){\n\t\treturn this.table.footerManager.prepend(element);\n\t}\n\t\n\tfooterRemove(element){\n\t\treturn this.table.footerManager.remove(element);\n\t} \n\t\n\t///////////////////////////////////\n\t//////// Popups Management ////////\n\t///////////////////////////////////\n\t\n\tpopup(menuEl, menuContainer){\n\t\treturn new Popup(this.table, menuEl, menuContainer);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Alert Management ////////\n\t///////////////////////////////////\n\t\n\talert(content, type){\n\t\treturn this.table.alertManager.alert(content, type);\n\t}\n\t\n\tclearAlert(){\n\t\treturn this.table.alertManager.clear();\n\t}\n\t\n}\n\nexport default Module;","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultAccessors from './defaults/accessors.js';\n\nclass Accessor extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n\n\t\tthis.registerColumnOption(\"accessor\");\n\t\tthis.registerColumnOption(\"accessorParams\");\n\t\tthis.registerColumnOption(\"accessorData\");\n\t\tthis.registerColumnOption(\"accessorDataParams\");\n\t\tthis.registerColumnOption(\"accessorDownload\");\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\n\t\tthis.registerColumnOption(\"accessorClipboard\");\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\n\t\tthis.registerColumnOption(\"accessorPrint\");\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\n\t}\n\n\t//initialize column accessor\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\taccessor;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\taccessor:accessor,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.accessor = config;\n\t\t}\n\t}\n\n\tlookupAccessor(value){\n\t\tvar accessor = false;\n\n\t\t//set column accessor\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Accessor.accessors[value]){\n\t\t\t\t\taccessor = Accessor.accessors[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\taccessor = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn accessor;\n\t}\n\n\t//apply accessor to row\n\ttransformRow(row, type){\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\trowComponent = row.getComponent();\n\n\t\t//clone data object with deep copy to isolate internal data from returned result\n\t\tvar data = Helpers.deepClone(row.data || {});\n\n\t\tthis.table.columnManager.traverse(function(column){\n\t\t\tvar value, accessor, params, colComponent;\n\n\t\t\tif(column.modules.accessor){\n\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\t\tif(value != \"undefined\"){\n\t\t\t\t\t\tcolComponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n}\n\n//load defaults\nAccessor.moduleName = \"accessor\";\nAccessor.accessors = defaultAccessors;\n\nexport default Accessor;","export default {};","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nfunction serializeParams(params){\n\tvar output = generateParamsList(params),\n\tencoded = [];\n\n\toutput.forEach(function(item){\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t});\n\n\treturn encoded.join(\"&\");\n}\n\nexport default function(url, config, params){\n\tif(url){\n\t\tif(params && Object.keys(params).length){\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\n\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n}","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t}else{\n\t\toutput.push({key:prefix, value:data});\n\t}\n\n\treturn output;\n}\n\nexport default {\n\t\"json\":{\n\t\theaders:{\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tbody:function(url, config, params){\n\t\t\treturn JSON.stringify(params);\n\t\t},\n\t},\n\t\"form\":{\n\t\theaders:{\n\t\t},\n\t\tbody:function(url, config, params){\n\n\t\t\tvar output = generateParamsList(params),\n\t\t\tform = new FormData();\n\n\t\t\toutput.forEach(function(item){\n\t\t\t\tform.append(item.key, item.value);\n\t\t\t});\n\n\t\t\treturn form;\n\t\t},\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultConfig from './defaults/config.js';\nimport defaultURLGenerator from './defaults/urlGenerator.js';\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\n\nclass Ajax extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {}; //hold config object for ajax request\n\t\tthis.url = \"\"; //request URL\n\t\tthis.urlGenerator = false;\n\t\tthis.params = false; //request parameters\n\t\t\n\t\tthis.loaderPromise = false;\n\t\t\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\n\t\t\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\n\t\t\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\n\t}\n\t\n\t//initialize setup options\n\tinitialize(){\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\n\t\t\n\t\tif(this.table.options.ajaxURL){\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\n\t\t}\n\n\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\n\t\t\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\n\t}\n\t\n\trequestParams(data, config, silent, params){\n\t\tvar ajaxParams = this.table.options.ajaxParams;\n\t\t\n\t\tif(ajaxParams){\n\t\t\tif(typeof ajaxParams === \"function\"){\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\n\t\t\t}\n\t\t\t\n\t\t\tparams = Object.assign(Object.assign({}, ajaxParams), params);\n\t\t}\t\t\n\t\t\n\t\treturn params;\n\t}\n\t\n\trequestDataCheck(data, params, config, silent){\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\n\t}\n\t\n\trequestData(url, params, config, silent, previousData){\n\t\tvar ajaxConfig;\n\t\t\n\t\tif(!previousData && this.requestDataCheck(url)){\n\t\t\tif(url){\n\t\t\t\tthis.setUrl(url);\n\t\t\t}\n\t\t\t\n\t\t\tajaxConfig = this.generateConfig(config);\n\t\t\t\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\n\t\t}else{\n\t\t\treturn previousData;\n\t\t}\n\t}\n\t\n\tsetDefaultConfig(config = {}){\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\n\n\t\tif(typeof config == \"string\"){\n\t\t\tthis.config.method = config;\n\t\t}else{\n\t\t\tObject.assign(this.config, config);\n\t\t}\n\t}\n\t\n\t//load config object\n\tgenerateConfig(config = {}){\n\t\tvar ajaxConfig = Object.assign({}, this.config);\n\t\t\n\t\tif(typeof config == \"string\"){\n\t\t\tajaxConfig.method = config;\n\t\t}else{\n\t\t\tObject.assign(ajaxConfig, config);\n\t\t}\n\t\t\n\t\treturn ajaxConfig;\n\t}\n\t\n\t//set request url\n\tsetUrl(url){\n\t\tthis.url = url;\n\t}\n\t\n\t//get request url\n\tgetUrl(){\n\t\treturn this.url;\n\t}\n\t\n\t//send ajax request\n\tsendRequest(url, params, config){\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\n\t\t\treturn this.loaderPromise(url, config, params)\n\t\t\t\t.then((data)=>{\n\t\t\t\t\tif(this.table.options.ajaxResponse){\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n}\n\nAjax.moduleName = \"ajax\";\n\n//load defaults\nAjax.defaultConfig = defaultConfig;\nAjax.defaultURLGenerator = defaultURLGenerator;\nAjax.defaultLoaderPromise = defaultLoaderPromise;\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\n\nexport default Ajax;","export default {\n\tmethod: \"GET\",\n};","export default function(url, config, params){\n\tvar contentType;\n\n\treturn new Promise((resolve, reject) => {\n\t\t//set url\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\n\n\t\t//set body content if not GET request\n\t\tif(config.method.toUpperCase() != \"GET\"){\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\n\t\t\tif(contentType){\n\n\t\t\t\tfor(var key in contentType.headers){\n\t\t\t\t\tif(!config.headers){\n\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif(url){\n\t\t\t//configure headers\n\t\t\tif(typeof config.headers === \"undefined\"){\n\t\t\t\tconfig.headers = {};\n\t\t\t}\n\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\n\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t}\n\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\tif(typeof config.mode === \"undefined\"){\n\t\t\t\tconfig.mode = \"cors\";\n\t\t\t}\n\n\t\t\tif(config.mode == \"cors\"){\n\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\n\t\t\t\t\tconfig.headers[\"Origin\"] = window.location.origin;\n\t\t\t\t}\n \n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\n\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//send request\n\t\t\tfetch(url, config)\n\t\t\t\t.then((response)=>{\n\t\t\t\t\tif(response.ok) {\n\t\t\t\t\t\tresponse.json()\n\t\t\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\t}).catch((error)=>{\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error)=>{\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\tresolve([]);\n\t\t}\n\t});\n}","import Module from '../../core/Module.js';\n\nimport defaultPasteActions from './defaults/pasteActions.js';\nimport defaultPasteParsers from './defaults/pasteParsers.js';\n\nclass Clipboard extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = true;\n\t\tthis.pasteParser = function(){};\n\t\tthis.pasteAction = function(){};\n\t\tthis.customSelection = false;\n\t\tthis.rowRange = false;\n\t\tthis.blocked = true; //block copy actions not originating from this command\n\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRECATED - REMOVE in 5.0\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\n\n\t\tthis.registerColumnOption(\"clipboard\");\n\t\tthis.registerColumnOption(\"titleClipboard\");\n\t}\n\n\tinitialize(){\n\t\tthis.mode = this.table.options.clipboard;\n\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\t\tif(this.mode === true || this.mode === \"copy\"){\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\n\t\t\t\tvar plain, html, list;\n\n\t\t\t\tif(!this.blocked){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif(this.customSelection){\n\t\t\t\t\t\tplain = this.customSelection;\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\n\t\t\t\t\t\tlist = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\n\n\t\t\t\t\t\thtml = this.table.modules.export.generateHTMLTable(list);\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\n\n\t\t\t\t\tthis.reset();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(this.mode === true || this.mode === \"paste\"){\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\n\t\t\t\tthis.paste(e);\n\t\t\t});\n\t\t}\n\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\n\t}\n\n\treset(){\n\t\tthis.blocked = true;\n\t\tthis.customSelection = false;\n\t}\n\n\tgeneratePlainContent (list) {\n\t\tvar output = [];\n\n\t\tlist.forEach((row) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach((col) => {\n\t\t\t\tvar value = \"\";\n\n\t\t\t\tif(col){\n\n\t\t\t\t\tif(row.type === \"group\"){\n\t\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t\t}\n\n\t\t\t\t\tif(col.value === null){\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowData.push(value);\n\t\t\t});\n\n\t\t\toutput.push(rowData.join(\"\\t\"));\n\t\t});\n\n\t\treturn output.join(\"\\n\");\n\t}\n\n\tcopy (range, internal) {\n\t\tvar sel, textRange;\n\t\tthis.blocked = false;\n\t\tthis.customSelection = false;\n\t\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents(this.table.element);\n\t\t\t\tsel = window.getSelection();\n\n\t\t\t\tif (sel.toString() && internal) {\n\t\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t\t}\n\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(range);\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\t\ttextRange = document.body.createTextRange();\n\t\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\t\ttextRange.select();\n\t\t\t}\n\n\t\t\tdocument.execCommand('copy');\n\n\t\t\tif (sel) {\n\t\t\t\tsel.removeAllRanges();\n\t\t\t}\n\t\t}\n\t}\n\n\t//PASTE EVENT HANDLING\n\tsetPasteAction(action){\n\n\t\tswitch(typeof action){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\n\n\t\t\t\tif(!this.pasteAction){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteAction = action;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetPasteParser(parser){\n\t\tswitch(typeof parser){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\n\n\t\t\t\tif(!this.pasteParser){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteParser = parser;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpaste(e){\n\t\tvar data, rowData, rows;\n\n\t\tif(this.checkPasteOrigin(e)){\n\n\t\t\tdata = this.getPasteData(e);\n\n\t\t\trowData = this.pasteParser.call(this, data);\n\n\t\t\tif(rowData){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif(this.table.modExists(\"mutator\")){\n\t\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t\t}\n\n\t\t\t\trows = this.pasteAction.call(this, rowData);\n\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\n\t\t\t}\n\t\t}\n\t}\n\n\tmutateData(data){\n\t\tvar output = [];\n\n\t\tif(Array.isArray(data)){\n\t\t\tdata.forEach((row) => {\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t\t});\n\t\t}else{\n\t\t\toutput = data;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\n\tcheckPasteOrigin(e){\n\t\tvar valid = true;\n\t\tvar blocked = this.confirm(\"clipboard-paste\", [e]);\n\n\t\tif(blocked || ![\"DIV\", \"SPAN\"].includes(e.target.tagName)){\n\t\t\tvalid = false;\n\t\t}\n\n\t\treturn valid;\n\t}\n\n\tgetPasteData(e){\n\t\tvar data;\n\n\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\tdata = window.clipboardData.getData('Text');\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\t\tdata = e.clipboardData.getData('text/plain');\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t\t}\n\n\t\treturn data;\n\t}\n}\n\nClipboard.moduleName = \"clipboard\";\n\n//load defaults\nClipboard.pasteActions = defaultPasteActions;\nClipboard.pasteParsers = defaultPasteParsers;\n\nexport default Clipboard;","export default {\n\treplace:function(data){\n\t\treturn this.table.setData(data);\n\t},\n\tupdate:function(data){\n\t\treturn this.table.updateOrAddData(data);\n\t},\n\tinsert:function(data){\n\t\treturn this.table.addData(data);\n\t},\n\trange:function(data){\n\t\tvar rows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, startRow, rowWidth, dataLength;\n\n\t\tdataLength = data.length;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\t\t\t\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\trows = this.table.rowManager.activeRows.slice();\n\t\t\t\tstartRow = rows.indexOf(startCell.row);\n\n\t\t\t\tif(singleCell){\n\t\t\t\t\trowWidth = data.length;\n\t\t\t\t}else{\n\t\t\t\t\trowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(startRow >-1){\n\t\t\t\t\tthis.table.blockRedraw();\n\t\t\t\t\t\n\t\t\t\t\trows = rows.slice(startRow, startRow + rowWidth);\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row, i) => {\n\t\t\t\t\t\trow.updateData(data[i % dataLength]);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.table.restoreRedraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n};","export default {\n\ttable:function(clipboard){\n\t\tvar data = [],\n\t\theaderFindSuccess = true,\n\t\tcolumns = this.table.columnManager.columns,\n\t\tcolumnMap = [],\n\t\trows = [];\n\t\t\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\n\t\tclipboard.forEach(function(row){\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\t\t\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\n\t\t\t\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function(value){\n\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(column){\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t}else{\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//check if column headers are present by field\n\t\t\tif(!headerFindSuccess){\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\t\t\t\t\n\t\t\t\tdata[0].forEach(function(value){\n\t\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t}else{\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(!headerFindSuccess){\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//remove header row if found\n\t\t\tif(headerFindSuccess){\n\t\t\t\tdata.shift();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach(function(item){\n\t\t\t\tvar row = {};\n\t\t\t\t\n\t\t\t\titem.forEach(function(value, i){\n\t\t\t\t\tif(columnMap[i]){\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\trows.push(row);\n\t\t\t});\n\t\t\t\n\t\t\treturn rows;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t},\n\trange:function(clipboard){\n\t\tvar data = [],\n\t\trows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, colWidth, columnMap, startCol;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\t//get data from clipboard into array of columns and rows.\n\t\t\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tclipboard.forEach(function(row){\n\t\t\t\t\tdata.push(row.split(\"\\t\"));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(data.length){\n\t\t\t\t\tcolumnMap = this.table.columnManager.getVisibleColumnsByIndex();\n\t\t\t\t\tstartCol = columnMap.indexOf(startCell.column);\n\n\t\t\t\t\tif(startCol > -1){\n\t\t\t\t\t\tif(singleCell){\n\t\t\t\t\t\t\tcolWidth = data[0].length;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcolWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcolumnMap = columnMap.slice(startCol, startCol + colWidth);\n\n\t\t\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\t\t\tvar row = {};\n\t\t\t\t\t\t\tvar itemLength = item.length;\n\n\t\t\t\t\t\t\tcolumnMap.forEach(function(col, i){\n\t\t\t\t\t\t\t\trow[col.field] = item[i % itemLength];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trows.push(row);\t\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn rows;\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n};","class CalcComponent{\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n}\n\nexport default CalcComponent;","//public cell object\nexport default class CellComponent {\n\n\tconstructor (cell){\n\t\tthis._cell = cell;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetValue(){\n\t\treturn this._cell.getValue();\n\t}\n\n\tgetOldValue(){\n\t\treturn this._cell.getOldValue();\n\t}\n\n\tgetInitialValue(){\n\t\treturn this._cell.initialValue;\n\t}\n\n\tgetElement(){\n\t\treturn this._cell.getElement();\n\t}\n\n\tgetRow(){\n\t\treturn this._cell.row.getComponent();\n\t}\n\n\tgetData(transform){\n\t\treturn this._cell.row.getData(transform);\n\t}\n\tgetType(){\n\t\treturn \"cell\";\n\t}\n\tgetField(){\n\t\treturn this._cell.column.getField();\n\t}\n\n\tgetColumn(){\n\t\treturn this._cell.column.getComponent();\n\t}\n\n\tsetValue(value, mutate){\n\t\tif(typeof mutate == \"undefined\"){\n\t\t\tmutate = true;\n\t\t}\n\n\t\tthis._cell.setValue(value, mutate);\n\t}\n\n\trestoreOldValue(){\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\n\t}\n\n\trestoreInitialValue(){\n\t\tthis._cell.setValueActual(this._cell.initialValue);\n\t}\n\n\tcheckHeight(){\n\t\tthis._cell.checkHeight();\n\t}\n\n\tgetTable(){\n\t\treturn this._cell.table;\n\t}\n\n\t_getSelf(){\n\t\treturn this._cell;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport CellComponent from './CellComponent.js';\n\nexport default class Cell extends CoreFeature{\n\tconstructor(column, row){\n\t\tsuper(column.table);\n\n\t\tthis.table = column.table;\n\t\tthis.column = column;\n\t\tthis.row = row;\n\t\tthis.element = null;\n\t\tthis.value = null;\n\t\tthis.initialValue;\n\t\tthis.oldValue = null;\n\t\tthis.modules = {};\n\n\t\tthis.height = null;\n\t\tthis.width = null;\n\t\tthis.minWidth = null;\n\n\t\tthis.component = null;\n\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\t\tthis.build();\n\t}\n\n\t//////////////// Setup Functions /////////////////\n\t//generate element\n\tbuild(){\n\t\tthis.generateElement();\n\n\t\tthis.setWidth();\n\n\t\tthis._configureCell();\n\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\t\tthis.initialValue = this.value;\n\t}\n\n\tgenerateElement(){\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = \"tabulator-cell\";\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\n\t}\n\n\t_configureCell(){\n\t\tvar element = this.element,\n\t\tfield = this.column.getField(),\n\t\tvertAligns = {\n\t\t\ttop:\"flex-start\",\n\t\t\tbottom:\"flex-end\",\n\t\t\tmiddle:\"center\",\n\t\t},\n\t\thozAligns = {\n\t\t\tleft:\"flex-start\",\n\t\t\tright:\"flex-end\",\n\t\t\tcenter:\"center\",\n\t\t};\n\n\t\t//set text alignment\n\t\telement.style.textAlign = this.column.hozAlign;\n\n\t\tif(this.column.vertAlign){\n\t\t\telement.style.display = \"inline-flex\";\n\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\n\n\t\t\tif(this.column.hozAlign){\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\n\t\t\t}\n\t\t}\n\n\t\tif(field){\n\t\t\telement.setAttribute(\"tabulator-field\", field);\n\t\t}\n\n\t\t//add class to cell if needed\n\t\tif(this.column.definition.cssClass){\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\telement.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.dispatch(\"cell-init\", this);\n\n\t\t//hide cell if not visible\n\t\tif(!this.column.visible){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//generate cell contents\n\t_generateContents(){\n\t\tvar val;\n\n\t\tval = this.chain(\"cell-format\", this, null, () => {\n\t\t\treturn this.element.innerHTML = this.value;\n\t\t});\n\n\t\tswitch(typeof val){\n\t\t\tcase \"object\":\n\t\t\t\tif(val instanceof Node){\n\n\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\t\t\t\tthis.element.appendChild(val);\n\t\t\t\t}else{\n\t\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\t\tif(val != null){\n\t\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tthis.element.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element.innerHTML = val;\n\t\t}\n\t}\n\n\tcellRendered(){\n\t\tthis.dispatch(\"cell-rendered\", this);\n\t}\n\n\t//////////////////// Getters ////////////////////\n\tgetElement(containerOnly){\n\t\tif(!this.loaded){\n\t\t\tthis.loaded = true;\n\t\t\tif(!containerOnly){\n\t\t\t\tthis.layoutElement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.element;\n\t}\n\n\tgetValue(){\n\t\treturn this.value;\n\t}\n\n\tgetOldValue(){\n\t\treturn this.oldValue;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tsetValue(value, mutate, force){\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\n\n\t\t\tthis.cellRendered();\n\n\t\t\tif(this.column.definition.cellEdited){\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\n\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t}\n\t}\n\n\tsetValueProcessData(value, mutate, force){\n\t\tvar changed = false;\n\n\t\tif(this.value !== value || force){\n\n\t\t\tchanged = true;\n\n\t\t\tif(mutate){\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\n\t\t\t}\n\t\t}\n\n\t\tthis.setValueActual(value);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\n\t\t}\n\n\t\treturn changed;\n\t}\n\n\tsetValueActual(value){\n\t\tthis.oldValue = this.value;\n\n\t\tthis.value = value;\n\n\t\tthis.dispatch(\"cell-value-save-before\", this);\n\n\t\tthis.column.setFieldValue(this.row.data, value);\n\n\t\tthis.dispatch(\"cell-value-save-after\", this);\n\n\t\tif(this.loaded){\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\tlayoutElement(){\n\t\tthis._generateContents();\n\n\t\tthis.dispatch(\"cell-layout\", this);\n\t}\n\n\tsetWidth(){\n\t\tthis.width = this.column.width;\n\t\tthis.element.style.width = this.column.widthStyled;\n\t}\n\n\tclearWidth(){\n\t\tthis.width = \"\";\n\t\tthis.element.style.width = \"\";\n\t}\n\n\tgetWidth(){\n\t\treturn this.width || this.element.offsetWidth;\n\t}\n\n\tsetMinWidth(){\n\t\tthis.minWidth = this.column.minWidth;\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\n\t}\n\n\tsetMaxWidth(){\n\t\tthis.maxWidth = this.column.maxWidth;\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n\t}\n\n\tcheckHeight(){\n\t\t// var height = this.element.css(\"height\");\n\t\tthis.row.reinitializeHeight();\n\t}\n\n\tclearHeight(){\n\t\tthis.element.style.height = \"\";\n\t\tthis.height = null;\n\n\t\tthis.dispatch(\"cell-height\", this, \"\");\n\t}\n\n\tsetHeight(){\n\t\tthis.height = this.row.height;\n\t\tthis.element.style.height = this.row.heightStyled;\n\n\t\tthis.dispatch(\"cell-height\", this, this.row.heightStyled);\n\t}\n\n\tgetHeight(){\n\t\treturn this.height || this.element.offsetHeight;\n\t}\n\n\tshow(){\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n\t}\n\n\thide(){\n\t\tthis.element.style.display = \"none\";\n\t}\n\n\tdelete(){\n\t\tthis.dispatch(\"cell-delete\", this);\n\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.element = false;\n\t\tthis.column.deleteCell(this);\n\t\tthis.row.deleteCell(this);\n\t\tthis.calcs = {};\n\t}\n\n\tgetIndex(){\n\t\treturn this.row.getCellIndex(this);\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new CellComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n}\n","import Column from './Column.js';\n\n//public column object\nexport default class ColumnComponent {\n\tconstructor (column){\n\t\tthis._column = column;\n\t\tthis.type = \"ColumnComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetElement(){\n\t\treturn this._column.getElement();\n\t}\n\n\tgetDefinition(){\n\t\treturn this._column.getDefinition();\n\t}\n\n\tgetField(){\n\t\treturn this._column.getField();\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this._column.getTitleDownload();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._column.cells.forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tisVisible(){\n\t\treturn this._column.visible;\n\t}\n\n\tshow(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.show();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.show();\n\t\t}\n\t}\n\n\thide(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.hide();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.hide();\n\t\t}\n\t}\n\n\ttoggle(){\n\t\tif(this._column.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tdelete(){\n\t\treturn this._column.delete();\n\t}\n\n\tgetSubColumns(){\n\t\tvar output = [];\n\n\t\tif(this._column.columns.length){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\toutput.push(column.getComponent());\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetParentColumn(){\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._column;\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible);\n\t}\n\n\tgetTable(){\n\t\treturn this._column.table;\n\t}\n\n\tmove(to, after){\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\t\tif(toColumn){\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t}\n\n\tgetNextColumn(){\n\t\tvar nextCol = this._column.nextColumn();\n\n\t\treturn nextCol ? nextCol.getComponent() : false;\n\t}\n\n\tgetPrevColumn(){\n\t\tvar prevCol = this._column.prevColumn();\n\n\t\treturn prevCol ? prevCol.getComponent() : false;\n\t}\n\n\tupdateDefinition(updates){\n\t\treturn this._column.updateDefinition(updates);\n\t}\n\n\tgetWidth(){\n\t\treturn this._column.getWidth();\n\t}\n\n\tsetWidth(width){\n\t\tvar result;\n\n\t\tif(width === true){\n\t\t\tresult = this._column.reinitializeWidth(true);\n\t\t}else{\n\t\t\tresult = this._column.setWidth(width);\n\t\t}\n\n\t\tthis._column.table.columnManager.rerenderColumns(true);\n\n\t\treturn result;\n\t}\n}","export default {\n\t\"title\": undefined,\n\t\"field\": undefined,\n\t\"columns\": undefined,\n\t\"visible\": undefined,\n\t\"hozAlign\": undefined,\n\t\"vertAlign\": undefined,\n\t\"width\": undefined,\n\t\"minWidth\": 40,\n\t\"maxWidth\": undefined,\n\t\"maxInitialWidth\": undefined,\n\t\"cssClass\": undefined,\n\t\"variableHeight\": undefined,\n\t\"headerVertical\": undefined,\n\t\"headerHozAlign\": undefined,\n\t\"headerWordWrap\": false,\n\t\"editableTitle\": undefined,\n};","import CoreFeature from '../CoreFeature.js';\nimport ColumnComponent from './ColumnComponent.js';\nimport defaultOptions from './defaults/options.js';\n\nimport Cell from '../cell/Cell.js';\n\nclass Column extends CoreFeature{\n\n\tconstructor(def, parent){\n\t\tsuper(parent.table);\n\n\t\tthis.definition = def; //column definition\n\t\tthis.parent = parent; //hold parent object\n\t\tthis.type = \"column\"; //type of element\n\t\tthis.columns = []; //child columns\n\t\tthis.cells = []; //cells bound to this column\n\t\tthis.element = this.createElement(); //column header element\n\t\tthis.contentElement = false;\n\t\tthis.titleHolderElement = false;\n\t\tthis.titleElement = false;\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\n\t\tthis.isGroup = false;\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\n\t\tthis.vertAlign = \"\"; //vert text alignment\n\n\t\t//multi dimensional filed handling\n\t\tthis.field =\"\";\n\t\tthis.fieldStructure = \"\";\n\t\tthis.getFieldValue = \"\";\n\t\tthis.setFieldValue = \"\";\n\n\t\tthis.titleDownload = null;\n\t\tthis.titleFormatterRendered = false;\n\n\t\tthis.mapDefinitions();\n\n\t\tthis.setField(this.definition.field);\n\n\t\tthis.modules = {}; //hold module variables;\n\n\t\tthis.width = null; //column width\n\t\tthis.widthStyled = \"\"; //column width pre-styled to improve render efficiency\n\t\tthis.maxWidth = null; //column maximum width\n\t\tthis.maxWidthStyled = \"\"; //column maximum pre-styled to improve render efficiency\n\t\tthis.maxInitialWidth = null;\n\t\tthis.minWidth = null; //column minimum width\n\t\tthis.minWidthStyled = \"\"; //column minimum pre-styled to improve render efficiency\n\t\tthis.widthFixed = false; //user has specified a width for this column\n\n\t\tthis.visible = true; //default visible state\n\n\t\tthis.component = null;\n\n\t\t//initialize column\n\t\tif(this.definition.columns){\n\n\t\t\tthis.isGroup = true;\n\n\t\t\tthis.definition.columns.forEach((def, i) => {\n\t\t\t\tvar newCol = new Column(def, this);\n\t\t\t\tthis.attachColumn(newCol);\n\t\t\t});\n\n\t\t\tthis.checkColumnVisibility();\n\t\t}else{\n\t\t\tparent.registerColumnField(this);\n\t\t}\n\n\t\tthis._initialize();\n\t}\n\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.setAttribute(\"role\", \"columnheader\");\n\t\tel.setAttribute(\"aria-sort\", \"none\");\n\n\t\tswitch(this.table.options.columnHeaderVertAlign){\n\t\t\tcase \"middle\":\n\t\t\t\tel.style.justifyContent = \"center\";\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tel.style.justifyContent = \"flex-end\";\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn el;\n\t}\n\n\tcreateGroupElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col-group-cols\");\n\n\t\treturn el;\n\t}\n\n\tmapDefinitions(){\n\t\tvar defaults = this.table.options.columnDefaults;\n\n\t\t//map columnDefaults onto column definitions\n\t\tif(defaults){\n\t\t\tfor(let key in defaults){\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\n\t\t\t\t\tthis.definition[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition);\n\t}\n\n\tcheckDefinition(){\n\t\tObject.keys(this.definition).forEach((key) => {\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetField(field){\n\t\tthis.field = field;\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n\t}\n\n\t//register column position with column manager\n\tregisterColumnPosition(column){\n\t\tthis.parent.registerColumnPosition(column);\n\t}\n\n\t//register column position with column manager\n\tregisterColumnField(column){\n\t\tthis.parent.registerColumnField(column);\n\t}\n\n\t//trigger position registration\n\treRegisterPosition(){\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolumn.reRegisterPosition();\n\t\t\t});\n\t\t}else{\n\t\t\tthis.registerColumnPosition(this);\n\t\t}\n\t}\n\n\t//build header element\n\t_initialize(){\n\t\tvar def = this.definition;\n\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\tif(def.headerVertical){\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\n\n\t\t\tif(def.headerVertical === \"flip\"){\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t\t}\n\t\t}\n\n\t\tthis.contentElement = this._buildColumnHeaderContent();\n\n\t\tthis.element.appendChild(this.contentElement);\n\n\t\tif(this.isGroup){\n\t\t\tthis._buildGroupHeader();\n\t\t}else{\n\t\t\tthis._buildColumnHeader();\n\t\t}\n\n\t\tthis.dispatch(\"column-init\", this);\n\t}\n\n\t//build header element for header\n\t_buildColumnHeader(){\n\t\tvar def = this.definition;\n\n\t\tthis.dispatch(\"column-layout\", this);\n\n\t\t//set column visibility\n\t\tif(typeof def.visible != \"undefined\"){\n\t\t\tif(def.visible){\n\t\t\t\tthis.show(true);\n\t\t\t}else{\n\t\t\t\tthis.hide(true);\n\t\t\t}\n\t\t}\n\n\t\t//assign additional css classes to column header\n\t\tif(def.cssClass){\n\t\t\tvar classNames = def.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tif(def.field){\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t\t}\n\n\t\t//set min width if present\n\t\tthis.setMinWidth(parseInt(def.minWidth));\n\n\t\tif (def.maxInitialWidth) {\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\n\t\t}\n\t\t\n\t\tif(def.maxWidth){\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\n\t\t}\n\n\t\tthis.reinitializeWidth();\n\n\t\t//set horizontal text alignment\n\t\tthis.hozAlign = this.definition.hozAlign;\n\t\tthis.vertAlign = this.definition.vertAlign;\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\t}\n\n\t_buildColumnHeaderContent(){\n\t\tvar contentElement = document.createElement(\"div\");\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\t\tthis.titleHolderElement = document.createElement(\"div\");\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\t\tcontentElement.appendChild(this.titleHolderElement);\n\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\t\treturn contentElement;\n\t}\n\n\t//build title element of column\n\t_buildColumnHeaderTitle(){\n\t\tvar def = this.definition;\n\n\t\tvar titleHolderElement = document.createElement(\"div\");\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\t\t\n\t\tif(def.headerWordWrap){\n\t\t\ttitleHolderElement.classList.add(\"tabulator-col-title-wrap\");\n\t\t}\n\n\t\tif(def.editableTitle){\n\t\t\tvar titleElement = document.createElement(\"input\");\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttitleElement.focus();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"change\", () => {\n\t\t\t\tdef.title = titleElement.value;\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\n\t\t\t});\n\n\t\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\ttitleElement.value = def.title || \" \";\n\t\t\t}\n\n\t\t}else{\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t\t}\n\t\t}\n\n\t\treturn titleHolderElement;\n\t}\n\n\t_formatColumnHeaderTitle(el, title){\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\n\t\t\treturn title;\n\t\t});\n\n\t\tswitch(typeof contents){\n\t\t\tcase \"object\":\n\t\t\t\tif(contents instanceof Node){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = \"\";\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t}\n\n\t//build header element for column group\n\t_buildGroupHeader(){\n\t\tthis.element.classList.add(\"tabulator-col-group\");\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t\t//asign additional css classes to column header\n\t\tif(this.definition.cssClass){\n\t\t\tvar classNames = this.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\n\t\tthis.element.appendChild(this.groupElement);\n\t}\n\n\t//flat field lookup\n\t_getFlatData(data){\n\t\treturn data[this.field];\n\t}\n\n\t//nested field lookup\n\t_getNestedData(data){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdataObj = dataObj[structure[i]];\n\n\t\t\toutput = dataObj;\n\n\t\t\tif(!dataObj){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//flat field set\n\t_setFlatData(data, value){\n\t\tif(this.field){\n\t\t\tdata[this.field] = value;\n\t\t}\n\t}\n\n\t//nested field set\n\t_setNestedData(data, value){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tif(i == length -1){\n\t\t\t\tdataObj[structure[i]] = value;\n\t\t\t}else{\n\t\t\t\tif(!dataObj[structure[i]]){\n\t\t\t\t\tif(typeof value !== \"undefined\"){\n\t\t\t\t\t\tdataObj[structure[i]] = {};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t}\n\t\t}\n\t}\n\n\t//attach column to this group\n\tattachColumn(column){\n\t\tif(this.groupElement){\n\t\t\tthis.columns.push(column);\n\t\t\tthis.groupElement.appendChild(column.getElement());\n\n\t\t\tcolumn.columnRendered();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t\t}\n\t}\n\n\t//vertically align header in column\n\tverticalAlign(alignment, height){\n\n\t\t//calculate height of column header and group holder element\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\t\tthis.element.style.height = parentHeight + \"px\";\n\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\n\n\t\tif(this.isGroup){\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t}\n\n\t\t//vertically align cell contents\n\t\t// if(!this.isGroup && alignment !== \"top\"){\n\t\t// \tif(alignment === \"bottom\"){\n\t\t// \t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t// \t}else{\n\t\t// \t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\n\t\t// \t}\n\t\t// }\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.verticalAlign(alignment);\n\t\t});\n\t}\n\n\t//clear vertical alignment\n\tclearVerticalAlign(){\n\t\tthis.element.style.paddingTop = \"\";\n\t\tthis.element.style.height = \"\";\n\t\tthis.element.style.minHeight = \"\";\n\t\tthis.groupElement.style.minHeight = \"\";\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.clearVerticalAlign();\n\t\t});\n\n\t\tthis.dispatch(\"column-height\", this, \"\");\n\t}\n\n\t//// Retrieve Column Information ////\n\t//return column header element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return column group element\n\tgetGroupElement(){\n\t\treturn this.groupElement;\n\t}\n\n\t//return field name\n\tgetField(){\n\t\treturn this.field;\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this.titleDownload;\n\t}\n\n\t//return the first column in a group\n\tgetFirstColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[0].getFirstColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return the last column in a group\n\tgetLastColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return all columns in a group\n\tgetColumns(traverse){\n\t\tvar columns = [];\n\n\t\tif(traverse){\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumns.push(column);\n\t\t\t\t\t\n\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t});\n\t\t}else{\n\t\t\tcolumns = this.columns;\n\t\t}\n\t\t\n\t\treturn columns;\n\t}\n\n\t//return all columns in a group\n\tgetCells(){\n\t\treturn this.cells;\n\t}\n\n\t//retrieve the top column in a group of columns\n\tgetTopColumn(){\n\t\tif(this.parent.isGroup){\n\t\t\treturn this.parent.getTopColumn();\n\t\t}else{\n\t\t\treturn this;\n\t\t}\n\t}\n\n\t//return column definition object\n\tgetDefinition(updateBranches){\n\t\tvar colDefs = [];\n\n\t\tif(this.isGroup && updateBranches){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t\t});\n\n\t\t\tthis.definition.columns = colDefs;\n\t\t}\n\n\t\treturn this.definition;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tcheckColumnVisibility(){\n\t\tvar visible = false;\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tif(column.visible){\n\t\t\t\tvisible = true;\n\t\t\t}\n\t\t});\n\n\t\tif(visible){\n\t\t\tthis.show();\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t}else{\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//show column\n\tshow(silent, responsiveToggle){\n\t\tif(!this.visible){\n\t\t\tthis.visible = true;\n\n\t\t\tthis.element.style.display = \"\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.show();\n\t\t\t});\n\n\t\t\tif(!this.isGroup && this.width === null){\n\t\t\t\tthis.reinitializeWidth();\n\t\t\t}\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\t//hide column\n\thide(silent, responsiveToggle){\n\t\tif(this.visible){\n\t\t\tthis.visible = false;\n\n\t\t\tthis.element.style.display = \"none\";\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.hide();\n\t\t\t});\n\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\tmatchChildWidths(){\n\t\tvar childWidth = 0;\n\n\t\tif(this.contentElement && this.columns.length){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\tchildWidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveChild(child){\n\t\tvar index = this.columns.indexOf(child);\n\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\n\t\tif(!this.columns.length){\n\t\t\tthis.delete();\n\t\t}\n\t}\n\n\tsetWidth(width){\n\t\tthis.widthFixed = true;\n\t\tthis.setWidthActual(width);\n\t}\n\n\tsetWidthActual(width){\n\t\tif(isNaN(width)){\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\n\t\t}\n\n\t\twidth = Math.max(this.minWidth, width);\n\n\t\tif(this.maxWidth){\n\t\t\twidth = Math.min(this.maxWidth, width);\n\t\t}\n\n\t\tthis.width = width;\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\t\tthis.element.style.width = this.widthStyled;\n\n\t\tif(!this.isGroup){\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.setWidth();\n\t\t\t});\n\t\t}\n\n\t\tif(this.parent.isGroup){\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tthis.dispatch(\"column-width\", this);\n\t}\n\n\tcheckCellHeights(){\n\t\tvar rows = [];\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tif(cell.row.heightInitialized){\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\n\t\t\t\t\trows.push(cell.row);\n\t\t\t\t\tcell.row.clearCellHeight();\n\t\t\t\t}else{\n\t\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.calcHeight();\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.setCellHeight();\n\t\t});\n\t}\n\n\tgetWidth(){\n\t\tvar width = 0;\n\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\twidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\twidth = this.width;\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tgetLeftOffset(){\n\t\tvar offset = this.element.offsetLeft;\n\n\t\tif(this.parent.isGroup){\n\t\t\toffset += this.parent.getLeftOffset();\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tgetHeight(){\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\n\t}\n\n\tsetMinWidth(minWidth){\n\t\tif(this.maxWidth && minWidth > this.maxWidth){\n\t\t\tminWidth = this.maxWidth;\n\n\t\t\tconsole.warn(\"the minWidth (\"+ minWidth + \"px) for column '\" + this.field + \"' cannot be bigger that its maxWidth (\"+ this.maxWidthStyled + \")\");\n\t\t}\n\n\t\tthis.minWidth = minWidth;\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\t\tthis.element.style.minWidth = this.minWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMinWidth();\n\t\t});\n\t}\n\n\tsetMaxWidth(maxWidth){\n\t\tif(this.minWidth && maxWidth < this.minWidth){\n\t\t\tmaxWidth = this.minWidth;\n\n\t\t\tconsole.warn(\"the maxWidth (\"+ maxWidth + \"px) for column '\" + this.field + \"' cannot be smaller that its minWidth (\"+ this.minWidthStyled + \")\");\n\t\t}\n\n\t\tthis.maxWidth = maxWidth;\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMaxWidth();\n\t\t});\n\t}\n\n\tdelete(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(this.isGroup){\n\t\t\t\tthis.columns.forEach(function(column){\n\t\t\t\t\tcolumn.delete();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dispatch(\"column-delete\", this);\n\n\t\t\tvar cellCount = this.cells.length;\n\n\t\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\t\tthis.cells[0].delete();\n\t\t\t}\n\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\n\t\t\tthis.element = false;\n\t\t\tthis.contentElement = false;\n\t\t\tthis.titleElement = false;\n\t\t\tthis.groupElement = false;\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.removeChild(this);\n\t\t\t}\n\n\t\t\tthis.table.columnManager.deregisterColumn(this);\n\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\n\t\t\tthis.dispatch(\"column-deleted\", this);\n\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tcolumnRendered(){\n\t\tif(this.titleFormatterRendered){\n\t\t\tthis.titleFormatterRendered();\n\t\t}\n\n\t\tthis.dispatch(\"column-rendered\", this);\n\t}\n\n\t//////////////// Cell Management /////////////////\n\t//generate cell for this column\n\tgenerateCell(row){\n\t\tvar cell = new Cell(this, row);\n\n\t\tthis.cells.push(cell);\n\n\t\treturn cell;\n\t}\n\n\tnextColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n\t}\n\n\t_nextVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n\t}\n\n\tprevColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n\t}\n\n\t_prevVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n\t}\n\n\treinitializeWidth(force){\n\t\tthis.widthFixed = false;\n\n\t\t//set width if present\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\n\t\t\t// maxInitialWidth ignored here as width specified\n\t\t\tthis.setWidth(this.definition.width);\n\t\t}\n\n\t\tthis.dispatch(\"column-width-fit-before\", this);\n\n\t\tthis.fitToData(force);\n\n\t\tthis.dispatch(\"column-width-fit-after\", this);\n\t}\n\n\t//set column width to maximum cell width for non group columns\n\tfitToData(force){\n\t\tif(this.isGroup){\n\t\t\treturn;\n\t\t}\n\n\t\tif(!this.widthFixed){\n\t\t\tthis.element.style.width = \"\";\n\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tcell.clearWidth();\n\t\t\t});\n\t\t}\n\n\t\tvar maxWidth = this.element.offsetWidth;\n\n\t\tif(!this.width || !this.widthFixed){\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tvar width = cell.getWidth();\n\n\t\t\t\tif(width > maxWidth){\n\t\t\t\t\tmaxWidth = width;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(maxWidth){\n\t\t\t\tvar setTo = maxWidth + 1;\n\t\t\t\tif (this.maxInitialWidth && !force) {\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\n\t\t\t\t}\n\t\t\t\tthis.setWidthActual(setTo);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateDefinition(updates){\n\t\tvar definition;\n\n\t\tif(!this.isGroup){\n\t\t\tif(!this.parent.isGroup){\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\n\t\t\t\t\t.then((column) => {\n\n\t\t\t\t\t\tif(definition.field == this.field){\n\t\t\t\t\t\t\tthis.field = false; //clear field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this.delete()\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t}\n\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new ColumnComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n\n\tgetPosition(){\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1;\n\t}\n}\n\nColumn.defaultOptionList = defaultOptions;\n\nexport default Column;\n","//public row object\nexport default class RowComponent {\n\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\tgetIndex(){\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\n\t}\n\n\tgetPosition(){\n\t\treturn this._row.getPosition();\n\t}\n\n\twatchPosition(callback){\n\t\treturn this._row.watchPosition(callback);\n\t}\n\n\tdelete(){\n\t\treturn this._row.delete();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._row.table.rowManager.scrollToRow(this._row, position, ifVisible);\n\t}\n\n\tmove(to, after){\n\t\tthis._row.moveToRow(to, after);\n\t}\n\n\tupdate(data){\n\t\treturn this._row.updateData(data);\n\t}\n\n\tnormalizeHeight(){\n\t\tthis._row.normalizeHeight(true);\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n\n\treformat(){\n\t\treturn this._row.reinitialize();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetNextRow(){\n\t\tvar row = this._row.nextRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n\n\tgetPrevRow(){\n\t\tvar row = this._row.prevRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport RowComponent from './RowComponent.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Row extends CoreFeature{\n\tconstructor (data, parent, type = \"row\"){\n\t\tsuper(parent.table);\n\t\t\n\t\tthis.parent = parent;\n\t\tthis.data = {};\n\t\tthis.type = type; //type of element\n\t\tthis.element = false;\n\t\tthis.modules = {}; //hold module variables;\n\t\tthis.cells = [];\n\t\tthis.height = 0; //hold element height\n\t\tthis.heightStyled = \"\"; //hold element height pre-styled to improve render efficiency\n\t\tthis.manualHeight = false; //user has manually set row height\n\t\tthis.outerHeight = 0; //hold elements outer height\n\t\tthis.initialized = false; //element has been rendered\n\t\tthis.heightInitialized = false; //element has resized cells to fit\n\t\tthis.position = 0; //store position of element in row list\n\t\tthis.positionWatchers = [];\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.created = false;\n\t\t\n\t\tthis.setData(data);\n\t}\n\t\n\tcreate(){\n\t\tif(!this.created){\n\t\t\tthis.created = true;\n\t\t\tthis.generateElement();\n\t\t}\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\tthis.element = el;\n\t}\n\t\n\tgetElement(){\n\t\tthis.create();\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.createElement();\n\t\tthis.dispatch(\"row-init\", this);\n\t}\n\t\n\tgenerateCells(){\n\t\tthis.cells = this.table.columnManager.generateCells(this);\n\t}\n\t\n\t//functions to setup on first render\n\tinitialize(force, inFragment){\n\t\tthis.create();\n\t\t\n\t\tif(!this.initialized || force){\n\t\t\t\n\t\t\tthis.deleteCells();\n\t\t\t\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-before\", this);\n\t\t\t\n\t\t\tthis.generateCells();\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t\t\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this, inFragment);\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.normalizeHeight();\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout\", this);\n\t\t\t\n\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-after\", this);\n\t\t}else{\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this, inFragment);\n\t\t}\n\t}\n\n\trendered(){\n\t\tthis.cells.forEach((cell) => {\n\t\t\tcell.cellRendered();\n\t\t});\n\t}\n\t\n\treinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.normalizeHeight(true);\n\t\t}\n\t}\n\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tdeinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t}\n\t\n\treinitialize(children){\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(!this.manualHeight){\n\t\t\tthis.height = 0;\n\t\t\tthis.heightStyled = \"\";\n\t\t}\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.initialize(true);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"row-relayout\", this);\n\t}\n\t\n\t//get heights when doing bulk row style calcs in virtual DOM\n\tcalcHeight(force){\n\t\tvar maxHeight = 0,\n\t\tminHeight;\n\t\t\n\t\tif(this.table.options.rowHeight){\n\t\t\tthis.height = this.table.options.rowHeight;\n\t\t}else{\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\t\t\t\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tvar height = cell.getHeight();\n\t\t\t\tif(height > maxHeight){\n\t\t\t\t\tmaxHeight = height;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\n\t\t\t}else{\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n\t\n\t//set of cells\n\tsetCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setHeight();\n\t\t});\n\t\t\n\t\tthis.heightInitialized = true;\n\t}\n\t\n\tclearCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.clearHeight();\n\t\t});\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(force){\n\t\tif(force && !this.table.options.rowHeight){\n\t\t\tthis.clearCellHeight();\n\t\t}\n\t\t\n\t\tthis.calcHeight(force);\n\t\t\n\t\tthis.setCellHeight();\n\t}\n\t\n\t//set height of rows\n\tsetHeight(height, force){\n\t\tif(this.height != height || force){\n\t\t\t\n\t\t\tthis.manualHeight = true;\n\t\t\t\n\t\t\tthis.height = height;\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\t\t\t\n\t\t\tthis.setCellHeight();\n\t\t\t\n\t\t\t// this.outerHeight = this.element.outerHeight();\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\t//return rows outer Width\n\tgetWidth(){\n\t\treturn this.element.offsetWidth;\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\t\n\t//////////////// Data Management /////////////////\n\tsetData(data){\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\n\t\t\n\t\tthis.dispatch(\"row-data-init-after\", this);\n\t}\n\t\n\t//update the rows data\n\tupdateData(updatedData){\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\n\t\ttempData = {},\n\t\tnewRowData;\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof updatedData === \"string\"){\n\t\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\n\t\t\t\n\t\t\tif(this.subscribed(\"row-data-changing\")){\n\t\t\t\ttempData = Object.assign(tempData, this.data);\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\n\t\t\t\n\t\t\t//set data\n\t\t\tfor (let attrname in newRowData) {\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\n\t\t\t\n\t\t\t//update affected cells only\n\t\t\tfor (let attrname in updatedData) {\n\t\t\t\t\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\n\t\t\t\t\n\t\t\t\tcolumns.forEach((column) => {\n\t\t\t\t\tlet cell = this.getCell(column.getField());\n\t\t\t\t\t\n\t\t\t\t\tif(cell){\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\n\t\t\t\t\t\tif(cell.getValue() !== value){\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(visible){\n\t\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//Partial reinitialization if visible\n\t\t\tif(visible){\n\t\t\t\tthis.normalizeHeight(true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.initialized = false;\n\t\t\t\tthis.height = 0;\n\t\t\t\tthis.heightStyled = \"\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\n\t\t\t\n\t\t\t//this.reinitialize();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\tgetData(transform){\n\t\tif(transform){\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\tgetCell(column){\n\t\tvar match = false;\n\t\t\n\t\tcolumn = this.table.columnManager.findColumn(column);\n\t\t\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\tmatch = this.cells.find(function(cell){\n\t\t\treturn cell.column === column;\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetCellIndex(findCell){\n\t\treturn this.cells.findIndex(function(cell){\n\t\t\treturn cell === findCell;\n\t\t});\n\t}\n\t\n\tfindCell(subject){\n\t\treturn this.cells.find((cell) => {\n\t\t\treturn cell.element === subject;\n\t\t});\n\t}\n\t\n\tgetCells(){\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\treturn this.cells;\n\t}\n\t\n\tnextRow(){\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tprevRow(){\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tmoveToRow(to, before){\n\t\tvar toRow = this.table.rowManager.findRow(to);\n\t\t\n\t\tif(toRow){\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t\t}\n\t}\n\t\n\t///////////////////// Actions /////////////////////\n\tdelete(){\n\t\tthis.dispatch(\"row-delete\", this);\n\t\t\n\t\tthis.deleteActual();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\tdeleteActual(blockRedraw){\n\t\tthis.detachModules();\n\t\t\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\t\t\n\t\tthis.deleteCells();\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\tthis.element = false;\n\t\t\n\t\tthis.dispatch(\"row-deleted\", this);\n\t}\n\t\n\tdetachModules(){\n\t\tthis.dispatch(\"row-deleting\", this);\n\t}\n\t\n\tdeleteCells(){\n\t\tvar cellCount = this.cells.length;\n\t\t\n\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\tthis.cells[0].delete();\n\t\t}\n\t}\n\t\n\twipe(){\n\t\tthis.detachModules();\n\t\tthis.deleteCells();\n\t\t\n\t\tif(this.element){\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.modules = {};\n\t}\n\n\tisDisplayed(){\n\t\treturn this.table.rowManager.getDisplayRows().includes(this);\n\t}\n\n\tgetPosition(){\n\t\treturn this.isDisplayed() ? this.position : false;\n\t}\n\n\tsetPosition(position){\n\t\tif(position != this.position){\n\t\t\tthis.position = position;\n\n\t\t\tthis.positionWatchers.forEach((callback) => {\n\t\t\t\tcallback(this.position);\n\t\t\t});\n\t\t}\n\t}\n\n\twatchPosition(callback){\n\t\tthis.positionWatchers.push(callback);\n\n\t\tcallback(this.position);\n\t}\n\t\n\tgetGroup(){\n\t\treturn this.modules.group || false;\n\t}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new RowComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n","export default {\n\t\"avg\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn Number(sum) + Number(value);\n\t\t\t});\n\n\t\t\toutput = output / values.length;\n\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t}\n\n\t\treturn parseFloat(output).toString();\n\t},\n\t\"max\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value > output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"min\":function(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function(value){\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif(value < output || output === null){\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\n\t},\n\t\"sum\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t});\n\t\t}\n\n\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t},\n\t\"concat\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\toutput = values.reduce(function(sum, value){\n\t\t\t\treturn String(sum) + String(value);\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"count\":function(values, data, calcParams){\n\t\tvar output = 0;\n\n\t\tif(values.length){\n\t\t\tvalues.forEach(function(value){\n\t\t\t\tif(value){\n\t\t\t\t\toutput ++;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"unique\":function(values, data, calcParams){\n\t\tvar unique = values.filter((value, index) => {\n\t\t\treturn (values || value === 0) && values.indexOf(value) === index;\n\t\t});\n\n\t\treturn unique.length;\n\t},\n};","import Module from '../../core/Module.js';\n\nimport CalcComponent from './CalcComponent.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\nimport Row from '../../core/row/Row.js';\n\nimport defaultCalculations from './defaults/calculations.js';\n\nclass ColumnCalcs extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.topCalcs = [];\n\t\tthis.botCalcs = [];\n\t\tthis.genColumn = false;\n\t\tthis.topElement = this.createElement();\n\t\tthis.botElement = this.createElement();\n\t\tthis.topRow = false;\n\t\tthis.botRow = false;\n\t\tthis.topInitialized = false;\n\t\tthis.botInitialized = false;\n\t\t\n\t\tthis.blocked = false;\n\t\tthis.recalcAfterBlock = false;\n\t\t\n\t\tthis.registerTableOption(\"columnCalcs\", true);\n\t\t\n\t\tthis.registerColumnOption(\"topCalc\");\n\t\tthis.registerColumnOption(\"topCalcParams\");\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\n\t\tthis.registerColumnOption(\"bottomCalc\");\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-calcs-holder\");\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\n\t\t\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t\t\n\t\tthis.subscribe(\"redraw-blocked\", this.blockRedraw.bind(this));\n\t\tthis.subscribe(\"redraw-restored\", this.restoreRedraw.bind(this));\n\n\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\n\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\t\n\ttableRedraw(force){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t\n\t\tif(force){\n\t\t\tthis.redraw();\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.blocked = true;\n\t\tthis.recalcAfterBlock = false;\n\t}\n\t\n\t\n\trestoreRedraw(){\n\t\tthis.blocked = false;\n\t\t\n\t\tif(this.recalcAfterBlock){\n\t\t\tthis.recalcAfterBlock = false;\n\t\t\tthis.recalcActiveRowsRefresh();\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tuserRecalc(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tblockCheck(){\n\t\tif(this.blocked){\n\t\t\tthis.recalcAfterBlock = true;\n\t\t}\n\t\t\n\t\treturn this.blocked;\n\t}\n\t\n\tvisibleRows(viewable, rows){\n\t\tif(this.topRow){\n\t\t\trows.unshift(this.topRow);\n\t\t}\n\t\t\n\t\tif(this.botRow){\n\t\t\trows.push(this.botRow);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.recalcRowGroup(row);\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRowsRefresh(){\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\n\t\t\tthis.recalcAll();\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRows(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\tcellValueChanged(cell){\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\n\t\t\tif(this.table.options.groupBy){\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\n\t\t\t\t\tthis.recalcActiveRows();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeColumnCheck(column){\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//initialize column calcs\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\tvar config = {\n\t\t\ttopCalcParams:def.topCalcParams || {},\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\n\t\t};\n\t\t\n\t\tif(def.topCalc){\n\t\t\t\n\t\t\tswitch(typeof def.topCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.topCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.topCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeTopRow();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tif(def.bottomCalc){\n\t\t\tswitch(typeof def.bottomCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.botCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.botCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeBottomRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t//dummy functions to handle being mock column manager\n\tregisterColumnField(){}\n\t\n\tremoveCalcs(){\n\t\tvar changed = false;\n\t\t\n\t\tif(this.topInitialized){\n\t\t\tthis.topInitialized = false;\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(this.botInitialized){\n\t\t\tthis.botInitialized = false;\n\t\t\tthis.footerRemove(this.botElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\treinitializeCalcs(){\n\t\tif(this.topCalcs.length){\n\t\t\tthis.initializeTopRow();\n\t\t}\n\n\t\tif(this.botCalcs.length){\n\t\t\tthis.initializeBottomRow();\n\t\t}\n\t}\n\t\n\tinitializeTopRow(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tif(!this.topInitialized){\n\n\t\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\t\tfragment.appendChild(this.topElement);\n\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\t\t\tthis.topInitialized = true;\n\t\t}\n\t}\n\t\n\tinitializeBottomRow(){\n\t\tif(!this.botInitialized){\n\t\t\tthis.footerPrepend(this.botElement);\n\t\t\tthis.botInitialized = true;\n\t\t}\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tif(this.botInitialized && this.botRow){\n\t\t\tthis.botElement.scrollLeft = left;\n\t\t}\n\t}\n\t\n\trecalc(rows){\n\t\tvar data, row;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(this.topInitialized || this.botInitialized){\n\t\t\t\tdata = this.rowsToData(rows);\n\t\t\t\t\n\t\t\t\tif(this.topInitialized){\n\t\t\t\t\tif(this.topRow){\n\t\t\t\t\t\tthis.topRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"top\", data);\n\t\t\t\t\tthis.topRow = row;\n\t\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\n\t\t\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.botInitialized){\n\t\t\t\t\tif(this.botRow){\n\t\t\t\t\t\tthis.botRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"bottom\", data);\n\t\t\t\t\tthis.botRow = row;\n\t\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\n\t\t\t\t\tthis.botElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t\t\t\n\t\t\t\t//set resizable handles\n\t\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcRowGroup(row){\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n\t}\n\t\n\trecalcAll(){\n\t\tif(this.topCalcs.length || this.botCalcs.length){\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\n\t\t\t\t\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\n\t\t\t\t\n\t\t\t\tgroups.forEach((group) => {\n\t\t\t\t\tthis.recalcGroup(group);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcGroup(group){\n\t\tvar data, rowData;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(group){\n\t\t\t\tif(group.calcs){\n\t\t\t\t\tif(group.calcs.bottom){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(group.calcs.top){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"top\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//generate top stats row\n\tgenerateTopRow(rows){\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\n\t}\n\t//generate bottom stats row\n\tgenerateBottomRow(rows){\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n\t}\n\t\n\trowsToData(rows){\n\t\tvar data = [];\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tdata.push(row.getData());\n\t\t\t\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\t\tdata = data.concat(children);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//generate stats row\n\tgenerateRow(pos, data){\n\t\tvar rowData = this.generateRowData(pos, data),\n\t\trow;\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.disable();\n\t\t}\n\t\t\n\t\trow = new Row(rowData, this, \"calc\");\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.enable();\n\t\t}\n\t\t\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\t\t\n\t\trow.component = false;\n\t\t\n\t\trow.getComponent = () => {\n\t\t\tif(!row.component){\n\t\t\t\trow.component = new CalcComponent(row);\n\t\t\t}\n\t\t\t\n\t\t\treturn row.component;\n\t\t};\n\t\t\n\t\trow.generateCells = () => {\n\t\t\t\n\t\t\tvar cells = [];\n\t\t\t\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\t\n\t\t\t\t//set field name of mock column\n\t\t\t\tthis.genColumn.setField(column.getField());\n\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\n\t\t\t\t\n\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\t\tparams:{}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//ensure css class definition is replicated to calculation cell\n\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\n\t\t\t\t\n\t\t\t\t//generate cell and assign to correct column\n\t\t\t\tvar cell = new Cell(this.genColumn, row);\n\t\t\t\tcell.getElement();\n\t\t\t\tcell.column = column;\n\t\t\t\tcell.setWidth();\n\t\t\t\t\n\t\t\t\tcolumn.cells.push(cell);\n\t\t\t\tcells.push(cell);\n\t\t\t\t\n\t\t\t\tif(!column.visible){\n\t\t\t\t\tcell.hide();\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\trow.cells = cells;\n\t\t};\n\t\t\n\t\treturn row;\n\t}\n\t\n\t//generate stats row\n\tgenerateRowData(pos, data){\n\t\tvar rowData = {},\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t\tparams, paramKey;\n\t\t\n\t\tcalcs.forEach(function(column){\n\t\t\tvar values = [];\n\t\t\t\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\n\t\t\t\tdata.forEach(function(item){\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tparamKey = type + \"Params\";\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\t\t\t\t\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowData;\n\t}\n\t\n\thasTopCalcs(){\n\t\treturn\t!!(this.topCalcs.length);\n\t}\n\t\n\thasBottomCalcs(){\n\t\treturn\t!!(this.botCalcs.length);\n\t}\n\t\n\t//handle table redraw\n\tredraw(){\n\t\tif(this.topRow){\n\t\t\tthis.topRow.normalizeHeight(true);\n\t\t}\n\t\tif(this.botRow){\n\t\t\tthis.botRow.normalizeHeight(true);\n\t\t}\n\t}\n\t\n\t//return the calculated\n\tgetResults(){\n\t\tvar results = {},\n\t\tgroups;\n\t\t\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\t\t\t\n\t\t\tgroups.forEach((group) => {\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\n\t\t\t});\n\t\t}else{\n\t\t\tresults = {\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\n\t\t\t};\n\t\t}\n\t\t\n\t\treturn results;\n\t}\n\t\n\t//get results from a group\n\tgetGroupResults(group){\n\t\tvar groupObj = group._getSelf(),\n\t\tsubGroups = group.getSubGroups(),\n\t\tsubGroupResults = {},\n\t\tresults = {};\n\t\t\n\t\tsubGroups.forEach((subgroup) => {\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\n\t\t});\n\t\t\n\t\tresults = {\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\t\tgroups: subGroupResults,\n\t\t};\n\t\t\n\t\treturn results;\n\t}\n\t\n\tadjustForScrollbar(width){\n\t\tif(this.botRow){\n\t\t\tif(this.table.rtl){\n\t\t\t\tthis.botElement.style.paddingLeft = width + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.botElement.style.paddingRight = width + \"px\";\n\t\t\t}\n\t\t}\n\t}\n}\n\nColumnCalcs.moduleName = \"columnCalcs\";\n\n//load defaults\nColumnCalcs.calculations = defaultCalculations;\n\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\n\nimport Row from '../../core/row/Row.js';\n\nimport RowComponent from '../../core/row/RowComponent.js';\n\nclass DataTree extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.indent = 10;\n\t\tthis.field = \"\";\n\t\tthis.collapseEl = null;\n\t\tthis.expandEl = null;\n\t\tthis.branchEl = null;\n\t\tthis.elementField = false;\n\n\t\tthis.startOpen = function(){};\n\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//selecting a parent row selects its children\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.dataTree){\n\t\t\tvar dummyEl = null,\n\t\t\toptions = this.table.options;\n\n\t\t\tthis.field = options.dataTreeChildField;\n\t\t\tthis.indent = options.dataTreeChildIndent;\n\n\t\t\tif(this.options(\"movableRows\")){\n\t\t\t\tconsole.warn(\"The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeBranchElement){\n\n\t\t\t\tif(options.dataTreeBranchElement === true){\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t\t\t}else{\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch-empty\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeCollapseElement){\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.collapseEl.tabIndex = 0;\n\t\t\t\tthis.collapseEl.innerHTML = \"
    \";\n\t\t\t}\n\n\t\t\tif(options.dataTreeExpandElement){\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.expandEl.tabIndex = 0;\n\t\t\t\tthis.expandEl.innerHTML = \"
    \";\n\t\t\t}\n\n\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.bind(this));\n\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\n\t\t}\n\t}\n\n\ttableRedrawing(force){\n\t\tvar rows;\n\n\t\tif(force){\n\t\t\trows = this.table.rowManager.getRows();\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.reinitializeRowChildren(row);\n\t\t\t});\n\t\t}\n\t}\n\n\tinitializeElementField(){\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\n\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\t}\n\t\n\tgetRowChildren(row){\n\t\treturn this.getTreeChildren(row, true);\n\t}\n\n\tcolumnMoving(){\n\t\tvar rows = [];\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\trowDataChanged(row, visible, updatedData){\n\t\tif(this.redrawNeeded(updatedData)){\n\t\t\tthis.initializeRow(row);\n\n\t\t\tif(visible){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tcellValueChanged(cell){\n\t\tvar field = cell.column.getField();\n\n\t\tif(field === this.elementField){\n\t\t\tthis.layoutRow(cell.row);\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar childArray = row.getData()[this.field];\n\t\tvar isArray = Array.isArray(childArray);\n\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t\t}\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t\t}\n\n\t\trow.modules.dataTree = {\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\t\tchildren:children,\n\t\t};\n\t}\n\n\treinitializeRowChildren(row){\n\t\tvar children = this.getTreeChildren(row, false, true);\n\n\t\tchildren.forEach(function(child){\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n\n\tlayoutRow(row){\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t\tel = cell.getElement(),\n\t\tconfig = row.modules.dataTree;\n\n\t\tif(config.branchEl){\n\t\t\tif(config.branchEl.parentNode){\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t\t}\n\t\t\tconfig.branchEl = false;\n\t\t}\n\n\t\tif(config.controlEl){\n\t\t\tif(config.controlEl.parentNode){\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t\t}\n\t\t\tconfig.controlEl = false;\n\t\t}\n\n\t\tthis.generateControlElement(row, el);\n\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\t\tif(config.index){\n\t\t\tif(this.branchEl){\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateControlElement(row, el){\n\t\tvar config = row.modules.dataTree,\n\t\toldControl = config.controlEl;\n\n\t\tel = el || row.getCells()[0].getElement();\n\n\t\tif(config.children !== false){\n\n\t\t\tif(config.open){\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.collapseRow(row);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.expandRow(row);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif(oldControl && oldControl.parentNode === el){\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\n\t\t\t}else{\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetRows(rows){\n\t\tvar output = [];\n\n\t\trows.forEach((row, i) => {\n\t\t\tvar config, children;\n\n\t\t\toutput.push(row);\n\n\t\t\tif(row instanceof Row){\n\n\t\t\t\trow.create();\n\n\t\t\t\tconfig = row.modules.dataTree;\n\n\t\t\t\tif(!config.index && config.children !== false){\n\t\t\t\t\tchildren = this.getChildren(row);\n\n\t\t\t\t\tchildren.forEach((child) => {\n\t\t\t\t\t\tchild.create();\n\t\t\t\t\t\toutput.push(child);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tgetChildren(row, allChildren){\n\t\tvar config = row.modules.dataTree,\n\t\tchildren = [],\n\t\toutput = [];\n\n\t\tif(config.children !== false && (config.open || allChildren)){\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\n\t\t\t\tthis.table.modules.sort.sort(children);\n\t\t\t}\n\n\t\t\tchildren.forEach((child) => {\n\t\t\t\toutput.push(child);\n\n\t\t\t\tvar subChildren = this.getChildren(child);\n\n\t\t\t\tsubChildren.forEach((sub) => {\n\t\t\t\t\toutput.push(sub);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgenerateChildren(row){\n\t\tvar children = [];\n\n\t\tvar childArray = row.getData()[this.field];\n\n\t\tif(!Array.isArray(childArray)){\n\t\t\tchildArray = [childArray];\n\t\t}\n\n\t\tchildArray.forEach((childData) => {\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\n\n\t\t\tchildRow.create();\n\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\t\tchildRow.modules.dataTree.parent = row;\n\n\t\t\tif(childRow.modules.dataTree.children){\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t\t}\n\t\t\tchildren.push(childRow);\n\t\t});\n\n\t\treturn children;\n\t}\n\n\texpandRow(row, silent){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = true;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\tcollapseRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = false;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\ttoggleRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tif(config.open){\n\t\t\t\tthis.collapseRow(row);\n\t\t\t}else{\n\t\t\t\tthis.expandRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowExpanded(row){\n\t\treturn row.modules.dataTree.open;\n\t}\n\n\tgetTreeParent(row){\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n\t}\n\n\tgetTreeParentRoot(row){\n\t\treturn row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\n\t}\n\n\tgetFilteredTreeChildren(row){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [], children;\n\n\t\tif(config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tchildren.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(childRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\trowDelete(row){\n\t\tvar parent = row.modules.dataTree.parent,\n\t\tchildIndex;\n\n\t\tif(parent){\n\t\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t\t}\n\n\t\t\tif(!parent.data[this.field].length){\n\t\t\t\tdelete parent.data[this.field];\n\t\t\t}\n\n\t\t\tthis.initializeRow(parent);\n\t\t\tthis.layoutRow(parent);\n\t\t}\n\n\t\tthis.refreshData(true);\n\t}\n\n\taddTreeChildRow(row, data, top, index){\n\t\tvar childIndex = false;\n\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif(!Array.isArray(row.data[this.field])){\n\t\t\trow.data[this.field] = [];\n\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\n\t\t\t}\n\t\t}\n\n\t\tif(childIndex === false){\n\t\t\tif(top){\n\t\t\t\trow.data[this.field].unshift(data);\n\t\t\t}else{\n\t\t\t\trow.data[this.field].push(data);\n\t\t\t}\n\t\t}\n\n\t\tthis.initializeRow(row);\n\t\tthis.layoutRow(row);\n\n\t\tthis.refreshData(true);\n\t}\n\n\tfindChildIndex(subject, parent){\n\t\tvar match = false;\n\n\t\tif(typeof subject == \"object\"){\n\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\tmatch = subject.data;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\tmatch = subject._getSelf().data;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\tif(parent.modules.dataTree){\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t\t});\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tmatch = match.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else if(subject === null){\n\t\t\t\tmatch = false;\n\t\t\t}\n\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\tmatch = false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tmatch = parent.data[this.field].find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t}\n\n\t\tif(match){\n\n\t\t\tif(Array.isArray(parent.data[this.field])){\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t\t}\n\n\t\t\tif(match == -1){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\t\treturn match;\n\t}\n\n\tgetTreeChildren(row, component, recurse){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [];\n\n\t\tif(config && config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tconfig.children.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\t\tif(recurse){\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetChildField(){\n\t\treturn this.field;\n\t}\n\n\tredrawNeeded(data){\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n\t}\n}\n\nDataTree.moduleName = \"dataTree\";\n\nexport default DataTree;","import csv from './downloaders/csv.js';\nimport json from './downloaders/json.js';\nimport pdf from './downloaders/pdf.js';\nimport xlsx from './downloaders/xlsx.js';\nimport html from './downloaders/html.js';\nimport jsonLines from './downloaders/jsonLines.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tjsonLines:jsonLines,\n\tpdf:pdf,\n\txlsx:xlsx,\n\thtml:html,\n};","export default function(list, options = {}, setFileContents){\n\tvar delimiter = options.delimiter ? options.delimiter : \",\",\n\tfileContents = [],\n\theaders = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = [];\n\n\t\tswitch(row.type){\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"header\":\n\t\t\t\trow.columns.forEach((col, i) => {\n\t\t\t\t\tif(col && col.depth === 1){\n\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\n\t\t\t\t\tif(col){\n\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(headers.length){\n\t\tfileContents.unshift(headers.join(delimiter));\n\t}\n\n\tfileContents = fileContents.join(\"\\n\");\n\n\tif(options.bom){\n\t\tfileContents = \"\\ufeff\" + fileContents;\n\t}\n\n\tsetFileContents(fileContents, \"text/csv\");\n}\n","export default function(list, options, setFileContents){\n\tvar fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = {};\n\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif(col){\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\tsetFileContents(fileContents, \"application/json\");\n}","export default function (list, options, setFileContents) {\n\tconst fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tconst item = {};\n\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(JSON.stringify(item));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\n}","export default function(list, options = {}, setFileContents){\n\tvar header = [],\n\tbody = [],\n\tautoTableParams = {},\n\trowGroupStyles = options.rowGroupStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 12,\n\t\tcellPadding: 6,\n\t\tfillColor: 220,\n\t},\n\trowCalcStyles = options.rowCalcStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 10,\n\t\tcellPadding: 4,\n\t\tfillColor: 232,\n\t},\n\tjsPDFParams = options.jsPDF || {},\n\ttitle = options.title ? options.title : \"\";\n\n\tif(!jsPDFParams.orientation){\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t}\n\n\tif(!jsPDFParams.unit){\n\t\tjsPDFParams.unit = \"pt\";\n\t}\n\n\t//parse row list\n\tlist.forEach((row) => {\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\theader.push(parseRow(row));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tbody.push(parseRow(row));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfunction parseRow(row, styles){\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach((col) =>{\n\t\t\tvar cell;\n\n\t\t\tif(col){\n\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcell = {\n\t\t\t\t\tcontent:col.value,\n\t\t\t\t\tcolSpan:col.width,\n\t\t\t\t\trowSpan:col.height,\n\t\t\t\t};\n\n\t\t\t\tif(styles){\n\t\t\t\t\tcell.styles = styles;\n\t\t\t\t}\n\n\t\t\t\trowData.push(cell);\n\t\t\t}\n\t\t});\n\n\t\treturn rowData;\n\t}\n\n\n\t//configure PDF\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\tif(options.autoTable){\n\t\tif(typeof options.autoTable === \"function\"){\n\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t}else{\n\t\t\tautoTableParams = options.autoTable;\n\t\t}\n\t}\n\n\tif(title){\n\t\tautoTableParams.didDrawPage = function(data) {\n\t\t\tdoc.text(title, 40, 30);\n\t\t};\n\t}\n\n\tautoTableParams.head = header;\n\tautoTableParams.body = body;\n\n\tdoc.autoTable(autoTableParams);\n\n\tif(options.documentProcessing){\n\t\toptions.documentProcessing(doc);\n\t}\n\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n}\n","import CoreFeature from '../../../../core/CoreFeature.js';\n\nexport default function(list, options, setFileContents){\n\tvar self = this,\n\tsheetName = options.sheetName || \"Sheet1\",\n\tworkbook = XLSX.utils.book_new(),\n\ttableFeatures = new CoreFeature(this),\n\tcompression = 'compress' in options ? options.compress : true,\n\twriteOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression},\n\toutput;\n\n\twriteOptions.type = 'binary';\n\n\tworkbook.SheetNames = [];\n\tworkbook.Sheets = {};\n\n\tfunction generateSheet(){\n\t\tvar rows = [],\n\t\tmerges = [],\n\t\tworksheet = {},\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\n\n\t\t//parse row list\n\t\tlist.forEach((row, i) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function(col, j){\n\n\t\t\t\tif(col){\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\n\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\n\t\t\t\t\t\tif(col.height > 1 || col.width > 1){\n\t\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\trowData.push(\"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trows.push(rowData);\n\t\t});\n\n\t\t//convert rows to worksheet\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\tif(merges.length){\n\t\t\tworksheet[\"!merges\"] = merges;\n\t\t}\n\n\t\treturn worksheet;\n\t}\n\n\tif(options.sheetOnly){\n\t\tsetFileContents(generateSheet());\n\t\treturn;\n\t}\n\n\tif(options.sheets){\n\t\tfor(var sheet in options.sheets){\n\n\t\t\tif(options.sheets[sheet] === true){\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t}else{\n\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\n\t\t\t\t\ttype:\"xlsx\",\n\t\t\t\t\toptions:{sheetOnly:true},\n\t\t\t\t\tactive:self.active,\n\t\t\t\t\tintercept:function(data){\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}else{\n\t\tworkbook.SheetNames.push(sheetName);\n\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t}\n\n\tif(options.documentProcessing){\n\t\tworkbook = options.documentProcessing(workbook);\n\t}\n\n\t//convert workbook to binary array\n\tfunction s2ab(s) {\n\t\tvar buf = new ArrayBuffer(s.length);\n\t\tvar view = new Uint8Array(buf);\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\t\treturn buf;\n\t}\n\n\toutput = XLSX.write(workbook, writeOptions);\n\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\n}\n","export default function(list, options, setFileContents){\n\tif(this.modExists(\"export\", true)){\n\t\tsetFileContents(this.modules.export.generateHTMLTable(list), \"text/html\");\n\t}\n}","import Module from '../../core/Module.js';\n\nimport defaultDownloaders from './defaults/downloaders.js';\n\nclass Download extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.registerTableOption(\"downloadEncoder\", function(data, mimeType){\n\t\t\treturn new Blob([data],{type:mimeType});\n\t\t}); //function to manipulate download data\n\t\tthis.registerTableOption(\"downloadReady\", undefined); //warn of function deprecation\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\n\n\t\tthis.registerColumnOption(\"download\");\n\t\tthis.registerColumnOption(\"titleDownload\");\n\t}\n\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"downloadReady\", \"downloadEncoder\");\n\t}\t\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tdownloadToTab(type, filename, options, active){\n\t\tthis.download(type, filename, options, active, true);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\t//trigger file download\n\tdownload(type, filename, options, range, interceptCallback){\n\t\tvar downloadFunc = false;\n\n\t\tfunction buildLink(data, mime){\n\t\t\tif(interceptCallback){\n\t\t\t\tif(interceptCallback === true){\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\n\t\t\t\t}else{\n\t\t\t\t\tinterceptCallback(data);\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\n\t\t\t}\n\t\t}\n\n\t\tif(typeof type == \"function\"){\n\t\t\tdownloadFunc = type;\n\t\t}else{\n\t\t\tif(Download.downloaders[type]){\n\t\t\t\tdownloadFunc = Download.downloaders[type];\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t\t}\n\t\t}\n\n\t\tif(downloadFunc){\n\t\t\tvar list = this.generateExportList(range);\n\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\n\t\t}\n\t}\n\n\tgenerateExportList(range){\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t\t//assign group header formatter\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\n\t\t\tgroupHeader = [groupHeader];\n\t\t}\n\n\t\tlist.forEach((row) => {\n\t\t\tvar group;\n\n\t\t\tif(row.type === \"group\"){\n\t\t\t\tgroup = row.columns[0];\n\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn list;\n\t}\n\n\ttriggerDownload(data, mime, type, filename, newTab){\n\t\tvar element = document.createElement('a'),\n\t\tblob = this.table.options.downloadEncoder(data, mime);\n\n\t\tif(blob){\n\t\t\tif(newTab){\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t\t}else{\n\t\t\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\t\t\t\t\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t\t}else{\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t\t//set file title\n\t\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t\t//trigger download\n\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\telement.click();\n\n\t\t\t\t\t//remove temporary link element\n\t\t\t\t\tdocument.body.removeChild(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\n\t\t}\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"intercept\":\n\t\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDownload.moduleName = \"download\";\n\n//load defaults\nDownload.downloaders = defaultDownloaders;\n\nexport default Download;","export default function maskInput(el, options){\n\tvar mask = options.mask,\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\";\n\n\tfunction fillSymbols(index){\n\t\tvar symbol = mask[index];\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\n\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\tfillSymbols(index+1);\n\t\t}\n\t}\n\n\tel.addEventListener(\"keydown\", (e) => {\n\t\tvar index = el.value.length,\n\t\tchar = e.key;\n\n\t\tif(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){\n\t\t\tif(index >= mask.length){\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\tswitch(mask[index]){\n\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\tif(isNaN(char)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(char !== mask[index]){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", (e) => {\n\t\tif(e.keyCode > 46){\n\t\t\tif(options.maskAutoFill){\n\t\t\t\tfillSymbols(el.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tif(!el.placeholder){\n\t\tel.placeholder = mask;\n\t}\n\n\tif(options.maskAutoFill){\n\t\tfillSymbols(el.value.length);\n\t}\n}","import maskInput from './inputMask.js';\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\n\nexport default class Edit{\n\tconstructor(editor, cell, onRendered, success, cancel, editorParams){\n\t\tthis.edit = editor;\n\t\tthis.table = editor.table;\n\t\tthis.cell = cell;\n\t\tthis.params = this._initializeParams(editorParams);\n\t\t\n\t\tthis.data = [];\n\t\tthis.displayItems = [];\n\t\tthis.currentItems = [];\n\t\tthis.focusedItem = null;\n\t\t\n\t\tthis.input = this._createInputElement();\n\t\tthis.listEl = this._createListElement();\n\t\t\n\t\tthis.initialValues = null; \n\t\t\n\t\tthis.isFilter = cell.getType() === \"header\";\n\t\t\n\t\tthis.filterTimeout = null;\n\t\tthis.filtered = false;\n\t\tthis.typing = false;\n\t\t\n\t\tthis.values = []; \n\t\tthis.popup = null; \n\t\t\n\t\tthis.listIteration = 0;\n\t\t\n\t\tthis.lastAction=\"\";\n\t\tthis.filterTerm=\"\";\n\t\t\n\t\tthis.blurable = true;\n\t\t\n\t\tthis.actions = {\n\t\t\tsuccess:success,\n\t\t\tcancel:cancel\n\t\t};\n\t\t\n\t\tthis._deprecatedOptionsCheck();\n\t\tthis._initializeValue();\n\t\t\n\t\tonRendered(this._onRendered.bind(this));\n\t}\n\t\n\t_deprecatedOptionsCheck(){\n\t\tif(this.params.listItemFormatter){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.sortValuesList){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchFunc){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchingPlaceholder){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t}\n\t\n\t_initializeValue(){\n\t\tvar initialValue = this.cell.getValue();\n\t\t\n\t\tif(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\n\t\t\tinitialValue = this.params.defaultValue;\n\t\t}\n\t\t\n\t\tthis.initialValues = this.params.multiselect ? initialValue : [initialValue];\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.input.value = this.initialValues ? this.initialValues.join(\",\") : \"\";\n\t\t\tthis.headerFilterInitialListGen(); \n\t\t}\n\t}\n\t\n\t_onRendered(){\n\t\tvar cellEl = this.cell.getElement();\n\t\t\n\t\tfunction clickStop(e){\n\t\t\te.stopPropagation();\n\t\t}\t\n\t\t\n\t\tif(!this.isFilter){\n\t\t\tthis.input.style.height = \"100%\";\n\t\t\tthis.input.focus({preventScroll: true});\n\t\t}\n\t\t\n\t\t\n\t\tcellEl.addEventListener(\"click\", clickStop);\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tcellEl.removeEventListener(\"click\", clickStop);\n\t\t}, 1000);\n\t\t\n\t\tthis.input.addEventListener(\"mousedown\", this._preventPopupBlur.bind(this));\n\t}\n\t\n\t_createListElement(){\n\t\tvar listEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-list\");\n\t\t\n\t\tlistEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\tlistEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\t\n\t\treturn listEl;\n\t}\n\t\n\t_setListWidth(){\n\t\tvar element = this.isFilter ? this.input : this.cell.getElement();\n\t\t\n\t\tthis.listEl.style.minWidth = element.offsetWidth + \"px\";\n\t\t\n\t\tif(this.params.maxWidth){\n\t\t\tif(this.params.maxWidth === true){\n\t\t\t\tthis.listEl.style.maxWidth = element.offsetWidth + \"px\";\n\t\t\t}else if(typeof this.params.maxWidth === \"number\"){\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t_createInputElement(){\n\t\tvar attribs = this.params.elementAttributes;\n\t\tvar input = document.createElement(\"input\");\n\t\t\n\t\tinput.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\n\t\t\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\t\n\t\tif(!this.params.autocomplete){\n\t\t\tinput.style.cursor = \"default\";\n\t\t\tinput.style.caretColor = \"transparent\";\n\t\t\t// input.readOnly = (this.edit.currentCell != false);\n\t\t}\n\t\t\n\t\tif(attribs && typeof attribs == \"object\"){\n\t\t\tfor (let key in attribs){\n\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + attribs[\"+\" + key]);\n\t\t\t\t}else{\n\t\t\t\t\tinput.setAttribute(key, attribs[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(this.params.mask){\n\t\t\tmaskInput(input, this.params);\n\t\t}\n\t\t\n\t\tthis._bindInputEvents(input);\n\t\t\n\t\treturn input;\n\t}\n\t\n\t_initializeParams(params){\n\t\tvar valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\n\t\tvalueCheck;\n\t\t\n\t\tparams = Object.assign({}, params);\n\t\t\n\t\tparams.verticalNavigation = params.verticalNavigation || \"editor\";\n\t\tparams.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\n\t\tparams.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\n\t\tparams.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\n\t\t\n\t\tparams.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\n\t\t\n\t\tvalueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\n\t\t\n\t\tif(!valueCheck){\n\t\t\tconsole.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\");\n\t\t}else if(valueCheck > 1){\n\t\t\tconsole.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\");\n\t\t}\n\t\t\n\t\tif(params.autocomplete){\n\t\t\tif(params.multiselect){\n\t\t\t\tparams.multiselect = false;\n\t\t\t\tconsole.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\");\n\t\t\t}\n\t\t}else{\n\t\t\tif(params.freetext){\n\t\t\t\tparams.freetext = false;\n\t\t\t\tconsole.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterFunc){\n\t\t\t\tparams.filterFunc = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterRemote){\n\t\t\t\tparams.filterRemote = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.mask){\n\t\t\t\tparams.mask = false;\n\t\t\t\tconsole.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.allowEmpty){\n\t\t\t\tparams.allowEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.listOnEmpty){\n\t\t\t\tparams.listOnEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(params.filterRemote && !(typeof params.valuesLookup === \"function\" || params.valuesURL)){\n\t\t\tparams.filterRemote = false;\n\t\t\tconsole.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\n\t\t}\n\t\treturn params;\n\t}\n\t//////////////////////////////////////\n\t////////// Event Handling ////////////\n\t//////////////////////////////////////\n\t\n\t_bindInputEvents(input){\n\t\tinput.addEventListener(\"focus\", this._inputFocus.bind(this));\n\t\tinput.addEventListener(\"click\", this._inputClick.bind(this));\n\t\tinput.addEventListener(\"blur\", this._inputBlur.bind(this));\n\t\tinput.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\tinput.addEventListener(\"search\", this._inputSearch.bind(this));\n\t\t\n\t\tif(this.params.autocomplete){\n\t\t\tinput.addEventListener(\"keyup\", this._inputKeyUp.bind(this));\n\t\t}\n\t}\n\t\n\t\n\t_inputFocus(e){\n\t\tthis.rebuildOptionsList();\n\t}\n\t\n\t_filter(){\n\t\tif(this.params.filterRemote){\n\t\t\tclearTimeout(this.filterTimeout);\n\t\t\t\n\t\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\t\tthis.rebuildOptionsList();\n\t\t\t}, this.params.filterDelay);\n\t\t}else{\n\t\t\tthis._filterList();\n\t\t}\n\t}\n\t\n\t_inputClick(e){\n\t\te.stopPropagation();\n\t}\n\t\n\t_inputBlur(e){\n\t\tif(this.blurable){\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.hide();\n\t\t\t}else{\n\t\t\t\tthis._resolveValue(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_inputSearch(){\n\t\tthis._clearChoices();\n\t}\n\t\n\t_inputKeyDown(e){\n\t\tswitch(e.keyCode){\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\t\tthis._keyUp(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 40: //down arrow\n\t\t\t\tthis._keyDown(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //right arrow\n\t\t\t\tthis._keySide(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 13: //enter\n\t\t\t\tthis._keyEnter();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27: //escape\n\t\t\t\tthis._keyEsc();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 36: //home\n\t\t\tcase 35: //end\n\t\t\t\tthis._keyHomeEnd(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 9: //tab\n\t\t\t\tthis._keyTab(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keySelectLetter(e);\n\t\t}\n\t}\n\t\n\t_inputKeyUp(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 38: //up arrow\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //up arrow\n\t\t\tcase 40: //right arrow\n\t\t\tcase 13: //enter\n\t\t\tcase 27: //escape\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keyAutoCompLetter(e);\n\t\t}\n\t}\n\t\n\t_preventPopupBlur(){\n\t\tif(this.popup){\n\t\t\tthis.popup.blockHide();\n\t\t}\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.restoreHide();\n\t\t\t}\n\t\t}, 10);\n\t}\n\t\n\t_preventBlur(){\n\t\tthis.blurable = false;\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tthis.blurable = true;\n\t\t}, 10);\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Keyboard Navigation /////////\n\t//////////////////////////////////////\n\t\n\t_keyTab(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyUp(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index > 0){\n\t\t\t\tthis._focusItem(this.displayItems[index - 1]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyDown(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index < this.displayItems.length - 1){\n\t\t\t\tif(index == -1){\n\t\t\t\t\tthis._focusItem(this.displayItems[0]);\n\t\t\t\t}else{\n\t\t\t\t\tthis._focusItem(this.displayItems[index + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keySide(e){\n\t\tif(!this.params.autocomplete){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\t_keyEnter(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyEsc(e){\n\t\tthis._cancel();\n\t}\n\t\n\t_keyHomeEnd(e){\n\t\tif(this.params.autocomplete){\n\t\t\t//prevent table navigation while using input element\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t}\n\t\n\t_keySelectLetter(e){\n\t\tif(!this.params.autocomplete){\n\t\t\t// if(this.edit.currentCell === false){\n\t\t\te.preventDefault();\n\t\t\t// }\n\t\t\t\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\n\t\t\t\tthis._scrollToValue(e.keyCode);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyAutoCompLetter(e){\n\t\tthis._filter();\n\t\tthis.lastAction = \"typing\";\n\t\tthis.typing = true;\n\t}\n\t\n\t\n\t_scrollToValue(char){\n\t\tclearTimeout(this.filterTimeout);\n\t\t\n\t\tvar character = String.fromCharCode(char).toLowerCase();\n\t\tthis.filterTerm += character.toLowerCase();\n\t\t\n\t\tvar match = this.displayItems.find((item) => {\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\n\t\t});\n\t\t\n\t\tif(match){\n\t\t\tthis._focusItem(match);\n\t\t}\n\t\t\n\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\tthis.filterTerm = \"\";\n\t\t}, 800);\n\t}\n\t\n\t_focusItem(item){\n\t\tthis.lastAction = \"focus\";\n\t\t\n\t\tif(this.focusedItem && this.focusedItem.element){\n\t\t\tthis.focusedItem.element.classList.remove(\"focused\");\n\t\t}\n\t\t\n\t\tthis.focusedItem = item;\n\t\t\n\t\tif(item && item.element){\n\t\t\titem.element.classList.add(\"focused\");\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\n\t\t}\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t/////// Data List Generation /////////\n\t//////////////////////////////////////\n\theaderFilterInitialListGen(){\n\t\tthis._generateOptions(true);\n\t}\n\t\n\trebuildOptionsList(){\n\t\tthis._generateOptions()\n\t\t\t.then(this._sortOptions.bind(this))\n\t\t\t.then(this._buildList.bind(this))\n\t\t\t.then(this._showList.bind(this))\n\t\t\t.catch((e) => {\n\t\t\t\tif(!Number.isInteger(e)){\n\t\t\t\t\tconsole.error(\"List generation error\", e);\n\t\t\t\t}\n\t\t\t});\n\t}\n\t\n\t_filterList(){\n\t\tthis._buildList(this._filterOptions());\n\t\tthis._showList();\n\t}\n\t\n\t_generateOptions(silent){\n\t\tvar values = [];\n\t\tvar iteration = ++ this.listIteration;\n\t\t\n\t\tthis.filtered = false;\n\t\t\n\t\tif(this.params.values){\n\t\t\tvalues = this.params.values;\n\t\t}else if (this.params.valuesURL){\n\t\t\tvalues = this._ajaxRequest(this.params.valuesURL, this.input.value);\n\t\t}else{\n\t\t\tif(typeof this.params.valuesLookup === \"function\"){\n\t\t\t\tvalues = this.params.valuesLookup(this.cell, this.input.value);\n\t\t\t}else if(this.params.valuesLookup){\n\t\t\t\tvalues = this._uniqueColumnValues(this.params.valuesLookupField);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(values instanceof Promise){\n\t\t\tif(!silent){\n\t\t\t\tthis._addPlaceholder(this.params.placeholderLoading);\n\t\t\t}\n\t\t\t\n\t\t\treturn values.then()\n\t\t\t\t.then((responseValues) => {\n\t\t\t\t\tif(this.listIteration === iteration){\n\t\t\t\t\t\treturn this._parseList(responseValues);\n\t\t\t\t\t}else{\n\t\t\t\t\t\treturn Promise.reject(iteration);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.resolve(this._parseList(values));\n\t\t}\n\t}\n\t\n\t_addPlaceholder(contents){\n\t\tvar placeholder = document.createElement(\"div\");\n\t\t\n\t\tif(typeof contents === \"function\"){\n\t\t\tcontents = contents(this.cell.getComponent(), this.listEl);\n\t\t}\n\t\t\n\t\tif(contents){\n\t\t\tthis._clearList();\n\t\t\t\n\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\tplaceholder = contents;\n\t\t\t}else{\n\t\t\t\tplaceholder.classList.add(\"tabulator-edit-list-placeholder\");\n\t\t\t\tplaceholder.innerHTML = contents;\n\t\t\t}\n\t\t\t\n\t\t\tthis.listEl.appendChild(placeholder);\n\t\t\t\n\t\t\tthis._showList();\n\t\t}\n\t}\n\t\n\t_ajaxRequest(url, term){\n\t\tvar params = this.params.filterRemote ? {term:term} : {};\n\t\turl = urlBuilder(url, {}, params);\n\t\t\n\t\treturn fetch(url)\n\t\t\t.then((response)=>{\n\t\t\t\tif(response.ok) {\n\t\t\t\t\treturn response.json()\n\t\t\t\t\t\t.catch((error)=>{\n\t\t\t\t\t\t\tconsole.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treturn Promise.reject(response);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error)=>{\n\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \", error);\n\t\t\t\treturn Promise.reject(error);\n\t\t\t});\n\t}\n\t\n\t_uniqueColumnValues(field){\n\t\tvar output = {},\n\t\tdata = this.table.getData(this.params.valuesLookup),\n\t\tcolumn;\n\t\t\n\t\tif(field){\n\t\t\tcolumn = this.table.columnManager.getColumnByField(field);\n\t\t}else{\n\t\t\tcolumn = this.cell.getColumn()._getSelf();\n\t\t}\n\t\t\n\t\tif(column){\n\t\t\tdata.forEach((row) => {\n\t\t\t\tvar val = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\n\t\t\t\t\toutput[val] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\toutput = [];\n\t\t}\n\t\t\n\t\treturn Object.keys(output);\n\t}\n\t\n\t\n\t_parseList(inputValues){\n\t\tvar data = [];\n\t\t\n\t\tif(!Array.isArray(inputValues)){\n\t\t\tinputValues = Object.entries(inputValues).map(([key, value]) => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:key,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\t\n\t\tinputValues.forEach((value) => {\n\t\t\tif(typeof value !== \"object\"){\n\t\t\t\tvalue = {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:value,\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tthis._parseListItem(value, data, 0);\n\t\t});\n\t\t\n\t\tif(!this.currentItems.length && this.params.freetext){\n\t\t\tthis.input.value = this.initialValues;\n\t\t\tthis.typing = true;\n\t\t\tthis.lastAction = \"typing\";\n\t\t}\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\treturn data; \n\t}\n\t\n\t_parseListItem(option, data, level){\n\t\tvar item = {};\n\t\t\n\t\tif(option.options){\n\t\t\titem = this._parseListGroup(option, level + 1);\n\t\t}else{\n\t\t\titem = {\n\t\t\t\tlabel:option.label,\n\t\t\t\tvalue:option.value,\n\t\t\t\titemParams:option.itemParams,\n\t\t\t\telementAttributes: option.elementAttributes,\n\t\t\t\telement:false,\n\t\t\t\tselected:false,\n\t\t\t\tvisible:true,\n\t\t\t\tlevel:level,\n\t\t\t\toriginal:option,\n\t\t\t};\n\t\t\t\n\t\t\tif(this.initialValues && this.initialValues.indexOf(option.value) > -1){\n\t\t\t\tthis._chooseItem(item, true);\n\t\t\t}\n\t\t}\n\t\t\n\t\tdata.push(item);\n\t}\n\t\n\t_parseListGroup(option, level){\n\t\tvar item = {\n\t\t\tlabel:option.label,\n\t\t\tgroup:true,\n\t\t\titemParams:option.itemParams,\n\t\t\telementAttributes:option.elementAttributes,\n\t\t\telement:false,\n\t\t\tvisible:true,\n\t\t\tlevel:level,\n\t\t\toptions:[],\n\t\t\toriginal:option,\n\t\t};\n\t\t\n\t\toption.options.forEach((child) => {\n\t\t\tthis._parseListItem(child, item.options, level);\n\t\t});\n\t\t\n\t\treturn item;\n\t}\n\t\n\t_sortOptions(options){\n\t\tvar sorter;\n\t\t\n\t\tif(this.params.sort){\n\t\t\tsorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\n\t\t\t\n\t\t\tthis._sortGroup(sorter, options);\n\t\t}\n\t\t\n\t\treturn options;\n\t}\n\t\n\t_sortGroup(sorter, options){\n\t\toptions.sort((a,b) => {\n\t\t\treturn sorter(a.label, b.label, a.value, b.value, a.original, b.original);\n\t\t});\n\t\t\n\t\toptions.forEach((option) => {\n\t\t\tif(option.group){\n\t\t\t\tthis._sortGroup(sorter, option.options);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_defaultSortFunction(as, bs){\n\t\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\t\tvar emptyAlign = 0;\n\t\t\n\t\tif(this.params.sort === \"desc\"){\n\t\t\t[as, bs] = [bs, as];\n\t\t}\n\t\t\n\t\t//handle empty values\n\t\tif(!as && as!== 0){\n\t\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t\t}else if(!bs && bs!== 0){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\ta = String(as).toLowerCase();\n\t\t\tb = String(bs).toLowerCase();\n\t\t\tif(a === b) return 0;\n\t\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\ta = a.match(rx);\n\t\t\tb = b.match(rx);\n\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\twhile(i < L){\n\t\t\t\ta1= a[i];\n\t\t\t\tb1= b[i++];\n\t\t\t\tif(a1 !== b1){\n\t\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t}\n\t\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn a.length > b.length;\n\t\t}\n\t\t\n\t\treturn emptyAlign;\n\t}\n\t\n\t_filterOptions(){\n\t\tvar filterFunc = this.params.filterFunc || this._defaultFilterFunc,\n\t\tterm = this.input.value;\n\t\t\n\t\tif(term){\n\t\t\tthis.filtered = true;\n\t\t\t\n\t\t\tthis.data.forEach((item) => {\n\t\t\t\tthis._filterItem(filterFunc, term, item);\n\t\t\t});\n\t\t}else{\n\t\t\tthis.filtered = false;\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\t_filterItem(func, term, item){\n\t\tvar matches = false;\n\t\t\n\t\tif(!item.group){\n\t\t\titem.visible = func(term, item.label, item.value, item.original);\n\t\t}else{\n\t\t\titem.options.forEach((option) => {\n\t\t\t\tif(this._filterItem(func, term, option)){\n\t\t\t\t\tmatches = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\titem.visible = matches;\n\t\t}\n\t\t\n\t\treturn item.visible;\n\t}\n\t\n\t_defaultFilterFunc(term, label, value, item){\n\t\tterm = String(term).toLowerCase();\n\t\t\n\t\tif(label !== null && typeof label !== \"undefined\"){\n\t\t\tif(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\t//////////////////////////////////////\n\t/////////// Display List /////////////\n\t//////////////////////////////////////\n\t\n\t_clearList(){\n\t\twhile(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\n\t\t\n\t\tthis.displayItems = [];\n\t}\n\t\n\t_buildList(data){\n\t\tthis._clearList();\n\t\t\n\t\tdata.forEach((option) => {\n\t\t\tthis._buildItem(option);\n\t\t});\n\t\t\n\t\tif(!this.displayItems.length){\n\t\t\tthis._addPlaceholder(this.params.placeholderEmpty);\n\t\t} \n\t}\n\t\n\t_buildItem(item){\n\t\tvar el = item.element,\n\t\tcontents;\n\t\t\n\t\tif(!this.filtered || item.visible){\n\t\t\t\n\t\t\tif(!el){\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\n\t\t\t\tcontents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\n\t\t\t\t\n\t\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = contents;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-group\");\n\t\t\t\t}else{\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-item\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\n\t\t\t\t\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\n\t\t\t\t\tfor (let key in item.elementAttributes){\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\tel.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.addEventListener(\"click\", this._groupClick.bind(this, item));\n\t\t\t\t}else{\n\t\t\t\t\tel.addEventListener(\"click\", this._itemClick.bind(this, item));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\t\t\t\n\t\t\t\titem.element = el;\n\t\t\t}\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tthis.listEl.appendChild(el);\n\t\t\t\n\t\t\tif(item.group){\n\t\t\t\titem.options.forEach((option) => {\n\t\t\t\t\tthis._buildItem(option);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.displayItems.push(item);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_showList(){\n\t\tvar startVis = this.popup && this.popup.isVisible();\n\t\t\n\t\tif(this.input.parentNode){\n\t\t\tif(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\n\t\t\t\tif(this.popup){\n\t\t\t\t\tthis.popup.hide(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis._setListWidth();\n\t\t\t\n\t\t\tif(!this.popup){\n\t\t\t\tthis.popup = this.edit.popup(this.listEl);\n\t\t\t}\n\t\t\t\n\t\t\tthis.popup.show(this.cell.getElement(), \"bottom\");\n\t\t\t\n\t\t\tif(!startVis){\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.popup.hideOnBlur(this._resolveValue.bind(this, true));\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_styleItem(item){\n\t\tif(item && item.element){\n\t\t\tif(item.selected){\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}else{\n\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// User Interaction ///////////\n\t//////////////////////////////////////\n\t\n\t_itemClick(item, e){\n\t\te.stopPropagation();\n\t\t\n\t\tthis._chooseItem(item);\n\t}\n\t\n\t_groupClick(item, e){\n\t\te.stopPropagation();\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t////// Current Item Management ///////\n\t//////////////////////////////////////\n\t\n\t_cancel(){\n\t\tthis.popup.hide(true);\n\t\tthis.actions.cancel();\n\t}\n\t\n\t_clearChoices(){\n\t\tthis.typing = true;\n\t\t\n\t\tthis.currentItems.forEach((item) => {\n\t\t\titem.selected = false;\n\t\t\tthis._styleItem(item);\n\t\t});\n\t\t\n\t\tthis.currentItems = [];\n\t\t\n\t\tthis.focusedItem = null;\n\t}\n\t\n\t_chooseItem(item, silent){\n\t\tvar index;\n\t\t\n\t\tthis.typing = false;\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\tindex = this.currentItems.indexOf(item);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.currentItems.splice(index, 1);\n\t\t\t\titem.selected = false;\n\t\t\t}else{\n\t\t\t\tthis.currentItems.push(item);\n\t\t\t\titem.selected = true;\n\t\t\t}\n\t\t\t\n\t\t\tthis.input.value = this.currentItems.map(item => item.label).join(\",\");\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t}else{\n\t\t\tthis.currentItems = [item];\n\t\t\titem.selected = true;\n\t\t\t\n\t\t\tthis.input.value = item.label;\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis._resolveValue();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._focusItem(item);\n\t}\n\t\n\t_resolveValue(blur){\n\t\tvar output, initialValue;\n\t\t\n\t\tif(this.popup){\n\t\t\tthis.popup.hide(true);\n\t\t}\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\toutput = this.currentItems.map(item => item.value);\n\t\t}else{\n\t\t\tif(blur && this.params.autocomplete && this.typing){\n\t\t\t\tif(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\n\t\t\t\t\toutput = this.input.value;\n\t\t\t\t}else{\n\t\t\t\t\tthis.actions.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.currentItems[0]){\n\t\t\t\t\toutput = this.currentItems[0].value;\n\t\t\t\t}else{\n\t\t\t\t\tinitialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;\n\t\t\t\t\t\n\t\t\t\t\tif(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\n\t\t\t\t\t\toutput = initialValue;\n\t\t\t\t\t}else{\n\t\t\t\t\t\toutput = this.params.emptyValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(output === \"\"){\n\t\t\toutput = this.params.emptyValue;\n\t\t}\n\t\t\n\t\tthis.actions.success(output);\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.initialValues = output && !Array.isArray(output) ? [output] : output;\n\t\t\tthis.currentItems = [];\n\t\t}\n\t}\n\t\n}\n","import input from './editors/input.js';\nimport textarea from './editors/textarea.js';\nimport number from './editors/number.js';\nimport range from './editors/range.js';\nimport date from './editors/date.js';\nimport time from './editors/time.js';\nimport datetime from './editors/datetime.js';\nimport select from './editors/select.js';\nimport list from './editors/list.js';\nimport autocomplete from './editors/autocomplete.js';\nimport star from './editors/star.js';\nimport progress from './editors/progress.js';\nimport tickCross from './editors/tickCross.js';\n\nexport default {\n\tinput:input,\n\ttextarea:textarea,\n\tnumber:number,\n\trange:range,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tselect:select,\n\tlist:list,\n\tautocomplete:autocomplete,\n\tstar:star,\n\tprogress:progress,\n\ttickCross:tickCross,\n};","import maskInput from '../../inputMask.js';\n\n//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange(e);\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//resizable text area element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"hybrid\",\n\tvalue = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\tinput = document.createElement(\"textarea\"),\n\tscrollHeight = 0;\n\n\t//create and style input\n\tinput.style.display = \"block\";\n\tinput.style.padding = \"2px\";\n\tinput.style.height = \"100%\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\tinput.style.whiteSpace = \"pre-wrap\";\n\tinput.style.resize = \"none\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = value;\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tinput.scrollHeight;\n\t\t\tinput.style.height = input.scrollHeight + \"px\";\n\t\t\tcell.getRow().normalizeHeight();\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\n\t\t\tsetTimeout(function(){\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t},300);\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\tinput.addEventListener(\"keyup\", function(){\n\n\t\tinput.style.height = \"\";\n\n\t\tvar heightNow = input.scrollHeight;\n\n\t\tinput.style.height = heightNow + \"px\";\n\n\t\tif(heightNow != scrollHeight){\n\t\t\tscrollHeight = heightNow;\n\t\t\tcell.getRow().normalizeHeight();\n\t\t}\n\t});\n\n\tinput.addEventListener(\"keydown\", function(e){\n\n\t\tswitch(e.keyCode){\n\n\t\t\tcase 13:\n\t\t\t\tif(e.shiftKey && editorParams.shiftEnterSubmit){\n\t\t\t\t\tonChange(e);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", \"number\");\n\n\tif(typeof editorParams.max != \"undefined\"){\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\n\tif(typeof editorParams.min != \"undefined\"){\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\n\tif(typeof editorParams.step != \"undefined\"){\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = cellValue;\n\n\tvar blurFunc = function(e){\n\t\tonChange();\n\t};\n\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\t//submit new value on blur\n\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(){\n\t\tvar value = input.value;\n\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\n\t\tif(value !== cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.setAttribute(\"type\", \"range\");\n\t\n\tif (typeof editorParams.max != \"undefined\") {\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\t\n\tif (typeof editorParams.min != \"undefined\") {\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\t\n\tif (typeof editorParams.step != \"undefined\") {\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\t\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value;\n\t\t\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\t\t\n\t\tif(value != cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e){\n\t\tonChange();\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tfunction convertDate(value){\n\t\tvar newDatetime;\n\t\t\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\t\t\n\t\treturn newDatetime.toFormat(\"yyyy-MM-dd\");\n\t}\n\t\n\tinput.type = \"date\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.max){\n\t\tinput.setAttribute(\"max\", inputFormat ? convertDate(editorParams.max) : editorParams.max);\n\t}\n\n\tif(editorParams.min){\n\t\tinput.setAttribute(\"min\", inputFormat ? convertDate(editorParams.min) : editorParams.min);\n\t}\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\t\t\n\t\t\tcellValue = convertDate(cellValue);\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDate;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDate = DT.fromFormat(String(value), \"yyyy-MM-dd\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDate;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDate.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDate.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"time\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"HH:mm\");\n\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\n\tconsole.log(\"val\", cellValue);\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() == \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxTime = DT.fromFormat(String(value), \"hh:mm\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"datetime-local\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"yyyy-MM-dd\") + \"T\" + newDatetime.toFormat(\"HH:mm\");\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDateTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDateTime = DT.fromISO(String(value));\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDateTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDateTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDateTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The select editor has been deprecated, please use the new list editor\");\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\n\n\teditorParams.autocomplete = true;\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","//star rating\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar self = this,\n\telement = cell.getElement(),\n\tvalue = cell.getValue(),\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\tstars = [],\n\tstarsHolder = document.createElement(\"div\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\n\t//change star type\n\tfunction starChange(val){\n\t\tstars.forEach(function(star, i){\n\t\t\tif(i < val){\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}else{\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//build stars\n\tfunction buildStar(i){\n\n\t\tvar starHolder = document.createElement(\"span\");\n\t\tvar nextStar = star.cloneNode(true);\n\n\t\tstars.push(nextStar);\n\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tstarChange(i);\n\t\t});\n\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t});\n\n\t\tstarHolder.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tsuccess(i);\n\t\t\telement.blur();\n\t\t});\n\n\t\tstarHolder.appendChild(nextStar);\n\t\tstarsHolder.appendChild(starHolder);\n\n\t}\n\n\t//handle keyboard navigation value change\n\tfunction changeValue(val){\n\t\tvalue = val;\n\t\tstarChange(val);\n\t}\n\n\t//style cell\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\t//style holding element\n\tstarsHolder.style.verticalAlign = \"middle\";\n\tstarsHolder.style.display = \"inline-block\";\n\tstarsHolder.style.padding = \"4px\";\n\n\t//style star\n\tstar.setAttribute(\"width\", size);\n\tstar.setAttribute(\"height\", size);\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//create correct number of stars\n\tfor(var i=1;i<= maxStars;i++){\n\t\tbuildStar(i);\n\t}\n\n\t//ensure value does not exceed number of stars\n\tvalue = Math.min(parseInt(value), maxStars);\n\n\t// set initial styling of stars\n\tstarChange(value);\n\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\n\t\tstarChange(0);\n\t});\n\n\tstarsHolder.addEventListener(\"click\", function(e){\n\t\tsuccess(0);\n\t});\n\n\telement.addEventListener(\"blur\", function(e){\n\t\tcancel();\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\tchangeValue(value + 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\tchangeValue(value - 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 13: //enter\n\t\t\t\tsuccess(value);\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\treturn starsHolder;\n}","//draggable progress bar\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar element = cell.getElement(),\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\n\tpercent = (max - min) / 100,\n\tvalue = cell.getValue() || 0,\n\thandle = document.createElement(\"div\"),\n\tbar = document.createElement(\"div\"),\n\tmouseDrag, mouseDragWidth;\n\n\t//set new value\n\tfunction updateValue(){\n\t\tvar style = window.getComputedStyle(element, null);\n\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\n\t\tsuccess(calcVal);\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\telement.setAttribute(\"aria-label\", value);\n\t}\n\n\t//style handle\n\thandle.style.position = \"absolute\";\n\thandle.style.right = \"0\";\n\thandle.style.top = \"0\";\n\thandle.style.bottom = \"0\";\n\thandle.style.width = \"5px\";\n\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t//style bar\n\tbar.style.display = \"inline-block\";\n\tbar.style.position = \"relative\";\n\t// bar.style.top = \"8px\";\n\t// bar.style.bottom = \"8px\";\n\t// bar.style.left = \"4px\";\n\t// bar.style.marginRight = \"4px\";\n\tbar.style.height = \"100%\";\n\tbar.style.backgroundColor = \"#488CE9\";\n\tbar.style.maxWidth = \"100%\";\n\tbar.style.minWidth = \"0%\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//style cell\n\telement.style.padding = \"4px 4px\";\n\n\t//make sure value is in range\n\tvalue = Math.min(parseFloat(value), max);\n\tvalue = Math.max(parseFloat(value), min);\n\n\t//workout percentage\n\tvalue = Math.round((value - min) / percent);\n\t// bar.style.right = value + \"%\";\n\tbar.style.width = value + \"%\";\n\n\telement.setAttribute(\"aria-valuemin\", min);\n\telement.setAttribute(\"aria-valuemax\", max);\n\n\tbar.appendChild(handle);\n\n\thandle.addEventListener(\"mousedown\", function(e){\n\t\tmouseDrag = e.screenX;\n\t\tmouseDragWidth = bar.offsetWidth;\n\t});\n\n\thandle.addEventListener(\"mouseover\", function(){\n\t\thandle.style.cursor = \"ew-resize\";\n\t});\n\n\telement.addEventListener(\"mousemove\", function(e){\n\t\tif(mouseDrag){\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\n\t\t}\n\t});\n\n\telement.addEventListener(\"mouseup\", function(e){\n\t\tif(mouseDrag){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\n\t\t\tmouseDrag = false;\n\t\t\tmouseDragWidth = false;\n\n\t\t\tupdateValue();\n\t\t}\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 9: //tab\n\t\t\tcase 13: //enter\n\t\t\t\tupdateValue();\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t}\n\t});\n\n\telement.addEventListener(\"blur\", function(){\n\t\tcancel();\n\t});\n\n\treturn bar;\n}","//checkbox\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar value = cell.getValue(),\n\tinput = document.createElement(\"input\"),\n\ttristate = editorParams.tristate,\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\tindetermState = false,\n\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\n\t\n\tinput.setAttribute(\"type\", \"checkbox\");\n\tinput.style.marginTop = \"5px\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = value;\n\t\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\n\t\tindetermState = true;\n\t\tinput.indeterminate = true;\n\t}\n\t\n\tif(this.table.browser != \"firefox\" && this.table.browser != \"safari\"){ //prevent blur issue on mac firefox\n\t\tonRendered(function(){\n\t\t\tif(cell.getType() === \"cell\"){\n\t\t\t\tinput.focus({preventScroll: true});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tinput.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === \"true\" || value === \"True\" || value === 1);\n\t\n\tfunction setValue(blur){\n\t\tvar checkedValue = input.checked;\n\t\t\n\t\tif(trueValueSet && checkedValue){\n\t\t\tcheckedValue = editorParams.trueValue;\n\t\t}else if(falseValueSet && !checkedValue){\n\t\t\tcheckedValue = editorParams.falseValue;\n\t\t}\n\t\t\n\t\tif(tristate){\n\t\t\tif(!blur){\n\t\t\t\tif(input.checked && !indetermState){\n\t\t\t\t\tinput.checked = false;\n\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\tindetermState = true;\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\tindetermState = false;\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(indetermState){\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\treturn checkedValue;\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"change\", function(e){\n\t\tsuccess(setValue());\n\t});\n\n\tinput.addEventListener(\"blur\", function(e){\n\t\tsuccess(setValue(true));\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tif(e.keyCode == 13){\n\t\t\tsuccess(setValue());\n\t\t}\n\t\tif(e.keyCode == 27){\n\t\t\tcancel();\n\t\t}\n\t});\n\t\n\treturn input;\n}","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultEditors from './defaults/editors.js';\n\nclass Edit extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.currentCell = false; //hold currently editing cell\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening\n\t\tthis.recursionBlock = false; //prevent focus recursion\n\t\tthis.invalidEdit = false;\n\t\tthis.editedCells = [];\n\t\t\n\t\tthis.editors = Edit.editors;\n\t\t\n\t\tthis.registerColumnOption(\"editable\");\n\t\tthis.registerColumnOption(\"editor\");\n\t\tthis.registerColumnOption(\"editorParams\");\n\t\t\n\t\tthis.registerColumnOption(\"cellEditing\");\n\t\tthis.registerColumnOption(\"cellEdited\");\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\n\t\t\n\t\tthis.registerTableOption(\"editTriggerEvent\", \"focus\");\n\t\t\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellIsEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.updateCellClass.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-layout\", this.rowEditableCheck.bind(this));\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\n\t\tthis.subscribe(\"clipboard-paste\", this.pasteBlocker.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\n\t\t\n\t\t\n\t\t// this.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\n\t\t// this.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Paste Negation //////////\n\t///////////////////////////////////\n\t\n\tpasteBlocker(e){\n\t\tif(this.currentCell){\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Keybinding Functions ///////\n\t///////////////////////////////////\n\t\n\tkeybindingNavigateNext(e){\n\t\tvar cell = this.currentCell,\n\t\tnewRow = this.options(\"tabEndNewRow\");\n\n\t\tif(cell){\n\t\t\tif(!this.navigateNext(cell, e)){\n\t\t\t\tif(newRow){\n\t\t\t\t\tcell.getElement().firstChild.blur();\n\t\t\t\t\t\n\t\t\t\t\tif(!this.invalidEdit){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(newRow === true){\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnewRow.then(() => {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tcell.getComponent().navigateNext();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Cell Functions //////////\n\t///////////////////////////////////\n\t\n\tcellIsEdited(cell){\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\n\t}\n\t\n\tcellCancelEdit(cell){\n\t\tif(cell === this.currentCell){\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}else{\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tupdateCellClass(cell){\n\t\tif(this.allowEdit(cell)) {\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\n\t\t}\n\t\telse {\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\n\t\t}\n\t}\n\t\n\tclearCellEdited(cells){\n\t\tif(!cells){\n\t\t\tcells = this.table.modules.edit.getEditedCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n\t\n\tnavigatePrev(cell = this.currentCell, e){\n\t\tvar nextCell, prevRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateLeft();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(prevRow){\n\t\t\t\t\tnextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateNext(cell = this.currentCell, e){\n\t\tvar nextCell, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateRight();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(nextRow){\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateLeft(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateRight(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateUp(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateDown(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfindNextEditableCell(row, index){\n\t\tvar nextCell = false;\n\t\t\n\t\tif(index < row.cells.length-1){\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tnextCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindPrevEditableCell(row, index){\n\t\tvar prevCell = false;\n\t\t\n\t\tif(index > 0){\n\t\t\tfor(var i = index-1; i >= 0; i--){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tprevCell = cell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn prevCell;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.editor !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\tcolumnDeleteCheck(column){\n\t\tif(this.currentCell && this.currentCell.column === column){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowDeleteCheck(row){\n\t\tif(this.currentCell && this.currentCell.row === row){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowEditableCheck(row){\n\t\trow.getCells().forEach((cell) => {\n\t\t\tif(cell.column.modules.edit && typeof cell.column.modules.edit.check === \"function\"){\n\t\t\t\tthis.updateCellClass(cell);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//initialize column editor\n\tinitializeColumn(column){\n\t\tvar config = {\n\t\t\teditor:false,\n\t\t\tblocked:false,\n\t\t\tcheck:column.definition.editable,\n\t\t\tparams:column.definition.editorParams || {}\n\t\t};\n\t\t\n\t\t//set column editor\n\t\tswitch(typeof column.definition.editor){\n\t\t\tcase \"string\":\n\t\t\t\tif(this.editors[column.definition.editor]){\n\t\t\t\t\tconfig.editor = this.editors[column.definition.editor];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.editor = column.definition.editor;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"boolean\":\n\t\t\t\tif(column.definition.editor === true){\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\n\t\t\t\t\t\tif(this.editors[column.definition.formatter]){\n\t\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(config.editor){\n\t\t\tcolumn.modules.edit = config;\n\t\t}\n\t}\n\t\n\tgetCurrentCell(){\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\n\t}\n\t\n\tclearEditor(cancel){\n\t\tvar cell = this.currentCell,\n\t\tcellEl;\n\t\t\n\t\tthis.invalidEdit = false;\n\t\t\n\t\tif(cell){\n\t\t\tthis.currentCell = false;\n\t\t\t\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\n\t\t\t\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\n\t\t\t\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\n\t\t}\n\t}\n\t\n\tcancelEdit(){\n\t\tif(this.currentCell){\n\t\t\tvar cell = this.currentCell;\n\t\t\tvar component = this.currentCell.getComponent();\n\t\t\t\n\t\t\tthis.clearEditor(true);\n\t\t\tcell.setValueActual(cell.getValue());\n\t\t\tcell.cellRendered();\n\t\t\t\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\n\t\t\t\tcell.row.normalizeHeight(true);\n\t\t\t}\n\t\t\t\n\t\t\tif(cell.column.definition.cellEditCancelled){\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\n\t\t}\n\t}\n\t\n\t//return a formatted value for a cell\n\tbindEditor(cell){\n\t\tif(cell.column.modules.edit){\n\t\t\tvar self = this,\n\t\t\telement = cell.getElement(true);\n\t\t\t\n\t\t\tthis.updateCellClass(cell);\n\t\t\telement.setAttribute(\"tabindex\", 0);\n\t\t\t\n\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif (e.button === 2) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}else{\n\t\t\t\t\tself.mouseClick = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(this.options(\"editTriggerEvent\") === \"dblclick\"){\n\t\t\t\telement.addEventListener(\"dblclick\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\" || this.options(\"editTriggerEvent\") === \"click\"){\n\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\"){\n\t\t\t\telement.addEventListener(\"focus\", function(e){\n\t\t\t\t\tif(!self.recursionBlock){\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfocusCellNoEvent(cell, block){\n\t\tthis.recursionBlock = true;\n\t\t\n\t\tif(!(block && this.table.browser === \"ie\")){\n\t\t\tcell.getElement().focus({preventScroll: true});\n\t\t}\n\t\t\n\t\tthis.recursionBlock = false;\n\t}\n\t\n\teditCell(cell, forceEdit){\n\t\tthis.focusCellNoEvent(cell);\n\t\tthis.edit(cell, false, forceEdit);\n\t}\n\t\n\tfocusScrollAdjust(cell){\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t\trowEl = cell.row.getElement();\n\t\t\t\n\t\t\tif(rowEl.offsetTop < topEdge){\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\n\t\t\t}else{\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0);\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t}\n\t\t\t\n\t\t\tif(cellEl.offsetLeft < leftEdge){\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\n\t\t\t}else{\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tallowEdit(cell) {\n\t\tvar check = cell.column.modules.edit ? true : false;\n\t\t\n\t\tif(cell.column.modules.edit){\n\t\t\tswitch(typeof cell.column.modules.edit.check){\n\t\t\t\tcase \"function\":\n\t\t\t\t\tif(cell.row.initialized){\n\t\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn check;\n\t}\n\t\n\tedit(cell, e, forceEdit){\n\t\tvar self = this,\n\t\tallowEdit = true,\n\t\trendered = function(){},\n\t\telement = cell.getElement(),\n\t\teditFinished = false,\n\t\tcellEditor, component, params;\n\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\t\t\n\t\tif(this.currentCell){\n\t\t\tif(!this.invalidEdit && this.currentCell !== cell){\n\t\t\t\tthis.cancelEdit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t//handle successful value change\n\t\tfunction success(value){\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\n\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\n\n\t\t\t\t\teditFinished = true;\n\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\t\n\t\t\t\t\tif(!cell.modules.edit){\n\t\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.modules.edit.edited = true;\n\t\t\t\t\t\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\n\t\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\t\treturn valid === true;\n\t\t\t\t}else{\n\t\t\t\t\teditFinished = true;\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\teditFinished = false;\n\t\t\t\t\t}, 10);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//handle aborted edit\n\t\tfunction cancel(){\n\t\t\t// editFinished = true;\n\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tself.cancelEdit();\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\trendered = callback;\n\t\t}\n\t\t\n\t\tif(!cell.column.modules.edit.blocked){\n\t\t\tif(e){\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\t\n\t\t\tallowEdit = this.allowEdit(cell);\n\t\t\t\n\t\t\tif(allowEdit || forceEdit){\n\t\t\t\tself.cancelEdit();\n\t\t\t\t\n\t\t\t\tself.currentCell = cell;\n\t\t\t\t\n\t\t\t\tthis.focusScrollAdjust(cell);\n\t\t\t\t\n\t\t\t\tcomponent = cell.getComponent();\n\t\t\t\t\n\t\t\t\tif(this.mouseClick){\n\t\t\t\t\tthis.mouseClick = false;\n\t\t\t\t\t\n\t\t\t\t\tif(cell.column.definition.cellClick){\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(cell.column.definition.cellEditing){\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\n\t\t\t\t\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\t\t\t\t\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\t\t\t\t\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\t\tif(this.currentCell && cellEditor !== false){\n\t\t\t\t\tif(cellEditor instanceof Node){\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\t\t\t\telement.appendChild(cellEditor);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\t\trendered();\n\t\t\t\t\t\t\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\t\tvar children = element.children;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\t\tthis.blur(element);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.blur(element);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tthis.mouseClick = false;\n\t\t\t\tthis.blur(element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.mouseClick = false;\n\t\t\tthis.blur(element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tblur(element){\n\t\tif(!this.confirm(\"edit-blur\", [element]) ){\n\t\t\telement.blur();\n\t\t}\n\t}\n\t\n\tgetEditedCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.editedCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearEdited(cell){\n\t\tvar editIndex;\n\t\t\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\n\t\t\tcell.modules.edit.edited = false;\n\t\t\t\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\n\t\t}\n\t\t\n\t\teditIndex = this.editedCells.indexOf(cell);\n\t\t\n\t\tif(editIndex > -1){\n\t\t\tthis.editedCells.splice(editIndex, 1);\n\t\t}\n\t}\n}\n\nEdit.moduleName = \"edit\";\n\n//load defaults\nEdit.editors = defaultEditors;\n\n\nexport default Edit;\n","class ExportRow{\n\tconstructor(type, columns, component, indent){\n\t\tthis.type = type;\n\t\tthis.columns = columns;\n\t\tthis.component = component || false;\n\t\tthis.indent = indent || 0;\n\t}\n}\n\nexport default ExportRow;","class ExportColumn{\n\tconstructor(value, component, width, height, depth){\n\t\tthis.value = value;\n\t\tthis.component = component || false;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = depth;\n\t}\n}\n\nexport default ExportColumn;","import Module from '../../core/Module.js';\n\nimport ExportRow from './ExportRow.js';\nimport ExportColumn from './ExportColumn.js';\n\nclass Export extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {};\n\t\tthis.cloneTableStyle = true;\n\t\tthis.colVisProp = \"\";\n\t\t\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html output config\n\t\t\n\t\tthis.registerColumnOption(\"htmlOutput\");\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tgenerateExportList(config, style, range, colVisProp){\n\t\tthis.cloneTableStyle = style;\n\t\tthis.config = config || {};\n\t\tthis.colVisProp = colVisProp;\n\n\t\tvar headers, body;\n\t\t\n\t\tif (range === 'range') {\n\t\t\tvar columns = this.table.modules.selectRange.selectedColumns();\n\t\t\theaders = this.config.columnHeaders !== false\n\t\t\t\t? this.headersToExportRows(this.generateColumnGroupHeaders(columns))\n\t\t\t\t: [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true));\n\t\t} else {\n\t\t\theaders = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range));\n\t\t}\n\n\t\treturn headers.concat(body);\n\t}\n\t\n\tgenerateTable(config, style, range, colVisProp){\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\n\t\t\n\t\treturn this.generateTableElement(list);\n\t}\n\t\n\trowLookup(range){\n\t\tvar rows = [];\n\t\t\n\t\tif(typeof range == \"function\"){\n\t\t\trange.call(this.table).forEach((row) =>{\n\t\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tswitch(range){\n\t\t\t\tcase true:\n\t\t\t\tcase \"visible\":\n\t\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"all\":\n\t\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"selected\":\n\t\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"range\":\n\t\t\t\t\trows = this.table.modules.selectRange.selectedRows();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"active\":\n\t\t\t\tdefault:\n\t\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Object.assign([], rows);\n\t}\n\t\n\tgenerateColumnGroupHeaders(columns){\n\t\tvar output = [];\n\t\t\n\t\tif (!columns) {\n\t\t\tcolumns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\t\t}\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\tvar colData = this.processColumnGroup(column);\n\t\t\t\n\t\t\tif(colData){\n\t\t\t\toutput.push(colData);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\t\n\tprocessColumnGroup(column){\n\t\tvar subGroups = column.columns,\n\t\tmaxDepth = 0,\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\t\t\n\t\tvar groupData = {\n\t\t\ttitle:title,\n\t\t\tcolumn:column,\n\t\t\tdepth:1,\n\t\t};\n\t\t\n\t\tif(subGroups.length){\n\t\t\tgroupData.subGroups = [];\n\t\t\tgroupData.width = 0;\n\t\t\t\n\t\t\tsubGroups.forEach((subGroup) => {\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\n\t\t\t\t\n\t\t\t\tif(subGroupData){\n\t\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\n\t\t\t\t\t\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tgroupData.depth += maxDepth;\n\t\t\t\n\t\t\tif(!groupData.width){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.columnVisCheck(column)){\n\t\t\t\tgroupData.width = 1;\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn groupData;\n\t}\n\t\n\tcolumnVisCheck(column){\n\t\tvar visProp = column.definition[this.colVisProp];\n\t\t\n\t\tif(typeof visProp === \"function\"){\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\n\t\t}\n\t\t\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\n\t}\n\t\n\theadersToExportRows(columns){\n\t\tvar headers = [],\n\t\theaderDepth = 0,\n\t\texportRows = [];\n\t\t\n\t\tfunction parseColumnGroup(column, level){\n\t\t\t\n\t\t\tvar depth = headerDepth - level;\n\t\t\t\n\t\t\tif(typeof headers[level] === \"undefined\"){\n\t\t\t\theaders[level] = [];\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\n\t\t\t\n\t\t\theaders[level].push(column);\n\t\t\t\n\t\t\tif(column.height > 1){\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\n\t\t\t\t\t\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\n\t\t\t\t\t\theaders[level + i] = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\theaders[level + i].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.width > 1){\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\n\t\t\t\t\theaders[level].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.subGroups){\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t//calculate maximum header depth\n\t\tcolumns.forEach(function(column){\n\t\t\tif(column.depth > headerDepth){\n\t\t\t\theaderDepth = column.depth;\n\t\t\t}\n\t\t});\n\t\t\n\t\tcolumns.forEach(function(column){\n\t\t\tparseColumnGroup(column,0);\n\t\t});\n\t\t\n\t\theaders.forEach((header) => {\n\t\t\tvar columns = [];\n\t\t\t\n\t\t\theader.forEach((col) => {\n\t\t\t\tif(col){\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t\t}else{\n\t\t\t\t\tcolumns.push(null);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tbodyToExportRows(rows, columns = []){\n\t\tvar exportRows = [];\n\t\t\n\t\tif (columns.length === 0) {\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\t\tcolumns.push(column.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\n\t\trows = rows.filter((row) => {\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn this.config.rowGroups !== false;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\treturn this.config.columnCalcs !== false;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t});\n\t\t\n\t\trows.forEach((row, i) => {\n\t\t\tvar rowData = row.getData(this.colVisProp);\n\t\t\tvar exportCols = [];\n\t\t\tvar indent = 0;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\tindent = row.level;\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\" :\n\t\t\t\tcase \"row\" :\n\t\t\t\t\tcolumns.forEach((col) => {\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tgenerateTableElement(list){\n\t\tvar table = document.createElement(\"table\"),\n\t\theaderEl = document.createElement(\"thead\"),\n\t\tbodyEl = document.createElement(\"tbody\"),\n\t\tstyles = this.lookupTableStyles(),\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t\tsetup = {};\n\t\t\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\t\t\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t\t}\n\t\t\n\t\t//assign group header formatter\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\t\t\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\n\t\t\tsetup.groupHeader = [setup.groupHeader];\n\t\t}\n\t\t\n\t\ttable.classList.add(\"tabulator-print-table\");\n\t\t\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\n\t\t\n\t\tif(list.length > 1000){\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t\t}\n\t\t\n\t\tlist.forEach((row, i) => {\n\t\t\tlet rowEl;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"header\":\n\t\t\t\t\theaderEl.appendChild(this.generateHeaderElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbodyEl.appendChild(this.generateGroupElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbodyEl.appendChild(this.generateCalcElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\n\t\t\t\t\n\t\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\t\tbodyEl.appendChild(rowEl);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(headerEl.innerHTML){\n\t\t\ttable.appendChild(headerEl);\n\t\t}\n\t\t\n\t\ttable.appendChild(bodyEl);\n\t\t\n\t\t\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\t\treturn table;\n\t}\n\t\n\tlookupTableStyles(){\n\t\tvar styles = {};\n\t\t\n\t\t//lookup row styles\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\t\t\t\n\t\t\tif(styles.firstRow){\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn styles;\n\t}\n\t\n\tgenerateHeaderElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trow.columns.forEach((column) => {\n\t\t\tif(column){\n\t\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tcellEl.colSpan = column.width;\n\t\t\t\tcellEl.rowSpan = column.height;\n\t\t\t\t\n\t\t\t\tcellEl.innerHTML = column.value;\n\t\t\t\t\n\t\t\t\tif(this.cloneTableStyle){\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\t\t\n\t\t\t\tif(column.component._column.visible){\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t\t}else{\n\t\t\t\t\tif(column.component._column.definition.width){\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(column.component._column.parent){\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateGroupElement(row, setup, styles){\n\t\t\n\t\tvar rowEl = document.createElement(\"tr\"),\n\t\tcellEl = document.createElement(\"td\"),\n\t\tgroup = row.columns[0];\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}else{\n\t\t\tif(setup.groupHeader !== false){\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t\t\n\t\tcellEl.colSpan = group.width;\n\t\tcellEl.innerHTML = group.value;\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\t\t\n\t\tif(group.component.isVisible()){\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\n\t\trowEl.appendChild(cellEl);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateCalcElement(row, setup, styles){\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateRowElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\trow.columns.forEach((col, i) => {\n\t\t\tif(col){\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t\tcolumn = col.component._column,\n\t\t\t\ttable = this.table,\n\t\t\t\tindex = table.columnManager.findColumnIndex(column),\n\t\t\t\tvalue = col.value,\n\t\t\t\tcellStyle;\n\t\t\t\t\n\t\t\t\tvar cellWrapper = {\n\t\t\t\t\tmodules:{},\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn cellEl;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\treturn row.component.getData();\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn row.component;\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:function(){\n\t\t\t\t\t\treturn table;\n\t\t\t\t\t},\n\t\t\t\t\tgetComponent:function(){\n\t\t\t\t\t\treturn cellWrapper;\n\t\t\t\t\t},\n\t\t\t\t\tcolumn:column,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\n\t\t\t\t}else{\n\t\t\t\t\tswitch(typeof value){\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(value instanceof Node){\n\t\t\t\t\tcellEl.appendChild(value);\n\t\t\t\t}else{\n\t\t\t\t\tcellEl.innerHTML = value;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\n\t\t\t\t\n\t\t\t\tif(cellStyle){\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\n\t\t\t\t\t\n\t\t\t\t\tif(column.definition.align){\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t\t\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(setup.rowFormatter && row.type === \"row\" && this.config.formatCells !== false){\n\t\t\tlet formatComponent = Object.assign(row.component);\n\n\t\t\tformatComponent.getElement = function(){return rowEl;};\n\n\t\t\tsetup.rowFormatter(row.component);\n\t\t}\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateHTMLTable(list){\n\t\tvar holder = document.createElement(\"div\");\n\t\t\n\t\tholder.appendChild(this.generateTableElement(list));\n\t\t\n\t\treturn holder.innerHTML;\n\t}\n\t\n\tgetHtml(visible, style, config, colVisProp){\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\t\t\n\t\treturn this.generateHTMLTable(list);\n\t}\n\t\n\tmapElementStyles(from, to, props){\n\t\tif(this.cloneTableStyle && from && to){\n\t\t\t\n\t\t\tvar lookup = {\n\t\t\t\t\"background-color\" : \"backgroundColor\",\n\t\t\t\t\"color\" : \"fontColor\",\n\t\t\t\t\"width\" : \"width\",\n\t\t\t\t\"font-weight\" : \"fontWeight\",\n\t\t\t\t\"font-family\" : \"fontFamily\",\n\t\t\t\t\"font-size\" : \"fontSize\",\n\t\t\t\t\"text-align\" : \"textAlign\",\n\t\t\t\t\"border-top\" : \"borderTop\",\n\t\t\t\t\"border-left\" : \"borderLeft\",\n\t\t\t\t\"border-right\" : \"borderRight\",\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\n\t\t\t\t\"padding-top\" : \"paddingTop\",\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\n\t\t\t\t\"padding-right\" : \"paddingRight\",\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\n\t\t\t};\n\t\t\t\n\t\t\tif(window.getComputedStyle){\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\n\t\t\t\t\n\t\t\t\tprops.forEach(function(prop){\n\t\t\t\t\tif(!to.style[lookup[prop]]){\n\t\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nExport.moduleName = \"export\";\n\nexport default Export;\n","export default {\n\n\t//equal to\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal == filterVal ? true : false;\n\t},\n\n\t//less than\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal < filterVal ? true : false;\n\t},\n\n\t//less than or equal to\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal <= filterVal ? true : false;\n\t},\n\n\t//greater than\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal > filterVal ? true : false;\n\t},\n\n\t//greater than or equal to\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal >= filterVal ? true : false;\n\t},\n\n\t//not equal to\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\n\t\treturn rowVal != filterVal ? true : false;\n\t},\n\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\n\n\t\tif(typeof filterVal == \"string\"){\n\t\t\tfilterVal = new RegExp(filterVal);\n\t\t}\n\n\t\treturn filterVal.test(rowVal);\n\t},\n\n\t//contains the string\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//contains the keywords\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\tmatches = [];\n\n\t\tkeywords.forEach((keyword) =>{\n\t\t\tif(value.includes(keyword)){\n\t\t\t\tmatches.push(true);\n\t\t\t}\n\t\t});\n\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\n\t},\n\n\t//starts with the string\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//ends with the string\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t}else{\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\n\t\tif(Array.isArray(filterVal)){\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\treturn false;\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultFilters from './defaults/filters.js';\n\nclass Filter extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.filterList = []; //hold filter list\n\t\tthis.headerFilters = {}; //hold column filters\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.changed = false; //has filtering changed since last render\n\t\tthis.tableInitialized = false;\n\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\n\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\n\t\tthis.registerTableOption(\"placeholderHeaderFilter\", false); //placeholder when header filter is empty\n\n\t\tthis.registerColumnOption(\"headerFilter\");\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\n\t\tthis.registerColumnOption(\"headerFilterParams\");\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\n\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\n\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\n\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.subscribe(\"placeholder\", this.generatePlaceholder.bind(this));\n\n\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\n\t\t}\n\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\n\t}\n\n\ttableBuilt(){\n\t\tif(this.table.options.initialFilter){\n\t\t\tthis.setFilter(this.table.options.initialFilter);\n\t\t}\n\n\t\tif(this.table.options.initialHeaderFilter){\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\n\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.tableInitialized = true;\n\t}\n\n\tremoteFilterParams(data, config, silent, params){\n\t\tparams.filter = this.getFilters(true, true);\n\t\treturn params;\n\t}\n\n\tgeneratePlaceholder(text){\n\t\tif(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){\n\t\t\treturn this.table.options.placeholderHeaderFilter;\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t//set standard filters\n\tuserSetFilter(field, type, value, params){\n\t\tthis.setFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\t//set standard filters\n\tuserRefreshFilter(){\n\t\tthis.refreshFilter();\n\t}\n\n\t//add filter to array\n\tuserAddFilter(field, type, value, params){\n\t\tthis.addFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\tuserSetHeaderFilterFocus(field){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterFocus(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tuserGetHeaderFilterValue(field) {\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\treturn this.getHeaderFilterValue(column);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t}\n\t}\n\n\tuserSetHeaderFilterValue(field, value){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.setHeaderFilterValue(column, value);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//remove filter from array\n\tuserRemoveFilter(field, type, value){\n\t\tthis.removeFilter(field, type, value);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear filters\n\tuserClearFilter(all){\n\t\tthis.clearFilter(all);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear header filters\n\tuserClearHeaderFilter(){\n\t\tthis.clearHeaderFilter();\n\t\tthis.refreshFilter();\n\t}\n\n\n\t//search for specific row components\n\tsearchRows(field, type, value){\n\t\treturn this.search(\"rows\", field, type, value);\n\t}\n\n\t//search for specific data\n\tsearchData(field, type, value){\n\t\treturn this.search(\"data\", field, type, value);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumnHeaderFilter(column){\n\t\tvar def = column.definition;\n\n\t\tif(def.headerFilter){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\n\t//initialize column header filter\n\tinitializeColumn(column, value){\n\t\tvar self = this,\n\t\tfield = column.getField();\n\n\t\t//handle successfully value change\n\t\tfunction success(value){\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t\ttype = \"\",\n\t\t\tfilterChangeCheck = \"\",\n\t\t\tfilterFunc;\n\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\n\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\n\t\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!filterFunc){\n\t\t\t\t\t\tswitch(filterType){\n\t\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\n\t\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type};\n\t\t\t\t}else{\n\t\t\t\t\tdelete self.headerFilters[field];\n\t\t\t\t}\n\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\t\tself.trackChanges();\n\t\t\t\t\tself.refreshFilter();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tcolumn.modules.filter = {\n\t\t\tsuccess:success,\n\t\t\tattrType:false,\n\t\t\ttagType:false,\n\t\t\temptyFunc:false,\n\t\t};\n\n\t\tthis.generateHeaderFilterElement(column);\n\t}\n\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\n\t\tvar self = this,\n\t\tsuccess = column.modules.filter.success,\n\t\tfield = column.getField(),\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback;\n\n\t\tcolumn.modules.filter.value = initialValue;\n\n\t\t//handle aborted edit\n\t\tfunction cancel(){}\n\n\t\tfunction onRendered(callback){\n\t\t\tonRenderedCallback = callback;\n\t\t}\n\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t\t}\n\n\t\tif(field){\n\n\t\t\t//set empty value function\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\n\t\t\t\treturn !value && value !== 0;\n\t\t\t};\n\n\t\t\tfilterElement = document.createElement(\"div\");\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t\t//set column editor\n\t\t\tswitch(typeof column.definition.headerFilter){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\n\t\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(editor){\n\n\t\t\t\tcellWrapper = {\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn filterElement;\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:() => {\n\t\t\t\t\t\treturn \"header\";\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnormalizeHeight:function(){\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\n\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params);\n\n\t\t\t\tif(!editorElement){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(!(editorElement instanceof Node)){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//set Placeholder Text\n\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : (column.definition.headerFilterPlaceholder || self.langText(\"headerFilters|default\")));\n\t\t\t\t});\n\n\t\t\t\t//focus on element on click\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\teditorElement.focus();\n\t\t\t\t});\n\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\n\t\t\t\t\tvar left = this.table.columnManager.contentsElement.scrollLeft;\n\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft;\n\n\t\t\t\t\tif(left !== headerPos){\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//live update filters as user types\n\t\t\t\ttypingTimer = false;\n\n\t\t\t\tsearchTrigger = function(e){\n\t\t\t\t\tif(typingTimer){\n\t\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t\t}\n\n\t\t\t\t\ttypingTimer = setTimeout(function(){\n\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\n\t\t\t\t};\n\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\n\t\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\n\t\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//prevent input and select elements from propagating click to column sorters etc\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\t\tif(!reinitialize){\n\t\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t\t}\n\n\t\t\t\tif(onRenderedCallback){\n\t\t\t\t\tonRenderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t\t}\n\t}\n\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\thideHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t\t}\n\t\t});\n\t}\n\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\tshowHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//programmatically set focus of header filter\n\tsetHeaderFilterFocus(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\tcolumn.modules.filter.headerElement.focus();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically get value of header filter\n\tgetHeaderFilterValue(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\treturn column.modules.filter.value;\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically set value of header filter\n\tsetHeaderFilterValue(column, value){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\t\tcolumn.modules.filter.success(value);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\treloadHeaderFilter(column){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\trefreshFilter(){\n\t\tif(this.tableInitialized){\n\t\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\t\tthis.reloadData(null, false, false);\n\t\t\t}else{\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\n\t//check if the filters has changed since last use\n\ttrackChanges(){\n\t\tthis.changed = true;\n\t\tthis.dispatch(\"filter-changed\");\n\t}\n\n\t//check if the filters has changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\n\t//set standard filters\n\tsetFilter(field, type, value, params){\n\t\tthis.filterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tthis.addFilter(field);\n\t}\n\n\t//add filter to array\n\taddFilter(field, type, value, params){\n\t\tvar changed = false;\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tthis.filterList.push(filter);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\n\t\tif(changed){\n\t\t\tthis.trackChanges();\n\t\t}\n\t}\n\n\tfindFilter(filter){\n\t\tvar column;\n\n\t\tif(Array.isArray(filter)){\n\t\t\treturn this.findSubFilters(filter);\n\t\t}\n\n\t\tvar filterFunc = false;\n\n\t\tif(typeof filter.field == \"function\"){\n\t\t\tfilterFunc = function(data){\n\t\t\t\treturn filter.field(data, filter.type || {});// pass params to custom filter function\n\t\t\t};\n\t\t}else{\n\n\t\t\tif(Filter.filters[filter.type]){\n\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}\n\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t}\n\n\t\tfilter.func = filterFunc;\n\n\t\treturn filter.func ? filter : false;\n\t}\n\n\tfindSubFilters(filters){\n\t\tvar output = [];\n\n\t\tfilters.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\toutput.push(filter);\n\t\t\t}\n\t\t});\n\n\t\treturn output.length ? output : false;\n\t}\n\n\t//get all filters\n\tgetFilters(all, ajax){\n\t\tvar output = [];\n\n\t\tif(all){\n\t\t\toutput = this.getHeaderFilters();\n\t\t}\n\n\t\tif(ajax){\n\t\t\toutput.forEach(function(item){\n\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\t\treturn output;\n\t}\n\n\t//filter to Object\n\tfiltersToArray(filterList, ajax){\n\t\tvar output = [];\n\n\t\tfilterList.forEach((filter) => {\n\t\t\tvar item;\n\n\t\t\tif(Array.isArray(filter)){\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\n\t\t\t}else{\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value};\n\n\t\t\t\tif(ajax){\n\t\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\t\titem.type = \"function\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//get all filters\n\tgetHeaderFilters(){\n\t\tvar output = [];\n\n\t\tfor(var key in this.headerFilters){\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//remove filter from array\n\tremoveFilter(field, type, value){\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tvar index = -1;\n\n\t\t\tif(typeof filter.field == \"object\"){\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter === element;\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.filterList.splice(index, 1);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear filters\n\tclearFilter(all){\n\t\tthis.filterList = [];\n\n\t\tif(all){\n\t\t\tthis.clearHeaderFilter();\n\t\t}\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear header filters\n\tclearHeaderFilter(){\n\t\tthis.headerFilters = {};\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.headerFilterColumns.forEach((column) => {\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\n\t\t\t\tdelete column.modules.filter.value;\n\t\t\t}\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\t\tthis.reloadHeaderFilter(column);\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//search data and return matching rows\n\tsearch (searchType, field, type, value){\n\t\tvar activeRows = [],\n\t\tfilterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tfilterList.push(filter);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\tvar match = true;\n\n\t\t\tfilterList.forEach((filter) => {\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t\t}\n\n\t\t});\n\n\t\treturn activeRows;\n\t}\n\n\t//filter row array\n\tfilter(rowList, filters){\n\t\tvar activeRows = [],\n\t\tactiveRowComponents = [];\n\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters(true));\n\t\t}\n\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\n\n\t\t\trowList.forEach((row) => {\n\t\t\t\tif(this.filterRow(row)){\n\t\t\t\t\tactiveRows.push(row);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}else{\n\t\t\tactiveRows = rowList.slice(0);\n\t\t}\n\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\n\n\t\t\tactiveRows.forEach((row) => {\n\t\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t\t});\n\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(true), activeRowComponents);\n\t\t}\n\n\t\treturn activeRows;\n\t}\n\n\t//filter individual row\n\tfilterRow(row, filters){\n\t\tvar match = true,\n\t\tdata = row.getData();\n\n\t\tthis.filterList.forEach((filter) => {\n\t\t\tif(!this.filterRecurse(filter, data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\n\t\tfor(var field in this.headerFilters){\n\t\t\tif(!this.headerFilters[field].func(data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\treturn match;\n\t}\n\n\tfilterRecurse(filter, data){\n\t\tvar match = false;\n\n\t\tif(Array.isArray(filter)){\n\t\t\tfilter.forEach((subFilter) => {\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\n\t\t\t\t\tmatch = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tmatch = filter.func(data);\n\t\t}\n\n\t\treturn match;\n\t}\n}\n\nFilter.moduleName = \"filter\";\n\n//load defaults\nFilter.filters = defaultFilters;\n\nexport default Filter;","import plaintext from './formatters/plaintext.js';\nimport html from './formatters/html.js';\nimport textarea from './formatters/textarea.js';\nimport money from './formatters/money.js';\nimport link from './formatters/link.js';\nimport image from './formatters/image.js';\nimport tickCross from './formatters/tickCross.js';\nimport datetime from './formatters/datetime.js';\nimport datetimediff from './formatters/datetimediff.js';\nimport lookup from './formatters/lookup.js';\nimport star from './formatters/star.js';\nimport traffic from './formatters/traffic.js';\nimport progress from './formatters/progress.js';\nimport color from './formatters/color.js';\nimport buttonTick from './formatters/buttonTick.js';\nimport buttonCross from './formatters/buttonCross.js';\nimport rownum from './formatters/rownum.js';\nimport handle from './formatters/handle.js';\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\nimport rowSelection from './formatters/rowSelection.js';\n\nexport default {\n\tplaintext:plaintext,\n\thtml:html,\n\ttextarea:textarea,\n\tmoney:money,\n\tlink:link,\n\timage:image,\n\ttickCross:tickCross,\n\tdatetime:datetime,\n\tdatetimediff:datetimediff,\n\tlookup:lookup,\n\tstar:star,\n\ttraffic:traffic,\n\tprogress:progress,\n\tcolor:color,\n\tbuttonTick:buttonTick,\n\tbuttonCross:buttonCross,\n\trownum:rownum,\n\thandle:handle,\n\tresponsiveCollapse:responsiveCollapse,\n\trowSelection:rowSelection,\n};","export default function(cell, formatterParams, onRendered){\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\treturn cell.getValue();\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\tvar floatVal = parseFloat(cell.getValue()),\n\tsign = \"\",\n\tnumber, integer, decimal, rgx, value;\n\n\tvar decimalSym = formatterParams.decimal || \".\";\n\tvar thousandSym = formatterParams.thousand || \",\";\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\n\tvar symbol = formatterParams.symbol || \"\";\n\tvar after = !!formatterParams.symbolAfter;\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\tif(isNaN(floatVal)){\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t}\n\n\tif(floatVal < 0){\n\t\tfloatVal = Math.abs(floatVal);\n\t\tsign = negativeSign;\n\t}\n\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\tnumber = String(number).split(\".\");\n\n\tinteger = number[0];\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\tif (formatterParams.thousand !== false) {\n\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\twhile (rgx.test(integer)){\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t}\n\t}\n\n\tvalue = integer + decimal;\n\t\n\tif(sign === true){\n\t\tvalue = \"(\" + value + \")\";\n\t\treturn after ? value + symbol : symbol + value;\n\t}else{\n\t\treturn after ? sign + value + symbol : sign + symbol + value;\n\t}\n}","import Helpers from '../../../../core/tools/Helpers.js';\n\n\nexport default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\turlPrefix = formatterParams.urlPrefix || \"\",\n\tdownload = formatterParams.download,\n\tlabel = value,\n\tel = document.createElement(\"a\"),\n\tdata;\n\n\tfunction labelTraverse(path, data){\n\t\tvar item = path.shift(),\n\t\tvalue = data[item];\n\t\t\n\t\tif(path.length && typeof value === \"object\"){\n\t\t\treturn labelTraverse(path, value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tif(formatterParams.labelField){\n\t\tdata = cell.getData();\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\n\t}\n\n\tif(formatterParams.label){\n\t\tswitch(typeof formatterParams.label){\n\t\t\tcase \"string\":\n\t\t\t\tlabel = formatterParams.label;\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(label){\n\t\tif(formatterParams.urlField){\n\t\t\tdata = cell.getData();\n\n\t\t\tvalue = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data);\n\t\t}\n\n\t\tif(formatterParams.url){\n\t\t\tswitch(typeof formatterParams.url){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\tif(formatterParams.target){\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t}\n\n\t\tif(formatterParams.download){\n\n\t\t\tif(typeof download == \"function\"){\n\t\t\t\tdownload = download(cell);\n\t\t\t}else{\n\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t}\n\n\t\t\tel.setAttribute(\"download\", download);\n\t\t}\n\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\treturn el;\n\t}else{\n\t\treturn \" \";\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"img\"),\n\tsrc = cell.getValue();\n\n\tif(formatterParams.urlPrefix){\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t}\n\n\tif(formatterParams.urlSuffix){\n\t\tsrc = src + formatterParams.urlSuffix;\n\t}\n\n\tel.setAttribute(\"src\", src);\n\n\tswitch(typeof formatterParams.height){\n\t\tcase \"number\":\n\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.height = formatterParams.height;\n\t\t\tbreak;\n\t}\n\n\tswitch(typeof formatterParams.width){\n\t\tcase \"number\":\n\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.width = formatterParams.width;\n\t\t\tbreak;\n\t}\n\n\tel.addEventListener(\"load\", function(){\n\t\tcell.getRow().normalizeHeight();\n\t});\n\n\treturn el;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tempty = formatterParams.allowEmpty,\n\ttruthy = formatterParams.allowTruthy,\n\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\n\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")))){\n\t\telement.setAttribute(\"aria-checked\", true);\n\t\treturn tick || \"\";\n\t}else{\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\treturn \"\";\n\t\t}else{\n\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\treturn cross || \"\";\n\t\t}\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif(newDatetime.isValid){\n\t\t\tif(formatterParams.timezone){\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\n\t\t\t}\n\n\t\t\treturn newDatetime.toFormat(outputFormat);\n\t\t}else{\n\t\t\tif(invalid === true || !value){\n\t\t\t\treturn value;\n\t\t\t}else if(typeof invalid === \"function\"){\n\t\t\t\treturn invalid(value);\n\t\t\t}else{\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif (newDatetime.isValid){\n\t\t\tif(humanize){\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\n\t\t\t}else{\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar value = cell.getValue();\n\n\tif (typeof formatterParams[value] === \"undefined\") {\n\t\tconsole.warn('Missing display value for ' + value);\n\t\treturn value;\n\t}\n\n\treturn formatterParams[value];\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\tstars = document.createElement(\"span\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\tstarActive = '',\n\tstarInactive = '';\n\n\t//style stars holder\n\tstars.style.verticalAlign = \"middle\";\n\n\t//style star\n\tstar.setAttribute(\"width\", \"14\");\n\tstar.setAttribute(\"height\", \"14\");\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\tfor(var i=1;i<= maxStars;i++){\n\t\tvar nextStar = star.cloneNode(true);\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\tstars.appendChild(nextStar);\n\t}\n\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\telement.setAttribute(\"aria-label\", value);\n\n\treturn stars;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\tel = document.createElement(\"span\"),\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\tcolor = \"#666666\",\n\tpercent, percentValue;\n\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\n\t\treturn;\n\t}\n\n\tel.classList.add(\"tabulator-traffic-light\");\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set color\n\tswitch(typeof colors){\n\t\tcase \"string\":\n\t\t\tcolor = colors;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = colors(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(colors)){\n\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = colors[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n\n\tel.style.backgroundColor = color;\n\n\treturn el;\n}","import CellComponent from '../../../../core/cell/CellComponent.js';\n\nexport default function(cell, formatterParams = {}, onRendered){ //progress bar\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\telement = cell.getElement(),\n\tmax = formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams.min ? formatterParams.min : 0,\n\tlegendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\tpercent, percentValue, color, legend, legendColor;\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set bar color\n\tswitch(typeof formatterParams.color){\n\t\tcase \"string\":\n\t\t\tcolor = formatterParams.color;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = formatterParams.color(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.color)){\n\t\t\t\tlet unit = 100 / formatterParams.color.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\tcolor = \"#2DC214\";\n\t}\n\n\t//generate legend\n\tswitch(typeof formatterParams.legend){\n\t\tcase \"string\":\n\t\t\tlegend = formatterParams.legend;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegend = formatterParams.legend(value);\n\t\t\tbreak;\n\t\tcase \"boolean\":\n\t\t\tlegend = value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegend = false;\n\t}\n\n\t//set legend color\n\tswitch(typeof formatterParams.legendColor){\n\t\tcase \"string\":\n\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.legendColor)){\n\t\t\t\tlet unit = 100 / formatterParams.legendColor.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegendColor = \"#000\";\n\t}\n\n\telement.style.minWidth = \"30px\";\n\telement.style.position = \"relative\";\n\n\telement.setAttribute(\"aria-label\", percentValue);\n\n\tvar barEl = document.createElement(\"div\");\n\tbarEl.style.display = \"inline-block\";\n\tbarEl.style.width = percentValue + \"%\";\n\tbarEl.style.backgroundColor = color;\n\tbarEl.style.height = \"100%\";\n\n\tbarEl.setAttribute('data-max', max);\n\tbarEl.setAttribute('data-min', min);\n\n\tvar barContainer = document.createElement(\"div\");\n\tbarContainer.style.position = \"relative\";\n\tbarContainer.style.width = \"100%\";\n\tbarContainer.style.height = \"100%\";\n\n\tif(legend){\n\t\tvar legendEl = document.createElement(\"div\");\n\t\tlegendEl.style.position = \"absolute\";\n\t\tlegendEl.style.top = 0;\n\t\tlegendEl.style.left = 0;\n\t\tlegendEl.style.textAlign = legendAlign;\n\t\tlegendEl.style.width = \"100%\";\n\t\tlegendEl.style.color = legendColor;\n\t\tlegendEl.innerHTML = legend;\n\t}\n\n\tonRendered(function(){\n\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\tif(!(cell instanceof CellComponent)){\n\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\tholderEl.style.position = \"absolute\";\n\t\t\tholderEl.style.top = \"4px\";\n\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\tholderEl.style.left = \"4px\";\n\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\telement.appendChild(holderEl);\n\n\t\t\telement = holderEl;\n\t\t}\n\n\t\telement.appendChild(barContainer);\n\t\tbarContainer.appendChild(barEl);\n\n\t\tif(legend){\n\t\t\tbarContainer.appendChild(legendEl);\n\t\t}\n\t});\n\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\tvar content = document.createElement(\"span\");\n\tvar row = cell.getRow();\n\tvar table = cell.getTable();\n\n\trow.watchPosition((position) => {\n\t\tif (formatterParams.relativeToPage) {\n\t\t\tposition += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);\n\t\t}\n\t\tcontent.innerText = position;\n\t});\n\t\n\treturn content;\n}\n","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\treturn \"
    \";\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"div\"),\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\n\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\n\tel.innerHTML = `\n \n \n\n\n\n \n`;\n\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\tfunction toggleList(isOpen){\n\t\tvar collapseEl = config.element;\n\n\t\tconfig.open = isOpen;\n\n\t\tif(collapseEl){\n\n\t\t\tif(config.open){\n\t\t\t\tel.classList.add(\"open\");\n\t\t\t\tcollapseEl.style.display = '';\n\t\t\t}else{\n\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tel.addEventListener(\"click\", function(e){\n\t\te.stopImmediatePropagation();\n\t\ttoggleList(!config.open);\n\t\tcell.getTable().rowManager.adjustTableSize();\n\t});\n\n\ttoggleList(config.open);\n\n\treturn el;\n}","import RowComponent from '../../../../core/row/RowComponent.js';\n\nexport default function(cell, formatterParams, onRendered){\n\tvar checkbox = document.createElement(\"input\");\n\tvar blocked = false;\n\n\tcheckbox.type = 'checkbox';\n\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\n\t\n\tif(this.table.modExists(\"selectRow\", true)){\n\n\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(typeof cell.getRow == 'function'){\n\t\t\tvar row = cell.getRow();\n\n\t\t\tif(row instanceof RowComponent){\n\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\t\tif(!blocked){\n\t\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tblocked = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\tblocked = true;\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t}else{\n\t\t\t\tcheckbox = \"\";\n\t\t\t}\n\t\t}else {\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\n\t\t\t\t\tthis.table.deselectRow();\n\t\t\t\t}else {\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t}\n\t}\n\n\treturn checkbox;\n}","import Module from '../../core/Module.js';\n\nimport defaultFormatters from './defaults/formatters.js';\n\nclass Format extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.registerColumnOption(\"formatter\");\n\t\tthis.registerColumnOption(\"formatterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"formatterPrint\");\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\n\t\tthis.registerColumnOption(\"formatterClipboard\");\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\n\t\tthis.registerColumnOption(\"titleFormatter\");\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\n\t}\n\t\n\t//initialize column formatter\n\tinitializeColumn(column){\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\t\t\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t\t}\n\t}\n\t\n\tlookupFormatter(column, type){\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\n\t\tformatter = column.definition[\"formatter\" + type];\n\t\t\n\t\t//set column formatter\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tconfig.formatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.formatter = formatter;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn config;\n\t}\n\t\n\tcellRendered(cell){\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\n\t\t\tcell.modules.format.renderedCallback();\n\t\t\tcell.modules.format.rendered = true;\n\t\t}\n\t}\n\t\n\t//return a formatted value for a column header\n\tformatHeader(column, title, el){\n\t\tvar formatter, params, onRendered, mockCell;\n\t\t\n\t\tif(column.definition.titleFormatter){\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\n\t\t\t\n\t\t\tonRendered = (callback) => {\n\t\t\t\tcolumn.titleFormatterRendered = callback;\n\t\t\t};\n\t\t\t\n\t\t\tmockCell = {\n\t\t\t\tgetValue:function(){\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\tgetElement:function(){\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\t\t\t\tgetType:function(){\n\t\t\t\t\treturn \"header\";\n\t\t\t\t},\n\t\t\t\tgetColumn:function(){\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetTable:() => {\n\t\t\t\t\treturn this.table;\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tparams = column.definition.titleFormatterParams || {};\n\t\t\t\n\t\t\tparams = typeof params === \"function\" ? params() : params;\n\t\t\t\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\n\t\t}else{\n\t\t\treturn title;\n\t\t}\n\t}\n\t\n\t\n\t//return a formatted value for a cell\n\tformatValue(cell){\n\t\tvar component = cell.getComponent(),\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\tif(!cell.modules.format){\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\t\t\t\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t}\n\t\t\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n\t}\n\t\n\tformatExportValue(cell, type){\n\t\tvar formatter = cell.column.modules.format[type],\n\t\tparams;\n\t\t\n\t\tif(formatter){\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(cell.getComponent()) : formatter.params;\n\t\t\t\n\t\t\tfunction onRendered(callback){\n\t\t\t\tif(!cell.modules.format){\n\t\t\t\t\tcell.modules.format = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\t\tcell.modules.format.rendered = false;\n\t\t\t}\n\t\t\t\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t\t\t\n\t\t}else{\n\t\t\treturn this.formatValue(cell);\n\t\t}\n\t}\n\t\n\tsanitizeHTML(value){\n\t\tif(value){\n\t\t\tvar entityMap = {\n\t\t\t\t'&': '&',\n\t\t\t\t'<': '<',\n\t\t\t\t'>': '>',\n\t\t\t\t'\"': '"',\n\t\t\t\t\"'\": ''',\n\t\t\t\t'/': '/',\n\t\t\t\t'`': '`',\n\t\t\t\t'=': '='\n\t\t\t};\n\t\t\t\n\t\t\treturn String(value).replace(/[&<>\"'`=/]/g, function (s) {\n\t\t\t\treturn entityMap[s];\n\t\t\t});\n\t\t}else{\n\t\t\treturn value;\n\t\t}\n\t}\n\t\n\temptyToSpace(value){\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n\t}\n\t\n\t//get formatter for cell\n\tgetFormatter(formatter){\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tformatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t//Custom formatter Function, do nothing\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn formatter;\n\t}\n}\n\nFormat.moduleName = \"format\";\n\n//load defaults\nFormat.formatters = defaultFormatters;\n\nexport default Format;","import Module from '../../core/Module.js';\n\nclass FrozenColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.initializationMode = \"left\";\n\t\tthis.active = false;\n\t\tthis.blocked = true;\n\t\t\n\t\tthis.registerColumnOption(\"frozen\");\n\t}\n\t\n\t//reset initial state\n\treset(){\n\t\tthis.initializationMode = \"left\";\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.active = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\n\t\t\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-deleted\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-show\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.reinitializeColumns.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t}\n\t\n\tblockLayout(){\n\t\tthis.blocked = true;\n\t}\n\t\n\tunblockLayout(){\n\t\tthis.blocked = false;\n\t}\n\t\n\tlayoutCell(cell){\n\t\tthis.layoutElement(cell.element, cell.column);\n\t}\n\t\n\treinitializeColumns(){\n\t\tthis.reset();\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tthis.initializeColumn(column);\n\t\t});\n\n\t\tthis.layout();\n\t}\n\t\n\t//initialize specific column\n\tinitializeColumn(column){\n\t\tvar config = {margin:0, edge:false};\n\t\t\n\t\tif(!column.isGroup){\t\t\t\n\t\t\tif(this.frozenCheck(column)){\n\t\t\t\tconfig.position = this.initializationMode;\n\t\t\t\t\n\t\t\t\tif(this.initializationMode == \"left\"){\n\t\t\t\t\tthis.leftColumns.push(column);\n\t\t\t\t}else{\n\t\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.active = true;\n\t\t\t\t\n\t\t\t\tcolumn.modules.frozen = config;\n\t\t\t}else{\n\t\t\t\tthis.initializationMode = \"right\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfrozenCheck(column){\n\t\tif(column.parent.isGroup && column.definition.frozen){\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t\t}\n\t\t\n\t\tif(column.parent.isGroup){\n\t\t\treturn this.frozenCheck(column.parent);\n\t\t}else{\n\t\t\treturn column.definition.frozen;\n\t\t}\n\t}\n\t\n\t//layout calculation rows\n\tlayoutCalcRows(){\n\t\tif(this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modExists(\"groupRows\")){\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\n\t\t\t}\n\t\t}\n\t}\n\t\n\tlayoutGroupCalcs(groups){\n\t\tgroups.forEach((group) => {\n\t\t\tif(group.calcs.top){\n\t\t\t\tthis.layoutRow(group.calcs.top);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.calcs.bottom){\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.groupList && group.groupList.length){\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//calculate column positions and layout headers\n\tlayoutColumnPosition(allCells){\n\t\tvar leftParents = [];\n\t\t\n\t\tvar leftMargin = 0;\n\t\tvar rightMargin = 0;\n\t\t\n\t\tthis.leftColumns.forEach((column, i) => {\t\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tleftMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.leftColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\n\t\t\t\tif(!leftParents.includes(parentEl)){\n\t\t\t\t\tthis.layoutElement(parentEl, column);\n\t\t\t\t\tleftParents.push(parentEl);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column, i) => {\n\t\t\t\n\t\t\tcolumn.modules.frozen.marginValue = rightMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\trightMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.rightColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetColGroupParentElement(column){\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n\t}\n\t\n\t//layout columns appropriately\n\tlayout(){\t\n\t\tif(this.active && !this.blocked){\n\t\t\t//calculate left columns\n\t\t\tthis.layoutColumnPosition();\n\t\t\t\n\t\t\tthis.reinitializeRows();\n\t\t\t\n\t\t\tthis.layoutCalcRows();\n\t\t}\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\t\t\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t\t\n\t\tvisibleRows.forEach((row) =>{\n\t\t\tif(row.type === \"row\"){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutRow(row){\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\n\t\t}\n\t\t\n\t\tthis.leftColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutElement(element, column){\n\t\tvar position;\n\t\t\n\t\tif(column.modules.frozen && element){\n\t\t\telement.style.position = \"sticky\";\n\n\t\t\tif(this.table.rtl){\n\t\t\t\tposition = column.modules.frozen.position === \"left\" ? \"right\" : \"left\";\n\t\t\t}else{\n\t\t\t\tposition = column.modules.frozen.position;\n\t\t\t}\n\t\t\n\t\t\telement.style[position] = column.modules.frozen.margin;\n\n\t\t\telement.classList.add(\"tabulator-frozen\");\n\t\t\t\n\t\t\telement.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\telement.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t}\n\t}\n\n\tadjustForScrollbar(width){\n\t\tif(this.rightColumns.length){\n\t\t\tthis.table.columnManager.getContentsElement().style.width = \"calc(100% - \" + width + \"px)\";\n\t\t}\n\t}\n\t\n\t_calcSpace(columns, index){\n\t\tvar width = 0;\n\t\t\n\t\tfor (let i = 0; i < index; i++){\n\t\t\tif(columns[i].visible){\n\t\t\t\twidth += columns[i].getWidth();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn width;\n\t}\n}\n\nFrozenColumns.moduleName = \"frozenColumns\";\n\nexport default FrozenColumns;","import Module from '../../core/Module.js';\n\nclass FrozenRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.topElement = document.createElement(\"div\");\n\t\tthis.rows = [];\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\n\n\t\t//register table options\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\n\t}\n\n\tinitialize(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\t\t\n\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\tfragment.appendChild(this.topElement);\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\n\n\t\tif(this.table.options.frozenRows){\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t}\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\tinitializeRows(){\n\t\tthis.table.rowManager.getRows().forEach((row) => {\n\t\t\tthis.initializeRow(row);\n\t\t});\n\t}\n\n\tinitializeRow(row){\n\t\tvar frozenRows = this.table.options.frozenRows,\n\t\trowType = typeof frozenRows;\n\n\t\tif(rowType === \"number\"){\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(rowType === \"function\"){\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(Array.isArray(frozenRows)){\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowFrozen(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\treturn index > -1;\n\t}\n\n\tisFrozen(){\n\t\treturn !!this.rows.length;\n\t}\n\n\tvisibleRows(viewable, rows){\n\t\tthis.rows.forEach((row) => {\n\t\t\trows.push(row);\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\t//filter frozen rows out of display data\n\tgetRows(rows){\n\t\tvar output = rows.slice(0);\n\n\t\tthis.rows.forEach(function(row){\n\t\t\tvar index = output.indexOf(row);\n\n\t\t\tif(index > -1){\n\t\t\t\toutput.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tfreezeRow(row){\n\t\tif(!row.modules.frozen){\n\t\t\trow.modules.frozen = true;\n\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\trow.initialize();\n\t\t\trow.normalizeHeight();\n\t\t\n\t\t\tthis.rows.push(row);\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.styleRows();\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t\t}\n\t}\n\n\tunfreezeRow(row){\n\t\tif(row.modules.frozen){\n\n\t\t\trow.modules.frozen = false;\n\n\t\t\tthis.detachRow(row);\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tif(this.rows.length){\n\t\t\t\tthis.styleRows();\n\t\t\t}\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t\t}\n\t}\n\n\tdetachRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t}\n\n\tstyleRows(row){\n\t\tthis.rows.forEach((row, i) => {\n\t\t\tthis.table.rowManager.styleRow(row, i);\n\t\t});\n\t}\n}\n\nFrozenRows.moduleName = \"frozenRows\";\n\nexport default FrozenRows;","//public group object\nclass GroupComponent {\n\tconstructor (group){\n\t\tthis._group = group;\n\t\tthis.type = \"GroupComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"group\", target._group, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetKey(){\n\t\treturn this._group.key;\n\t}\n\n\tgetField(){\n\t\treturn this._group.field;\n\t}\n\n\tgetElement(){\n\t\treturn this._group.element;\n\t}\n\n\tgetRows(){\n\t\treturn this._group.getRows(true);\n\t}\n\n\tgetSubGroups(){\n\t\treturn this._group.getSubGroups(true);\n\t}\n\n\tgetParentGroup(){\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\n\t}\n\n\tisVisible(){\n\t\treturn this._group.visible;\n\t}\n\n\tshow(){\n\t\tthis._group.show();\n\t}\n\n\thide(){\n\t\tthis._group.hide();\n\t}\n\n\ttoggle(){\n\t\tthis._group.toggleVisibility();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible);\n\t}\n\n\t_getSelf(){\n\t\treturn this._group;\n\t}\n\n\tgetTable(){\n\t\treturn this._group.groupManager.table;\n\t}\n}\n\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\nimport GroupComponent from './GroupComponent.js';\n\n//Group functions\nclass Group{\n\t\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\n\t\tthis.groupManager = groupManager;\n\t\tthis.parent = parent;\n\t\tthis.key = key;\n\t\tthis.level = level;\n\t\tthis.field = field;\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\t\tthis.type = \"group\"; //type of element\n\t\tthis.old = oldGroup;\n\t\tthis.rows = [];\n\t\tthis.groups = [];\n\t\tthis.groupList = [];\n\t\tthis.generator = generator;\n\t\tthis.element = false;\n\t\tthis.elementContents = false;\n\t\tthis.height = 0;\n\t\tthis.outerHeight = 0;\n\t\tthis.initialized = false;\n\t\tthis.calcs = {};\n\t\tthis.initialized = false;\n\t\tthis.modules = {};\n\t\tthis.arrowElement = false;\n\t\t\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.createElements();\n\t\tthis.addBindings();\n\t\t\n\t\tthis.createValueGroups();\n\t}\n\t\n\twipe(elementsOnly){\n\t\tif(!elementsOnly){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\tgroup.wipe();\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tif(row.modules){\n\t\t\t\t\t\tdelete row.modules.group;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n\t\n\tcreateElements(){\n\t\tvar arrow = document.createElement(\"div\");\n\t\tarrow.classList.add(\"tabulator-arrow\");\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-row\");\n\t\tthis.element.classList.add(\"tabulator-group\");\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tthis.arrowElement = document.createElement(\"div\");\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\t\tthis.arrowElement.appendChild(arrow);\n\t\t\n\t\t//setup movable rows\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t\t}\n\t}\n\t\n\tcreateValueGroups(){\n\t\tvar level = this.level + 1;\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\n\t\t\t\tthis._createGroup(value, level);\n\t\t\t});\n\t\t}\n\t}\n\t\n\taddBindings(){\n\t\tvar toggleElement;\n\t\t\n\t\tif(this.groupManager.table.options.groupToggleElement){\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\n\t\t\t\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\n\t\t\t\tif(this.groupManager.table.options.groupToggleElement === \"arrow\"){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t}\n\n\t\t\t\t//allow click event to propagate before toggling visibility\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.toggleVisibility();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\t\n\t_createGroup(groupID, level){\n\t\tvar groupKey = level + \"_\" + groupID;\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\t_addRowToGroup(row){\n\t\t\n\t\tvar level = this.level + 1;\n\t\t\n\t\tif(this.hasSubGroups){\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t\tgroupKey = level + \"_\" + groupID;\n\t\t\t\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\t\tif(this.groups[groupKey]){\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!this.groups[groupKey]){\n\t\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_addRow(row){\n\t\tthis.rows.push(row);\n\t\trow.modules.group = this;\n\t}\n\t\n\tinsertRow(row, to, after){\n\t\tvar data = this.conformRowData({});\n\t\t\n\t\trow.updateData(data);\n\t\t\n\t\tvar toIndex = this.rows.indexOf(to);\n\t\t\n\t\tif(toIndex > -1){\n\t\t\tif(after){\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\n\t\t\t}else{\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t\t}\n\t\t}else{\n\t\t\tif(after){\n\t\t\t\tthis.rows.push(row);\n\t\t\t}else{\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\trow.modules.group = this;\n\t\t\n\t\t// this.generateGroupHeaderContents();\n\t\t\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t\t\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\t\n\tscrollHeader(left){\n\t\tif(this.arrowElement){\n\t\t\tthis.arrowElement.style.marginLeft = left;\n\t\t\t\n\t\t\tthis.groupList.forEach(function(child){\n\t\t\t\tchild.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tgetRowIndex(row){}\n\t\n\t//update row data to match grouping constraints\n\tconformRowData(data){\n\t\tif(this.field){\n\t\t\tdata[this.field] = this.key;\n\t\t}else{\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t\t}\n\t\t\n\t\tif(this.parent){\n\t\t\tdata = this.parent.conformRowData(data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\tremoveRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\tvar el = row.getElement();\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t\t\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t}else{\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\t\t\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(el.parentNode){\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupManager.blockRedraw){\n\t\t\t\tthis.generateGroupHeaderContents();\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupList.length){\n\t\t\t\tif(this.parent){\n\t\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t\t}else{\n\t\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetHeadersAndRows(){\n\t\tvar output = [];\n\t\t\n\t\toutput.push(this);\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\t\n\t\tif(this.calcs.top){\n\t\t\tthis.calcs.top.detachElement();\n\t\t\tthis.calcs.top.deleteCells();\n\t\t}\n\t\t\n\t\tif(this.calcs.bottom){\n\t\t\tthis.calcs.bottom.detachElement();\n\t\t\tthis.calcs.bottom.deleteCells();\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\tif(this.visible){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput = output.concat(this.rows);\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetData(visible, transform){\n\t\tvar output = [];\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(!visible || (visible && this.visible)){\n\t\t\tthis.rows.forEach((row) => {\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRowCount(){\n\t\tvar count = 0;\n\t\t\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tcount += group.getRowCount();\n\t\t\t});\n\t\t}else{\n\t\t\tcount = this.rows.length;\n\t\t}\n\t\treturn count;\n\t}\n\n\t\n\ttoggleVisibility(){\n\t\tif(this.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\t\n\thide(){\n\t\tthis.visible = false;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\t\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\trow.detachElement();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\n\t}\n\t\n\tshow(){\n\t\tthis.visible = true;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tvar prev = this.generateElement();\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\t\trow.initialize();\n\t\t\t\t\t\tprev = rowEl;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\n\t}\n\t\n\t_visSet(){\n\t\tvar data = [];\n\t\t\n\t\tif(typeof this.visible == \"function\"){\n\t\t\t\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\tdata.push(row.getData());\n\t\t\t});\n\t\t\t\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t\t}\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\t\n\t\t\t\tif(result){\n\t\t\t\t\tmatch = result;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tif(this.rows.find(function(item){\n\t\t\t\treturn item === row;\n\t\t\t})){\n\t\t\t\tmatch = this;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetSubGroups(component){\n\t\tvar output = [];\n\t\t\n\t\tthis.groupList.forEach(function(child){\n\t\t\toutput.push(component ? child.getComponent() : child);\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRows(component, includeChildren){\n\t\tvar output = [];\n\t\t\n\t\tif(includeChildren && this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getRows(component, includeChildren));\n\t\t\t});\n\t\t}else{\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\toutput.push(component ? row.getComponent() : row);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgenerateGroupHeaderContents(){\n\t\tvar data = [];\n\t\t\n\t\tvar rows = this.getRows(false, true);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\t\t\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\n\t\tif(typeof this.elementContents === \"string\"){\n\t\t\tthis.element.innerHTML = this.elementContents;\n\t\t}else{\n\t\t\tthis.element.appendChild(this.elementContents);\n\t\t}\n\t\t\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n\t}\n\t\n\tgetPath(path = []) {\n\t\tpath.unshift(this.key);\n\t\tif(this.parent) {\n\t\t\tthis.parent.getPath(path);\n\t\t}\n\t\treturn path;\n\t}\n\t\n\t////////////// Standard Row Functions //////////////\n\t\n\tgetElement(){\n\t\treturn this.elementContents ? this.element : this.generateElement();\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.addBindings = false;\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(this.visible){\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t}else{\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t\t}\n\t\t\n\t\tthis.generateGroupHeaderContents();\n\t\t\n\t\t// this.addBindings();\n\t\t\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(){\n\t\tthis.setHeight(this.element.clientHeight);\n\t}\n\t\n\tinitialize(force){\n\t\tif(!this.initialized || force){\n\t\t\tthis.normalizeHeight();\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\treinitialize(){\n\t\tthis.initialized = false;\n\t\tthis.height = 0;\n\t\t\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.initialize(true);\n\t\t}\n\t}\n\t\n\tsetHeight(height){\n\t\tif(this.height != height){\n\t\t\tthis.height = height;\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\tgetGroup(){\n\t\treturn this;\n\t}\n\t\n\treinitializeHeight(){}\n\t\n\tcalcHeight(){}\n\t\n\tsetCellHeight(){}\n\t\n\tclearCellHeight(){}\n\t\n\tdeinitializeHeight(){}\n\n\trendered(){}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new GroupComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n\nexport default Group;","import Module from '../../core/Module.js';\n\nimport Group from './Group.js';\n\nclass GroupRows extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\tthis.groupList = []; //ordered list of groups\n\t\tthis.allowedValues = false;\n\t\tthis.groups = {}; //hold row groups\n\t\t\n\t\tthis.displayHandler = this.getRows.bind(this);\n\n\t\tthis.blockRedraw = false;\n\t\t\n\t\t//register table options\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\n\t\tthis.registerTableOption(\"groupValues\", false);\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\n\t\t\n\t\t//register table functions\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\n\t}\n\t\n\t//initialize group configuration\n\tinitialize(){\n\t\tthis.subscribe(\"table-destroy\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wipe\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wiped\", this._restore_redrawing.bind(this));\n\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t_blockRedrawing(){\n\t\tthis.blockRedraw = true;\n\t}\n\n\t_restore_redrawing(){\n\t\tthis.blockRedraw = false;\n\t}\n\n\tconfigureGroupSetup(){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar groupBy = this.table.options.groupBy,\n\t\t\tstartOpen = this.table.options.groupStartOpen,\n\t\t\tgroupHeader = this.table.options.groupHeader;\n\t\t\t\n\t\t\tthis.allowedValues = this.table.options.groupValues;\n\t\t\t\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\t\t\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\n\t\t\t\t};\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupIDLookups = [];\n\t\t\t\n\t\t\tif(groupBy){\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\t\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\t\t\t\t\t\n\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\tif(col.definition.topCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(col.definition.bottomCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(!Array.isArray(groupBy)){\n\t\t\t\tgroupBy = [groupBy];\n\t\t\t}\n\t\t\t\n\t\t\tgroupBy.forEach((group, i) => {\n\t\t\t\tvar lookupFunc, column;\n\t\t\t\t\n\t\t\t\tif(typeof group == \"function\"){\n\t\t\t\t\tlookupFunc = group;\n\t\t\t\t}else{\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn data[group];\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groupIDLookups.push({\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\t\t\tfunc:lookupFunc,\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tif(startOpen){\n\t\t\t\tif(!Array.isArray(startOpen)){\n\t\t\t\t\tstartOpen = [startOpen];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstartOpen.forEach((level) => {\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.startOpen = startOpen;\n\t\t\t}\n\t\t\t\n\t\t\tif(groupHeader){\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t\t\t}\n\t\t}else{\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\trowSample(rows, prevValue){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar group = this.getGroups(false)[0];\n\t\t\t\n\t\t\tprevValue.push(group.getRows(false)[0]);\n\t\t}\n\t\t\n\t\treturn prevValue;\n\t}\n\t\n\tvirtualRenderFill(){\n\t\tvar el = this.table.rowManager.tableElement;\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\trows = rows.filter((row) => {\n\t\t\t\treturn row.type !== \"group\";\n\t\t\t});\n\t\t\t\n\t\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\n\t\t}else{\n\t\t\treturn rows;\n\t\t}\n\t}\n\t\n\trowAddingIndex(row, index, top){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.assignRowToGroup(row);\n\t\t\t\n\t\t\tvar groupRows = row.modules.group.rows;\n\t\t\t\n\t\t\tif(groupRows.length > 1){\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\n\t\t\t\t\tif(top){\n\t\t\t\t\t\tif(groupRows[0] !== row){\n\t\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn index;\n\t\t}\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"group-changed\");\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tsetGroupBy(groups){\n\t\tthis.table.options.groupBy = groups;\n\t\t\n\t\tif(!this.initialized){\n\t\t\tthis.initialize();\n\t\t}\n\t\t\n\t\tthis.configureGroupSetup();\n\n\t\tif(!groups && this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs === true){\n\t\t\tthis.table.modules.columnCalcs.reinitializeCalcs();\n\t\t}\n\t\t\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupValues(groupValues){\n\t\tthis.table.options.groupValues = groupValues;\n\t\tthis.configureGroupSetup();\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupStartOpen(values){\n\t\tthis.table.options.groupStartOpen = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tsetGroupHeader(values){\n\t\tthis.table.options.groupHeader = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tuserGetGroups(values){\n\t\treturn this.getGroups(true);\n\t}\n\t\n\t// get grouped table data in the same format as getData()\n\tuserGetGroupedData(){\n\t\treturn this.table.options.groupBy ? this.getGroupedData() : this.getData();\n\t}\n\t\n\t\n\t///////////////////////////////////////\n\t///////// Component Functions /////////\n\t///////////////////////////////////////\n\t\n\trowGetGroup(row){\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\trowMoving(from, to, after){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(!after && to instanceof Group){\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t\t}\n\t\t\t\n\t\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\n\t\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\n\t\t\t\n\t\t\tif(toGroup === fromGroup){\n\t\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\n\t\t\t}else{\n\t\t\t\tif(fromGroup){\n\t\t\t\t\tfromGroup.removeRow(from);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttoGroup.insertRow(from, to, after);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\trowDeleting(row){\n\t\t//remove from group\n\t\tif(this.table.options.groupBy && row.modules.group){\n\t\t\trow.modules.group.removeRow(row);\n\t\t}\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.updateGroupRows(true);\n\t\t}\t\n\t}\n\t\n\tcellUpdated(cell){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.reassignRowToGroup(cell.row);\n\t\t}\n\t}\n\t\n\t//return appropriate rows with group headers\n\tgetRows(rows){\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\n\t\t\t\n\t\t\tthis.generateGroups(rows);\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\n\t\t\t}\n\t\t\t\n\t\t\treturn this.updateGroupRows();\n\t\t\t\n\t\t}else{\n\t\t\treturn rows.slice(0);\n\t\t}\n\t}\n\t\n\tgetGroups(component){\n\t\tvar groupComponents = [];\n\t\t\n\t\tthis.groupList.forEach(function(group){\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\tgetChildGroups(group){\n\t\tvar groupComponents = [];\n\t\t\n\t\tif(!group){\n\t\t\tgroup = this;\n\t\t}\n\t\t\n\t\tgroup.groupList.forEach((child) => {\n\t\t\tif(child.groupList.length){\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\n\t\t\t}else{\n\t\t\t\tgroupComponents.push(child);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\twipe(){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tgroup.wipe();\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\tpullGroupListData(groupList) {\n\t\tvar groupListData = [];\n\t\t\n\t\tgroupList.forEach((group) => {\n\t\t\tvar groupHeader = {};\n\t\t\tgroupHeader.level = 0;\n\t\t\tgroupHeader.rowCount = 0;\n\t\t\tgroupHeader.headerContent = \"\";\n\t\t\tvar childData = [];\n\t\t\t\n\t\t\tif (group.hasSubGroups) {\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\n\t\t\t\t\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\tgroupListData = groupListData.concat(childData);\n\t\t\t}\n\t\t\t\n\t\t\telse {\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\t\n\t\t\t\tgroup.getRows().forEach((row) => {\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupListData;\n\t}\n\t\n\tgetGroupedData(){\n\t\t\n\t\treturn this.pullGroupListData(this.groupList);\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\t\n\t\tif(this.options(\"dataTree\")){\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\n\t\t}\n\t\t\n\t\tthis.groupList.forEach((group) => {\n\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\n\t\t\tif(result){\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tcountGroups(){\n\t\treturn this.groupList.length;\n\t}\n\t\n\tgenerateGroups(rows){\n\t\tvar oldGroups = this.groups;\n\t\t\n\t\tthis.groups = {};\n\t\tthis.groupList = [];\n\t\t\n\t\tif(this.allowedValues && this.allowedValues[0]){\n\t\t\tthis.allowedValues[0].forEach((value) => {\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\n\t\t\t});\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\n\t\t\t});\n\t\t}else{\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\n\t\t\t});\n\t\t}\n\t\t\n\t\tObject.values(oldGroups).forEach((group) => {\n\t\t\tgroup.wipe(true);\n\t\t});\t\n\t}\n\t\n\t\n\tcreateGroup(groupID, level, oldGroups){\n\t\tvar groupKey = level + \"_\" + groupID,\n\t\tgroup;\n\t\t\n\t\toldGroups = oldGroups || [];\n\t\t\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\tassignRowToExistingGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tgroupKey = \"0_\" + groupID;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n\t\n\tassignRowToGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\n\t\t\n\t\tif(newGroupNeeded){\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\n\t\t}\n\t\t\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\n\t\t\n\t\treturn !newGroupNeeded;\n\t}\n\t\n\treassignRowToGroup(row){\n\t\tif(row.type === \"row\"){\n\t\t\tvar oldRowGroup = row.modules.group,\n\t\t\toldGroupPath = oldRowGroup.getPath(),\n\t\t\tnewGroupPath = this.getExpectedPath(row),\n\t\t\tsamePath;\n\t\t\t\n\t\t\t// figure out if new group path is the same as old group path\n\t\t\tsamePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\n\t\t\t\treturn element === newGroupPath[index];\n\t\t\t});\n\t\t\t\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\t\t\tif(!samePath) {\n\t\t\t\toldRowGroup.removeRow(row);\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetExpectedPath(row) {\n\t\tvar groupPath = [], rowData = row.getData();\n\t\t\n\t\tthis.groupIDLookups.forEach((groupId) => {\n\t\t\tgroupPath.push(groupId.func(rowData));\n\t\t});\n\t\t\n\t\treturn groupPath;\n\t}\n\t\n\tupdateGroupRows(force){\n\t\tvar output = [];\n\n\t\tif(!this.blockRedraw){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tscrollHeaders(left){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\n\t\t\t}\n\t\t\t\n\t\t\tleft = left + \"px\";\n\t\t\t\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tgroup.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcheckBasicModeGroupHeaderWidth(){\n\t\tvar element = this.table.rowManager.tableElement,\n\t\tonlyGroupHeaders = true;\n\t\t\n\t\tthis.table.rowManager.getDisplayRows().forEach((row, index) =>{\n\t\t\tthis.table.rowManager.styleRow(row, index);\n\t\t\telement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t\t\n\t\t\tif(row.type !== \"group\"){\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n}\n\nGroupRows.moduleName = \"groupRows\";\n\nexport default GroupRows;","import Module from '../../core/Module.js';\nimport Row from '../../core/row/Row.js';\nimport Cell from '../../core/cell/Cell.js';\n\nimport defaultUndoers from './defaults/undoers.js';\nimport defaultRedoers from './defaults/redoers.js';\n\nclass History extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.history){\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\n\t}\n\n\trowMoved(from, to, after){\n\t\tthis.action(\"rowMove\", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after});\n\t}\n\n\trowAdded(row, data, pos, index){\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\n\t}\n\n\trowDeleted(row){\n\t\tvar index, rows;\n\n\t\tif(this.table.options.groupBy){\n\n\t\t\trows = row.getComponent().getGroup()._getSelf().rows;\n\t\t\tindex = rows.indexOf(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = rows[index-1];\n\t\t\t}\n\t\t}else{\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\n\t\t\t}\n\t\t}\n\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\n\t}\n\n\tcellUpdated(cell){\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\n\t}\n\n\tclear(){\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t}\n\n\taction(type, component, data){\n\t\tthis.history = this.history.slice(0, this.index + 1);\n\n\t\tthis.history.push({\n\t\t\ttype:type,\n\t\t\tcomponent:component,\n\t\t\tdata:data,\n\t\t});\n\n\t\tthis.index ++;\n\t}\n\n\tgetHistoryUndoSize(){\n\t\treturn this.index + 1;\n\t}\n\n\tgetHistoryRedoSize(){\n\t\treturn this.history.length - (this.index + 1);\n\t}\n\n\tclearComponentHistory(component){\n\t\tvar index = this.history.findIndex(function(item){\n\t\t\treturn item.component === component;\n\t\t});\n\n\t\tif(index > -1){\n\t\t\tthis.history.splice(index, 1);\n\t\t\tif(index <= this.index){\n\t\t\t\tthis.index--;\n\t\t\t}\n\n\t\t\tthis.clearComponentHistory(component);\n\t\t}\n\t}\n\n\tundo(){\n\t\tif(this.index > -1){\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.undoers[action.type].call(this, action);\n\n\t\t\tthis.index--;\n\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Undo Error - No more history to undo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tredo(){\n\t\tif(this.history.length-1 > this.index){\n\n\t\t\tthis.index++;\n\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.redoers[action.type].call(this, action);\n\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Redo Error - No more history to redo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//rebind rows to new element after deletion\n\t_rebindRow(oldRow, newRow){\n\t\tthis.history.forEach(function(action){\n\t\t\tif(action.component instanceof Row){\n\t\t\t\tif(action.component === oldRow){\n\t\t\t\t\taction.component = newRow;\n\t\t\t\t}\n\t\t\t}else if(action.component instanceof Cell){\n\t\t\t\tif(action.component.row === oldRow){\n\t\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\t\tif(field){\n\t\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nHistory.moduleName = \"history\";\n\n//load defaults\nHistory.undoers = defaultUndoers;\nHistory.redoers = defaultRedoers;\n\nexport default History;","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tvar after = (action.data.posFrom - action.data.posTo) > 0;\n\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after);\n\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete:function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after);\n\t\t\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","import Module from '../../core/Module.js';\n\nclass HtmlTableImport extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.fieldIndex = [];\n\t\tthis.hasIndex = false;\n\t}\n\n\tinitialize(){\n\t\tthis.tableElementCheck();\n\t}\n\n\ttableElementCheck(){\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\n\t\t\tif(this.table.originalElement.childNodes.length){\n\t\t\t\tthis.parseTable();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tparseTable(){\n\t\tvar element = this.table.originalElement,\n\t\toptions = this.table.options,\n\t\theaders = element.getElementsByTagName(\"th\"),\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\n\t\tdata = [];\n\n\t\tthis.hasIndex = false;\n\n\t\tthis.dispatchExternal(\"htmlImporting\");\n\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t\t//check for Tabulator inline options\n\t\tthis._extractOptions(element, options);\n\n\t\tif(headers.length){\n\t\t\tthis._extractHeaders(headers, rows);\n\t\t}else{\n\t\t\tthis._generateBlankHeaders(headers, rows);\n\t\t}\n\n\t\t//iterate through table rows and build data set\n\t\tfor(var index = 0; index < rows.length; index++){\n\t\t\tvar row = rows[index],\n\t\t\tcells = row.getElementsByTagName(\"td\"),\n\t\t\titem = {};\n\n\t\t\t//create index if the don't exist in table\n\t\t\tif(!this.hasIndex){\n\t\t\t\titem[options.index] = index;\n\t\t\t}\n\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\tvar cell = cells[i];\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//add row data to item\n\t\t\tdata.push(item);\n\t\t}\n\n\t\toptions.data = data;\n\n\t\tthis.dispatchExternal(\"htmlImported\");\n\t}\n\n\t//extract tabulator attribute options\n\t_extractOptions(element, options, defaultOptions){\n\t\tvar attributes = element.attributes;\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\n\t\tvar optionsList = {};\n\n\t\toptionsArr.forEach((item) => {\n\t\t\toptionsList[item.toLowerCase()] = item;\n\t\t});\n\n\t\tfor(var index in attributes){\n\t\t\tvar attrib = attributes[index];\n\t\t\tvar name;\n\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//get value of attribute\n\t_attribValue(value){\n\t\tif(value === \"true\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(value === \"false\"){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t//find column if it has already been defined\n\t_findCol(title){\n\t\tvar match = this.table.options.columns.find((column) => {\n\t\t\treturn column.title === title;\n\t\t});\n\n\t\treturn match || false;\n\t}\n\n\t//extract column from headers\n\t_extractHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\texists = false,\n\t\t\tcol = this._findCol(header.textContent),\n\t\t\twidth;\n\n\t\t\tif(col){\n\t\t\t\texists = true;\n\t\t\t}else{\n\t\t\t\tcol = {title:header.textContent.trim()};\n\t\t\t}\n\n\t\t\tif(!col.field) {\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replaceAll(\" \", \"_\");\n\t\t\t}\n\n\t\t\twidth = header.getAttribute(\"width\");\n\n\t\t\tif(width && !col.width)\t{\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\t//check for Tabulator inline options\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tif(col.field == this.table.options.index){\n\t\t\t\tthis.hasIndex = true;\n\t\t\t}\n\n\t\t\tif(!exists){\n\t\t\t\tthis.table.options.columns.push(col);\n\t\t\t}\n\n\t\t}\n\t}\n\n\t//generate blank headers\n\t_generateBlankHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\tcol = {title:\"\", field:\"col\" + index};\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tvar width = header.getAttribute(\"width\");\n\n\t\t\tif(width){\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n}\n\nHtmlTableImport.moduleName = \"htmlTableImport\";\n\nexport default HtmlTableImport;\n","import csv from './importers/csv.js';\nimport json from './importers/json.js';\nimport array from './importers/array.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tarray:array,\n};","function csvImporter(input){\n\tvar data = [],\n\trow = 0, \n\tcol = 0,\n\tinQuote = false;\n \n\t//Iterate over each character\n\tfor (let index = 0; index < input.length; index++) {\n\t\tlet char = input[index], \n\t\tnextChar = input[index+1]; \n \n\t\t//Initialize empty row\n\t\tif(!data[row]){\n\t\t\tdata[row] = [];\n\t\t}\n\n\t\t//Initialize empty column\n\t\tif(!data[row][col]){\n\t\t\tdata[row][col] = \"\";\n\t\t}\n \n\t\t//Handle quotation mark inside string\n\t\tif (char == '\"' && inQuote && nextChar == '\"') { \n\t\t\tdata[row][col] += char; \n\t\t\tindex++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//Begin / End Quote\n\t\tif (char == '\"') { \n\t\t\tinQuote = !inQuote;\n\t\t\tcontinue;\n\t\t}\n \n\t\t//Next column (if not in quote)\n\t\tif (char == ',' && !inQuote) { \n\t\t\tcol++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CRLF) \n\t\tif (char == '\\r' && nextChar == '\\n' && !inQuote) { \n\t\t\tcol = 0; \n\t\t\trow++; \n\t\t\tindex++; \n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CR or LF) \n\t\tif ((char == '\\r' || char == '\\n') && !inQuote) { \n\t\t\tcol = 0;\n\t\t\trow++;\n\t\t\tcontinue; \n\t\t}\n\n\t\t//Normal Character, append to column\n\t\tdata[row][col] += char;\n\t}\n\n\treturn data;\n}\n\nexport default csvImporter;","export default function(input){\n\ttry {\n\t\treturn JSON.parse(input);\n\t} catch(e) {\n\t\tconsole.warn(\"JSON Import Error - File contents is invalid JSON\", e);\n\t\treturn Promise.reject();\n\t}\n}","function arrayImporter(input){\n\treturn input;\n}\n\nexport default arrayImporter;","import Module from '../../core/Module.js';\n\nimport defaultImporters from './defaults/importers.js';\n\nclass Import extends Module{\n \n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.registerTableOption(\"importFormat\");\n\t\tthis.registerTableOption(\"importReader\", \"text\");\n\t}\n \n\tinitialize(){\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\n\n\t\tif(this.table.options.importFormat){\n\t\t\tthis.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\n\t\t\tthis.subscribe(\"data-load\", this.loadData.bind(this), 10);\n\t\t}\n\t}\n\n\tloadDataCheck(data){\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\n\t}\n\n\tloadData(data, params, config, silent, previousData){\n\t\treturn this.importData(this.lookupImporter(), data)\n\t\t\t.then(this.structureData.bind(this))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import data\");\n\t\t\t\treturn Promise.reject(err);\n\t\t\t});\n\t}\n\n\tlookupImporter(importFormat){\n\t\tvar importer;\n \n\t\tif(!importFormat){\n\t\t\timportFormat = this.table.options.importFormat;\n\t\t}\n \n\t\tif(typeof importFormat === \"string\"){\n\t\t\timporter = Import.importers[importFormat];\n\t\t}else{\n\t\t\timporter = importFormat;\n\t\t}\n\n\t\tif(!importer){\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\n\t\t}\n \n\t\treturn importer;\n\t}\n \n\timportFromFile(importFormat, extension){\n\t\tvar importer = this.lookupImporter(importFormat);\n \n\t\tif(importer){\n\t\t\treturn this.pickFile(extension)\n\t\t\t\t.then(this.importData.bind(this, importer))\n\t\t\t\t.then(this.structureData.bind(this))\n\t\t\t\t.then(this.setData.bind(this))\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t});\n\t\t}\n\t}\n \n\tpickFile(extensions){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.type = \"file\";\n\t\t\tinput.accept = extensions;\n \n\t\t\tinput.addEventListener(\"change\", (e) => {\n\t\t\t\tvar file = input.files[0],\n\t\t\t\treader = new FileReader();\n \n\t\t\t\tswitch(this.table.options.importReader){\n\t\t\t\t\tcase \"buffer\":\n\t\t\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"binary\":\n\t\t\t\t\t\treader.readAsBinaryString(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\treader.readAsDataURL(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treader.readAsText(file);\n\t\t\t\t}\n \n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\tresolve(reader.result);\n\t\t\t\t};\n \n\t\t\t\treader.onerror = (e) => {\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\t\treject();\n\t\t\t\t};\n\t\t\t});\n \n\t\t\tinput.click();\n\t\t});\n\t}\n \n\timportData(importer, fileContents){\n\t\tvar data = importer.call(this.table, fileContents);\n \n\t\tif(data instanceof Promise){\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn data ? Promise.resolve(data) : Promise.reject();\n\t\t}\n\t}\n\n\tstructureData(parsedData){\n\t\tvar data = [];\n \n\t\tif(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\n\t\t\tif(this.table.options.autoColumns){\n\t\t\t\tdata = this.structureArrayToObject(parsedData);\n\t\t\t}else{\n\t\t\t\tdata = this.structureArrayToColumns(parsedData);\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn parsedData;\n\t\t}\n\t}\n\n\tstructureArrayToObject(parsedData){\n\t\tvar columns = parsedData.shift();\n\n\t\tvar data = parsedData.map((values) => {\n\t\t\tvar row = {};\n\n\t\t\tcolumns.forEach((key, i) => {\n\t\t\t\trow[key] = values[i];\n\t\t\t});\n\n\t\t\treturn row;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tstructureArrayToColumns(parsedData){\n\t\tvar data = [],\n\t\tcolumns = this.table.getColumns();\n\n\t\t//remove first row if it is the column names\n\t\tif(columns[0] && parsedData[0][0]){\n\t\t\tif(columns[0].getDefinition().title === parsedData[0][0]){\n\t\t\t\tparsedData.shift();\n\t\t\t}\n\t\t}\n \n\t\t//convert row arrays to objects\n\t\tparsedData.forEach((rowData) => {\n\t\t\tvar row = {};\n\n\t\t\trowData.forEach((value, index) => {\n\t\t\t\tvar column = columns[index];\n\n\t\t\t\tif(column){\n\t\t\t\t\trow[column.getField()] = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdata.push(row);\n\t\t});\n\n\t\treturn data;\n\t}\n \n\tsetData(data){\n\t\treturn this.table.setData(data);\n\t}\n}\n\nImport.moduleName = \"import\";\n\n//load defaults\nImport.importers = defaultImporters;\n\nexport default Import;","import Module from '../../core/Module.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\n\nclass Interaction extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.eventMap = {\n\t\t\t//row events\n\t\t\trowClick:\"row-click\",\n\t\t\trowDblClick:\"row-dblclick\",\n\t\t\trowContext:\"row-contextmenu\",\n\t\t\trowMouseEnter:\"row-mouseenter\",\n\t\t\trowMouseLeave:\"row-mouseleave\",\n\t\t\trowMouseOver:\"row-mouseover\",\n\t\t\trowMouseOut:\"row-mouseout\",\n\t\t\trowMouseMove:\"row-mousemove\",\n\t\t\trowMouseDown:\"row-mousedown\",\n\t\t\trowMouseUp:\"row-mouseup\",\n\t\t\trowTap:\"row\",\n\t\t\trowDblTap:\"row\",\n\t\t\trowTapHold:\"row\",\n\n\t\t\t//cell events\n\t\t\tcellClick:\"cell-click\",\n\t\t\tcellDblClick:\"cell-dblclick\",\n\t\t\tcellContext:\"cell-contextmenu\",\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\n\t\t\tcellMouseOver:\"cell-mouseover\",\n\t\t\tcellMouseOut:\"cell-mouseout\",\n\t\t\tcellMouseMove:\"cell-mousemove\",\n\t\t\tcellMouseDown:\"cell-mousedown\",\n\t\t\tcellMouseUp:\"cell-mouseup\",\n\t\t\tcellTap:\"cell\",\n\t\t\tcellDblTap:\"cell\",\n\t\t\tcellTapHold:\"cell\",\n\n\t\t\t//column header events\n\t\t\theaderClick:\"column-click\",\n\t\t\theaderDblClick:\"column-dblclick\",\n\t\t\theaderContext:\"column-contextmenu\",\n\t\t\theaderMouseEnter:\"column-mouseenter\",\n\t\t\theaderMouseLeave:\"column-mouseleave\",\n\t\t\theaderMouseOver:\"column-mouseover\",\n\t\t\theaderMouseOut:\"column-mouseout\",\n\t\t\theaderMouseMove:\"column-mousemove\",\n\t\t\theaderMouseDown:\"column-mousedown\",\n\t\t\theaderMouseUp:\"column-mouseup\",\n\t\t\theaderTap:\"column\",\n\t\t\theaderDblTap:\"column\",\n\t\t\theaderTapHold:\"column\",\n\n\t\t\t//group header\n\t\t\tgroupClick:\"group-click\",\n\t\t\tgroupDblClick:\"group-dblclick\",\n\t\t\tgroupContext:\"group-contextmenu\",\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\n\t\t\tgroupMouseOver:\"group-mouseover\",\n\t\t\tgroupMouseOut:\"group-mouseout\",\n\t\t\tgroupMouseMove:\"group-mousemove\",\n\t\t\tgroupMouseDown:\"group-mousedown\",\n\t\t\tgroupMouseUp:\"group-mouseup\",\n\t\t\tgroupTap:\"group\",\n\t\t\tgroupDblTap:\"group\",\n\t\t\tgroupTapHold:\"group\",\n\t\t};\n\n\t\tthis.subscribers = {};\n\n\t\tthis.touchSubscribers = {};\n\n\t\tthis.columnSubscribers = {};\n\n\t\tthis.touchWatchers = {\n\t\t\trow:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcell:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcolumn:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tgroup:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t}\n\t\t};\n\n\t\tthis.registerColumnOption(\"headerClick\");\n\t\tthis.registerColumnOption(\"headerDblClick\");\n\t\tthis.registerColumnOption(\"headerContext\");\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\n\t\tthis.registerColumnOption(\"headerMouseOver\");\n\t\tthis.registerColumnOption(\"headerMouseOut\");\n\t\tthis.registerColumnOption(\"headerMouseMove\");\n\t\tthis.registerColumnOption(\"headerMouseDown\");\n\t\tthis.registerColumnOption(\"headerMouseUp\");\n\t\tthis.registerColumnOption(\"headerTap\");\n\t\tthis.registerColumnOption(\"headerDblTap\");\n\t\tthis.registerColumnOption(\"headerTapHold\");\n\n\t\tthis.registerColumnOption(\"cellClick\");\n\t\tthis.registerColumnOption(\"cellDblClick\");\n\t\tthis.registerColumnOption(\"cellContext\");\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\n\t\tthis.registerColumnOption(\"cellMouseOver\");\n\t\tthis.registerColumnOption(\"cellMouseOut\");\n\t\tthis.registerColumnOption(\"cellMouseMove\");\n\t\tthis.registerColumnOption(\"cellMouseDown\");\n\t\tthis.registerColumnOption(\"cellMouseUp\");\n\t\tthis.registerColumnOption(\"cellTap\");\n\t\tthis.registerColumnOption(\"cellDblTap\");\n\t\tthis.registerColumnOption(\"cellTapHold\");\n\n\t}\n\n\tinitialize(){\n\t\tthis.initializeExternalEvents();\n\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.clearTouchWatchers.bind(this));\n\t\tthis.subscribe(\"scroll-vertical\", this.clearTouchWatchers.bind(this));\n\t}\n\n\tclearTouchWatchers(){\n\t\tvar types = Object.values(this.touchWatchers);\n\n\t\ttypes.forEach((type) => {\n\t\t\tfor(let key in type){\n\t\t\t\ttype[key] = null;\n\t\t\t}\n\t\t});\n\t}\n\t\t\n\tcellContentsSelectionFixer(e, cell){\n\t\tvar range;\n\n\t\tif(this.table.modExists(\"edit\")){\n\t\t\tif (this.table.modules.edit.currentCell === cell){\n\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t}\n\t\t}\n\n\t\te.preventDefault();\n\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\n\tinitializeExternalEvents(){\n\t\tfor(let key in this.eventMap){\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key));\n\t\t}\n\t}\n\n\tsubscriptionChanged(key, added){\n\t\tif(added){\n\t\t\tif(!this.subscribers[key]){\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t}else{\n\t\t\t\t\tthis.subscribeTouchEvents(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t\tdelete this.subscribers[key];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.unsubscribeTouchEvents(key);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tsubscribeTouchEvents(key){\n\t\tvar type = this.eventMap[key];\n\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\n\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\t\t}\n\n\t\tthis.subscribers[key] = true;\n\t}\n\n\tunsubscribeTouchEvents(key){\n\t\tvar noTouch = true,\n\t\ttype = this.eventMap[key];\n\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\n\t\t\tdelete this.subscribers[key];\n\n\t\t\tfor(let i in this.eventMap){\n\t\t\t\tif(this.eventMap[i] === type){\n\t\t\t\t\tif(this.subscribers[i]){\n\t\t\t\t\t\tnoTouch = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(noTouch){\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\n\t\tfor(let key in this.eventMap){\n\t\t\tif(def[key]){\n\t\t\t\tthis.subscriptionChanged(key, true);\n\n\t\t\t\tif(!this.columnSubscribers[key]){\n\t\t\t\t\tthis.columnSubscribers[key] = [];\n\t\t\t\t}\n\n\t\t\t\tthis.columnSubscribers[key].push(column);\n\t\t\t}\n\t\t}\n\t}\n\n\thandle(action, e, component){\n\t\tthis.dispatchEvent(action, e, component);\n\t}\n\n\thandleTouch(type, action, e, component){\n\t\tvar watchers = this.touchWatchers[type];\n\n\t\tif(type === \"column\"){\n\t\t\ttype = \"header\";\n\t\t}\n\n\t\tswitch(action){\n\t\t\tcase \"start\":\n\t\t\t\twatchers.tap = true;\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\n\t\t\t\twatchers.tapHold = setTimeout(() => {\n\t\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\t\twatchers.tapHold = null;\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\n\t\t\t\t}, 1000);\n\t\t\t\tbreak;\n\n\t\t\tcase \"end\":\n\t\t\t\tif(watchers.tap){\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\n\t\t\t\t}\n\n\t\t\t\tif(watchers.tapDbl){\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\n\t\t\t\t}else{\n\t\t\t\t\twatchers.tapDbl = setTimeout(() => {\n\t\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\t\twatchers.tapDbl = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\twatchers.tapHold = null;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdispatchEvent(action, e, component){\n\t\tvar componentObj = component.getComponent(),\n\t\tcallback;\n\n\t\tif(this.columnSubscribers[action]){\n\n\t\t\tif(component instanceof Cell){\n\t\t\t\tcallback = component.column.definition[action];\n\t\t\t}else if(component instanceof Column){\n\t\t\t\tcallback = component.definition[action];\n\t\t\t}\n\n\t\t\tif(callback){\n\t\t\t\tcallback(e, componentObj);\n\t\t\t}\n\t\t}\n\n\t\tthis.dispatchExternal(action, e, componentObj);\n\t}\n}\n\nInteraction.moduleName = \"interaction\";\n\nexport default Interaction;\n","import Module from '../../core/Module.js';\n\nimport defaultBindings from './defaults/bindings.js';\nimport defaultActions from './defaults/actions.js';\n\nclass Keybindings extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.watchKeys = null;\n\t\tthis.pressedKeys = null;\n\t\tthis.keyupBinding = false;\n\t\tthis.keydownBinding = false;\n\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\n\t}\n\n\tinitialize(){\n\t\tvar bindings = this.table.options.keybindings,\n\t\tmergedBindings = {};\n\n\t\tthis.watchKeys = {};\n\t\tthis.pressedKeys = [];\n\n\t\tif(bindings !== false){\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings);\n\t\t\tObject.assign(mergedBindings, bindings);\n\n\t\t\tthis.mapBindings(mergedBindings);\n\t\t\tthis.bindEvents();\n\t\t}\n\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t}\n\n\tmapBindings(bindings){\n\t\tfor(let key in bindings){\n\t\t\tif(Keybindings.actions[key]){\n\t\t\t\tif(bindings[key]){\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t\t}\n\n\t\t\t\t\tbindings[key].forEach((binding) => {\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\n\t\t\t\t\t\t\n\t\t\t\t\t\tbindingList.forEach((item) => {\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\n\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\tmapBinding(action, symbolsList){\n\t\tvar binding = {\n\t\t\taction: Keybindings.actions[action],\n\t\t\tkeys: [],\n\t\t\tctrl: false,\n\t\t\tshift: false,\n\t\t\tmeta: false,\n\t\t};\n\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\t\tsymbols.forEach((symbol) => {\n\t\t\tswitch(symbol){\n\t\t\t\tcase \"ctrl\":\n\t\t\t\t\tbinding.ctrl = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"shift\":\n\t\t\t\t\tbinding.shift = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"meta\":\n\t\t\t\t\tbinding.meta = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\n\t\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\t\tif(!this.watchKeys[symbol]){\n\t\t\t\t\t\tthis.watchKeys[symbol] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.watchKeys[symbol].push(binding);\n\t\t\t}\n\t\t});\n\t}\n\n\tbindEvents(){\n\t\tvar self = this;\n\n\t\tthis.keyupBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tself.pressedKeys.push(code);\n\n\t\t\t\tbindings.forEach(function(binding){\n\t\t\t\t\tself.checkBinding(e, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tthis.keydownBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n\t}\n\n\tclearBindings(){\n\t\tif(this.keyupBinding){\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t\t}\n\n\t\tif(this.keydownBinding){\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t\t}\n\t}\n\n\tcheckBinding(e, binding){\n\t\tvar match = true;\n\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\n\t\t\tbinding.keys.forEach((key) => {\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\n\n\t\t\t\tif(index == -1){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tbinding.action.call(this, e);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nKeybindings.moduleName = \"keybindings\";\n\n//load defaults\nKeybindings.bindings = defaultBindings;\nKeybindings.actions = defaultActions;\n\nexport default Keybindings;","export default {\n\tnavPrev:\"shift + 9\",\n\tnavNext:9,\n\tnavUp:38,\n\tnavDown:40,\n\tnavLeft:37,\n\tnavRight:39,\n\tscrollPageUp:33,\n\tscrollPageDown:34,\n\tscrollToStart:36,\n\tscrollToEnd:35,\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 67\"],\n\n\trangeJumpUp:[\"ctrl + 38\", \"meta + 38\"],\n\trangeJumpDown:[\"ctrl + 40\", \"meta + 40\"],\n\trangeJumpLeft:[\"ctrl + 37\", \"meta + 37\"],\n\trangeJumpRight:[\"ctrl + 39\", \"meta + 39\"],\n\trangeExpandUp:\"shift + 38\",\n\trangeExpandDown:\"shift + 40\",\n\trangeExpandLeft:\"shift + 37\",\n\trangeExpandRight:\"shift + 39\",\n\trangeExpandJumpUp:[\"ctrl + shift + 38\", \"meta + shift + 38\"],\n\trangeExpandJumpDown:[\"ctrl + shift + 40\", \"meta + shift + 40\"],\n\trangeExpandJumpLeft:[\"ctrl + shift + 37\", \"meta + shift + 37\"],\n\trangeExpandJumpRight:[\"ctrl + shift + 39\", \"meta + shift + 39\"],\n};\n","export default {\n\tkeyBlock:function(e){\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos >= 0){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollPageDown:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\n\t\tscrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\tif(newPos <= scrollMax){\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t}else{\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\n\t},\n\tscrollToStart:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToEnd:function(e){\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif(rowManager.displayRowsCount){\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tnavPrev:function(e){\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\n\t},\n\n\tnavNext:function(e){\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\n\t},\n\n\tnavLeft:function(e){\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\n\t},\n\n\tnavRight:function(e){\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\n\t},\n\n\tnavUp:function(e){\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\n\t},\n\n\tnavDown:function(e){\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\n\t},\n\n\trangeJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, false);\n\t},\n\trangeJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, false);\n\t},\n\trangeJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, false);\n\t},\n\trangeJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, false);\n\t},\n\trangeExpandLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", false, true);\n\t},\n\trangeExpandRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", false, true);\n\t},\n\trangeExpandUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", false, true);\n\t},\n\trangeExpandDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", false, true);\n\t},\n\trangeExpandJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, true);\n\t},\n\trangeExpandJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, true);\n\t},\n\trangeExpandJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, true);\n\t},\n\trangeExpandJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, true);\n\t},\n\n\tundo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.undo();\n\t\t\t}\n\t\t}\n\t},\n\n\tredo:function(e){\n\t\tvar cell = false;\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif(!cell){\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.redo();\n\t\t\t}\n\t\t}\n\t},\n\n\tcopyToClipboard:function(e){\n\t\tif(!this.table.modules.edit.currentCell){\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t}\n\t\t}\n\t},\n};\n","import Module from '../../core/Module.js';\n\nclass Menu extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.menuContainer = null;\n\t\tthis.nestedMenuBlock = false;\n\t\t\n\t\tthis.currentComponent = null;\n\t\tthis.rootPopup = null;\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\n\t\t\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\n\t\tthis.registerTableOption(\"rowDblClickMenu\", false);\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\n\t\tthis.registerTableOption(\"groupDblClickMenu\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextMenu\");\n\t\tthis.registerColumnOption(\"headerClickMenu\");\n\t\tthis.registerColumnOption(\"headerDblClickMenu\");\n\t\tthis.registerColumnOption(\"headerMenu\");\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\n\t\tthis.registerColumnOption(\"contextMenu\");\n\t\tthis.registerColumnOption(\"clickMenu\");\n\t\tthis.registerColumnOption(\"dblClickMenu\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tif(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\n\t\t}\n\t}\t\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextMenu){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickMenu){\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowDblClickMenu){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextMenu){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickMenu){\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupDblClickMenu){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar\tdef = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){\n\t\t\tthis.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerDblClickMenu\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerMenu){\n\t\t\tthis.initializeColumnHeaderMenu(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\n\t\t}\n\t\t\n\t\tif(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){\n\t\t\tthis.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, \"dblClickMenu\");\n\t\t\tthis.subscribe(\"cell-dblclick\", this.columnSubscribers.dblClickMenu);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderMenu(column){\n\t\tvar icon = column.definition.headerMenuIcon,\n\t\theaderMenuEl;\n\t\t\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\n\t\t\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderMenuEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderMenuEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadMenuTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadMenuTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadMenuEvent(menu, e, component){\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\n\t\t\n\t\tthis.loadMenu(e, component, menu);\n\t}\n\t\n\tloadMenu(e, component, menu, parentEl, parentPopup){\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\n\t\tmenuEl = document.createElement(\"div\"),\n\t\tpopup;\n\t\t\n\t\tmenuEl.classList.add(\"tabulator-menu\");\n\t\t\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t//abort if no menu set\n\t\tif(!menu || !menu.length){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(!parentEl){\n\t\t\tif(this.nestedMenuBlock){\n\t\t\t\t//abort if child menu already open\n\t\t\t\tif(this.rootPopup){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\n\t\t\t\t\tthis.nestedMenuBlock = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\n\t\t\t\n\t\t}else{\n\t\t\tpopup = parentPopup.child(menuEl);\n\t\t}\n\t\t\n\t\tmenu.forEach((item) => {\n\t\t\tvar itemEl = document.createElement(\"div\"),\n\t\t\tlabel = item.label,\n\t\t\tdisabled = item.disabled;\n\t\t\t\n\t\t\tif(item.separator){\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t\t}else{\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\t\t\t\t\n\t\t\t\tif(typeof label == \"function\"){\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(label instanceof Node){\n\t\t\t\t\titemEl.appendChild(label);\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = label;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(typeof disabled == \"function\"){\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(disabled){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(item.action){\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmenuEl.appendChild(itemEl);\n\t\t});\n\t\t\n\t\tmenuEl.addEventListener(\"click\", (e) => {\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\n\t\t\t}\n\t\t});\n\t\t\n\t\tpopup.show(parentEl || e);\n\t\t\n\t\tif(popup === this.rootPopup){\n\t\t\tthis.rootPopup.hideOnBlur(() => {\n\t\t\t\tthis.rootPopup = null;\n\t\t\t\t\n\t\t\t\tif(this.currentComponent){\n\t\t\t\t\tthis.dispatch(\"menu-closed\", menu, popup);\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\n\t\t\t\t\tthis.currentComponent = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.currentComponent = component;\n\t\t\t\n\t\t\tthis.dispatch(\"menu-opened\", menu, popup);\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nMenu.moduleName = \"menu\";\n\nexport default Menu;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating column header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving column\n\t\tthis.toCol = false; //destination column\n\t\tthis.toColAfter = false; //position of moving column relative to the destination column\n\t\tthis.startX = 0; //starting position within header element\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\n\t\tthis.touchMove = false;\n\t\t\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\n\t}\n\t\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.classList.add(\"tabulator-col-placeholder\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.movableColumns){\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"alert-show\", this.abortMove.bind(this));\n\t\t}\n\t}\n\n\tabortMove(){\n\t\tclearTimeout(this.checkTimeout);\n\t}\n\t\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\tcolEl;\n\t\t\n\t\tif(!column.modules.frozen && !column.isGroup){\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tconfig.mousemove = function(e){\n\t\t\t\tif(column.parent === self.moving.parent){\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(self);\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tself.touchMove = false;\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tself.bindTouchEvents(column);\n\t\t}\n\t\t\n\t\tcolumn.modules.moveColumn = config;\n\t}\n\t\n\tbindTouchEvents(column){\n\t\tvar colEl = column.getElement(),\n\t\tstartXMove = false, //shifting center position of the cell\n\t\tnextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\n\t\t\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextCol = column.nextColumn();\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\n\t\t\t\tprevCol = column.prevColumn();\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\n\t\t\t\tnextColWidthLast = 0;\n\t\t\t\tprevColWidthLast = 0;\n\t\t\t\tstartXMove = false;\n\t\t\t\t\n\t\t\t\tthis.startMove(e, column);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\n\t\t\tvar diff, moveToCol;\n\t\t\t\n\t\t\tif(this.moving){\n\t\t\t\tthis.moveHover(e);\n\t\t\t\t\n\t\t\t\tif(!startXMove){\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\n\t\t\t\t\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\n\t\t\t\t\t\tmoveToCol = nextCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\n\t\t\t\t\t\tmoveToCol = prevCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(moveToCol){\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tstartMove(e, column){\n\t\tvar element = column.getElement(),\n\t\theaderElement = this.table.columnManager.getContentsElement(),\n\t\theadersElement = this.table.columnManager.getHeadersElement();\n\t\t\n\t\tthis.moving = column;\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\n\t\t\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\t\t\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t\t\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\t\t\n\t\theaderElement.appendChild(this.hoverElement);\n\t\t\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\n\t\t\n\t\tif(!this.touchMove){\n\t\t\tthis._bindMouseMove();\n\t\t\t\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t\t\n\t\tthis.moveHover(e);\n\t}\n\t\n\t_bindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_unbindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tmoveColumn(column, after){\n\t\tvar movingCells = this.moving.getCells();\n\t\t\n\t\tthis.toCol = column;\n\t\tthis.toColAfter = after;\n\t\t\n\t\tif(after){\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\tendMove(e){\n\t\tif(e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\t\t\t\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\t\t\t\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(this.toCol){\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t\t}\n\t\t\t\n\t\t\tthis.moving = false;\n\t\t\tthis.toCol = false;\n\t\t\tthis.toColAfter = false;\n\t\t\t\n\t\t\tif(!this.touchMove){\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tmoveHover(e){\n\t\tvar columnHolder = this.table.columnManager.getContentsElement(),\n\t\tscrollLeft = columnHolder.scrollLeft,\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\n\t\tscrollPos;\n\t\t\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\n\t\t\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nMoveColumns.moduleName = \"moveColumn\";\n\nexport default MoveColumns;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating row header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving row\n\t\tthis.toRow = false; //destination row\n\t\tthis.toRowAfter = false; //position of moving row relative to the destination row\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\n\t\tthis.startY = 0; //starting Y position within header element\n\t\tthis.startX = 0; //starting X position within header element\n\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\tthis.tableRowDropEvent = false;\n\n\t\tthis.touchMove = false;\n\n\t\tthis.connection = false;\n\t\tthis.connectionSelectorsTables = false;\n\t\tthis.connectionSelectorsElements = false;\n\t\tthis.connectionElements = [];\n\t\tthis.connections = [];\n\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\n\n\t\tthis.registerColumnOption(\"rowHandle\");\n\t}\n\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.classList.add(\"tabulator-row-placeholder\");\n\n\t\treturn el;\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.movableRows){\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeGroupHeader(group){\n\t\tvar self = this,\n\t\tconfig = {};\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, group);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl;\n\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(group, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\tif(rowEl.previousSibling){\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tgroup.modules.moveRow = config;\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\trowEl;\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, row);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(row, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(row, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\n\t\tif(!this.hasHandle){\n\n\t\t\trowEl = row.getElement();\n\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(row, row.getElement());\n\t\t}\n\n\t\trow.modules.moveRow = config;\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tthis.hasHandle = true;\n\t\t}\n\t}\n\n\tinitializeCell(cell){\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tvar self = this,\n\t\t\tcellEl = cell.getElement(true);\n\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, cell.row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\n\t\t}\n\t}\n\n\tbindTouchEvents(row, element){\n\t\tvar startYMove = false, //shifting center position of the cell\n\t\tnextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\n\n\t\telement.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextRow = row.nextRow();\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\n\t\t\t\tprevRow = row.prevRow();\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\n\t\t\t\tnextRowHeightLast = 0;\n\t\t\t\tprevRowHeightLast = 0;\n\t\t\t\tstartYMove = false;\n\n\t\t\t\tthis.startMove(e, row);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\tthis.moving, this.toRow, this.toRowAfter;\n\t\telement.addEventListener(\"touchmove\", (e) => {\n\n\t\t\tvar diff, moveToRow;\n\n\t\t\tif(this.moving){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis.moveHover(e);\n\n\t\t\t\tif(!startYMove){\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t}\n\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\n\t\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\n\t\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(moveToRow){\n\t\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t\tthis.touchMove = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t_bindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\t_unbindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\tstartMove(e, row){\n\t\tvar element = row.getElement();\n\n\t\tthis.setStartPosition(e, row);\n\n\t\tthis.moving = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\t\tif(!this.connection){\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\t\telement.parentNode.removeChild(element);\n\t\t}else{\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\t\tthis.connectToTables(row);\n\t\t}\n\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\t\tif(this.connection){\n\t\t\tdocument.body.appendChild(this.hoverElement);\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t\t}else{\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\n\t\t\tthis._bindMouseMove();\n\t\t}\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\n\n\t\tthis.moveHover(e);\n\t}\n\n\tsetStartPosition(e, row){\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t\telement, position;\n\n\t\telement = row.getElement();\n\t\tif(this.connection){\n\t\t\tposition = element.getBoundingClientRect();\n\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t\t}else{\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\n\t\t}\n\t}\n\n\tendMove(e){\n\t\tif(!e || e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\n\t\t\tif(!this.connection){\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\t}\n\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif(this.toRow){\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\n\t\t\t}\n\n\t\t\tthis.moving = false;\n\t\t\tthis.toRow = false;\n\t\t\tthis.toRowAfter = false;\n\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\t\tif(this.connection){\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\t\tthis.disconnectFromTables();\n\t\t\t}\n\t\t}\n\t}\n\n\tmoveRow(row, after){\n\t\tthis.toRow = row;\n\t\tthis.toRowAfter = after;\n\t}\n\n\tmoveHover(e){\n\t\tif(this.connection){\n\t\t\tthis.moveHoverConnections.call(this, e);\n\t\t}else{\n\t\t\tthis.moveHoverTable.call(this, e);\n\t\t}\n\t}\n\n\tmoveHoverTable(e){\n\t\tvar rowHolder = this.table.rowManager.getElement(),\n\t\tscrollTop = rowHolder.scrollTop,\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop;\n\t\t\n\t\tthis.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + \"px\";\n\t}\n\n\tmoveHoverConnections(e){\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\n\t}\n\n\telementRowDrop(e, element, row){\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\n\t}\n\n\t//establish connection with other tables\n\tconnectToTables(row){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\t\trow:row,\n\t\t\t});\n\t\t}\n\n\t\tif(this.connectionSelectorsElements){\n\n\t\t\tthis.connectionElements = [];\n\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t\t}\n\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\n\t\t\t\tif(typeof query === \"string\"){\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t\t}else{\n\t\t\t\t\tthis.connectionElements.push(query);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.connectionElements.forEach((element) => {\n\t\t\t\tvar dropEvent = (e) => {\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\n\t\t\t\t};\n\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t\t});\n\t\t}\n\t}\n\n\t//disconnect from other tables\n\tdisconnectFromTables(){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t\t}\n\n\t\tthis.connectionElements.forEach((element) => {\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\t\tdelete element.tabulatorElementDropEvent;\n\t\t});\n\t}\n\n\t//accept incomming connection\n\tconnect(table, row){\n\t\tif(!this.connectedTable){\n\t\t\tthis.connectedTable = table;\n\t\t\tthis.connectedRow = row;\n\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\n\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//close incoming connection\n\tdisconnect(table){\n\t\tif(table === this.connectedTable){\n\t\t\tthis.connectedTable = false;\n\t\t\tthis.connectedRow = false;\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t\t}\n\t}\n\n\tdropComplete(table, row, success){\n\t\tvar sender = false;\n\n\t\tif(success){\n\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(sender){\n\t\t\t\tsender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table);\n\t\t\t}else{\n\t\t\t\tif(this.table.options.movableRowsSender){\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}\n\n\t\tthis.endMove();\n\t}\n\n\ttableRowDrop(e, row){\n\t\tvar receiver = false,\n\t\tsuccess = false;\n\n\t\te.stopImmediatePropagation();\n\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\n\t\t\tcase \"string\":\n\t\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(receiver){\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t\t}\n\n\t\tif(success){\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}\n\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\t\trow:row,\n\t\t\tsuccess:success,\n\t\t});\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"connect\":\n\t\t\t\treturn this.connect(table, data.row);\n\n\t\t\tcase \"disconnect\":\n\t\t\t\treturn this.disconnect(table);\n\n\t\t\tcase \"dropcomplete\":\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t}\n\t}\n}\n\nMoveRows.prototype.receivers = {\n\tinsert:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\ttoRow.update(fromRow.getData());\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\treplace:function(fromRow, toRow, fromTable){\n\t\tif(toRow){\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\ttoRow.delete();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n};\n\nMoveRows.prototype.senders = {\n\tdelete:function(fromRow, toRow, toTable){\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.moduleName = \"moveRow\";\n\nexport default MoveRows;","import Module from '../../core/Module.js';\n\nimport defaultMutators from './defaults/mutators.js';\n\nclass Mutator extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of mutation types\n\t\tthis.enabled = true;\n\n\t\tthis.registerColumnOption(\"mutator\");\n\t\tthis.registerColumnOption(\"mutatorParams\");\n\t\tthis.registerColumnOption(\"mutatorData\");\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\n\t\tthis.registerColumnOption(\"mutatorEdit\");\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\n\t\tthis.registerColumnOption(\"mutateLink\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.mutateLink.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\n\t}\n\n\trowDataChanged(row, tempData, updatedData){\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\n\t}\n\n\t//initialize column mutator\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\tmutator;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\n\n\t\t\t\tif(mutator){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\tmutator:mutator,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.mutate = config;\n\t\t}\n\t}\n\n\tlookupMutator(value){\n\t\tvar mutator = false;\n\n\t\t//set column mutator\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Mutator.mutators[value]){\n\t\t\t\t\tmutator = Mutator.mutators[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tmutator = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn mutator;\n\t}\n\n\t//apply mutator to row\n\ttransformRow(data, type, updatedData){\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\tvalue;\n\n\t\tif(this.enabled){\n\n\t\t\tthis.table.columnManager.traverse((column) => {\n\t\t\t\tvar mutator, params, component;\n\n\t\t\t\tif(column.modules.mutate){\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\t\tif(mutator){\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\t\tif((type == \"data\" && !updatedData)|| typeof value !== \"undefined\"){\n\t\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//apply mutator to new cell value\n\ttransformCell(cell, value){\n\t\tif(cell.column.modules.mutate){\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t\t\ttempData = {};\n\n\t\t\tif(mutator){\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\t\t\tcell.column.setFieldValue(tempData, value);\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tmutateLink(cell){\n\t\tvar links = cell.column.definition.mutateLink;\n\n\t\tif(links){\n\t\t\tif(!Array.isArray(links)){\n\t\t\t\tlinks = [links];\n\t\t\t}\n\n\t\t\tlinks.forEach((link) => {\n\t\t\t\tvar linkCell = cell.row.getCell(link);\n\n\t\t\t\tif(linkCell){\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tenable(){\n\t\tthis.enabled = true;\n\t}\n\n\tdisable(){\n\t\tthis.enabled = false;\n\t}\n}\n\nMutator.moduleName = \"mutator\";\n\n//load defaults\nMutator.mutators = defaultMutators;\n\nexport default Mutator;","export default {};","import rows from './pageCounters/rows.js';\nimport pages from './pageCounters/pages.js';\n\n\nexport default {\n\trows:rows,\n\tpages:pages,\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\n\tif(totalRows){\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\n\t\t\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\n\t\t\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(ofEl);\n\t\tel.appendChild(totalEl);\n\t\tel.appendChild(rowsEl);\n\t}else{\n\t\tvalueEl.innerHTML = \" 0 \";\n\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(rowsEl);\n\t}\n\t\n\treturn el;\n}","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\t\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\t\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\t\n\tel.appendChild(showingEl);\n\tel.appendChild(valueEl);\n\tel.appendChild(ofEl);\n\tel.appendChild(totalEl);\n\tel.appendChild(rowsEl);\n\t\n\treturn el;\n}","import Module from '../../core/Module.js';\n\nimport defaultPageCounters from './defaults/pageCounters.js';\n\nclass Page extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.mode = \"local\";\n\t\tthis.progressiveLoad = false;\n\t\t\n\t\tthis.element = null;\n\t\tthis.pageCounterElement = null;\n\t\tthis.pageCounter = null;\n\t\t\n\t\tthis.size = 0;\n\t\tthis.page = 1;\n\t\tthis.count = 5;\n\t\tthis.max = 1;\n\n\t\tthis.remoteRowCountEstimate = null;\n\t\t\n\t\tthis.initialLoad = true;\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\n\t\t\n\t\tthis.pageSizes = [];\n\t\t\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initial page to show on load\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\n\t\t\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\n\t\t\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\n\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad){\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\n\t\t\t\n\t\t\tthis.createElements();\n\t\t\tthis.initializePageCounter();\n\t\t\tthis.initializePaginator();\n\t\t}else if(this.table.options.progressiveLoad){\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\t\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\t\n\trowAddingPosition(row, top){\n\t\tvar rowManager = this.table.rowManager,\n\t\tdisplayRows = rowManager.getDisplayRows(),\n\t\tindex;\n\t\t\n\t\tif(top){\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[0];\n\t\t\t}else{\n\t\t\t\tif(rowManager.activeRows.length){\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[displayRows.length - 1];\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {index, top};\n\t}\n\t\n\tcalculatePageSizes(){\n\t\tvar testElRow, testElCell;\n\t\t\n\t\tif(this.table.options.paginationSize){\n\t\t\tthis.size = this.table.options.paginationSize;\n\t\t}else{\n\t\t\ttestElRow = document.createElement(\"div\");\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\t\ttestElRow.style.visibility = \"hidden\";\n\t\t\t\n\t\t\ttestElCell = document.createElement(\"div\");\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\n\t\t\t\n\t\t\ttestElRow.appendChild(testElCell);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\n\t\t\t\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\n\t\t}\n\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\n\t\t\n\t\tthis.generatePageSizeSelectList();\n\t}\n\t\n\tinitialLoadComplete(){\n\t\tthis.initialLoad = false;\n\t}\n\t\n\tremotePageParams(data, config, silent, params){\n\t\tif(!this.initialLoad){\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\n\t\t\t\tthis.reset(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\t//configure request params\n\t\tparams.page = this.page;\n\t\t\n\t\t//set page size if defined\n\t\tif(this.size){\n\t\t\tparams.size = this.size;\n\t\t}\n\t\t\n\t\treturn params;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetPageToRow(row){\n\t\tif(this.table.options.pagination){\n\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\treturn this.setPageToRow(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Promise.reject();\n\t}\n\t\n\tuserSetPageSize(size){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.setPageSize(size);\n\t\t\treturn this.setPage(1);\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tscrollVertical(top, dir){\n\t\tvar element, diff, margin;\n\t\tif(!dir && !this.table.dataLoader.loading){\n\t\t\telement = this.table.rowManager.getElement();\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\n\t\t\t\n\t\t\tif(diff < margin){\n\t\t\t\tthis.nextPage()\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\n\t\t\t}\n\t\t}\n\t}\n\t\n\trestOnRenderBefore(rows, renderInPosition){\n\t\tif(!renderInPosition){\n\t\t\tif(this.mode === \"local\"){\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(){\n\t\tthis.refreshData(true, \"all\");\n\t}\n\t\n\tcreateElements(){\n\t\tvar button;\n\t\t\n\t\tthis.element = document.createElement(\"span\");\n\t\tthis.element.classList.add(\"tabulator-paginator\");\n\t\t\n\t\tthis.pagesElement = document.createElement(\"span\");\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\t\t\n\t\tbutton = document.createElement(\"button\");\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"\");\n\t\tbutton.setAttribute(\"title\", \"\");\n\t\t\n\t\tthis.firstBut = button.cloneNode(true);\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\t\t\n\t\tthis.prevBut = button.cloneNode(true);\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\t\t\n\t\tthis.nextBut = button.cloneNode(true);\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\t\t\n\t\tthis.lastBut = button.cloneNode(true);\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\t\t\n\t\tif(this.table.options.paginationSizeSelector){\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t\t}\n\t}\n\t\n\tgeneratePageSizeSelectList(){\n\t\tvar pageSizes = [];\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes = [];\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\n\t\t\t\t\t\tpageSizes.push(this.size * i);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t}else{\n\t\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t\t\n\t\t\tpageSizes.forEach((item) => {\n\t\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\t\titemEl.value = item;\n\t\t\t\t\n\t\t\t\tif(item === true){\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\n\t\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = item;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\n\t\t\t});\n\t\t\t\n\t\t\tthis.pageSizeSelect.value = this.size;\n\t\t}\n\t}\n\t\n\tinitializePageCounter(){\n\t\tvar counter = this.table.options.paginationCounter,\n\t\tpageCounter = null;\n\t\t\n\t\tif(counter){\n\t\t\tif(typeof counter === \"function\"){\n\t\t\t\tpageCounter = counter;\n\t\t\t}else{\n\t\t\t\tpageCounter = Page.pageCounters[counter];\n\t\t\t}\n\t\t\t\n\t\t\tif(pageCounter){\n\t\t\t\tthis.pageCounter = pageCounter;\n\t\t\t\t\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup pagination\n\tinitializePaginator(hidden){\n\t\tvar pageSelectLabel, paginationCounterHolder;\n\t\t\n\t\tif(!hidden){\n\t\t\t//build pagination element\n\t\t\t\n\t\t\t//bind localizations\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\n\t\t\t\tthis.firstBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\n\t\t\t\tthis.prevBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\n\t\t\t\tthis.nextBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\n\t\t\t\tthis.lastBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\t//click bindings\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(1);\n\t\t\t});\n\t\t\t\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.previousPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.nextPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(this.max);\n\t\t\t});\n\t\t\t\n\t\t\tif(this.table.options.paginationElement){\n\t\t\t\tthis.element = this.table.options.paginationElement;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.pageSizeSelect){\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\n\t\t\t\t\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\n\t\t\t\t\tthis.setPage(1);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//append to DOM\n\t\t\tthis.element.appendChild(this.firstBut);\n\t\t\tthis.element.appendChild(this.prevBut);\n\t\t\tthis.element.appendChild(this.pagesElement);\n\t\t\tthis.element.appendChild(this.nextBut);\n\t\t\tthis.element.appendChild(this.lastBut);\n\t\t\t\n\t\t\tif(!this.table.options.paginationElement){\n\t\t\t\tif(this.table.options.paginationCounter){\n\n\t\t\t\t\tpaginationCounterHolder; \n\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(paginationCounterHolder){\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.footerAppend(this.pageCounterElement);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.footerAppend(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.page = this.table.options.paginationInitialPage;\n\t\t\tthis.count = this.table.options.paginationButtonCount;\n\t\t}\n\t\t\n\t\t//set default values\n\t\tthis.mode = this.table.options.paginationMode;\n\t}\n\t\n\tinitializeProgressive(mode){\n\t\tthis.initializePaginator(true);\n\t\tthis.mode = \"progressive_\" + mode;\n\t\tthis.progressiveLoad = true;\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"page-changed\");\n\t}\n\t\n\t//calculate maximum page from number of rows\n\tsetMaxRows(rowCount){\n\t\tif(!rowCount){\n\t\t\tthis.max = 1;\n\t\t}else{\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\n\t\t}\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t}\n\t}\n\t\n\t//reset to first page without triggering action\n\treset(force){\n\t\tif(!this.initialLoad){\n\t\t\tif(this.mode == \"local\" || force){\n\t\t\t\tthis.page = 1;\n\t\t\t\tthis.trackChanges();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//set the maximum page\n\tsetMaxPage(max){\n\t\t\n\t\tmax = parseInt(max);\n\t\t\n\t\tthis.max = max || 1;\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t\tthis.trigger();\n\t\t}\n\t}\n\t\n\t//set current page number\n\tsetPage(page){\n\t\tswitch(page){\n\t\t\tcase \"first\":\n\t\t\t\treturn this.setPage(1);\n\t\n\t\t\tcase \"prev\":\n\t\t\t\treturn this.previousPage();\n\t\t\t\n\t\t\tcase \"next\":\n\t\t\t\treturn this.nextPage();\n\t\t\t\n\t\t\tcase \"last\":\n\t\t\t\treturn this.setPage(this.max);\n\t\t}\n\t\t\n\t\tpage = parseInt(page);\n\t\t\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\n\t\t\tthis.page = page;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageToRow(row){\n\t\tvar rows = this.displayRows(-1);\n\t\tvar index = rows.indexOf(row);\n\t\n\t\tif(index > -1){\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\n\t\t\t\n\t\t\treturn this.setPage(page);\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageSize(size){\n\t\tif(size !== true){\n\t\t\tsize = parseInt(size);\n\t\t}\n\n\t\tif(size > 0){\n\t\t\tthis.size = size;\n\t\t\tthis.dispatchExternal(\"pageSizeChanged\", size);\n\t\t}\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t// this.pageSizeSelect.value = size;\n\t\t\tthis.generatePageSizeSelectList();\n\t\t}\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\t_setPageCounter(totalRows, size, currentRow){\n\t\tvar content;\n\t\t\n\t\tif(this.pageCounter){\n\n\t\t\tif(this.mode === \"remote\"){\n\t\t\t\tsize = this.size;\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\n\t\t\t}\n\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\n\t\t\t\n\t\t\tswitch(typeof content){\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif(content instanceof Node){\n\t\t\t\t\t\n\t\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.pageCounterElement.appendChild(content);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\t\n\t\t\t\t\t\tif(content != null){\n\t\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.pageCounterElement.innerHTML = content;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup the pagination buttons\n\t_setPageButtons(){\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\n\t\t\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\n\t\t\n\t\tif(this.page == 1){\n\t\t\tthis.firstBut.disabled = true;\n\t\t\tthis.prevBut.disabled = true;\n\t\t}else{\n\t\t\tthis.firstBut.disabled = false;\n\t\t\tthis.prevBut.disabled = false;\n\t\t}\n\t\t\n\t\tif(this.page == this.max){\n\t\t\tthis.lastBut.disabled = true;\n\t\t\tthis.nextBut.disabled = true;\n\t\t}else{\n\t\t\tthis.lastBut.disabled = false;\n\t\t\tthis.nextBut.disabled = false;\n\t\t}\n\t\t\n\t\tfor(let i = min; i <= max; i++){\n\t\t\tif(i>0 && i <= this.max){\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.footerRedraw();\n\t}\n\t\n\t_generatePageButton(page){\n\t\tvar button = document.createElement(\"button\");\n\t\t\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tif(page == this.page){\n\t\t\tbutton.classList.add(\"active\");\n\t\t}\n\t\t\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\t\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t\t});\n\t\t\n\t\tbutton.setAttribute(\"data-page\", page);\n\t\tbutton.textContent = page;\n\t\t\n\t\tbutton.addEventListener(\"click\", (e) => {\n\t\t\tthis.setPage(page);\n\t\t});\n\t\t\n\t\treturn button;\n\t}\n\t\n\t//previous page\n\tpreviousPage(){\n\t\tif(this.page > 1){\n\t\t\tthis.page--;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//next page\n\tnextPage(){\n\t\tif(this.page < this.max){\n\t\t\tthis.page++;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tif(!this.progressiveLoad){\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\n\t\t\t}\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//return current page number\n\tgetPage(){\n\t\treturn this.page;\n\t}\n\t\n\t//return max page number\n\tgetPageMax(){\n\t\treturn this.max;\n\t}\n\t\n\tgetPageSize(size){\n\t\treturn this.size;\n\t}\n\t\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\t\n\t//return appropriate rows for current page\n\tgetRows(data){\n\t\tvar actualRowPageSize = 0,\n\t\toutput, start, end, actualStartRow;\n\n\t\tvar actualRows = data.filter((row) => {\n\t\t\treturn row.type === \"row\";\n\t\t});\n\t\t\n\t\tif(this.mode == \"local\"){\n\t\t\toutput = [];\n\t\t\t\n\t\t\tthis.setMaxRows(data.length);\n\t\t\t\n\t\t\tif(this.size === true){\n\t\t\t\tstart = 0;\n\t\t\t\tend = data.length;\n\t\t\t}else{\n\t\t\t\tstart = this.size * (this.page - 1);\n\t\t\t\tend = start + parseInt(this.size);\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageButtons();\n\t\t\t\n\t\t\tfor(let i = start; i < end; i++){\n\t\t\t\tlet row = data[i];\n\n\t\t\t\tif(row){\n\t\t\t\t\toutput.push(row);\n\n\t\t\t\t\tif(row.type === \"row\"){\n\t\t\t\t\t\tif(!actualStartRow){\n\t\t\t\t\t\t\tactualStartRow = row;\n\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\tactualRowPageSize++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\n\t\t\t\n\t\t\treturn output;\n\t\t}else{\n\t\t\tthis._setPageButtons();\n\t\t\tthis._setPageCounter(actualRows.length);\n\t\t\t\n\t\t\treturn data.slice(0);\n\t\t}\n\t}\n\t\n\ttrigger(){\n\t\tvar left;\n\t\t\n\t\tswitch(this.mode){\n\t\t\tcase \"local\":\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\n\t\t\t\n\t\t\t\tthis.refreshData();\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\n\t\t\t\treturn Promise.resolve();\n\t\t\t\n\t\t\tcase \"remote\":\n\t\t\t\tthis.dataChanging = true;\n\t\t\t\treturn this.reloadData(null)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.dataChanging = false;\n\t\t\t\t\t});\n\t\t\t\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\treturn this.reloadData(null, true);\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\n\t\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t_parseRemoteData(data){\n\t\tvar margin;\n\t\t\n\t\tif(typeof data.last_page === \"undefined\"){\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\n\t\t}\n\t\t\n\t\tif(data.data){\n\t\t\tthis.max = parseInt(data.last_page) || 1;\n\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\n\t\t\t\n\t\t\tif(this.progressiveLoad){\n\t\t\t\tswitch(this.mode){\n\t\t\t\t\tcase \"progressive_load\":\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page == 1){\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\n\t\t\t\t\t\n\t\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\n\t\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\n\t\t}\n\t\t\n\t\treturn data.data;\n\t}\n\t\n\t//handle the footer element being redrawn\n\tfooterRedraw(){\n\t\tvar footer = this.table.footerManager.containerElement;\n\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}else{\n\t\t\tthis.pagesElement.style.display = '';\n\t\t\t\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\t\tthis.pagesElement.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n}\n\nPage.moduleName = \"page\";\n\n//load defaults\nPage.pageCounters = defaultPageCounters;\n\nexport default Page;\n","// read persistance information from storage\nexport default {\n\tlocal:function(id, type){\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie:function(id, type){\n\t\tvar cookie = document.cookie,\n\t\tkey = id + \"-\" + type,\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\n\t\tend, data;\n\n\t\t//if cookie exists, decode and load column data into tabulator\n\t\tif(cookiePos > -1){\n\t\t\tcookie = cookie.slice(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif(end > -1){\n\t\t\t\tcookie = cookie.slice(0, end);\n\t\t\t}\n\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t}\n\n\t\treturn data ? JSON.parse(data) : false;\n\t}\n};\n","//write persistence information to storage\nexport default {\n\tlocal:function(id, type, data){\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie:function(id, type, data){\n\t\tvar expireDate = new Date();\n\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t}\n};","import Module from '../../core/Module.js';\n\nimport defaultReaders from './defaults/readers.js';\nimport defaultWriters from './defaults/writers.js';\n\nclass Persistence extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = \"\";\n\t\tthis.id = \"\";\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\t\tthis.defWatcherBlock = false;\n\t\tthis.config = {};\n\t\tthis.readFunc = false;\n\t\tthis.writeFunc = false;\n\n\t\tthis.registerTableOption(\"persistence\", false);\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\n\t}\n\n\t// Test for whether localStorage is available for use.\n\tlocalStorageTest() {\n\t\tvar testKey = \"_tabulator_test\";\n\n\t\ttry {\n\t\t\twindow.localStorage.setItem( testKey, testKey);\n\t\t\twindow.localStorage.removeItem( testKey );\n\t\t\treturn true;\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//setup parameters\n\tinitialize(){\n\t\tif(this.table.options.persistence){\n\t\t\t//determine persistent layout storage type\n\t\t\tvar mode = this.table.options.persistenceMode,\n\t\t\tid = this.table.options.persistenceID,\n\t\t\tretrievedData;\n\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\n\n\t\t\tif(this.table.options.persistenceReaderFunc){\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.readers[this.mode]){\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.table.options.persistenceWriterFunc){\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.writers[this.mode]){\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//set storage tag\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\n\n\t\t\tthis.config = {\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\t\t\theaderFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter,\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\n\t\t\t};\n\n\t\t\t//load pagination data if needed\n\t\t\tif(this.config.page){\n\t\t\t\tretrievedData = this.retrieveData(\"page\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.paginationInitialPage;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//load group data if needed\n\t\t\tif(this.config.group){\n\t\t\t\tretrievedData = this.retrieveData(\"group\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.groupHeader;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.config.columns){\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\n\t\t\t}\n\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\n\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"headerFilter\"));\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"column-width\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\n\t\t}\n\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\n\t}\n\n\teventSave(type){\n\t\tif(this.config[type]){\n\t\t\tthis.save(type);\n\t\t}\n\t}\n\n\ttableBuilt(){\n\t\tvar sorters, filters, headerFilters;\n\n\t\tif(this.config.sort){\n\t\t\tsorters = this.load(\"sort\");\n\n\t\t\tif(!sorters === false){\n\t\t\t\tthis.table.options.initialSort = sorters;\n\t\t\t}\n\t\t}\n\n\t\tif(this.config.filter){\n\t\t\tfilters = this.load(\"filter\");\n\n\t\t\tif(!filters === false){\n\t\t\t\tthis.table.options.initialFilter = filters;\n\t\t\t}\n\t\t}\n\t\tif(this.config.headerFilter){\n\t\t\theaderFilters = this.load(\"headerFilter\");\n\n\t\t\tif(!headerFilters === false){\n\t\t\t\tthis.table.options.initialHeaderFilter = headerFilters;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\ttableRedraw(force){\n\t\tif(force && this.config.columns){\n\t\t\tthis.save(\"columns\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tgetColumnLayout(){\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\n\t}\n\n\tsetColumnLayout(layout){\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true));\n\t\treturn true;\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumn(column){\n\t\tvar def, keys;\n\n\t\tif(this.config.columns){\n\t\t\tthis.defWatcherBlock = true;\n\n\t\t\tdef = column.getDefinition();\n\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\t\tkeys.forEach((key)=>{\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\t\tvar value = def[key];\n\n\t\t\t\tif(props){\n\t\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\t\tset: (newValue) => {\n\t\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(props.set){\n\t\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget:() => {\n\t\t\t\t\t\t\tif(props.get){\n\t\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.defWatcherBlock = false;\n\t\t}\n\t}\n\n\t//load saved definitions\n\tload(type, current){\n\t\tvar data = this.retrieveData(type);\n\n\t\tif(current){\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//retrieve data from memory\n\tretrieveData(type){\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n\t}\n\n\t//merge old and new column definitions\n\tmergeDefinition(oldCols, newCols, mergeAllNew){\n\t\tvar output = [];\n\n\t\tnewCols = newCols || [];\n\n\t\tnewCols.forEach((column, to) => {\n\t\t\tvar from = this._findColumn(oldCols, column),\n\t\t\tkeys;\n\n\t\t\tif(from){\n\t\t\t\tif(mergeAllNew){\n\t\t\t\t\tkeys = Object.keys(column);\n\t\t\t\t}else if(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(from);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\n\t\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(from.columns){\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\n\t\t\t\t}\n\n\t\t\t\toutput.push(from);\n\t\t\t}\n\t\t});\n\n\t\toldCols.forEach((column, i) => {\n\t\t\tvar from = this._findColumn(newCols, column);\n\n\t\t\tif (!from) {\n\t\t\t\tif(output.length>i){\n\t\t\t\t\toutput.splice(i, 0, column);\n\t\t\t\t}else{\n\t\t\t\t\toutput.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//find matching columns\n\t_findColumn(columns, subject){\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\n\n\t\treturn columns.find(function(col){\n\t\t\tswitch(type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\n\t\t\t\tcase \"field\":\n\t\t\t\t\treturn col.field === subject.field;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\treturn col === subject;\n\t\t\t}\n\t\t});\n\t}\n\n\t//save data\n\tsave(type){\n\t\tvar data = {};\n\n\t\tswitch(type){\n\t\t\tcase \"columns\":\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\t\tbreak;\n\n\t\t\tcase \"filter\":\n\t\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"headerFilter\":\n\t\t\t\tdata = this.table.modules.filter.getHeaderFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"sort\":\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tdata = this.getGroupConfig();\n\t\t\t\tbreak;\n\n\t\t\tcase \"page\":\n\t\t\t\tdata = this.getPageConfig();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(this.writeFunc){\n\t\t\tthis.writeFunc(this.id, type, data);\n\t\t}\n\n\t}\n\n\t//ensure sorters contain no function data\n\tvalidateSorters(data){\n\t\tdata.forEach(function(item){\n\t\t\titem.column = item.field;\n\t\t\tdelete item.field;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetGroupConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.group){\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tgetPageConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.page){\n\t\t\tif(this.config.page === true || this.config.page.size){\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t\t}\n\n\t\t\tif(this.config.page === true || this.config.page.page){\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\n\t//parse columns for data to store\n\tparseColumns(columns){\n\t\tvar definitions = [],\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\t\tcolumns.forEach((column) => {\n\t\t\tvar defStore = {},\n\t\t\tcolDef = column.getDefinition(),\n\t\t\tkeys;\n\n\t\t\tif(column.isGroup){\n\t\t\t\tdefStore.title = colDef.title;\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\n\t\t\t}else{\n\t\t\t\tdefStore.field = column.getField();\n\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t\tkeys.push(\"visible\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tswitch(key){\n\t\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdefinitions.push(defStore);\n\t\t});\n\n\t\treturn definitions;\n\t}\n}\n\nPersistence.moduleName = \"persistence\";\n\nPersistence.moduleInitOrder = -10;\n\n//load defaults\nPersistence.readers = defaultReaders;\nPersistence.writers = defaultWriters;\n\nexport default Persistence;","import Module from '../../core/Module.js';\n\nclass Popup extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\n\t\tthis.registerTableOption(\"rowDblClickPopup\", false);\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\n\t\tthis.registerTableOption(\"groupDblClickPopup\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextPopup\");\n\t\tthis.registerColumnOption(\"headerClickPopup\");\n\t\tthis.registerColumnOption(\"headerDblClickPopup\");\n\t\tthis.registerColumnOption(\"headerPopup\");\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\n\t\tthis.registerColumnOption(\"contextPopup\");\n\t\tthis.registerColumnOption(\"clickPopup\");\n\t\tthis.registerColumnOption(\"dblClickPopup\");\n\n\t\tthis.registerComponentFunction(\"cell\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"group\", \"popup\", this._componentPopupCall.bind(this));\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\t_componentPopupCall(component, contents, position){\n\t\tthis.loadPopupEvent(contents, null, component, position);\n\t}\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextPopup){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickPopup){\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\n\t\t}\n\n\t\tif(this.table.options.rowDblClickPopup){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextPopup){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickPopup){\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\n\t\t}\n\n\t\tif(this.table.options.groupDblClickPopup){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\n\t\t\n\t\t\n\t\t}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){\n\t\t\tthis.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerDblClickPopup\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickPopup);\n\t\t}\n\t\t\n\t\tif(def.headerPopup){\n\t\t\tthis.initializeColumnHeaderPopup(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\n\t\t}\n\n\t\tif(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){\n\t\t\tthis.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, \"dblClickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.dblClickPopup);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderPopup(column){\n\t\tvar icon = column.definition.headerPopupIcon,\n\t\theaderPopupEl;\n\t\t\n\t\theaderPopupEl = document.createElement(\"span\");\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\n\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderPopupEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderPopupEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadPopupTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadPopupTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadPopupEvent(contents, e, component, position){\n\t\tvar renderedCallback;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\n\t\t\n\t\tthis.loadPopup(e, component, contents, renderedCallback, position);\n\t}\n\t\n\tloadPopup(e, component, contents, renderedCallback, position){\n\t\tvar touch = !(e instanceof MouseEvent),\n\t\tcontentsEl, popup;\n\t\t\n\t\tif(contents instanceof HTMLElement){\n\t\t\tcontentsEl = contents;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\tcontentsEl.innerHTML = contents;\n\t\t}\n\t\t\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\n\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tpopup = this.popup(contentsEl);\n\n\t\tif(typeof renderedCallback === \"function\"){\n\t\t\tpopup.renderCallback(renderedCallback);\n\t\t}\n\n\t\tif(e){\n\t\t\tpopup.show(e);\n\t\t}else{\n\t\t\tpopup.show(component.getElement(), position || \"center\");\n\t\t}\n\n\t\t\n\t\tpopup.hideOnBlur(() => {\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\n\t\t});\n\n\n\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\n\t}\n}\n\nPopup.moduleName = \"popup\";\n\nexport default Popup;\n","import Module from '../../core/Module.js';\n\nclass Print extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.element = false;\n\t\tthis.manualBlock = false;\n\t\tthis.beforeprintEventHandler = null;\n\t\tthis.afterprintEventHandler = null;\n\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\n\n\t\tthis.registerColumnOption(\"print\");\n\t\tthis.registerColumnOption(\"titlePrint\");\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\tthis.beforeprintEventHandler = this.replaceTable.bind(this);\n\t\t\tthis.afterprintEventHandler = this.cleanup.bind(this);\n\n\t\t\twindow.addEventListener(\"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.addEventListener(\"afterprint\", this.afterprintEventHandler);\n\t\t\tthis.subscribe(\"table-destroy\", this.destroy.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\n\t}\n\n\tdestroy(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\twindow.removeEventListener( \"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.removeEventListener( \"afterprint\", this.afterprintEventHandler );\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\treplaceTable(){\n\t\tif(!this.manualBlock){\n\t\t\tthis.element = document.createElement(\"div\");\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\t\tthis.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\t\tthis.table.element.style.display = \"none\";\n\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t\t}\n\t}\n\n\tcleanup(){\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\t\tif(this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\tthis.table.element.style.display = \"\";\n\t\t}\n\t}\n\n\tprintFullscreen(visible, style, config){\n\t\tvar scrollX = window.scrollX,\n\t\tscrollY = window.scrollY,\n\t\theaderEl = document.createElement(\"div\"),\n\t\tfooterEl = document.createElement(\"div\"),\n\t\ttableEl = this.table.modules.export.generateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\n\t\theaderContent, footerContent;\n\n\t\tthis.manualBlock = true;\n\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\t\tif(this.table.options.printHeader){\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\t\tif(typeof headerContent == \"string\"){\n\t\t\t\theaderEl.innerHTML = headerContent;\n\t\t\t}else{\n\t\t\t\theaderEl.appendChild(headerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(headerEl);\n\t\t}\n\n\t\tthis.element.appendChild(tableEl);\n\n\t\tif(this.table.options.printFooter){\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\n\t\t\tif(typeof footerContent == \"string\"){\n\t\t\t\tfooterEl.innerHTML = footerContent;\n\t\t\t}else{\n\t\t\t\tfooterEl.appendChild(footerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(footerEl);\n\t\t}\n\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\t\tdocument.body.appendChild(this.element);\n\n\t\tif(this.table.options.printFormatter){\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t\t}\n\n\t\twindow.print();\n\n\t\tthis.cleanup();\n\n\t\twindow.scrollTo(scrollX, scrollY);\n\n\t\tthis.manualBlock = false;\n\t}\n}\n\nPrint.moduleName = \"print\";\n\nexport default Print;","import Module from '../../core/Module.js';\n\nclass ReactiveData extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.data = false;\n\t\tthis.blocked = false; //block reactivity while performing update\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\t\tthis.currentVersion = 0;\n\t\t\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.reactiveData){\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\n\t\t}\n\t}\n\t\n\twatchData(data){\n\t\tvar self = this,\n\t\tversion;\n\t\t\n\t\tthis.currentVersion ++;\n\t\t\n\t\tversion = this.currentVersion;\n\t\t\n\t\tthis.unwatchData();\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\t//override array push function\n\t\tthis.origFuncs.push = data.push;\n\t\t\n\t\tObject.defineProperty(this.data, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\t\n\t\t\t\t\tself.block(\"data-push\");\n\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.push.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-push\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array unshift function\n\t\tthis.origFuncs.unshift = data.unshift;\n\t\t\n\t\tObject.defineProperty(this.data, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-unshift\");\n\t\t\t\t\t\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.unshift.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-unshift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array shift function\n\t\tthis.origFuncs.shift = data.shift;\n\t\t\n\t\tObject.defineProperty(this.data, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-shift\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.shift.call(data);\n\n\t\t\t\t\tself.unblock(\"data-shift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array pop function\n\t\tthis.origFuncs.pop = data.pop;\n\t\t\n\t\tObject.defineProperty(this.data, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-pop\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.pop.call(data);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-pop\");\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array splice function\n\t\tthis.origFuncs.splice = data.splice;\n\t\t\n\t\tObject.defineProperty(this.data, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t\tend = args[1],\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\n\t\t\t\tstartRow, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-splice\");\n\t\t\t\t\t//add new rows\n\t\t\t\t\tif(newRows){\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(startRow){\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//delete removed rows\n\t\t\t\t\tif(end !== 0){\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\t\t\t\t\t\t\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(newRows || end !== 0){\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.splice.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-splice\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result ;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchData(){\n\t\tif(this.data !== false){\n\t\t\tfor(var key in this.origFuncs){\n\t\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable:true,\n\t\t\t\t\twritable:true,\n\t\t\t\t\tvalue: this.origFuncs.key,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\twatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tthis.watchKey(row, data, key);\n\t\t}\n\t\t\n\t\tif(this.table.options.dataTree){\n\t\t\tthis.watchTreeChildren(row);\n\t\t}\n\t}\n\t\n\twatchTreeChildren (row){\n\t\tvar self = this,\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\n\t\torigFuncs = {};\n\t\t\n\t\tif(childField){\n\t\t\t\n\t\t\torigFuncs.push = childField.push;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"push\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-push\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-push\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.unshift = childField.unshift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-unshift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-unshift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.shift = childField.shift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-shift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.shift.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-shift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.pop = childField.pop;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-pop\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.pop.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-pop\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.splice = childField.splice;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-splice\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-splice\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trebuildTree(row){\n\t\tthis.table.modules.dataTree.initializeRow(row);\n\t\tthis.table.modules.dataTree.layoutRow(row);\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\t\n\twatchKey(row, data, key){\n\t\tvar self = this,\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\n\t\tvalue = data[key],\n\t\tversion = this.currentVersion;\n\t\t\n\t\tObject.defineProperty(data, key, {\n\t\t\tset: (newValue) => {\n\t\t\t\tvalue = newValue;\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"key\");\n\t\t\t\t\t\n\t\t\t\t\tvar update = {};\n\t\t\t\t\tupdate[key] = newValue;\n\t\t\t\t\trow.updateData(update);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"key\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(props.set){\n\t\t\t\t\tprops.set(newValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\tget:() => {\n\t\t\t\t\n\t\t\t\tif(props.get){\n\t\t\t\t\tprops.get();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn value;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tObject.defineProperty(data, key, {\n\t\t\t\tvalue:data[key],\n\t\t\t});\n\t\t}\n\t}\n\t\n\tblock(key){\n\t\tif(!this.blocked){\n\t\t\tthis.blocked = key;\n\t\t}\n\t}\n\t\n\tunblock(key){\n\t\tif(this.blocked === key){\n\t\t\tthis.blocked = false;\n\t\t}\n\t}\n}\n\nReactiveData.moduleName = \"reactiveData\";\n\nexport default ReactiveData;\n\n\n\n","import Module from '../../core/Module.js';\n\nclass ResizeColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.startColumn = false;\n\t\tthis.startX = false;\n\t\tthis.startWidth = false;\n\t\tthis.latestX = false;\n\t\tthis.handle = null;\n\t\tthis.initialNextColumn = null;\n\t\tthis.nextColumn = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.registerColumnOption(\"resizable\", true);\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\n\t}\n\t\n\tinitializeEventWatchers(){\n\t\tif(!this.initialized){\n\t\t\t\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t\n\tlayoutCellHandles(cell){\n\t\tif(cell.row.type === \"row\"){\n\t\t\tthis.deInitializeComponent(cell);\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\n\t\t}\n\t}\n\t\n\tlayoutColumnHeader(column){\n\t\tif(column.definition.resizable){\n\t\t\tthis.initializeEventWatchers();\n\t\t\tthis.deInitializeComponent(column);\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\n\t\t}\n\t}\n\t\n\tcolumnLayoutUpdated(column){\n\t\tvar prev = column.prevColumn();\n\t\t\n\t\tthis.reinitializeColumn(column);\n\t\t\n\t\tif(prev){\n\t\t\tthis.reinitializeColumn(prev);\n\t\t}\n\t}\n\t\n\tcolumnWidthUpdated(column){\n\t\tif(column.modules.frozen){\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfrozenColumnOffset(column){\n\t\tvar offset = false;\n\n\t\tif(column.modules.frozen){\n\t\t\toffset = column.modules.frozen.marginValue; \n\n\t\t\tif(column.modules.frozen.position === \"left\"){\n\t\t\t\toffset += column.getWidth() - 3;\n\t\t\t}else{\n\t\t\t\tif(offset){\n\t\t\t\t\toffset -= 3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn offset !== false ? offset + \"px\" : false;\n\t}\n\t\n\treinitializeColumn(column){\n\t\tvar frozenOffset = this.frozenColumnOffset(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\n\t\t\t\tif(frozenOffset){\n\t\t\t\t\tcell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t\t\tcell.modules.resize.handleEl.style[\"z-index\"] = 11;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\n\t\t\tif(frozenOffset){\n\t\t\t\tcolumn.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\n\t\t}\n\t}\n\t\n\tinitializeColumn(type, component, column, element){\n\t\tvar self = this,\n\t\tvariableHeight = false,\n\t\tmode = column.definition.resizable,\n\t\tconfig = {},\n\t\tnearestColumn = column.getLastColumn();\n\t\t\n\t\t//set column resize mode\n\t\tif(type === \"header\"){\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\t\tconfig = {variableHeight:variableHeight};\n\t\t}\n\t\t\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\n\t\t\t\n\t\t\tvar handle = document.createElement('span');\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\n\t\t\t\n\t\t\thandle.addEventListener(\"click\", function(e){\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t\n\t\t\tvar handleDown = function(e){\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t};\n\t\t\t\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\t\t\t\n\t\t\t//resize column on double click\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\n\t\t\t\t\n\t\t\t\te.stopPropagation();\n\t\t\t\tnearestColumn.reinitializeWidth(true);\n\t\t\t\t\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(column.modules.frozen){\n\t\t\t\thandle.style.position = \"sticky\";\n\t\t\t\thandle.style[column.modules.frozen.position] = this.frozenColumnOffset(column);\n\t\t\t}\n\t\t\t\n\t\t\tconfig.handleEl = handle;\n\t\t\t\n\t\t\tif(element.parentNode && column.visible){\n\t\t\t\telement.after(handle);\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tcomponent.modules.resize = config;\n\t}\n\t\n\tdeInitializeColumn(column){\n\t\tthis.deInitializeComponent(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tthis.deInitializeComponent(cell);\n\t\t});\n\t}\n\t\n\tdeInitializeComponent(component){\n\t\tvar handleEl;\n\t\t\n\t\tif(component.modules.resize){\n\t\t\thandleEl = component.modules.resize.handleEl;\n\t\t\t\n\t\t\tif(handleEl && handleEl.parentElement){\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tresizeHandle(component, height){\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\n\t\t}\n\t}\n\t\n\t_checkResizability(column){\n\t\treturn column.definition.resizable;\n\t}\n\t\n\t_mouseDown(e, column, handle){\n\t\tvar self = this;\n\t\t\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tfunction mouseMove(e){\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\n\t\t\tstartDiff = x - self.startX,\n\t\t\tmoveDiff = x - self.latestX,\n\t\t\tblockedBefore, blockedAfter;\n\t\t\t\n\t\t\tself.latestX = x;\n\t\t\t\n\t\t\tif(self.table.rtl){\n\t\t\t\tstartDiff = -startDiff;\n\t\t\t\tmoveDiff = -moveDiff;\n\t\t\t}\n\t\t\t\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\n\t\t\t\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tif(moveDiff < 0){\n\t\t\t\tself.nextColumn = self.initialNextColumn;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\n\t\t\t\t\n\t\t\t\tif(moveDiff > 0){\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(self.nextColumn){\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.table.columnManager.rerenderColumns(true);\n\t\t\t\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction mouseUp(e){\n\t\t\t\n\t\t\t//block editor from taking action while resizing is taking place\n\t\t\tif(self.startColumn.modules.edit){\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\t\t\t\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\t\t\t\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(self.startWidth !== column.getWidth()){\n\t\t\t\tself.table.columnManager.verticalAlignHeaders();\n\n\t\t\t\tself.dispatch(\"column-resized\", column);\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\n\t\t\t}\n\t\t}\n\t\t\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\t\t\n\t\t//block editor from taking action while resizing is taking place\n\t\tif(self.startColumn.modules.edit){\n\t\t\tself.startColumn.modules.edit.blocked = true;\n\t\t}\n\t\t\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\t\tself.latestX = self.startX;\n\t\tself.startWidth = column.getWidth();\n\t\t\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeColumns.moduleName = \"resizeColumns\";\n\nexport default ResizeColumns;","import Module from '../../core/Module.js';\n\nclass ResizeRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.startColumn = false;\n\t\tthis.startY = false;\n\t\tthis.startHeight = false;\n\t\tthis.handle = null;\n\t\tthis.prevHandle = null;\n\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.resizableRows){\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\trowEl = row.getElement();\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-row-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function(e){\n\t\t\tself.startRow = row;\n\t\t\tself._mouseDown(e, row, handle);\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\n\t\tprevHandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function(e){\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\t\tif(prevRow){\n\t\t\t\tself.startRow = prevRow;\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\n\n\t\trowEl.appendChild(handle);\n\t\trowEl.appendChild(prevHandle);\n\t}\n\n\t_mouseDown(e, row, handle){\n\t\tvar self = this;\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e){\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t\t}\n\n\t\tfunction mouseUp(e){\n\n\t\t\t// //block editor from taking action while resizing is taking place\n\t\t\t// if(self.startColumn.modules.edit){\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t\t// }\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\n\t\t}\n\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\n\t\t//block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = true;\n\t\t// }\n\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\t\tself.startHeight = row.getHeight();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeRows.moduleName = \"resizeRows\";\n\nexport default ResizeRows;","import Module from '../../core/Module.js';\n\nclass ResizeTable extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.binding = false;\n\t\tthis.visibilityObserver = false;\n\t\tthis.resizeObserver = false;\n\t\tthis.containerObserver = false;\n\t\t\n\t\tthis.tableHeight = 0;\n\t\tthis.tableWidth = 0;\n\t\tthis.containerHeight = 0;\n\t\tthis.containerWidth = 0;\n\t\t\n\t\tthis.autoResize = false;\n\t\t\n\t\tthis.visible = false;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.initialRedraw = false;\n\t\t\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.autoResize){\n\t\t\tvar table = this.table,\n\t\t\ttableStyle;\n\t\t\t\n\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\n\t\t\tif(table.element.parentNode){\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\n\t\t\t\t\n\t\t\t\tthis.initializeVisibilityObserver();\n\t\t\t\t\n\t\t\t\tthis.autoResize = true;\n\t\t\t\t\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(table.element.parentNode){\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.resizeObserver.observe(table.element);\n\t\t\t\t\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\n\t\t\t\t\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.binding = function(){\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t\t}\n\t}\n\t\n\tinitializeVisibilityObserver(){\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\n\t\t\tthis.visible = entries[0].isIntersecting;\n\t\t\t\n\t\t\tif(!this.initialized){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.initialRedraw = !this.visible;\n\t\t\t}else{\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.redrawTable(this.initialRedraw);\n\t\t\t\t\tthis.initialRedraw = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.visibilityObserver.observe(this.table.element);\n\t}\n\t\n\tredrawTable(force){\n\t\tif(this.initialized && this.visible){\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\t\t\tthis.table.redraw(force);\n\t\t}\n\t}\n\t\n\ttableResized(){\n\t\tthis.table.rowManager.redraw();\n\t}\n\t\n\tclearBindings(){\n\t\tif(this.binding){\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\n\t\t}\n\t\t\n\t\tif(this.resizeObserver){\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.visibilityObserver){\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.containerObserver){\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t\t}\n\t}\n}\n\nResizeTable.moduleName = \"resizeTable\";\n\nexport default ResizeTable;","import Module from '../../core/Module.js';\n\nclass ResponsiveLayout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.columns = [];\n\t\tthis.hiddenColumns = [];\n\t\tthis.mode = \"\";\n\t\tthis.index = 0;\n\t\tthis.collapseFormatter = [];\n\t\tthis.collapseStartOpen = true;\n\t\tthis.collapseHandleColumn = false;\n\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\n\n\t\tthis.registerColumnOption(\"responsive\");\n\t}\n\n\t//generate responsive columns list\n\tinitialize(){\n\t\tif(this.table.options.responsiveLayout){\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\n\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.generateCollapsedRowContent.bind(this));\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\ttableRedraw(force){\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\n\t\t\tif(!force){\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeResponsivity(){\n\t\tvar columns = [];\n\n\t\tthis.mode = this.table.options.responsiveLayout;\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\t\tthis.hiddenColumns = [];\n\n\t\t//determine level of responsivity for each column\n\t\tthis.table.columnManager.columnsByIndex.forEach((column, i) => {\n\t\t\tif(column.modules.responsive){\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\n\t\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\t\tcolumns.push(column);\n\n\t\t\t\t\tif(!column.visible && this.mode === \"collapse\"){\n\t\t\t\t\t\tthis.hiddenColumns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//sort list by responsivity\n\t\tcolumns = columns.reverse();\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\n\t\t});\n\n\t\tthis.columns = columns;\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.generateCollapsedContent();\n\t\t}\n\n\t\t//assign collapse column\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\n\t\t\t\tthis.collapseHandleColumn = col;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif(this.collapseHandleColumn){\n\t\t\tif(this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}else{\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//define layout information\n\tinitializeColumn(column){\n\t\tvar def = column.getDefinition();\n\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\n\t}\n\n\tinitializeRow(row){\n\t\tvar el;\n\n\t\tif(row.type !== \"calc\"){\n\t\t\tel = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\t\trow.modules.responsiveLayout = {\n\t\t\t\telement:el,\n\t\t\t\topen:this.collapseStartOpen,\n\t\t\t};\n\n\t\t\tif(!this.collapseStartOpen){\n\t\t\t\tel.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tlayoutRow(row){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t}\n\t}\n\n\t//update column visibility\n\tupdateColumnVisibility(column, responsiveToggle){\n\t\tif(!responsiveToggle && column.modules.responsive){\n\t\t\tcolumn.modules.responsive.visible = column.visible;\n\t\t\tthis.initializeResponsivity();\n\t\t}\n\t}\n\n\thideColumn(column){\n\t\tvar colCount = this.hiddenColumns.length;\n\n\t\tcolumn.hide(false, true);\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.hiddenColumns.unshift(column);\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !colCount){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tshowColumn(column){\n\t\tvar index;\n\n\t\tcolumn.show(false, true);\n\t\t//set column width to prevent calculation loops on uninitialized columns\n\t\tcolumn.setWidth(column.getWidth());\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t\t}\n\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//redraw columns to fit space\n\tupdate(){\n\t\tvar working = true;\n\n\t\twhile(working){\n\n\t\t\tlet width = this.table.modules.layout.getMode() == \"fitColumns\" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth();\n\n\t\t\tlet diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width;\n\n\t\t\tif(diff < 0){\n\t\t\t\t//table is too wide\n\t\t\t\tlet column = this.columns[this.index];\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.hideColumn(column);\n\t\t\t\t\tthis.index ++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\t//table has spare space\n\t\t\t\tlet column = this.columns[this.index -1];\n\n\t\t\t\tif(column){\n\t\t\t\t\tif(diff > 0){\n\t\t\t\t\t\tif(diff >= column.getWidth()){\n\t\t\t\t\t\t\tthis.showColumn(column);\n\t\t\t\t\t\t\tthis.index --;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tworking = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!this.table.rowManager.activeRowsCount){\n\t\t\t\tthis.table.rowManager.renderEmptyScroll();\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedContent(){\n\t\tvar rows = this.table.rowManager.getDisplayRows();\n\n\t\trows.forEach((row) => {\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t});\n\t}\n\n\tgenerateCollapsedRowContent(row){\n\t\tvar el, contents;\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\tel = row.modules.responsiveLayout.element;\n\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\n\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\t\tif(contents){\n\t\t\t\tel.appendChild(contents);\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedRowData(row){\n\t\tvar data = row.getData(),\n\t\toutput = [],\n\t\tmockCellComponent;\n\n\t\tthis.hiddenColumns.forEach((column) => {\n\t\t\tvar value = column.getFieldValue(data);\n\n\t\t\tif(column.definition.title && column.field){\n\t\t\t\tif(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){\n\n\t\t\t\t\tmockCellComponent = {\n\t\t\t\t\t\tvalue:false,\n\t\t\t\t\t\tdata:{},\n\t\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\tfunction onRendered(callback){\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tformatCollapsedData(data){\n\t\tvar list = document.createElement(\"table\");\n\n\t\tdata.forEach(function(item){\n\t\t\tvar row = document.createElement(\"tr\");\n\t\t\tvar titleData = document.createElement(\"td\");\n\t\t\tvar valueData = document.createElement(\"td\");\n\t\t\tvar node_content;\n\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\t\ttitleData.appendChild(titleHighlight);\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\n\t\t\t\ttitleHighlight.innerHTML = text || item.title;\n\t\t\t});\n\n\t\t\tif(item.value instanceof Node){\n\t\t\t\tnode_content = document.createElement(\"div\");\n\t\t\t\tnode_content.appendChild(item.value);\n\t\t\t\tvalueData.appendChild(node_content);\n\t\t\t}else{\n\t\t\t\tvalueData.innerHTML = item.value;\n\t\t\t}\n\n\t\t\trow.appendChild(titleData);\n\t\t\trow.appendChild(valueData);\n\t\t\tlist.appendChild(row);\n\t\t}, this);\n\n\t\treturn Object.keys(data).length ? list : \"\";\n\t}\n}\n\nResponsiveLayout.moduleName = \"responsiveLayout\";\n\nexport default ResponsiveLayout;\n","import Module from '../../core/Module.js';\n\nclass SelectRow extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = false; //flag selecting in progress\n\t\tthis.lastClickedRow = false; //last clicked row\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\t\tthis.selectedRows = []; //hold selected rows\n\t\tthis.headerCheckboxElement = null; // hold header select element\n\t\t\n\t\tthis.registerTableOption(\"selectableRows\", \"highlight\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRangeMode\", \"drag\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\n\t\tthis.registerTableOption(\"selectableRowsPersistence\", true); // maintain selection when table view is updated\n\t\tthis.registerTableOption(\"selectableRowsCheck\", function(data, row){return true;}); //check whether row is selectable\n\t\t\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\n\t}\n\t\n\tinitialize(){\n\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tif(this.table.options.selectableRows === \"highlight\" && this.table.options.selectableRange){\n\t\t\tthis.table.options.selectableRows = false;\n\t\t}\n\n\t\tif(this.table.options.selectableRows !== false){\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"selectable\", \"selectableRows\", true);\n\t\tthis.deprecationCheck(\"selectableRollingSelection\", \"selectableRowsRollingSelection\", true);\n\t\tthis.deprecationCheck(\"selectableRangeMode\", \"selectableRowsRangeMode\", true);\n\t\tthis.deprecationCheck(\"selectablePersistence\", \"selectableRowsPersistence\", true);\n\t\tthis.deprecationCheck(\"selectableCheck\", \"selectableRowsCheck\", true);\n\t}\n\t\n\trowRetrieve(type, prevValue){\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\n\t}\n\t\n\trowDeleted(row){\n\t\tthis._deselectRow(row, true);\n\t}\n\t\n\tclearSelectionData(silent){\n\t\tvar prevSelected = this.selectedRows.length;\n\n\t\tthis.selecting = false;\n\t\tthis.lastClickedRow = false;\n\t\tthis.selectPrev = [];\n\t\tthis.selectedRows = [];\n\t\t\n\t\tif(prevSelected && silent !== true){\n\t\t\tthis._rowSelectionChanged();\n\t\t}\n\t}\n\t\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tselectable = self.checkRowSelectability(row),\n\t\telement = row.getElement();\n\t\t\n\t\t// trigger end of row selection\n\t\tvar endSelect = function(){\n\t\t\t\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.selecting = false;\n\t\t\t}, 50);\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t\t};\n\t\t\n\t\trow.modules.select = {selected:false};\n\n\t\telement.classList.toggle(\"tabulator-selectable\", selectable);\n\t\telement.classList.toggle(\"tabulator-unselectable\", !selectable);\n\t\t\n\t\t//set row selection class\n\t\tif(self.checkRowSelectability(row)){\t\t\t\n\t\t\tif(self.table.options.selectableRows && self.table.options.selectableRows != \"highlight\"){\n\t\t\t\tif(self.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\n\t\t\t\t}else{\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!self.selecting){\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\t\t\tif(e.shiftKey){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selecting = true;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selectPrev = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\thandleComplexRowClick(row, e){\n\t\tif(e.shiftKey){\n\t\t\tthis.table._clearSelection();\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\n\t\t\t\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\n\t\t\t\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\t\t\t\n\t\t\tif(e.ctrlKey || e.metaKey){\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.options.selectableRows !== true && !this.isRowSelected(row)){\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectableRows){\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.lastClickedRow = row;\n\t\t\t}else{\n\t\t\t\tthis.deselectRows(undefined, true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.selectableRows !== true){\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectableRows){\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectableRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectRows(toggledRows);\n\t\t\t}\n\t\t\tthis.table._clearSelection();\n\t\t}\n\t\telse if(e.ctrlKey || e.metaKey){\n\t\t\tthis.toggleRow(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}else{\n\t\t\tthis.deselectRows(undefined, true);\n\t\t\tthis.selectRows(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}\n\t}\n\n\tcheckRowSelectability(row){\n\t\tif(row && row.type === \"row\"){\n\t\t\treturn this.table.options.selectableRowsCheck.call(this.table, row.getComponent());\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\t//toggle row selection\n\ttoggleRow(row){\n\t\tif(this.checkRowSelectability(row)){\n\t\t\tif(row.modules.select && row.modules.select.selected){\n\t\t\t\tthis._deselectRow(row);\n\t\t\t}else{\n\t\t\t\tthis._selectRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//select a number of rows\n\tselectRows(rows){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._selectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(false, changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._selectRow(rowMatch, false, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//select an individual row\n\t_selectRow(rowInfo, silent, force){\n\t\t//handle max row count\n\t\tif(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){\n\t\t\tif(this.selectedRows.length >= this.table.options.selectableRows){\n\t\t\t\tif(this.table.options.selectableRowsRollingSelection){\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t\t}else{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\n\t\t\n\t\tif(row){\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = true;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tthis._rowSelectionChanged(silent, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisRowSelected(row){\n\t\treturn this.selectedRows.indexOf(row) !== -1;\n\t}\n\t\n\t//deselect a number of rows\n\tdeselectRows(rows, silent){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = Object.assign([], this.selectedRows);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._deselectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(silent, [], changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._deselectRow(rowMatch, silent, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//deselect an individual row\n\t_deselectRow(rowInfo, silent){\n\t\tvar self = this,\n\t\trow = self.table.rowManager.findRow(rowInfo),\n\t\tindex, element;\n\t\t\n\t\tif(row){\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\n\t\t\t\treturn selectedRow == row;\n\t\t\t});\n\t\t\t\n\t\t\tif(index > -1){\n\n\t\t\t\telement = row.getElement();\n\t\t\t\t\n\t\t\t\tif(element){\n\t\t\t\t\telement.classList.remove(\"tabulator-selected\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = false;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t\t}\n\t\t\t\tself.selectedRows.splice(index, 1);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tself._rowSelectionChanged(silent, undefined, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetSelectedData(){\n\t\tvar data = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetSelectedRows(){\n\t\tvar rows = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\trows.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t_rowSelectionChanged(silent, selected = [], deselected = []){\n\t\tif(this.headerCheckboxElement){\n\t\t\tif(this.selectedRows.length === 0){\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\n\t\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else {\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(!silent){\n\t\t\tif(!Array.isArray(selected)){\n\t\t\t\tselected = [selected];\n\t\t\t}\n\n\t\t\tselected = selected.map(row => row.getComponent());\n\n\t\t\tif(!Array.isArray(deselected)){\n\t\t\t\tdeselected = [deselected];\n\t\t\t}\n\n\t\t\tdeselected = deselected.map(row => row.getComponent());\n\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows(), selected, deselected);\n\t\t}\n\t}\n\t\n\tregisterRowSelectCheckbox (row, element) {\n\t\tif(!row._row.modules.select){\n\t\t\trow._row.modules.select = {};\n\t\t}\n\t\t\n\t\trow._row.modules.select.checkboxEl = element;\n\t}\n\t\n\tregisterHeaderSelectCheckbox (element) {\n\t\tthis.headerCheckboxElement = element;\n\t}\n\t\n\tchildRowSelection(row, select){\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\t\t\n\t\tif(select){\n\t\t\tfor(let child of children){\n\t\t\t\tthis._selectRow(child, true);\n\t\t\t}\n\t\t}else{\n\t\t\tfor(let child of children){\n\t\t\t\tthis._deselectRow(child, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nSelectRow.moduleName = \"selectRow\";\n\nexport default SelectRow;","//sort datetime\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tif(typeof DT != \"undefined\"){\n\t\tif(!DT.isDateTime(a)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\ta = DT.fromISO(String(a));\n\t\t\t}else{\n\t\t\t\ta = DT.fromFormat(String(a), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!DT.isDateTime(b)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\tb = DT.fromISO(String(b));\n\t\t\t}else{\n\t\t\t\tb = DT.fromFormat(String(b), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!a.isValid){\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\n\t\t}else if(!b.isValid){\n\t\t\temptyAlign = 1;\n\t\t}else{\n\t\t\t//compare valid values\n\t\t\treturn a - b;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\n\t}else{\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\n\t}\n}","import number from './sorters/number.js';\nimport string from './sorters/string.js';\nimport date from './sorters/date.js';\nimport time from './sorters/time.js';\nimport datetime from './sorters/datetime.js';\nimport boolean from './sorters/boolean.js';\nimport array from './sorters/array.js';\nimport exists from './sorters/exists.js';\nimport alphanum from './sorters/alphanum.js';\n\nexport default {\n\tnumber:number,\n\tstring:string,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tboolean:boolean,\n\tarray:array,\n\texists:exists,\n\talphanum:alphanum\n};","//sort numbers\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar decimal = params.decimalSeparator;\n\tvar thousand = params.thousandSeparator;\n\tvar emptyAlign = 0;\n\n\ta = String(a);\n\tb = String(b);\n\n\tif(thousand){\n\t\ta = a.split(thousand).join(\"\");\n\t\tb = b.split(thousand).join(\"\");\n\t}\n\n\tif(decimal){\n\t\ta = a.split(decimal).join(\".\");\n\t\tb = b.split(decimal).join(\".\");\n\t}\n\n\ta = parseFloat(a);\n\tb = parseFloat(b);\n\n\t//handle non numeric values\n\tif(isNaN(a)){\n\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t}else if(isNaN(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\treturn a - b;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort strings\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\tvar locale;\n\n\t//handle empty values\n\tif(!a){\n\t\temptyAlign = !b ? 0 : -1;\n\t}else if(!b){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\tswitch(typeof params.locale){\n\t\t\tcase \"boolean\":\n\t\t\t\tif(params.locale){\n\t\t\t\t\tlocale = this.langLocale();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"string\":\n\t\t\t\tlocale = params.locale;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import datetime from './datetime.js';\n\n//sort date\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"dd/MM/yyyy\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","import datetime from './datetime.js';\n\n//sort times\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"HH:mm\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","//sort booleans\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\treturn el1 - el2;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar type = params.type || \"length\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tfunction calc(value){\n\t\tvar result;\n\n\t\tswitch(type){\n\t\t\tcase \"length\":\n\t\t\t\tresult = value.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"sum\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"max\":\n\t\t\t\tresult = Math.max.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"min\":\n\t\t\t\tresult = Math.min.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"avg\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t}) / value.length;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t//handle non array values\n\tif(!Array.isArray(a)){\n\t\temptyAlign = !Array.isArray(b) ? 0 : -1;\n\t}else if(!Array.isArray(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\treturn calc(b) - calc(a);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\treturn el1 - el2;\n}","//sort alpha numeric strings\nexport default function(as, bs, aRow, bRow, column, dir, params){\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\n\t//handle empty values\n\tif(!as && as!== 0){\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t}else if(!bs && bs!== 0){\n\t\temptyAlign = 1;\n\t}else{\n\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\ta = String(as).toLowerCase();\n\t\tb = String(bs).toLowerCase();\n\t\tif(a === b) return 0;\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\ta = a.match(rx);\n\t\tb = b.match(rx);\n\t\tL = a.length > b.length ? b.length : a.length;\n\t\twhile(i < L){\n\t\t\ta1= a[i];\n\t\t\tb1= b[i++];\n\t\t\tif(a1 !== b1){\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\treturn a1 - b1;\n\t\t\t\t}\n\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t}\n\t\t}\n\n\t\treturn a.length > b.length;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import Module from '../../core/Module.js';\n\nimport defaultSorters from './defaults/sorters.js';\n\nclass Sort extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\t\t\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\n\t\t\n\t\tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\n\t\tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\n\t\tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\n\t\tthis.registerTableOption(\"headerSortElement\", \"
    \"); //header sort element\n\t\tthis.registerTableOption(\"headerSortClickElement\", \"header\"); //element which triggers sort when clicked\n\t\t\n\t\tthis.registerColumnOption(\"sorter\");\n\t\tthis.registerColumnOption(\"sorterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"headerSort\", true);\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\n\t\tthis.registerColumnOption(\"headerSortTristate\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.registerDataHandler(this.sort.bind(this), 20);\n\t\t\n\t\tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\n\t\tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\n\t\tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\n\t\t\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\n\t\t}\n\t}\n\t\n\ttableBuilt(){\n\t\tif(this.table.options.initialSort){\n\t\t\tthis.setSort(this.table.options.initialSort);\n\t\t}\n\t}\n\t\n\tremoteSortParams(data, config, silent, params){\n\t\tvar sorters = this.getSort();\n\t\t\n\t\tsorters.forEach((item) => {\n\t\t\tdelete item.column;\n\t\t});\n\t\t\n\t\tparams.sort = sorters;\n\t\t\n\t\treturn params;\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetSort(sortList, dir){\n\t\tthis.setSort(sortList, dir);\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\tclearSort(){\n\t\tthis.clear();\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\t//initialize column header for sorting\n\tinitializeColumn(column){\n\t\tvar sorter = false,\n\t\tcolEl,\n\t\tarrowEl;\n\t\t\n\t\tswitch(typeof column.definition.sorter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Sort.sorters[column.definition.sorter]){\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tcolumn.modules.sort = {\n\t\t\tsorter:sorter, dir:\"none\",\n\t\t\tparams:column.definition.sorterParams || {},\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\n\t\t\ttristate: column.definition.headerSortTristate,\n\t\t};\n\t\t\n\t\tif(column.definition.headerSort !== false){\n\t\t\t\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\t\t\t\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortClickElement){\n\t\t\t\tcase \"icon\":\n\t\t\t\t\tarrowEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"header\":\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortElement){\n\t\t\t\tcase \"function\":\n\t\t\t\t//do nothing\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"object\":\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t\t}\n\t\t\t\n\t\t\t//create sorter arrow\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\n\t\t\t\n\t\t\tcolumn.modules.sort.element = arrowEl;\n\t\t\t\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t\n\t\t\tif(this.table.options.headerSortClickElement === \"icon\"){\n\t\t\t\tarrowEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//sort on click\n\t\t\t(this.table.options.headerSortClickElement === \"icon\" ? arrowEl : colEl).addEventListener(\"click\", (e) => {\n\t\t\t\tvar dir = \"\",\n\t\t\t\tsorters=[],\n\t\t\t\tmatch = false;\n\t\t\t\t\n\t\t\t\tif(column.modules.sort){\n\t\t\t\t\tif(column.modules.sort.tristate){\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\n\t\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = this.getSort();\n\t\t\t\t\t\t\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(match > -1){\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//add to existing sort\n\t\t\t\t\t\tthis.setSort(sorters);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(dir == \"none\"){\n\t\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\t\tthis.setSort(column, dir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\n\t\t\t\t\tthis.refreshSort();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trefreshSort(){\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.reloadData(null, false, false);\n\t\t}else{\n\t\t\tthis.refreshData(true);\n\t\t}\n\t\t\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\t\n\t//check if the sorters have changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\t\n\t//return current sorters\n\tgetSort(){\n\t\tvar self = this,\n\t\tsorters = [];\n\t\t\n\t\tself.sortList.forEach(function(item){\n\t\t\tif(item.column){\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn sorters;\n\t}\n\t\n\t//change sort list and trigger sort\n\tsetSort(sortList, dir){\n\t\tvar self = this,\n\t\tnewSortList = [];\n\t\t\n\t\tif(!Array.isArray(sortList)){\n\t\t\tsortList = [{column: sortList, dir:dir}];\n\t\t}\n\t\t\n\t\tsortList.forEach(function(item){\n\t\t\tvar column;\n\t\t\t\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\titem.column = column;\n\t\t\t\tnewSortList.push(item);\n\t\t\t\tself.changed = true;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tself.sortList = newSortList;\n\t\t\n\t\tthis.dispatch(\"sort-changed\");\n\t}\n\t\n\t//clear sorters\n\tclear(){\n\t\tthis.setSort([]);\n\t}\n\t\n\t//find appropriate sorter for column\n\tfindSorter(column){\n\t\tvar row = this.table.rowManager.activeRows[0],\n\t\tsorter = \"string\",\n\t\tfield, value;\n\t\t\n\t\tif(row){\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\t\t\t\n\t\t\tif(field){\n\t\t\t\t\n\t\t\t\tvalue = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Sort.sorters[sorter];\n\t}\n\t\n\t//work through sort list sorting data\n\tsort(data){\n\t\tvar self = this,\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t\tsortListActual = [],\n\t\trowComponents = [];\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorting\")){\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\n\t\t}\n\t\t\n\t\tself.clearColumnHeaders();\n\t\t\n\t\tif(this.table.options.sortMode !== \"remote\"){\n\t\t\t\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tvar sortObj;\n\t\t\t\t\n\t\t\t\tif(item.column){\n\t\t\t\t\tsortObj = item.column.modules.sort;\n\t\t\t\t\t\n\t\t\t\t\tif(sortObj){\n\t\t\t\t\t\t\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\t\t\tif(!sortObj.sorter){\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\t\t\t\t\t\t\n\t\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//sort data\n\t\t\tif (sortListActual.length) {\n\t\t\t\tself._sortItems(data, sortListActual);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorted\")){\n\t\t\tdata.forEach((row) => {\n\t\t\t\trowComponents.push(row.getComponent());\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//clear sort arrows on columns\n\tclearColumnHeaders(){\n\t\tthis.table.columnManager.getRealColumns().forEach((column) => {\n\t\t\tif(column.modules.sort){\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//set the column header sort direction\n\tsetColumnHeader(column, dir){\n\t\tcolumn.modules.sort.dir = dir;\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir === \"asc\" ? \"ascending\" : \"descending\");\n\t\tthis.setColumnHeaderSortIcon(column, dir);\n\t}\n\t\n\tsetColumnHeaderSortIcon(column, dir){\n\t\tvar sortEl = column.modules.sort.element,\n\t\tarrowEl;\n\t\t\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\n\t\t\t\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\n\t\t\t\n\t\t\tif(typeof arrowEl === \"object\"){\n\t\t\t\tsortEl.appendChild(arrowEl);\n\t\t\t}else{\n\t\t\t\tsortEl.innerHTML = arrowEl;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//sort each item in sort list\n\t_sortItems(data, sortList){\n\t\tvar sorterCount = sortList.length - 1;\n\t\t\n\t\tdata.sort((a, b) => {\n\t\t\tvar result;\n\t\t\t\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\n\t\t\t\tlet sortItem = sortList[i];\n\t\t\t\t\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\t\t\t\t\n\t\t\t\tif(result !== 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\t\t});\n\t}\n\t\n\t//process individual rows for a sort function on active data\n\t_sortRow(a, b, column, dir, params){\n\t\tvar el1Comp, el2Comp;\n\t\t\n\t\t//switch elements depending on search direction\n\t\tvar el1 = dir == \"asc\" ? a : b;\n\t\tvar el2 = dir == \"asc\" ? b : a;\n\t\t\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\t\t\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\t\t\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\t\t\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n\t}\n}\n\nSort.moduleName = \"sort\";\n\n//load defaults\nSort.sorters = defaultSorters;\n\nexport default Sort;\n","class RangeComponent {\n\tconstructor(range) {\n\t\tthis._range = range;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function (target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t} else {\n\t\t\t\t\treturn target._range.table.componentFunctionBinder.handle(\"range\", target._range, name);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tgetElement() {\n\t\treturn this._range.element;\n\t}\n\n\tgetData() {\n\t\treturn this._range.getData();\n\t}\n\n\tgetCells() {\n\t\treturn this._range.getCells(true);\n\t}\n\n\tgetStructuredCells() {\n\t\treturn this._range.getStructuredCells();\n\t}\n\n\tgetRows() {\n\t\treturn this._range.getRows().map((row) => row.getComponent());\n\t}\n\n\tgetColumns() {\n\t\treturn this._range.getColumns().map((column) => column.getComponent());\n\t}\n\t\n\tgetBounds() {\n\t\treturn this._range.getBounds();\n\t}\n\n\tgetTopEdge() {\n\t\treturn this._range.top;\n\t}\n\n\tgetBottomEdge() {\n\t\treturn this._range.bottom;\n\t}\n\n\tgetLeftEdge() {\n\t\treturn this._range.left;\n\t}\n\n\tgetRightEdge() {\n\t\treturn this._range.right;\n\t}\n\n\tsetBounds(start, end){\n\t\tif(this._range.destroyedGuard(\"setBounds\")){\n\t\t\tthis._range.setBounds(start ? start._cell : start, end ? end._cell : end);\n\t\t}\n\t}\n\n\tsetStartBound(start){\n\t\tif(this._range.destroyedGuard(\"setStartBound\")){\n\t\t\tthis._range.setEndBound(start ? start._cell : start);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tsetEndBound(end){\n\t\tif(this._range.destroyedGuard(\"setEndBound\")){\n\t\t\tthis._range.setEndBound(end ? end._cell : end);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tclearValues(){\n\t\tif(this._range.destroyedGuard(\"clearValues\")){\n\t\t\tthis._range.clearValues();\n\t\t}\n\t}\n\n\tremove(){\n\t\tif(this._range.destroyedGuard(\"remove\")){\n\t\t\tthis._range.destroy(true);\n\t\t}\n\t}\n}\n\nexport default RangeComponent;\n","import CoreFeature from '../../core/CoreFeature.js';\nimport RangeComponent from \"./RangeComponent\";\n\nclass Range extends CoreFeature{\n\tconstructor(table, rangeManager, start, end) {\n\t\tsuper(table);\n\t\t\n\t\tthis.rangeManager = rangeManager;\n\t\tthis.element = null;\n\t\tthis.initialized = false;\n\t\tthis.initializing = {\n\t\t\tstart:false,\n\t\t\tend:false,\n\t\t};\n\t\tthis.destroyed = false;\n\t\t\n\t\tthis.top = 0;\n\t\tthis.bottom = 0;\n\t\tthis.left = 0;\n\t\tthis.right = 0;\n\t\t\n\t\tthis.table = table;\n\t\tthis.start = {row:0, col:0};\n\t\tthis.end = {row:0, col:0};\n\n\t\tif(this.rangeManager.rowHeader){\n\t\t\tthis.left = 1;\n\t\t\tthis.right = 1;\n\t\t\tthis.start.col = 1;\n\t\t\tthis.end.col = 1;\n\t\t}\n\t\t\n\t\tthis.initElement();\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.initBounds(start, end);\n\t\t});\n\t}\n\t\n\tinitElement(){\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-range\");\n\t}\n\t\n\tinitBounds(start, end){\n\t\tthis._updateMinMax();\n\t\t\n\t\tif(start){\n\t\t\tthis.setBounds(start, end || start);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Boundary Setup ///////\n\t///////////////////////////////////\n\t\n\tsetStart(row, col) {\n\t\tif(this.start.row !== row || this.start.col !== col){\n\t\t\tthis.start.row = row;\n\t\t\tthis.start.col = col;\n\t\t\t\n\t\t\tthis.initializing.start = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetEnd(row, col) {\n\t\tif(this.end.row !== row || this.end.col !== col){\n\t\t\tthis.end.row = row;\n\t\t\tthis.end.col = col;\n\t\t\t\n\t\t\tthis.initializing.end = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetBounds(start, end, visibleRows){\n\t\tif(start){\n\t\t\tthis.setStartBound(start);\n\t\t}\n\t\t\n\t\tthis.setEndBound(end || start);\n\t\tthis.rangeManager.layoutElement(visibleRows);\n\t}\n\t\n\tsetStartBound(element){\n\t\tvar row, col;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tthis.setStart(0, element.getPosition() - 1);\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\t\n\t\t\tif (element.column === this.rangeManager.rowHeader) {\n\t\t\t\tthis.setStart(row, 1);\n\t\t\t} else {\n\t\t\t\tthis.setStart(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tsetEndBound(element){\n\t\tvar rowsCount = this._getTableRows().length,\n\t\trow, col, isRowHeader;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tif (this.rangeManager.selecting === \"column\") {\n\t\t\t\t\tthis.setEnd(rowsCount - 1, element.getPosition() - 1);\n\t\t\t\t} else if (this.rangeManager.selecting === \"cell\") {\n\t\t\t\t\tthis.setEnd(0, element.getPosition() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\tisRowHeader = element.column === this.rangeManager.rowHeader;\n\t\t\t\n\t\t\tif (this.rangeManager.selecting === \"row\") {\n\t\t\t\tthis.setEnd(row, this._getTableColumns().length - 1);\n\t\t\t} else if (this.rangeManager.selecting !== \"row\" && isRowHeader) {\n\t\t\t\tthis.setEnd(row, 0);\n\t\t\t} else if (this.rangeManager.selecting === \"column\") {\n\t\t\t\tthis.setEnd(rowsCount - 1, col);\n\t\t\t} else {\n\t\t\t\tthis.setEnd(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_updateMinMax() {\n\t\tthis.top = Math.min(this.start.row, this.end.row);\n\t\tthis.bottom = Math.max(this.start.row, this.end.row);\n\t\tthis.left = Math.min(this.start.col, this.end.col);\n\t\tthis.right = Math.max(this.start.col, this.end.col);\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeChanged\", this.getComponent());\n\t\t}else{\n\t\t\tif(this.initializing.start && this.initializing.end){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.dispatchExternal(\"rangeAdded\", this.getComponent());\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_getTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\t_getTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Rendering ///////\n\t///////////////////////////////////\n\t\n\tlayout() {\n\t\tvar _vDomTop = this.table.rowManager.renderer.vDomTop,\n\t\t_vDomBottom = this.table.rowManager.renderer.vDomBottom,\n\t\t_vDomLeft = this.table.columnManager.renderer.leftCol,\n\t\t_vDomRight = this.table.columnManager.renderer.rightCol,\t\t\n\t\ttop, bottom, left, right, topLeftCell, bottomRightCell;\n\t\t\n\t\tif (_vDomTop == null) {\n\t\t\t_vDomTop = 0;\n\t\t}\n\t\t\n\t\tif (_vDomBottom == null) {\n\t\t\t_vDomBottom = Infinity;\n\t\t}\n\t\t\n\t\tif (_vDomLeft == null) {\n\t\t\t_vDomLeft = 0;\n\t\t}\n\t\t\n\t\tif (_vDomRight == null) {\n\t\t\t_vDomRight = Infinity;\n\t\t}\n\t\t\n\t\tif (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) {\n\t\t\ttop = Math.max(this.top, _vDomTop);\n\t\t\tbottom = Math.min(this.bottom, _vDomBottom);\n\t\t\tleft = Math.max(this.left, _vDomLeft);\n\t\t\tright = Math.min(this.right, _vDomRight);\n\t\t\t\n\t\t\ttopLeftCell = this.rangeManager.getCell(top, left);\n\t\t\tbottomRightCell = this.rangeManager.getCell(bottom, right);\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-range-active\");\n\t\t\t// this.element.classList.toggle(\"tabulator-range-active\", this === this.rangeManager.activeRange);\n\t\t\t\n\t\t\tthis.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.top = topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t\tthis.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t}\n\t}\n\t\n\tatTopLeft(cell) {\n\t\treturn cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left;\n\t}\n\t\n\tatBottomRight(cell) {\n\t\treturn cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right;\n\t}\n\t\n\toccupies(cell) {\n\t\treturn this.occupiesRow(cell.row) && this.occupiesColumn(cell.column);\n\t}\n\t\n\toccupiesRow(row) {\n\t\treturn this.top <= row.position - 1 && row.position - 1 <= this.bottom;\n\t}\n\t\n\toccupiesColumn(col) {\n\t\treturn this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right;\n\t}\n\t\n\toverlaps(left, top, right, bottom) {\n\t\tif ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tgetData() {\n\t\tvar data = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tvar rowData = row.getData(),\n\t\t\tresult = {};\n\t\t\t\n\t\t\tcolumns.forEach((column) => {\n\t\t\t\tresult[column.field] = rowData[column.field];\n\t\t\t});\n\t\t\t\n\t\t\tdata.push(result);\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetCells(structured, component) {\n\t\tvar cells = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\tif (structured) {\n\t\t\tcells = rows.map((row) => {\n\t\t\t\tvar arr = [];\n\t\t\t\t\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tarr.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn arr;\n\t\t\t});\n\t\t} else {\n\t\t\trows.forEach((row) => {\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tcells.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn cells;\n\t}\n\t\n\tgetStructuredCells() {\n\t\treturn this.getCells(true, true);\n\t}\n\t\n\tgetRows() {\n\t\treturn this._getTableRows().slice(this.top, this.bottom + 1);\n\t}\n\t\n\tgetColumns() {\n\t\treturn this._getTableColumns().slice(this.left, this.right + 1);\n\t}\n\t\n\tclearValues(){\n\t\tvar cells = this.getCells();\n\t\tvar clearValue = this.table.options.selectableRangeClearCellsValue;\n\t\t\n\t\tthis.table.blockRedraw();\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tcell.setValue(clearValue);\n\t\t});\n\t\t\n\t\tthis.table.restoreRedraw();\n\t\t\n\t}\n\t\n\tgetBounds(component){\n\t\tvar cells = this.getCells(false, component),\n\t\toutput = {\n\t\t\tstart:null,\n\t\t\tend:null,\n\t\t};\n\t\t\n\t\tif(cells.length){\n\t\t\toutput.start = cells[0];\n\t\t\toutput.end = cells[cells.length - 1];\n\t\t}else{\n\t\t\tconsole.warn(\"No bounds defined on range\");\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponent() {\n\t\tif (!this.component) {\n\t\t\tthis.component = new RangeComponent(this);\n\t\t}\n\t\treturn this.component;\n\t}\n\t\n\tdestroy(notify) {\n\t\tthis.destroyed = true;\n\t\t\n\t\tthis.element.remove();\n\t\t\n\t\tif(notify){\n\t\t\tthis.rangeManager.rangeRemoved(this);\n\t\t}\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeRemoved\", this.getComponent());\n\t\t}\n\t}\n\t\n\tdestroyedGuard(func){\n\t\tif(this.destroyed){\n\t\t\tconsole.warn(\"You cannot call the \" + func + \" function on a destroyed range\");\n\t\t}\n\t\t\n\t\treturn !this.destroyed;\n\t}\n}\n\nexport default Range;\n","import Module from \"../../core/Module.js\";\nimport Range from \"./Range.js\";\n\nclass SelectRange extends Module {\n\tconstructor(table) {\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = \"cell\";\n\t\tthis.mousedown = false;\n\t\tthis.ranges = [];\n\t\tthis.overlay = null;\n\t\tthis.rowHeader = null;\n\t\tthis.layoutChangeTimeout = null;\n\t\tthis.columnSelection = false;\n\t\tthis.rowSelection = false;\n\t\tthis.maxRanges = 0;\n\t\tthis.activeRange = false;\n\t\tthis.blockKeydown = false;\n\t\t\n\t\tthis.keyDownEvent = this._handleKeyDown.bind(this);\n\t\tthis.mouseUpEvent = this._handleMouseUp.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"selectableRange\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeColumns\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeRows\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeClearCells\", false); //allow clearing of active range\n\t\tthis.registerTableOption(\"selectableRangeClearCellsValue\", undefined); //value for cleared active range\n\n\t\tthis.registerTableFunction(\"getRangesData\", this.getRangesData.bind(this));\n\t\tthis.registerTableFunction(\"getRanges\", this.getRanges.bind(this));\n\t\tthis.registerTableFunction(\"addRange\", this.addRangeFromComponent.bind(this));\n\n\t\tthis.registerComponentFunction(\"cell\", \"getRanges\", this.cellGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getRanges\", this.rowGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getRanges\", this.colGetRanges.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Initialization ///////\n\t///////////////////////////////////\n\t\n\tinitialize() {\n\t\tif (this.options(\"selectableRange\")) {\t\t\n\t\t\tif(!this.options(\"selectableRows\")){\n\t\t\t\t\n\t\t\t\tthis.maxRanges = this.options(\"selectableRange\");\n\t\t\t\t\n\t\t\t\tthis.initializeTable();\n\t\t\t\tthis.initializeWatchers();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"SelectRange functionality cannot be used in conjunction with row selection\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tinitializeTable() {\t\t\n\t\tthis.overlay = document.createElement(\"div\");\n\t\tthis.overlay.classList.add(\"tabulator-range-overlay\");\n\t\t\n\t\tthis.rangeContainer = document.createElement(\"div\");\n\t\tthis.rangeContainer.classList.add(\"tabulator-range-container\");\n\t\t\n\t\tthis.activeRangeCellElement = document.createElement(\"div\");\n\t\tthis.activeRangeCellElement.classList.add(\"tabulator-range-cell-active\");\n\t\t\n\t\tthis.overlay.appendChild(this.rangeContainer);\n\t\tthis.overlay.appendChild(this.activeRangeCellElement);\n\t\t\n\t\tthis.table.rowManager.element.addEventListener(\"keydown\", this.keyDownEvent);\n\t\t\n\t\tthis.resetRanges();\n\t\t\n\t\tthis.table.rowManager.element.appendChild(this.overlay);\n\t\tthis.table.columnManager.element.setAttribute(\"tabindex\", 0);\n\t\tthis.table.element.classList.add(\"tabulator-ranges\");\n\t}\n\t\n\tinitializeWatchers() {\n\t\tthis.columnSelection = this.options(\"selectableRangeColumns\");\n\t\tthis.rowSelection = this.options(\"selectableRangeRows\");\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-mousedown\", this.handleColumnMouseDown.bind(this));\n\t\tthis.subscribe(\"column-mousemove\", this.handleColumnMouseMove.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.handleColumnResized.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.updateHeaderColumn.bind(this));\n\n\t\tthis.subscribe(\"cell-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.renderCell.bind(this));\n\t\tthis.subscribe(\"cell-mousedown\", this.handleCellMouseDown.bind(this));\n\t\tthis.subscribe(\"cell-mousemove\", this.handleCellMouseMove.bind(this));\n\t\tthis.subscribe(\"cell-click\", this.handleCellClick.bind(this));\n\t\tthis.subscribe(\"cell-editing\", this.handleEditingCell.bind(this));\n\t\t\n\t\tthis.subscribe(\"page-changed\", this.redraw.bind(this));\n\n\t\tthis.subscribe(\"scroll-vertical\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.layoutChange.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-destroy\", this.tableDestroyed.bind(this));\n\t\tthis.subscribe(\"data-processed\", this.resetRanges.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-layout\", this.layoutElement.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.redraw.bind(this));\n\t\tthis.subscribe(\"table-destroy\", this.tableDestroyed.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-editor-clear\", this.finishEditingCell.bind(this));\n\t\tthis.subscribe(\"edit-blur\", this.restoreFocus.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-left\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-right\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.keyNavigate.bind(this, \"up\"));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.keyNavigate.bind(this, \"down\"));\n\t\tthis.subscribe(\"keybinding-nav-range\", this.keyNavigateRange.bind(this));\n\t}\n\t\n\t\n\tinitializeColumn(column) {\n\t\tif(this.columnSelection && column.definition.headerSort && this.options(\"headerSortClickElement\") !== \"icon\"){\n\t\t\tconsole.warn(\"Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.\");\n\t\t}\n\t\t\n\t\tif (column.modules.edit) {\n\t\t\t// Block editor from taking action so we can trigger edit by\n\t\t\t// double clicking.\n\t\t\t// column.modules.edit.blocked = true;\n\t\t}\n\t}\n\t\n\tupdateHeaderColumn(){\n\t\tif(this.rowSelection){\n\t\t\tthis.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];\n\t\t\t\n\t\t\tif(this.rowHeader){\n\t\t\t\tthis.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + \" tabulator-range-row-header\";\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.headerSort){\n\t\t\t\t\tconsole.warn(\"Using column headerSort with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.editor){\n\t\t\t\t\tconsole.warn(\"Using column editor with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Table Functions ///////\n\t///////////////////////////////////\n\t\n\tgetRanges(){\n\t\treturn this.ranges.map((range) => range.getComponent());\n\t}\n\t\n\tgetRangesData() {\n\t\treturn this.ranges.map((range) => range.getData());\n\t}\n\t\n\taddRangeFromComponent(start, end){\n\t\tstart = start ? start._cell : null;\n\t\tend = end ? end._cell : null;\n\t\t\n\t\treturn this.addRange(start, end);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Component Functions ///////\n\t///////////////////////////////////\n\t\n\tcellGetRanges(cell){\n\t\tvar ranges = [];\n\t\t\n\t\tif (cell.column === this.rowHeader) {\n\t\t\tranges = this.ranges.filter((range) => range.occupiesRow(cell.row));\n\t\t} else {\n\t\t\tranges = this.ranges.filter((range) => range.occupies(cell));\n\t\t}\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\trowGetRanges(row){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesRow(row));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\tcolGetRanges(col){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesColumn(col));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Event Handlers /////////\n\t///////////////////////////////////\n\t\n\t_handleMouseUp(e){\n\t\tthis.mousedown = false;\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t}\n\t\n\t_handleKeyDown(e) {\n\t\tif (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) {\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t// is editing a cell?\n\t\t\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.table.modules.edit.editCell(this.getActiveCell());\n\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tif ((e.key === \"Backspace\" || e.key === \"Delete\") && this.options(\"selectableRangeClearCells\")) {\n\t\t\t\tif(this.activeRange){\n\t\t\t\t\tthis.activeRange.clearValues();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeFocus(cell){\n\t\tvar range;\n\t\t\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\t\n\trestoreFocus(element){\n\t\tthis.table.rowManager.element.focus();\n\t\t\n\t\treturn true;\n\t}\n\t\n\t///////////////////////////////////\n\t////// Column Functionality ///////\n\t///////////////////////////////////\n\t\n\thandleColumnResized(column) {\n\t\tvar selected;\n\t\t\n\t\tif (this.selecting !== \"column\" && this.selecting !== \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tselected = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (!selected) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.ranges.forEach((range) => {\n\t\t\tvar selectedColumns = range.getColumns(true);\n\t\t\t\n\t\t\tselectedColumns.forEach((selectedColumn) => {\n\t\t\t\tif (selectedColumn !== column) {\n\t\t\t\t\tselectedColumn.setWidth(column.width);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\thandleColumnMouseDown(event, column) {\n\t\tif (event.button === 2 && (this.selecting === \"column\" || this.selecting === \"all\") && this.activeRange.occupiesColumn(column)) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, column);\n\t}\n\t\n\thandleColumnMouseMove(e, column) {\n\t\tif (column === this.rowHeader || !this.mousedown || this.selecting === 'all') {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, column, true);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Cell Functionality ///////\n\t///////////////////////////////////\n\t\n\trenderCell(cell) {\n\t\tvar el = cell.getElement(),\n\t\trangeIdx = this.ranges.findIndex((range) => range.occupies(cell));\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", rangeIdx !== -1);\n\t\tel.classList.toggle(\"tabulator-range-only-cell-selected\", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) &&\tthis.ranges[0].atBottomRight(cell));\n\t\t\n\t\tel.dataset.range = rangeIdx;\n\t}\n\t\n\thandleCellMouseDown(event, cell) {\n\t\tif (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === \"row\" || this.selecting === \"all\") && this.activeRange.occupiesRow(cell.row)))) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, cell);\n\t}\n\t\n\thandleCellMouseMove(e, cell) {\n\t\tif (!this.mousedown || this.selecting === \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, cell, true);\n\t}\n\t\n\thandleCellClick(e, cell){\n\t\tthis.initializeFocus(cell);\n\t}\n\t\n\thandleEditingCell(cell) {\n\t\tif(this.activeRange){\n\t\t\tthis.activeRange.setBounds(cell);\n\t\t}\n\t}\n\t\n\tfinishEditingCell() {\n\t\tthis.blockKeydown = true;\n\t\tthis.table.rowManager.element.focus();\n\n\t\tsetTimeout(() => {\n\t\t\tthis.blockKeydown = false;\n\t\t}, 10);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Navigation ///////\n\t///////////////////////////////////\n\t\n\tkeyNavigate(dir, e){\n\t\tif(this.navigate(false, false, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tkeyNavigateRange(e, dir, jump, expand){\n\t\tif(this.navigate(jump, expand, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tnavigate(jump, expand, dir) {\n\t\tvar moved = false,\n\t\trange, rangeEdge, nextRow, nextCol, row, column;\n\t\t\n\t\t// Don't navigate while editing\n\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// If there are more than 1 range, use the active range and destroy the others\n\t\tif (this.ranges.length > 1) {\n\t\t\tthis.ranges = this.ranges.filter((range) => {\n\t\t\t\tif (range === this.activeRange) {\n\t\t\t\t\trange.setEnd(range.start.row, range.start.col);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\trange.destroy();\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\trange = this.activeRange;\n\t\t\n\t\trangeEdge = expand ? range.end : range.start;\n\t\tnextRow = rangeEdge.row;\n\t\tnextCol = rangeEdge.col;\n\t\t\n\t\tif(jump){\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = this.findJumpCellRight(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = this.findJumpCellUp(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = this.findJumpCellDown(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}else{\n\t\t\tif(expand){\n\t\t\t\tif ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = Math.max(nextCol - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = Math.max(nextRow - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = Math.min(nextRow + 1, this.getTableRows().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tmoved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row;\n\t\t\n\t\tif(!expand){\n\t\t\trange.setStart(nextRow, nextCol);\n\t\t}\n\t\t\n\t\trange.setEnd(nextRow, nextCol);\n\t\t\n\t\tif(!expand){\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (moved) {\n\t\t\trow = this.getRowByRangePos(range.end.row);\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col);\n\t\t\t\n\t\t\tif ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) {\n\t\t\t\tcolumn.getComponent().scrollTo(undefined, false);\n\t\t\t} else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) {\n\t\t\t\trow.getComponent().scrollTo(undefined, false);\n\t\t\t} else {\n\t\t\t\t// Use faster autoScroll when the elements are on the DOM\n\t\t\t\tthis.autoScroll(range, row.getElement(), column.getElement());\n\t\t\t}\n\t\t\t\n\t\t\tthis.layoutElement();\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\trangeRemoved(removed){\n\t\tthis.ranges = this.ranges.filter((range) => range !== removed);\n\t\t\n\t\tif(this.activeRange === removed){\n\t\t\tif(this.ranges.length){\n\t\t\t\tthis.activeRange = this.ranges[this.ranges.length - 1];\n\t\t\t}else{\n\t\t\t\tthis.addRange();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.layoutElement();\n\t}\n\t\n\tfindJumpCell(cells, reverse, emptyStart, emptySide){\n\t\tvar nextCell;\n\t\t\n\t\tif(reverse){\n\t\t\tcells = cells.reverse();\n\t\t}\n\t\t\n\t\tfor(let currentCell of cells){\n\t\t\tlet currentValue = currentCell.getValue();\n\t\t\t\n\t\t\tif(emptyStart){\n\t\t\t\tnextCell = currentCell;\n\t\t\t\tif(currentValue){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(emptySide){\n\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindJumpCellLeft(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false,\n\t\tjumpCol = colPos,\n\t\ttargetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos),\n\t\tnextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellRight(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false,\n\t\tjumpCol = colPos,\n\t\tnextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellUp(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\tfindJumpCellDown(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Selection ///////\n\t///////////////////////////////////\n\tnewSelection(event, element) {\n\t\tvar range;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(!this.columnSelection){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (element === this.rowHeader) {\n\t\t\t\trange = this.resetRanges();\n\t\t\t\tthis.selecting = \"all\";\n\t\t\t\t\n\t\t\t\tvar topLeftCell, bottomRightCell = this.getCell(-1, -1);\n\n\t\t\t\tif(this.rowHeader){\n\t\t\t\t\ttopLeftCell = this.getCell(0, 1);\n\t\t\t\t}else{\n\t\t\t\t\ttopLeftCell = this.getCell(0, 0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trange.setBounds(topLeftCell, bottomRightCell);\t\t\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis.selecting = \"column\";\n\t\t\t}\n\t\t} else if (element.column === this.rowHeader) {\n\t\t\tthis.selecting = \"row\";\n\t\t} else {\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (event.shiftKey) {\n\t\t\tthis.activeRange.setBounds(false, element);\n\t\t} else if (event.ctrlKey) {\n\t\t\tthis.addRange().setBounds(element);\n\t\t} else {\n\t\t\tthis.resetRanges().setBounds(element);\n\t\t}\n\t}\n\t\n\tautoScroll(range, row, column) {\n\t\tvar tableHolder = this.table.rowManager.element,\n\t\trowHeader, rect, view, withinHorizontalView, withinVerticalView;\n\n\t\tif (typeof row === 'undefined') {\n\t\t\trow = this.getRowByRangePos(range.end.row).getElement();\n\t\t}\n\t\t\n\t\tif (typeof column === 'undefined') {\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col).getElement();\n\t\t}\n\n\t\tif (this.rowHeader) {\n\t\t\trowHeader = this.rowHeader.getElement();\n\t\t}\n\t\t\n\t\trect = {\n\t\t\tleft: column.offsetLeft,\n\t\t\tright: column.offsetLeft + column.offsetWidth,\n\t\t\ttop: row.offsetTop,\n\t\t\tbottom: row.offsetTop + row.offsetHeight,\n\t\t};\n\t\t\n\t\tview = {\n\t\t\tleft: tableHolder.scrollLeft,\n\t\t\tright: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),\n\t\t\ttop: tableHolder.scrollTop,\n\t\t\tbottom:\ttableHolder.scrollTop +\ttableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,\n\t\t};\n\n\t\tif (rowHeader) {\n\t\t\tview.left += rowHeader.offsetWidth;\n\t\t}\n\t\t\n\t\twithinHorizontalView = view.left < rect.left &&\trect.left < view.right && view.left < rect.right &&\trect.right < view.right;\n\t\t\n\t\twithinVerticalView = view.top < rect.top &&\trect.top < view.bottom && view.top < rect.bottom &&\trect.bottom < view.bottom;\n\t\t\n\t\tif (!withinHorizontalView) {\n\t\t\tif (rect.left < view.left) {\n\t\t\t\ttableHolder.scrollLeft = rect.left;\n\t\t\t\tif (rowHeader) {\n\t\t\t\t\ttableHolder.scrollLeft -= rowHeader.offsetWidth;\n\t\t\t\t}\n\t\t\t} else if (rect.right > view.right) {\n\t\t\t\ttableHolder.scrollLeft = rect.right - tableHolder.clientWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!withinVerticalView) {\n\t\t\tif (rect.top < view.top) {\n\t\t\t\ttableHolder.scrollTop = rect.top;\n\t\t\t} else if (rect.bottom > view.bottom) {\n\t\t\t\ttableHolder.scrollTop = rect.bottom - tableHolder.clientHeight;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Layout ///////\n\t///////////////////////////////////\n\t\n\tlayoutChange(){\n\t\tthis.overlay.style.visibility = \"hidden\";\n\t\tclearTimeout(this.layoutChangeTimeout);\n\t\tthis.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200);\n\t}\n\t\n\tredraw(force) {\n\t\tif (force) {\n\t\t\tthis.selecting = 'cell';\n\t\t\tthis.resetRanges();\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\t\n\tlayoutElement(visibleRows) {\n\t\tvar rows;\n\t\t\n\t\tif (visibleRows) {\n\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t} else {\n\t\t\trows = this.table.rowManager.getRows();\n\t\t}\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\trow.cells.forEach((cell) => this.renderCell(cell));\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.getTableColumns().forEach((column) => {\n\t\t\tthis.layoutColumn(column);\n\t\t});\n\t\t\n\t\tthis.layoutRanges();\n\t}\n\t\n\tlayoutRow(row) {\n\t\tvar el = row.getElement(),\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesRow(row));\n\t\t\n\t\tif (this.selecting === \"row\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutColumn(column) {\n\t\tvar el = column.getElement(),\t\t\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (this.selecting === \"column\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutRanges() {\n\t\tvar activeCell;\n\t\t\n\t\tif (!this.table.initialized) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tactiveCell = this.getActiveCell();\n\t\t\n\t\tif (!activeCell) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.top =\tactiveCell.row.getElement().offsetTop + \"px\";\n\t\tthis.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + \"px\";\n\t\t\n\t\tthis.ranges.forEach((range) => range.layout());\n\t\t\n\t\tthis.overlay.style.visibility = \"visible\";\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Helper Functions ///////\n\t///////////////////////////////////\t\n\t\n\tgetCell(rowIdx, colIdx) {\n\t\tvar row;\n\t\t\n\t\tif (colIdx < 0) {\n\t\t\tcolIdx = this.getTableColumns().length + colIdx;\n\t\t\tif (colIdx < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (rowIdx < 0) {\n\t\t\trowIdx = this.getTableRows().length + rowIdx;\n\t\t}\n\t\t\n\t\trow = this.table.rowManager.getRowFromPosition(rowIdx + 1);\n\t\t\n\t\treturn row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null;\n\t}\n\t\n\t\n\tgetActiveCell() {\n\t\treturn this.getCell(this.activeRange.start.row, this.activeRange.start.col);\n\t}\n\t\n\tgetRowByRangePos(pos) {\n\t\treturn this.getTableRows()[pos];\n\t}\n\t\n\tgetColumnByRangePos(pos) {\n\t\treturn this.getTableColumns()[pos];\n\t}\n\t\n\tgetTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\tgetTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\taddRange(start, end) {\n\t\tvar range;\n\t\t\n\t\tif(this.maxRanges !== true && this.ranges.length >= this.maxRanges){\n\t\t\tthis.ranges.shift().destroy();\n\t\t}\n\t\t\n\t\trange = new Range(this.table, this, start, end);\n\t\t\n\t\tthis.activeRange = range;\n\t\tthis.ranges.push(range);\n\t\tthis.rangeContainer.appendChild(range.element);\n\t\t\n\t\treturn range;\n\t}\n\t\n\tresetRanges() {\n\t\tvar range, cell;\n\t\t\n\t\tthis.ranges.forEach((range) => range.destroy());\n\t\tthis.ranges = [];\n\t\t\n\t\trange = this.addRange();\n\t\t\n\t\tif(this.table.rowManager.activeRows.length){\n\t\t\tcell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0];\n\n\t\t\tif(cell){\n\t\t\t\trange.setBounds(cell);\n\t\t\t\tthis.initializeFocus(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn range;\n\t}\n\t\n\ttableDestroyed(){\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t\tthis.table.rowManager.element.removeEventListener(\"keydown\", this.keyDownEvent);\n\t}\n\t\n\tselectedRows(component) {\n\t\treturn component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows();\n\t}\n\t\n\tselectedColumns(component) {\n\t\treturn component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();\n\t}\n}\n\nSelectRange.moduleName = \"selectRange\";\n\nexport default SelectRange;\n","import Module from '../../core/Module.js';\nimport Cell from '../../core/cell/Cell.js';\n\nclass Tooltip extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.tooltipSubscriber = null,\n\t\tthis.headerSubscriber = null,\n\t\t\n\t\tthis.timeout = null;\n\t\tthis.popupInstance = null;\n\t\t\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \n\t\t\n\t\tthis.registerColumnOption(\"tooltip\");\n\t\tthis.registerColumnOption(\"headerTooltip\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheckMsg(\"tooltipGenerationMode\", \"This option is no longer needed as tooltips are always generated on hover now\");\n\t}\t\n\t\n\tinitializeColumn(column){\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\n\t\t\tthis.headerSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\n\t\t}\n\t\t\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\n\t\t\tthis.tooltipSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\n\t\t}\n\t}\n\t\n\tmousemoveCheck(action, e, component){\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\n\t\t\n\t\tif(tooltip){\n\t\t\tthis.clearPopup();\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\n\t\t}\n\t}\n\n\tmouseoutCheck(action, e, component){\n\t\tif(!this.popupInstance){\n\t\t\tthis.clearPopup();\n\t\t}\n\t}\n\t\n\tclearPopup(action, e, component){\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = null;\n\t\t\n\t\tif(this.popupInstance){\n\t\t\tthis.popupInstance.hide();\n\t\t}\n\t}\n\t\n\tloadTooltip(e, component, tooltip){\n\t\tvar contentsEl, renderedCallback, coords;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(typeof tooltip === \"function\"){\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\n\t\t}\n\t\t\n\t\tif(tooltip instanceof HTMLElement){\n\t\t\tcontentsEl = tooltip;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\t\n\t\t\tif(tooltip === true){\n\t\t\t\tif(component instanceof Cell){\n\t\t\t\t\ttooltip = component.value;\n\t\t\t\t}else{\n\t\t\t\t\tif(component.definition.field){\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\ttooltip = component.definition.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcontentsEl.innerHTML = tooltip;\n\t\t}\n\t\t\n\t\tif(tooltip || tooltip === 0 || tooltip === false){\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\n\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault());\n\t\t\t\n\t\t\tthis.popupInstance = this.popup(contentsEl);\n\t\t\t\n\t\t\tif(typeof renderedCallback === \"function\"){\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\n\t\t\t}\n\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\n\t\t\t\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\n\t\t\t\tthis.popupInstance = null;\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nTooltip.moduleName = \"tooltip\";\n\nexport default Tooltip;\n","export default {\n\t//is integer\n\tinteger: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//must be alphanumeric\n\talphanumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvar reg = new RegExp(/^[a-z0-9]+$/i);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//maximum value\n\tmax: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\n\t//minimum string length\n\tminLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(typeof parameters == \"string\"){\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function(row){\n\t\t\tvar data = row.getData();\n\n\t\t\tif(data !== cellData){\n\t\t\t\tif(value == column.getFieldValue(data)){\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired:function(cell, value, parameters){\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultValidators from './defaults/validators.js';\n\nclass Validate extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.invalidCells = [];\n\t\t\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\n\t\t\n\t\tthis.registerColumnOption(\"validator\");\n\t\t\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\n\t}\n\t\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Event Handling //////////\n\t///////////////////////////////////\n\t\n\teditValidate(cell, value, previousValue){\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\n\t\t\n\t\t// allow time for editor to make render changes then style cell\n\t\tif(valid !== true){\n\t\t\tsetTimeout(() => {\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn valid;\n\t}\n\t\n\teditorClear(cell, cancelled){\n\t\tif(cancelled){\n\t\t\tif(cell.column.modules.validate){\n\t\t\t\tthis.cellValidate(cell);\n\t\t\t}\n\t\t}\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t}\n\t\n\teditedClear(cell){\n\t\tif(cell.modules.validate){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Cell Functions /////////\n\t///////////////////////////////////\n\t\n\tcellIsValid(cell){\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\n\t}\n\t\n\tcellValidate(cell){\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Column Functions ////////\n\t///////////////////////////////////\n\t\n\tcolumnValidate(column){\n\t\tvar invalid = [];\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Row Functions //////////\n\t///////////////////////////////////\n\t\n\trowValidate(row){\n\t\tvar invalid = [];\n\t\t\n\t\trow.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\tuserClearCellValidation(cells){\n\t\tif(!cells){\n\t\t\tcells = this.getInvalidCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.clearValidation(cell._getSelf());\n\t\t});\n\t}\n\t\n\tuserValidate(cells){\n\t\tvar output = [];\n\t\t\n\t\t//clear row data\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trow = row.getComponent();\n\t\t\t\n\t\t\tvar valid = row.validate();\n\t\t\t\n\t\t\tif(valid !== true){\n\t\t\t\toutput = output.concat(valid);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output.length ? output : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.validator !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//validate\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = [],\n\t\tvalidator;\n\t\t\n\t\tif(column.definition.validator){\n\t\t\t\n\t\t\tif(Array.isArray(column.definition.validator)){\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\n\t\t\t\t\tvalidator = self._extractValidator(item);\n\t\t\t\t\t\n\t\t\t\t\tif(validator){\n\t\t\t\t\t\tconfig.push(validator);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\t\t\t\t\n\t\t\t\tif(validator){\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.validate = config.length ? config : false;\n\t\t}\n\t}\n\t\n\t_extractValidator(value){\n\t\tvar type, params, pos;\n\t\t\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tpos = value.indexOf(':');\n\t\t\t\n\t\t\t\tif(pos > -1){\n\t\t\t\t\ttype = value.substring(0,pos);\n\t\t\t\t\tparams = value.substring(pos+1);\n\t\t\t\t}else{\n\t\t\t\t\ttype = value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\treturn this._buildValidator(type, params);\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\treturn this._buildValidator(value);\n\t\t\t\n\t\t\tcase \"object\":\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t}\n\t}\n\t\n\t_buildValidator(type, params){\n\t\t\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\n\t\t\n\t\tif(!func){\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn {\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\n\t\t\t\tfunc:func,\n\t\t\t\tparams:params,\n\t\t\t};\n\t\t}\n\t}\n\t\n\tvalidate(validators, cell, value){\n\t\tvar self = this,\n\t\tfailedValidators = [],\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\n\t\tif(validators){\n\t\t\tvalidators.forEach((item) => {\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\n\t\t\t\t\tfailedValidators.push({\n\t\t\t\t\t\ttype:item.type,\n\t\t\t\t\t\tparameters:item.params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(!cell.modules.validate){\n\t\t\tcell.modules.validate = {};\n\t\t}\n\t\t\n\t\tif(!failedValidators.length){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}else{\n\t\t\tcell.modules.validate.invalid = failedValidators;\n\t\t\t\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t}\n\t\t\t\n\t\t\tif(invalidIndex == -1){\n\t\t\t\tthis.invalidCells.push(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn failedValidators.length ? failedValidators : true;\n\t}\n\t\n\tgetInvalidCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.invalidCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearValidation(cell){\n\t\tvar invalidIndex;\n\t\t\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\n\t\t\t\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\t\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nValidate.moduleName = \"validate\";\n\n//load defaults\nValidate.validators = defaultValidators;\n\nexport default Validate;\n","export default class OptionsList {\n\tconstructor(table, msgType, defaults = {}){\n\t\tthis.table = table;\n\t\tthis.msgType = msgType;\n\t\tthis.registeredDefaults = Object.assign({}, defaults);\n\t}\n\t\n\tregister(option, value){\n\t\tthis.registeredDefaults[option] = value;\n\t}\n\t\n\tgenerate(defaultOptions, userOptions = {}){\n\t\tvar output = Object.assign({}, this.registeredDefaults),\n\t\twarn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true;\n\t\t\n\t\tObject.assign(output, defaultOptions);\n\t\t\n\t\tfor (let key in userOptions){\n\t\t\tif(!output.hasOwnProperty(key)){\n\t\t\t\tif(warn){\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key);\n\t\t\t\t}\n\n\t\t\t\toutput[key] = userOptions.key;\n\t\t\t}\n\t\t}\n\t\n\t\t\n\t\tfor (let key in output){\n\t\t\tif(key in userOptions){\n\t\t\t\toutput[key] = userOptions[key];\n\t\t\t}else{\n\t\t\t\tif(Array.isArray(output[key])){\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\n\t\t\t\t\tdelete output[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Renderer extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.elementVertical = table.rowManager.element;\n\t\tthis.elementHorizontal = table.columnManager.element;\n\t\tthis.tableElement = table.rowManager.tableElement;\n\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determine how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the container without resizing it)\n\t}\n\n\n\t///////////////////////////////////\n\t/////// Internal Bindings /////////\n\t///////////////////////////////////\n\n\tinitialize(){\n\t\t//initialize core functionality\n\t}\n\n\tclearRows(){\n\t\t//clear down existing rows layout\n\t}\n\n\tclearColumns(){\n\t\t//clear down existing columns layout\n\t}\n\n\n\treinitializeColumnWidths(columns){\n\t\t//resize columns to fit data\n\t}\n\n\n\trenderRows(){\n\t\t//render rows from a clean slate\n\t}\n\n\trenderColumns(){\n\t\t//render columns from a clean slate\n\t}\n\n\trerenderRows(callback){\n\t\t// rerender rows and keep position\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t}\n\n\trerenderColumns(update, blockRedraw){\n\t\t//rerender columns\n\t}\n\n\trenderRowCells(row){\n\t\t//render the cells in a row\n\t}\n\n\trerenderRowCells(row, force){\n\t\t//rerender the cells in a row\n\t}\n\n\tscrollColumns(left, dir){\n\t\t//handle horizontal scrolling\n\t}\n\n\tscrollRows(top, dir){\n\t\t//handle vertical scrolling\n\t}\n\n\tresize(){\n\t\t//container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\n\t}\n\n\tscrollToRow(row){\n\t\t//scroll to a specific row\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\t//determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\t//return the visible rows\n\t\treturn [];\n\t}\n\n\t///////////////////////////////////\n\t//////// Helper Functions /////////\n\t///////////////////////////////////\n\n\trows(){\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t/////// External Triggers /////////\n\t/////// (DO NOT OVERRIDE) /////////\n\t///////////////////////////////////\n\n\tclear(){\n\t\t//clear down existing layout\n\t\tthis.clearRows();\n\t\tthis.clearColumns();\n\t}\n\n\trender(){\n\t\t//render from a clean slate\n\t\tthis.renderRows();\n\t\tthis.renderColumns();\n\t}\n\n\trerender(callback){\n\t\t// rerender and keep position\n\t\tthis.rerenderRows();\n\t\tthis.rerenderColumns();\n\t}\n\n\tscrollToRowPosition(row, position, ifVisible){\n\t\tvar rowIndex = this.rows().indexOf(row),\n\t\trowEl = row.getElement(),\n\t\toffset = 0;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(rowIndex > -1){\n\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\n\t\t\t\t}\n\n\t\t\t\t//check row visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\n\t\t\t\t}\n\n\t\t\t\tif(position === \"nearest\"){\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\";\n\t\t\t\t}\n\n\t\t\t\t//scroll to row\n\t\t\t\tthis.scrollToRow(row);\n\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"top\":\n\t\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t\t}\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class BasicHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\trenderRowCells(row, inFragment) {\n\t\tconst rowFrag = document.createDocumentFragment();\n\t\trow.cells.forEach((cell) => {\n\t\t\trowFrag.appendChild(cell.getElement());\n\t\t});\n\t\trow.element.appendChild(rowFrag);\n\t\t\n\t\tif(!inFragment){\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tcolumns.forEach(function(column){\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class VirtualDomHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftCol = 0;\n\t\tthis.rightCol = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\t\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t\t\n\t\tthis.fitDataColAvg = 0;\n\t\t\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\n\t\t\n\t\tthis.visibleRows = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.isFitData = false;\n\t\t\n\t\tthis.columns = [];\n\t}\n\t\n\tinitialize(){\n\t\tthis.compatibilityCheck();\n\t\tthis.layoutCheck();\n\t\tthis.vertScrollListen();\n\t}\n\t\n\tcompatibilityCheck(){\t\t\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\n\t\t}\n\t\t\n\t\tif(this.options(\"responsiveLayout\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\n\t\t}\n\t\t\n\t\tif(this.options(\"rtl\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\n\t\t}\n\t}\n\t\n\tlayoutCheck(){\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\n\t}\n\t\n\tvertScrollListen(){\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\n\t}\n\t\n\tclearVisRowCache(){\n\t\tthis.visibleRows = null;\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\t\n\trenderColumns(row, force){\n\t\tthis.dataChange();\n\t}\n\t\n\t\n\tscrollColumns(left, dir){\n\t\tif(this.scrollLeft != left){\n\t\t\tthis.scrollLeft = left;\n\t\t\t\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\n\t\t}\n\t}\n\t\n\tcalcWindowBuffer(){\n\t\tvar buffer = this.elementVertical.clientWidth;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\tvar width = column.getWidth();\n\t\t\t\t\n\t\t\t\tif(width > buffer){\n\t\t\t\t\tbuffer = width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.windowBuffer = buffer * 2;\n\t}\n\t\n\trerenderColumns(update, blockRedraw){\t\t\n\t\tvar old = {\n\t\t\tcols:this.columns,\n\t\t\tleftCol:this.leftCol,\n\t\t\trightCol:this.rightCol,\n\t\t},\n\t\tcolPos = 0;\n\t\t\n\t\tif(update && !this.initialized){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.clear();\n\t\t\n\t\tthis.calcWindowBuffer();\n\t\t\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\n\t\t\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tvar config = {},\n\t\t\twidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tif(!column.modules.frozen){\t\t\t\n\t\t\t\t\twidth = column.getWidth();\n\n\t\t\t\t\tconfig.leftPos = colPos;\n\t\t\t\t\tconfig.rightPos = colPos + width;\n\t\t\t\t\t\n\t\t\t\t\tconfig.width = width;\n\t\t\t\t\t\n\t\t\t\t\tif (this.isFitData) {\n\t\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\n\t\t\t\t\t\t//column is visible\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.leftCol == -1){\n\t\t\t\t\t\t\tthis.leftCol = this.columns.length;\n\t\t\t\t\t\t\tthis.vDomPadLeft = colPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.rightCol = this.columns.length;\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// column is hidden\n\t\t\t\t\t\tif(this.leftCol !== -1){\n\t\t\t\t\t\t\tthis.vDomPadRight += width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.columns.push(column);\n\t\t\t\t\t\n\t\t\t\t\tcolumn.modules.vdomHoz = config;\n\t\t\t\t\t\n\t\t\t\t\tcolPos += width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tif(!update || this.reinitChanged(old)){\n\t\t\t\tthis.reinitializeRows();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\n\t}\n\t\n\trenderRowCells(row){\n\t\tif(this.initialized){\n\t\t\tthis.initializeRow(row);\n\t\t}else{\n\t\t\tconst rowFrag = document.createDocumentFragment();\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\trowFrag.appendChild(cell.getElement());\n\t\t\t});\n\t\t\trow.element.appendChild(rowFrag);\n\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\trerenderRowCells(row, force){\n\t\tthis.reinitializeRow(row, force);\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\tthis.columns[i].reinitializeWidth();\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\t\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tclear(){\n\t\tthis.columns = [];\n\t\t\n\t\tthis.leftCol = -1;\n\t\tthis.rightCol = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t}\n\t\n\tdataChange(){\n\t\tvar change = false,\n\t\trow, rowEl;\n\t\t\n\t\tif(this.isFitData){\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif(!column.definition.width && column.visible){\n\t\t\t\t\tchange = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\t\t\n\t\t\t\trow = this.chain(\"rows-sample\", [1], [], () => {\n\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\n\t\t\t\t})[0];\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trowEl = row.getElement();\n\t\t\t\t\t\n\t\t\t\t\trow.generateCells();\n\t\t\t\t\t\n\t\t\t\t\tthis.tableElement.appendChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tfor(let colEnd = 0; colEnd < row.cells.length; colEnd++){\n\t\t\t\t\t\tlet cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\t\t\t\t\t\t\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\n\t\t\t\tthis.layoutRefresh();\n\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treinitChanged(old){\n\t\tvar match = true;\n\t\t\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\told.cols.forEach((col, i) => {\n\t\t\tif(col !== this.columns[i]){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn !match;\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.getVisibleRows(),\n\t\totherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\n\t\tvisibleRows.forEach((row) => {\n\t\t\tthis.reinitializeRow(row, true);\n\t\t});\n\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t}\n\t\n\tgetVisibleRows(){\n\t\tif (!this.visibleRows){\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\n\t\t}\n\t\t\n\t\treturn this.visibleRows;\t\n\t}\n\t\n\tscroll(diff){\n\t\tthis.vDomScrollPosLeft += diff;\n\t\tthis.vDomScrollPosRight += diff;\n\t\t\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\n\t\t\tthis.rerenderColumns();\n\t\t}else{\n\t\t\tif(diff > 0){\n\t\t\t\t//scroll right\n\t\t\t\tthis.addColRight();\n\t\t\t\tthis.removeColLeft();\n\t\t\t}else{\n\t\t\t\t//scroll left\n\t\t\t\tthis.addColLeft();\n\t\t\t\tthis.removeColRight();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcolPositionAdjust (start, end, diff){\n\t\tfor(let i = start; i < end; i++){\n\t\t\tlet column = this.columns[i];\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\n\t\t}\n\t}\n\t\n\taddColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\n\t\t\tlet column = this.columns[this.rightCol + 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling);\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\n\t\t\t\t\t\tthis.vDomPadRight = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\t\t\t\t}\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\taddColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol - 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement());\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tif(diff){\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.rightCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\n\t\t\t\t\tthis.rightCol --;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\n\t\t\t\t\tthis.leftCol ++;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tfitDataColActualWidthCheck(column){\n\t\tvar newWidth, widthDiff;\n\t\t\n\t\tif(column.modules.vdomHoz.fitDataCheck){\n\t\t\tcolumn.reinitializeWidth();\n\t\t\t\n\t\t\tnewWidth = column.getWidth();\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\n\t\t\t\n\t\t\tif(widthDiff){\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\n\t\t}\n\t\t\n\t\treturn widthDiff;\n\t}\n\t\n\tinitializeRow(row){\n\t\tif(row.type !== \"group\"){\n\t\t\trow.modules.vdomHoz = {\n\t\t\t\tleftCol:this.leftCol,\n\t\t\t\trightCol:this.rightCol,\n\t\t\t};\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\t\tthis.appendCell(row, this.columns[i]);\n\t\t\t}\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tappendCell(row, column){\n\t\tif(column && column.visible){\n\t\t\tlet cell = row.getCell(column);\n\t\t\t\n\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\tcell.cellRendered();\n\t\t}\n\t}\n\t\n\treinitializeRow(row, force){\n\t\tif(row.type !== \"group\"){\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\n\t\t\t\t\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\n\n\t\t\t\tthis.initializeRow(row);\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Column from './column/Column.js';\nimport ColumnComponent from './column/ColumnComponent.js';\nimport Helpers from './tools/Helpers.js';\nimport OptionsList from './tools/OptionsList.js';\n\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\n\nimport defaultColumnOptions from './column/defaults/options.js';\n\nexport default class ColumnManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.blockHozScrollEvent = false;\n\t\tthis.headersElement = null;\n\t\tthis.contentsElement = null;\n\t\tthis.element = null ; //containing element\n\t\tthis.columns = []; // column definition object\n\t\tthis.columnsByIndex = []; //columns by index\n\t\tthis.columnsByField = {}; //columns by field\n\t\tthis.scrollLeft = 0;\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockUpdate = null; //store latest redraw update only status\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t////////////// Setup Functions /////////////////\n\t\n\tinitialize(){\n\t\tthis.initializeRenderer();\n\t\t\n\t\tthis.headersElement = this.createHeadersElement();\n\t\tthis.contentsElement = this.createHeaderContentsElement();\n\t\tthis.element = this.createHeaderElement();\n\t\t\n\t\tthis.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild);\n\t\tthis.element.insertBefore(this.contentsElement, this.element.firstChild);\n\n\t\tthis.initializeScrollWheelWatcher();\n\t\t\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.padVerticalScrollbar.bind(this));\n\t}\n\n\tpadVerticalScrollbar(width){\n\t\tif(this.table.rtl){\n\t\t\tthis.headersElement.style.marginLeft = width + \"px\";\n\t\t}else{\n\t\t\tthis.headersElement.style.marginRight = width + \"px\";\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\n\t\t\t\"basic\": RendererBasicHorizontal,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderHorizontal;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderHorizontal);\n\t\t}\n\t}\n\t\n\t\n\tcreateHeadersElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-headers\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\treturn el;\n\t}\n\n\tcreateHeaderContentsElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header-contents\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateHeaderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tif(!this.table.options.headerVisible){\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\n\t\t}\n\t\t\n\t\treturn el;\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return containing contents element\n\tgetContentsElement(){\n\t\treturn this.contentsElement;\n\t}\n\t\n\t\n\t//return header containing element\n\tgetHeadersElement(){\n\t\treturn this.headersElement;\n\t}\n\t\n\t//scroll horizontally to match table body\n\tscrollHorizontal(left){\n\t\tthis.contentsElement.scrollLeft = left;\n\n\t\tthis.scrollLeft = left;\n\t\t\n\t\tthis.renderer.scrollColumns(left);\n\t}\n\n\tinitializeScrollWheelWatcher(){\n\t\tthis.contentsElement.addEventListener(\"wheel\", (e) => {\n\t\t\tvar left;\n\n\t\t\tif(e.deltaX){\n\t\t\t\tleft = this.contentsElement.scrollLeft + e.deltaX;\n\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t///////////// Column Setup Functions /////////////\n\tgenerateColumnsFromRowData(data){\n\t\tvar cols = [],\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\n\t\trow, sorter;\n\t\t\n\t\tif(data && data.length){\n\t\t\t\n\t\t\trow = data[0];\n\t\t\t\n\t\t\tfor(var key in row){\n\t\t\t\tlet col = {\n\t\t\t\t\tfield:key,\n\t\t\t\t\ttitle:key,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet value = row[key];\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(value)){\n\t\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcol.sorter = sorter;\n\t\t\t\t\n\t\t\t\tcols.push(col);\n\t\t\t}\n\t\t\t\n\t\t\tif(definitions){\n\t\t\t\t\n\t\t\t\tswitch(typeof definitions){\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(definitions)){\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(match){\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.table.options.columns = cols;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.table.options.columns = cols;\n\t\t\t}\n\t\t\t\n\t\t\tthis.setColumns(this.table.options.columns);\n\t\t}\n\t}\n\t\n\tsetColumns(cols, row){\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\n\t\t\n\t\tthis.columns = [];\n\t\tthis.columnsByIndex = [];\n\t\tthis.columnsByField = {};\n\t\t\n\t\tthis.dispatch(\"columns-loading\");\n\t\t\n\t\tcols.forEach((def, i) => {\n\t\t\tthis._addColumn(def);\n\t\t});\n\t\t\n\t\tthis._reIndexColumns();\n\t\t\n\t\tthis.dispatch(\"columns-loaded\");\n\t\t\n\t\tthis.rerenderColumns(false, true);\n\t\t\n\t\tthis.redraw(true);\n\t}\n\t\n\t_addColumn(definition, before, nextToColumn){\n\t\tvar column = new Column(definition, this),\n\t\tcolEl = column.getElement(),\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\t\t\n\t\tif(nextToColumn && index > -1){\n\t\t\tvar topColumn = nextToColumn.getTopColumn();\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\n\t\t\tvar nextEl = topColumn.getElement();\n\t\t\t\n\t\t\tif(before){\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t\t}else{\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t\t}\n\t\t}else{\n\t\t\tif(before){\n\t\t\t\tthis.columns.unshift(column);\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t\t}else{\n\t\t\t\tthis.columns.push(column);\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t\t}\n\t\t}\n\t\t\n\t\tcolumn.columnRendered();\n\t\t\n\t\treturn column;\n\t}\n\t\n\tregisterColumnField(col){\n\t\tif(col.definition.field){\n\t\t\tthis.columnsByField[col.definition.field] = col;\n\t\t}\n\t}\n\t\n\tregisterColumnPosition(col){\n\t\tthis.columnsByIndex.push(col);\n\t}\n\t\n\t_reIndexColumns(){\n\t\tthis.columnsByIndex = [];\n\t\t\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t}\n\t\n\t//ensure column headers take up the correct amount of space in column groups\n\tverticalAlignHeaders(){\n\t\tvar minHeight = 0;\n\t\t\n\t\tif(!this.redrawBlock){\n\n\t\t\tthis.headersElement.style.height=\"\";\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.clearVerticalAlign();\n\t\t\t});\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tvar height = column.getHeight();\n\t\t\t\t\n\t\t\t\tif(height > minHeight){\n\t\t\t\t\tminHeight = height;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.headersElement.style.height = minHeight + \"px\";\n\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\n\t\t\t});\n\t\t\t\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\t//////////////// Column Details /////////////////\n\tfindColumn(subject){\n\t\tvar columns;\n\n\t\tif(typeof subject == \"object\"){\n\t\t\t\n\t\t\tif(subject instanceof Column){\n\t\t\t\t//subject is column element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof ColumnComponent){\n\t\t\t\t//subject is public column component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\n\t\t\t\tcolumns = [];\n\n\t\t\t\tthis.columns.forEach((column) => {\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t\t});\n\n\t\t\t\t//subject is a HTML element of the column header\n\t\t\t\tlet match = columns.find((column) => {\n\t\t\t\t\treturn column.element === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\t//subject should be treated as the field name of the column\n\t\t\treturn this.columnsByField[subject] || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetColumnByField(field){\n\t\treturn this.columnsByField[field];\n\t}\n\t\n\tgetColumnsByFieldRoot(root){\n\t\tvar matches = [];\n\t\t\n\t\tObject.keys(this.columnsByField).forEach((field) => {\n\t\t\tvar fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field;\n\t\t\tif(fieldRoot === root){\n\t\t\t\tmatches.push(this.columnsByField[field]);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn matches;\n\t}\n\t\n\tgetColumnByIndex(index){\n\t\treturn this.columnsByIndex[index];\n\t}\n\t\n\tgetFirstVisibleColumn(){\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\n\t\t\treturn col.visible;\n\t\t});\n\t\t\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\n\t}\n\n\tgetVisibleColumnsByIndex() {\n\t\treturn this.columnsByIndex.filter((col) => col.visible);\n\t}\n\t\n\tgetColumns(){\n\t\treturn this.columns;\n\t}\n\t\n\tfindColumnIndex(column){\n\t\treturn this.columnsByIndex.findIndex((col) => {\n\t\t\treturn column === col;\n\t\t});\n\t}\n\t\n\t//return all columns that are not groups\n\tgetRealColumns(){\n\t\treturn this.columnsByIndex;\n\t}\n\t\n\t//traverse across columns and call action\n\ttraverse(callback){\n\t\tthis.columnsByIndex.forEach((column,i) =>{\n\t\t\tcallback(column, i);\n\t\t});\n\t}\n\t\n\t//get definitions of actual columns\n\tgetDefinitions(active){\n\t\tvar output = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(!active || (active && column.visible)){\n\t\t\t\toutput.push(column.getDefinition());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\t//get full nested definition tree\n\tgetDefinitionTree(){\n\t\tvar output = [];\n\t\t\n\t\tthis.columns.forEach((column) => {\n\t\t\toutput.push(column.getDefinition(true));\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(structured){\n\t\tvar output = [],\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetWidth(){\n\t\tvar width = 0;\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn width;\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\n\t\t\n\t\tif(after){\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t\t}\n\t\t\n\t\tthis.moveColumnActual(from, to, after);\n\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\t\n\tmoveColumnActual(from, to, after){\n\t\tif(from.parent.isGroup){\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t\t}else{\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t\t}\n\t\t\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\t\t\n\t\tthis.rerenderColumns(true);\n\t\t\n\t\tthis.dispatch(\"column-moved\", from, to, after);\n\t\t\n\t\tif(this.subscribedExternal(\"columnMoved\")){\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\n\t\t}\n\t}\n\t\n\t_moveColumnInArray(columns, from, to, after, updateRows){\n\t\tvar\tfromIndex = columns.indexOf(from),\n\t\ttoIndex, rows = [];\n\t\t\n\t\tif (fromIndex > -1) {\n\t\t\t\n\t\t\tcolumns.splice(fromIndex, 1);\n\t\t\t\n\t\t\ttoIndex = columns.indexOf(to);\n\t\t\t\n\t\t\tif (toIndex > -1) {\n\t\t\t\t\n\t\t\t\tif(after){\n\t\t\t\t\ttoIndex = toIndex+1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\ttoIndex = fromIndex;\n\t\t\t}\n\t\t\t\n\t\t\tcolumns.splice(toIndex, 0, from);\n\t\t\t\n\t\t\tif(updateRows){\n\t\t\t\t\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\n\t\t\t\t\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\n\t\t\t\t\n\t\t\t\trows.forEach(function(row){\n\t\t\t\t\tif(row.cells.length){\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n\t\n\tscrollToColumn(column, position, ifVisible){\n\t\tvar left = 0,\n\t\toffset = column.getLeftOffset(),\n\t\tadjust = 0,\n\t\tcolEl = column.getElement();\n\t\t\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\tadjust = -this.element.clientWidth / 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//check column visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//calculate scroll position\n\t\t\t\tleft = offset + adjust;\n\t\t\t\t\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.scrollHorizontal(left);\n\t\t\t\t\n\t\t\t\tresolve();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\t\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tgenerateCells(row){\n\t\tvar cells = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tcells.push(column.generateCell(row));\n\t\t});\n\t\t\n\t\treturn cells;\n\t}\n\t\n\t//////////////// Column Management /////////////////\n\tgetFlexBaseWidth(){\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\n\t\tfixedWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar if present\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\t\t\n\t\tthis.columnsByIndex.forEach(function(column){\n\t\t\tvar width, minWidth, colWidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\twidth = column.definition.width || 0;\n\t\t\t\t\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\t\t\t\t\n\t\t\t\tif(typeof(width) == \"string\"){\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tcolWidth = width;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn fixedWidth;\n\t}\n\t\n\taddColumn(definition, before, nextToColumn){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\n\t\t\t\n\t\t\tthis._reIndexColumns();\n\t\t\t\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\n\t\t\t\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\t\t\t\n\t\t\tthis.redraw(true);\n\t\t\t\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t\t\n\t\t\tthis.rerenderColumns();\n\t\t\t\n\t\t\tresolve(column);\n\t\t});\n\t}\n\t\n\t//remove column from system\n\tderegisterColumn(column){\n\t\tvar field = column.getField(),\n\t\tindex;\n\t\t\n\t\t//remove from field list\n\t\tif(field){\n\t\t\tdelete this.columnsByField[field];\n\t\t}\n\t\t\n\t\t//remove from index list\n\t\tindex = this.columnsByIndex.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columnsByIndex.splice(index, 1);\n\t\t}\n\t\t\n\t\t//remove from column list\n\t\tindex = this.columns.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\t\t\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.redraw();\n\t}\n\t\n\trerenderColumns(update, silent){\n\t\tif(!this.redrawBlock){\n\t\t\tthis.renderer.rerenderColumns(update, silent);\n\t\t}else{\n\t\t\tif(update === false || (update === true && this.redrawBlockUpdate === null)){\n\t\t\t\tthis.redrawBlockUpdate = update;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockUpdate = null;\n\t}\n\t\n\trestoreRedraw(){\n\t\tthis.redrawBlock = false;\n\t\tthis.verticalAlignHeaders();\n\t\tthis.renderer.rerenderColumns(this.redrawBlockUpdate);\n\t\t\n\t}\n\t\n\t//redraw columns\n\tredraw(force){\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.verticalAlignHeaders();\n\t\t}\n\t\t\n\t\tif(force){\n\t\t\tthis.table.rowManager.resetScroll();\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t}\n\t\t\n\t\tif(!this.confirm(\"table-redrawing\", force)){\n\t\t\tthis.layoutRefresh(force);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-redraw\", force);\n\t\t\n\t\tthis.table.footerManager.redraw();\n\t}\n}","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class BasicVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.verticalFillMode = \"fill\";\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t}\n\t\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\t\t\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\telement.scrollTop = 0;\n\t\telement.scrollLeft = 0;\n\t\t\n\t\telement.style.minWidth = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\t}\n\t\n\trenderRows() {\n\t\tvar element = this.tableElement,\n\t\tonlyGroupHeaders = true,\n\t\ttableFrag = document.createDocumentFragment(),\n\t\trows = this.rows();\n\t\t\n\t\trows.forEach((row, index) => {\n\t\t\tthis.styleRow(row, index);\n\t\t\trow.initialize(false, true);\n\t\t\t\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t\t\n\t\t\ttableFrag.appendChild(row.getElement());\n\t\t});\n\t\t\n\t\telement.appendChild(tableFrag);\n\t\t\n\t\trows.forEach((row) => {\n\t\t\trow.rendered();\n\t\t\t\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.calcHeight(true);\n\t\t\t}\n\t\t});\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.setCellHeight();\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n\t\n\trerenderRows(callback){\t\n\t\tthis.clearRows();\n\t\t\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t\t\n\t\tthis.renderRows();\n\n\t\tif(!this.rows().length){\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\t}\n\t\n\tscrollToRowNearestTop(row){\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\n\t\t\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\n\t}\n\t\n\tscrollToRow(row){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\n\t}\n\t\n\tvisibleRows(includingBuffer){\n\t\treturn this.rows();\n\t}\n\t\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class VirtualDomVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.verticalFillMode = \"fill\";\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\t\tthis.vDomBottom = 0; //hold position for last rendered row in the virtual DOM\n\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\t}\n\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\telement.style.paddingTop = \"\";\n\t\telement.style.paddingBottom = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\n\t\tthis.elementVertical.scrollTop = 0;\n\t\tthis.elementVertical.scrollLeft = 0;\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomTop = 0;\n\t\tthis.vDomBottom = 0;\n\t\tthis.vDomTopPad = 0;\n\t\tthis.vDomBottomPad = 0;\n\t\tthis.vDomScrollPosTop = 0;\n\t\tthis.vDomScrollPosBottom = 0;\n\t}\n\n\trenderRows(){\n\t\tthis._virtualRenderFill();\n\t}\n\n\trerenderRows(callback){\n\t\tvar scrollTop = this.elementVertical.scrollTop;\n\t\tvar topRow = false;\n\t\tvar topOffset = false;\n\n\t\tvar left = this.table.rowManager.scrollLeft;\n\n\t\tvar rows = this.rows();\n\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\n\t\t\tif(rows[i]){\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\n\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\ttopRow = i;\n\t\t\t\t}else{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trows.forEach((row) => {\n\t\t\trow.deinitializeHeight();\n\t\t});\n\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\n\t\tif(this.rows().length){\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\n\t\t}else{\n\t\t\tthis.clear();\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\n\t\tthis.scrollColumns(left);\n\t}\n\n\tscrollColumns(left){\n\t\tthis.table.rowManager.scrollHorizontal(left);\n\t}\n\n\tscrollRows(top, dir){\n\t\tvar topDiff = top - this.vDomScrollPosTop;\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\n\t\tvar margin = this.vDomWindowBuffer * 2;\n\t\tvar rows = this.rows();\n\n\t\tthis.scrollTop = top;\n\n\t\tif(-topDiff > margin || bottomDiff > margin){\n\t\t\t//if big scroll redraw table;\n\t\t\tvar left = this.table.rowManager.scrollLeft;\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\n\t\t\tthis.scrollColumns(left);\n\t\t}else{\n\n\t\t\tif(dir){\n\t\t\t\t//scrolling up\n\t\t\t\tif(topDiff < 0){\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\n\t\t\t\t}\n\n\t\t\t\tif(bottomDiff < 0){\n\t\t\t\t\t//hide bottom row if needed\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(bottomDiff >= 0){\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\n\t\t\t\t}\n\n\t\t\t\t//scrolling down\n\t\t\t\tif(topDiff >= 0){\n\t\t\t\t\t//hide top row if needed\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresize(){\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\tvar rowIndex = this.rows().indexOf(row);\n\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\n\t}\n\n\tscrollToRow(row){\n\t\tvar index = this.rows().indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tthis._virtualRenderFill(index, true);\n\t\t}\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\tvar topEdge = this.elementVertical.scrollTop,\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\n\t\ttopFound = false,\n\t\ttopRow = 0,\n\t\tbottomRow = 0,\n\t\trows = this.rows();\n\n\t\tif(includingBuffer){\n\t\t\ttopRow = this.vDomTop;\n\t\t\tbottomRow = this.vDomBottom;\n\t\t}else{\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\t\t\t\tif(rows[i]){\n\t\t\t\t\tif(!topFound){\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows.slice(topRow, bottomRow + 1);\n\t}\n\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\n\t//full virtual render\n\t_virtualRenderFill(position, forceMove, offset) {\n\t\tvar\telement = this.tableElement,\n\t\tholder = this.elementVertical,\n\t\ttopPad = 0,\n\t\trowsHeight = 0,\n\t\trowHeight = 0,\n\t\theightOccupied = 0,\n\t\ttopPadHeight = 0,\n\t\ti = 0,\n\t\trows = this.rows(),\n\t\trowsCount = rows.length,\n\t\tindex = 0,\n\t\trow,\n\t\trowFragment,\n\t\trenderedRows = [],\n\t\ttotalRowsRendered = 0,\n\t\trowsToRender = 0,\n\t\tfixedHeight = this.table.rowManager.fixedHeight,\n\t\tcontainerHeight = this.elementVertical.clientHeight, \n\t\tavgRowHeight = this.table.options.rowHeight, \n\t\tresized = true;\n\n\t\tposition = position || 0;\n\n\t\toffset = offset || 0;\n\n\t\tif(!position){\n\t\t\tthis.clear();\n\t\t}else {\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\t\t//check if position is too close to bottom of table\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\n\n\t\t\tif(heightOccupied < containerHeight){\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\n\t\t\t\tif(position < 0){\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate initial pad\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\n\t\t\tposition -= topPad;\n\t\t}\n\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\n\t\t\tthis.vDomTop = position;\n\t\t\tthis.vDomBottom = position -1;\n\n\t\t\tif(fixedHeight || this.table.options.maxHeight) {\n\t\t\t\tif(avgRowHeight) {\n\t\t\t\t\trowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight);\n\t\t\t\t}\n\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender));\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowsToRender = rowsCount;\n\t\t\t}\n\n\t\t\twhile(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) {\n\t\t\t\trenderedRows = [];\n\t\t\t\trowFragment = document.createDocumentFragment();\n\n\t\t\t\ti = 0;\n\n\t\t\t\twhile ((i < rowsToRender) && this.vDomBottom < rowsCount -1) {\t\n\t\t\t\t\tindex = this.vDomBottom + 1,\n\t\t\t\t\trow = rows[index];\n\n\t\t\t\t\tthis.styleRow(row, index);\n\n\t\t\t\t\trow.initialize(false, true);\n\t\t\t\t\tif(!row.heightInitialized && !this.table.options.rowHeight){\n\t\t\t\t\t\trow.clearCellHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\trowFragment.appendChild(row.getElement());\n\t\t\t\t\trenderedRows.push(row);\n\t\t\t\t\tthis.vDomBottom ++;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tif(!renderedRows.length){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telement.appendChild(rowFragment);\n\t\t\t\t\n\t\t\t\t// NOTE: The next 3 loops are separate on purpose\n\t\t\t\t// This is to batch up the dom writes and reads which drastically improves performance \n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trow.rendered();\n\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.calcHeight(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.setCellHeight();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trowHeight = row.getHeight();\n\t\t\t\t\t\n\t\t\t\t\tif(totalRowsRendered < topPad){\n\t\t\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t\t\t}else {\n\t\t\t\t\t\trowsHeight += rowHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t}\n\t\t\t\t\ttotalRowsRendered++;\n\t\t\t\t});\n\n\t\t\t\tresized = this.table.rowManager.adjustTableSize();\n\t\t\t\tcontainerHeight = this.elementVertical.clientHeight;\n\t\t\t\tif(resized && (fixedHeight || this.table.options.maxHeight))\n\t\t\t\t{\n\t\t\t\t\tavgRowHeight = rowsHeight / totalRowsRendered;\n\t\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!position){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t\t//adjust row height to match average of rendered elements\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered);\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\n\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\n\t\t\t}else {\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t\t}\n\t\t\t\n\t\t\telement.style.paddingTop = this.vDomTopPad+\"px\";\n\t\t\telement.style.paddingBottom = this.vDomBottomPad+\"px\";\n\n\t\t\tif(forceMove){\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\n\t\t\t}\n\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\n\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\n\t\t\t}\n\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\t\tholder.scrollTop = this.scrollTop;\n\n\t\t\tthis.dispatch(\"render-virtual-fill\");\n\t\t}\n\t}\n\n\t_addTopRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomTop -1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tif(this.vDomTop){\n\t\t\t\tlet row = rows[index],\n\t\t\t\trowHeight, initialized;\n\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\n\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trow.initialize();\n\n\t\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\t\tthis.vDomTop--;\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\ti++;\n\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad -= paddingAdjust;\n\n\t\t\tif(this.vDomTopPad < 0){\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif(index < 1){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\n\t\t}\n\t}\n\n\t_removeTopRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomTop],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomTop++;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad += paddingAdjust;\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\n\t\t}\n\t}\n\n\t_addBottomRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomBottom + 1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[index],\n\t\t\trowHeight, initialized;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\ttable.appendChild(row.getElement());\n\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t}\n\n\t\t\t\t\trow.initialize();\n\n\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tthis.vDomBottom++;\n\t\t\t\t\tindex++;\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\n\t\t}\n\t}\n\n\t_removeBottomRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomBottom],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomBottom --;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad += paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\n\t\t}\n\t}\n\n\t_quickNormalizeRowHeight(rows){\n\t\tfor(let row of rows){\n\t\t\trow.calcHeight();\n\t\t}\n\n\t\tfor(let row of rows){\n\t\t\trow.setCellHeight();\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Row from './row/Row.js';\nimport RowComponent from './row/RowComponent.js';\nimport Helpers from './tools/Helpers.js';\n\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\n\nexport default class RowManager extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = this.createHolderElement(); //containing element\n\t\tthis.tableElement = this.createTableElement(); //table element\n\t\tthis.heightFixer = this.createTableElement(); //table element\n\t\tthis.placeholder = null; //placeholder element\n\t\tthis.placeholderContents = null; //placeholder element\n\t\t\n\t\tthis.firstRender = false; //handle first render\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\n\t\tthis.fixedHeight = false; //current rendering mode\n\t\t\n\t\tthis.rows = []; //hold row data objects\n\t\tthis.activeRowsPipeline = []; //hold calculation of active rows\n\t\tthis.activeRows = []; //rows currently available to on display in the table\n\t\tthis.activeRowsCount = 0; //count of active rows\n\t\t\n\t\tthis.displayRows = []; //rows currently on display in the table\n\t\tthis.displayRowsCount = 0; //count of display rows\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\n\t\t\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\n\t\t\n\t\tthis.scrollbarWidth = 0;\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t//////////////// Setup Functions /////////////////\n\t\n\tcreateHolderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-tableholder\");\n\t\tel.setAttribute(\"tabindex\", 0);\n\t\t// el.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateTableElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-table\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitializePlaceholder(){\n\t\tvar placeholder = this.table.options.placeholder;\n\t\t\n\t\tif(typeof placeholder === \"function\"){\n\t\t\tplaceholder = placeholder.call(this.table);\n\t\t}\n\t\t\n\t\tplaceholder = this.chain(\"placeholder\", [placeholder], placeholder, placeholder) || placeholder;\n\t\t\n\t\t//configure placeholder element\n\t\tif(placeholder){\t\n\t\t\tlet el = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-placeholder\");\n\t\t\t\n\t\t\tif(typeof placeholder == \"string\"){\n\t\t\t\tlet contents = document.createElement(\"div\");\n\t\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\n\t\t\t\tcontents.innerHTML = placeholder;\n\t\t\t\t\n\t\t\t\tel.appendChild(contents);\n\t\t\t\t\n\t\t\t\tthis.placeholderContents = contents;\n\t\t\t\t\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && placeholder instanceof HTMLElement){\n\t\t\t\t\n\t\t\t\tel.appendChild(placeholder);\n\t\t\t\tthis.placeholderContents = placeholder;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Invalid placeholder provided, must be string or HTML Element\", placeholder);\n\t\t\t\t\n\t\t\t\tthis.el = null;\n\t\t\t}\n\t\t\t\n\t\t\tthis.placeholder = el;\n\t\t}\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\t\n\t//return table element\n\tgetTableElement(){\n\t\treturn this.tableElement;\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializePlaceholder();\n\t\tthis.initializeRenderer();\n\t\t\n\t\t//initialize manager\n\t\tthis.element.appendChild(this.tableElement);\n\t\t\n\t\tthis.firstRender = true;\n\t\t\n\t\t//scroll header along with table body\n\t\tthis.element.addEventListener(\"scroll\", () => {\n\t\t\tvar left = this.element.scrollLeft,\n\t\t\tleftDir = this.scrollLeft > left,\n\t\t\ttop = this.element.scrollTop,\n\t\t\ttopDir = this.scrollTop > top;\n\t\t\t\n\t\t\t//handle horizontal scrolling\n\t\t\tif(this.scrollLeft != left){\n\t\t\t\tthis.scrollLeft = left;\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\n\t\t\t\t\n\t\t\t\tthis._positionPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\t//handle vertical scrolling\n\t\t\tif(this.scrollTop != top){\n\t\t\t\tthis.scrollTop = top;\n\t\t\t\t\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t////////////////// Row Manipulation //////////////////\n\tfindRow(subject){\n\t\tif(typeof subject == \"object\"){\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\t//subject is a HTML element of the row\n\t\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\t\treturn row.getElement() === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}else if(subject === null){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\treturn false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t\t\n\t\t\treturn match || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetRowFromDataObject(data){\n\t\tvar match = this.rows.find((row) => {\n\t\t\treturn row.data === data;\n\t\t});\n\t\t\n\t\treturn match || false;\n\t}\n\t\n\tgetRowFromPosition(position){\n\t\treturn this.getDisplayRows().find((row) => {\n\t\t\treturn row.getPosition() === position && row.isDisplayed();\n\t\t});\n\t}\n\t\n\tscrollToRow(row, position, ifVisible){\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\tsetData(data, renderInPosition, columnsChanged){\n\t\treturn new Promise((resolve, reject)=>{\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\n\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\tthis._setDataActual(data, true);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reRenderInPosition(() => {\n\t\t\t\t\t\tthis._setDataActual(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t\t}\n\t\t\t\tthis.resetScroll();\n\t\t\t\t\n\t\t\t\tthis._setDataActual(data);\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\t_setDataActual(data, renderInPosition){\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\n\t\t\n\t\tthis._wipeElements();\n\t\t\n\t\tif(Array.isArray(data)){\n\t\t\tthis.dispatch(\"data-processing\", data);\n\t\t\t\n\t\t\tdata.forEach((def, i) => {\n\t\t\t\tif(def && typeof def === \"object\"){\n\t\t\t\t\tvar row = new Row(def, this);\n\t\t\t\t\tthis.rows.push(row);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\n\t\t\t\n\t\t\tthis.dispatch(\"data-processed\", data);\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\n\t\t}else{\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\n\t\t}\n\t}\n\t\n\t_wipeElements(){\n\t\tthis.dispatch(\"rows-wipe\");\n\t\t\n\t\tthis.destroy();\n\t\t\n\t\tthis.adjustTableSize();\n\t\t\n\t\tthis.dispatch(\"rows-wiped\");\n\t}\n\t\n\tdestroy(){\n\t\tthis.rows.forEach((row) => {\n\t\t\trow.wipe();\n\t\t});\n\t\t\n\t\tthis.rows = [];\n\t\tthis.activeRows = [];\n\t\tthis.activeRowsPipeline = [];\n\t\tthis.activeRowsCount = 0;\n\t\tthis.displayRows = [];\n\t\tthis.displayRowsCount = 0;\n\t}\n\t\n\tdeleteRow(row, blockRedraw){\n\t\tvar allIndex = this.rows.indexOf(row),\n\t\tactiveIndex = this.activeRows.indexOf(row);\n\t\t\n\t\tif(activeIndex > -1){\n\t\t\tthis.activeRows.splice(activeIndex, 1);\n\t\t}\n\t\t\n\t\tif(allIndex > -1){\n\t\t\tthis.rows.splice(allIndex, 1);\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tvar displayIndex = rows.indexOf(row);\n\t\t\t\n\t\t\tif(displayIndex > -1){\n\t\t\t\trows.splice(displayIndex, 1);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis.tableEmpty();\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\n\t\t}\n\t}\n\t\n\taddRow(data, pos, index, blockRedraw){\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\t\treturn row;\n\t}\n\t\n\t//add multiple rows\n\taddRows(data, pos, index, refreshDisplayOnly){\n\t\tvar rows = [];\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tpos = this.findAddRowPos(pos);\n\t\t\t\n\t\t\tif(!Array.isArray(data)){\n\t\t\t\tdata = [data];\n\t\t\t}\n\t\t\t\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\n\t\t\t\tdata.reverse();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach((item, i) => {\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\n\t\t\t\trows.push(row);\n\t\t\t\tthis.dispatch(\"row-added\", row, item, pos, index);\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(refreshDisplayOnly ? \"displayPipeline\" : false, false, true);\n\t\t\t\n\t\t\tthis.regenerateRowPositions();\n\t\t\t\n\t\t\tif(this.displayRowsCount){\n\t\t\t\tthis._clearPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\tresolve(rows);\n\t\t});\n\t}\n\t\n\tfindAddRowPos(pos){\n\t\tif(typeof pos === \"undefined\"){\n\t\t\tpos = this.table.options.addRowPos;\n\t\t}\n\t\t\n\t\tif(pos === \"pos\"){\n\t\t\tpos = true;\n\t\t}\n\t\t\n\t\tif(pos === \"bottom\"){\n\t\t\tpos = false;\n\t\t}\n\t\t\n\t\treturn pos;\n\t}\n\t\n\taddRowActual(data, pos, index, blockRedraw){\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t\ttop = this.findAddRowPos(pos),\n\t\tallIndex = -1,\n\t\tactiveIndex, chainResult;\n\t\t\n\t\tif(!index){\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\n\t\t\t\n\t\t\tindex = chainResult.index;\n\t\t\ttop = chainResult.top;\n\t\t}\n\t\t\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tindex = this.findRow(index);\n\t\t}\n\t\t\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\n\t\t\n\t\tif(index){\n\t\t\tallIndex = this.rows.indexOf(index);\n\t\t}\n\t\t\n\t\tif(index && allIndex > -1){\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\n\t\t\t\n\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\tvar displayIndex = rows.indexOf(index);\n\t\t\t\t\n\t\t\t\tif(displayIndex > -1){\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(activeIndex > -1){\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\n\t\t\t}\n\t\t\t\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(top){\n\t\t\t\t\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.unshift(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.unshift(row);\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}else{\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.push(row);\n\t\t\t\tthis.rows.push(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t}\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\treturn row;\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tthis.dispatch(\"row-move\", from, to, after);\n\t\t\n\t\tthis.moveRowActual(from, to, after);\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatch(\"row-moved\", from, to, after);\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\n\t}\n\t\n\tmoveRowActual(from, to, after){\n\t\tthis.moveRowInArray(this.rows, from, to, after);\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tthis.moveRowInArray(rows, from, to, after);\n\t\t});\n\t\t\n\t\tthis.dispatch(\"row-moving\", from, to, after);\n\t}\n\t\n\tmoveRowInArray(rows, from, to, after){\n\t\tvar\tfromIndex, toIndex, start, end;\n\t\t\n\t\tif(from !== to){\n\t\t\t\n\t\t\tfromIndex = rows.indexOf(from);\n\t\t\t\n\t\t\tif (fromIndex > -1) {\n\t\t\t\t\n\t\t\t\trows.splice(fromIndex, 1);\n\t\t\t\t\n\t\t\t\ttoIndex = rows.indexOf(to);\n\t\t\t\t\n\t\t\t\tif (toIndex > -1) {\n\t\t\t\t\t\n\t\t\t\t\tif(after){\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//restyle rows\n\t\t\tif(rows === this.getDisplayRows()){\n\t\t\t\t\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\n\t\t\t\t\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tif(rows[i]){\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearData(){\n\t\tthis.setData([]);\n\t}\n\t\n\tgetRowIndex(row){\n\t\treturn this.findRowIndex(row, this.rows);\n\t}\n\t\n\tgetDisplayRowIndex(row){\n\t\tvar index = this.getDisplayRows().indexOf(row);\n\t\treturn index > -1 ? index : false;\n\t}\n\t\n\tnextDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tnextRow = false;\n\t\t\n\t\t\n\t\tif(index !== false && index < this.displayRowsCount -1){\n\t\t\tnextRow = this.getDisplayRows()[index+1];\n\t\t}\n\t\t\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn nextRow;\n\t}\n\t\n\tprevDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tprevRow = false;\n\t\t\n\t\tif(index){\n\t\t\tprevRow = this.getDisplayRows()[index-1];\n\t\t}\n\t\t\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn prevRow;\n\t}\n\t\n\tfindRowIndex(row, list){\n\t\tvar rowIndex;\n\t\t\n\t\trow = this.findRow(row);\n\t\t\n\t\tif(row){\n\t\t\trowIndex = list.indexOf(row);\n\t\t\t\n\t\t\tif(rowIndex > -1){\n\t\t\t\treturn rowIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tgetData(active, transform){\n\t\tvar output = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tif(row.type == \"row\"){\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(active){\n\t\tvar\toutput = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\toutput.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetDataCount(active){\n\t\tvar rows = this.getRows(active);\n\t\t\n\t\treturn rows.length;\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tthis.scrollLeft = left;\n\t\tthis.element.scrollLeft = left;\n\t\t\n\t\tthis.dispatch(\"scroll-horizontal\", left);\n\t}\n\t\n\tregisterDataPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.dataPipeline.push({handler, priority});\n\t\t\tthis.dataPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\tregisterDisplayPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.displayPipeline.push({handler, priority});\n\t\t\tthis.displayPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\t//set active data set\n\trefreshActiveData(handler, skipStage, renderInPosition){\n\t\tvar table = this.table,\n\t\tstage = \"\",\n\t\tindex = 0,\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"];\n\t\t\n\t\tif(!this.table.destroyed){\n\t\t\tif(typeof handler === \"function\"){\n\t\t\t\tindex = this.dataPipeline.findIndex((item) => {\n\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(index > -1){\n\t\t\t\t\tstage = \"dataPipeline\";\n\t\t\t\t\t\n\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\tif(index == this.dataPipeline.length - 1){\n\t\t\t\t\t\t\tstage = \"display\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\n\t\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(index > -1){\n\t\t\t\t\t\tstage = \"displayPipeline\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\n\t\t\t\t\t\t\t\tstage = \"end\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tstage = handler || \"all\";\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.redrawBlock){\n\t\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\n\t\t\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\tskipStage: skipStage,\n\t\t\t\t\t\trenderInPosition: renderInPosition,\n\t\t\t\t\t\tstage:stage,\n\t\t\t\t\t\tindex:index,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\tif(Helpers.elVisible(this.element)){\n\t\t\t\t\tif(renderInPosition){\n\t\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!handler){\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.renderTable();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\n\t\t\t\t\t\t\tthis.table.columnManager.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"data-refreshed\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\trefreshPipelines(handler, stage, index, renderInPosition){\n\t\tthis.dispatch(\"data-refreshing\");\n\t\t\n\t\tif(!handler || !this.activeRowsPipeline[0]){\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\n\t\t}\n\t\t\n\t\t//cascade through data refresh stages\n\t\tswitch(stage){\n\t\t\tcase \"all\":\n\t\t\t//handle case where all data needs refreshing\n\t\t\t\n\t\t\tcase \"dataPipeline\":\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\n\t\t\t\t\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\tindex = 0;\n\t\t\t\tthis.resetDisplayRows();\n\t\t\t\n\t\t\tcase \"displayPipeline\":\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\n\t\t\t\t\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"end\":\n\t\t\t//case to handle scenario when trying to skip past end stage\n\t\t\t\tthis.regenerateRowPositions();\n\t\t}\n\t\t\n\t\tif(this.getDisplayRows().length){\n\t\t\tthis._clearPlaceholder();\n\t\t}\n\t}\n\t\n\t//regenerate row positions\n\tregenerateRowPositions(){\n\t\tvar rows = this.getDisplayRows();\n\t\tvar index = 1;\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\"){\n\t\t\t\trow.setPosition(index);\n\t\t\t\tindex++;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tsetActiveRows(activeRows){\n\t\tthis.activeRows = this.activeRows = Object.assign([], activeRows);\n\t\tthis.activeRowsCount = this.activeRows.length;\n\t}\n\t\n\t//reset display rows array\n\tresetDisplayRows(){\n\t\tthis.displayRows = [];\n\t\t\n\t\tthis.displayRows.push(this.activeRows.slice(0));\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[0].length;\n\t}\n\t\n\t//set display row pipeline data\n\tsetDisplayRows(displayRows, index){\n\t\tthis.displayRows[index] = displayRows;\n\t\t\n\t\tif(index == this.displayRows.length -1){\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t\t}\n\t}\n\t\n\tgetDisplayRows(index){\n\t\tif(typeof index == \"undefined\"){\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\n\t\t}else{\n\t\t\treturn this.displayRows[index] || [];\n\t\t}\n\t}\n\t\n\tgetVisibleRows(chain, viewable){\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\n\t\t\n\t\tif(chain){\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t//repeat action across display rows\n\tdisplayRowIterator(callback){\n\t\tthis.activeRowsPipeline.forEach(callback);\n\t\tthis.displayRows.forEach(callback);\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t}\n\t\n\t//return only actual rows (not group headers etc)\n\tgetRows(type){\n\t\tvar rows = [];\n\t\t\n\t\tswitch(type){\n\t\t\tcase \"active\":\n\t\t\t\trows = this.activeRows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.getVisibleRows(false, true);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t///////////////// Table Rendering /////////////////\n\t//trigger rerender of table in current position\n\treRenderInPosition(callback){\n\t\tif(this.redrawBlock){\n\t\t\tif(callback){\n\t\t\t\tcallback();\n\t\t\t}else{\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\t\n\t\t\tthis.renderer.rerenderRows(callback);\n\t\t\t\n\t\t\tif(!this.fixedHeight){\n\t\t\t\tthis.adjustTableSize();\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"renderComplete\");\n\t\t}\n\t}\n\t\n\tscrollBarCheck(){\n\t\tvar scrollbarWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar moving table when present\n\t\tif(this.element.scrollHeight > this.element.clientHeight){\n\t\t\tscrollbarWidth = this.element.offsetWidth - this.element.clientWidth;\n\t\t}\n\t\t\n\t\tif(scrollbarWidth !== this.scrollbarWidth){\n\t\t\tthis.scrollbarWidth = scrollbarWidth;\n\t\t\tthis.dispatch(\"scrollbar-vertical\", scrollbarWidth);\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomVertical,\n\t\t\t\"basic\": RendererBasicVertical,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderVertical;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderMode = this.table.options.renderVertical;\n\t\t\t\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t\t\n\t\t\tif((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){\n\t\t\t\tthis.fixedHeight = true;\n\t\t\t}else{\n\t\t\t\tthis.fixedHeight = false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderVertical);\n\t\t}\n\t}\n\t\n\tgetRenderMode(){\n\t\treturn this.renderMode;\n\t}\n\t\n\trenderTable(){\n\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tthis._clearTable();\n\t\t\n\t\tif(this.displayRowsCount){\n\t\t\tthis.renderer.renderRows();\n\t\t\t\n\t\t\tif(this.firstRender){\n\t\t\t\tthis.firstRender = false;\n\t\t\t\t\n\t\t\t\tif(!this.fixedHeight){\n\t\t\t\t\tthis.adjustTableSize();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.layoutRefresh(true);\n\t\t\t}\n\t\t}else{\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t\t\n\t\tif(!this.fixedHeight){\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-layout\");\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis._showPlaceholder();\n\t\t}\n\t\t\n\t\tthis.scrollBarCheck();\n\t\t\n\t\tthis.dispatchExternal(\"renderComplete\");\n\t}\n\t\n\t//show scrollbars on empty table div\n\trenderEmptyScroll(){\n\t\tif(this.placeholder){\n\t\t\tthis.tableElement.style.display = \"none\";\n\t\t}else{\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\n\t\t}\n\t}\n\t\n\t_clearTable(){\t\n\t\tthis._clearPlaceholder();\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.renderer.clearRows();\n\t}\n\t\n\ttableEmpty(){\n\t\tthis.renderEmptyScroll();\n\t\tthis._showPlaceholder();\n\t}\n\n\tcheckPlaceholder(){\n\t\tif(this.displayRowsCount){\n\t\t\tthis._clearPlaceholder();\n\t\t}else{\n\t\t\tthis.tableEmpty();\n\t\t}\n\t}\n\t\n\t_showPlaceholder(){\n\t\tif(this.placeholder){\n\t\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t\t}\n\t\t\t\n\t\t\tthis.initializePlaceholder();\n\t\t\t\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\t\t\t\n\t\t\tthis.getElement().appendChild(this.placeholder);\n\t\t\tthis._positionPlaceholder();\n\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t}\n\t\n\t_clearPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t}\n\t\t\n\t\t// clear empty table placeholder min\n\t\tthis.tableElement.style.minWidth = \"\";\n\t\tthis.tableElement.style.display = \"\";\n\t}\n\t\n\t_positionPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\n\t\t}\n\t}\n\t\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\t\n\t//normalize height of active rows\n\tnormalizeHeight(){\n\t\tthis.activeRows.forEach(function(row){\n\t\t\trow.normalizeHeight();\n\t\t});\n\t}\n\t\n\t//adjust the height of the table holder to fit in the Tabulator element\n\tadjustTableSize(){\n\t\tlet initialHeight = this.element.clientHeight, minHeight;\n\t\tlet resized = false;\n\t\t\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\t\t\t\n\t\t\tif(this.fixedHeight){\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\n\t\t\t\t\n\t\t\t\tconst height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.minHeight = minHeight || \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.height = height;\n\t\t\t\tthis.element.style.maxHeight = height;\n\t\t\t} else {\n\t\t\t\tthis.element.style.height = \"\";\n\t\t\t\tthis.element.style.height =\n\t\t\t\tthis.table.element.clientHeight - otherHeight + \"px\";\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderer.resize();\n\t\t\t\n\t\t\t//check if the table has changed size when dealing with variable height tables\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\n\t\t\t\tresized = true;\n\t\t\t\tif(this.subscribed(\"table-resize\")){\n\t\t\t\t\tthis.dispatch(\"table-resize\");\n\t\t\t\t}else{\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t}\n\t\t\n\t\tthis._positionPlaceholder();\n\t\treturn resized;\n\t}\n\t\n\t//reinitialize all rows\n\treinitialize(){\n\t\tthis.rows.forEach(function(row){\n\t\t\trow.reinitialize(true);\n\t\t});\n\t}\n\t\n\t//prevent table from being redrawn\n\tblockRedraw (){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockRestoreConfig = false;\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw (){\n\t\tthis.redrawBlock = false;\n\t\t\n\t\tif(this.redrawBlockRestoreConfig){\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\t\t\t\n\t\t\tthis.redrawBlockRestoreConfig = false;\n\t\t}else{\n\t\t\tif(this.redrawBlockRenderInPosition){\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.redrawBlockRenderInPosition = false;\n\t}\n\t\n\t//redraw table\n\tredraw (force){\n\t\tthis.adjustTableSize();\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\t\t\n\t\tif(!force){\t\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(this.scrollLeft);\n\t\t}else{\n\t\t\tthis.renderTable();\n\t\t}\n\t}\n\t\n\tresetScroll(){\n\t\tthis.element.scrollLeft = 0;\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tif(this.table.browser === \"ie\"){\n\t\t\tvar event = document.createEvent(\"Event\");\n\t\t\tevent.initEvent(\"scroll\", false, true);\n\t\t\tthis.element.dispatchEvent(event);\n\t\t}else{\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\n\nexport default class FooterManager extends CoreFeature{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.active = false;\n\t\tthis.element = this.createElement(); //containing element\n\t\tthis.containerElement = this.createContainerElement(); //containing element\n\t\tthis.external = false;\n\t}\n\n\tinitialize(){\n\t\tthis.initializeElement();\n\t}\n\n\tcreateElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer\");\n\n\t\treturn el;\n\t}\n\n\t\n\tcreateContainerElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer-contents\");\n\n\t\tthis.element.appendChild(el);\n\n\t\treturn el;\n\t}\n\n\tinitializeElement(){\n\t\tif(this.table.options.footerElement){\n\n\t\t\tswitch(typeof this.table.options.footerElement){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\n\t\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.external = true;\n\t\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tappend(element){\n\t\tthis.activate();\n\n\t\tthis.containerElement.appendChild(element);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tprepend(element){\n\t\tthis.activate();\n\n\t\tthis.element.insertBefore(element, this.element.firstChild);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tremove(element){\n\t\telement.parentNode.removeChild(element);\n\t\tthis.deactivate();\n\t}\n\n\tdeactivate(force){\n\t\tif(!this.element.firstChild || force){\n\t\t\tif(!this.external){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\tthis.active = false;\n\t\t}\n\t}\n\n\tactivate(){\n\t\tif(!this.active){\n\t\t\tthis.active = true;\n\t\t\tif(!this.external){\n\t\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\t\tthis.table.element.style.display = '';\n\t\t\t}\n\t\t}\n\t}\n\n\tredraw(){\n\t\tthis.dispatch(\"footer-redraw\");\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Row from '../row/Row.js';\n\nexport default class InteractionManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.el = null;\n\t\t\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\n\t\t\n\t\tthis.previousTargets = {};\n\t\t\n\t\tthis.listeners = [\n\t\t\t\"click\",\n\t\t\t\"dblclick\",\n\t\t\t\"contextmenu\",\n\t\t\t\"mouseenter\",\n\t\t\t\"mouseleave\",\n\t\t\t\"mouseover\",\n\t\t\t\"mouseout\",\n\t\t\t\"mousemove\",\n\t\t\t\"mouseup\",\n\t\t\t\"mousedown\",\n\t\t\t\"touchstart\",\n\t\t\t\"touchend\",\n\t\t];\n\t\t\n\t\tthis.componentMap = {\n\t\t\t\"tabulator-cell\":\"cell\",\n\t\t\t\"tabulator-row\":\"row\",\n\t\t\t\"tabulator-group\":\"group\",\n\t\t\t\"tabulator-col\":\"column\",\n\t\t};\n\t\t\n\t\tthis.pseudoTrackers = {\n\t\t\t\"row\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"cell\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"group\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"column\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t};\n\t\t\n\t\tthis.pseudoTracking = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.el = this.table.element;\n\t\t\n\t\tthis.buildListenerMap();\n\t\tthis.bindSubscriptionWatchers();\n\t}\n\t\n\tbuildListenerMap(){\n\t\tvar listenerMap = {};\n\t\t\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistenerMap[listener] = {\n\t\t\t\thandler:null,\n\t\t\t\tcomponents:[],\n\t\t\t};\n\t\t});\n\t\t\n\t\tthis.listeners = listenerMap;\n\t}\n\t\n\tbindPseudoEvents(){\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\n\t\t});\n\t\t\n\t\tthis.pseudoTracking = true;\n\t}\n\t\n\tpseudoMouseEnter(key, e, target){\n\t\tif(this.pseudoTrackers[key].target !== target){\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\n\t\t\t}\n\t\t\t\n\t\t\tthis.pseudoMouseLeave(key, e);\n\t\t\t\n\t\t\tthis.pseudoTrackers[key].target = target;\n\t\t\t\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\n\t\t}\n\t}\n\t\n\tpseudoMouseLeave(key, e){\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\n\t\tlinkedKeys = {\n\t\t\t\"row\":[\"cell\"],\n\t\t\t\"cell\":[\"row\"],\n\t\t};\n\t\t\n\t\tleaveList = leaveList.filter((item) => {\n\t\t\tvar links = linkedKeys[key];\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\n\t\t});\n\t\t\n\t\t\n\t\tleaveList.forEach((key) => {\n\t\t\tvar target = this.pseudoTrackers[key].target;\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\n\t\t\t\t\n\t\t\t\tthis.pseudoTrackers[key].target = null;\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\tbindSubscriptionWatchers(){\n\t\tvar listeners = Object.keys(this.listeners),\n\t\tcomponents = Object.values(this.componentMap);\n\t\t\n\t\tfor(let comp of components){\n\t\t\tfor(let listener of listeners){\n\t\t\t\tlet key = comp + \"-\" + listener;\n\t\t\t\t\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\n\t}\n\t\n\tsubscriptionChanged(component, key, added){\n\t\tvar listener = this.listeners[key].components,\n\t\tindex = listener.indexOf(component),\n\t\tchanged = false;\n\t\t\n\t\tif(added){\n\t\t\tif(index === -1){\n\t\t\t\tlistener.push(component);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\n\t\t\t\tif(index > -1){\n\t\t\t\t\tlistener.splice(index, 1);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\n\t\t\tthis.bindPseudoEvents();\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.updateEventListeners();\n\t\t}\n\t}\n\t\n\tupdateEventListeners(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.components.length){\n\t\t\t\tif(!listener.handler){\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler);\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(listener.handler){\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\t\tlistener.handler = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\ttrack(type, e){\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\n\t\t\n\t\tvar targets = this.findTargets(path);\n\t\ttargets = this.bindComponents(type, targets);\n\t\t\n\t\tthis.triggerEvents(type, e, targets);\n\t\t\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\n\t\t}\n\t}\n\t\n\tfindTargets(path){\n\t\tvar targets = {};\n\t\t\n\t\tlet componentMap = Object.keys(this.componentMap);\n\t\t\n\t\tfor (let el of path) {\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\n\t\t\t\n\t\t\tlet abort = classList.filter((item) => {\n\t\t\t\treturn this.abortClasses.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tif(abort.length){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tlet elTargets = classList.filter((item) => {\n\t\t\t\treturn componentMap.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tfor (let target of elTargets) {\n\t\t\t\tif(!targets[this.componentMap[target]]){\n\t\t\t\t\ttargets[this.componentMap[target]] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(targets.group && targets.group === targets.row){\n\t\t\tdelete targets.row;\n\t\t}\n\n\t\treturn targets;\n\t}\n\t\n\tbindComponents(type, targets){\n\t\t//ensure row component is looked up before cell\n\t\tvar keys = Object.keys(targets).reverse(),\n\t\tlistener = this.listeners[type],\n\t\tmatches = {},\n\t\ttargetMatches = {};\n\t\t\n\t\tfor(let key of keys){\n\t\t\tlet component,\n\t\t\ttarget = targets[key],\n\t\t\tpreviousTarget = this.previousTargets[key];\n\t\t\t\n\t\t\tif(previousTarget && previousTarget.target === target){\n\t\t\t\tcomponent = previousTarget.component;\n\t\t\t}else{\n\t\t\t\tswitch(key){\n\t\t\t\t\tcase \"row\":\n\t\t\t\t\tcase \"group\":\n\t\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\n\t\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tcomponent = rows.find((row) => {\n\t\t\t\t\t\t\t\treturn row.getElement() === target;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\n\t\t\t\t\t\t\t\ttargets[key] = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"column\":\n\t\t\t\t\t\tif(listener.components.includes(\"column\")){\n\t\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"cell\":\n\t\t\t\t\t\tif(listener.components.includes(\"cell\")){\n\t\t\t\t\t\t\tif(matches[\"row\"] instanceof Row){\n\t\t\t\t\t\t\t\tcomponent = matches[\"row\"].findCell(target);\n\t\t\t\t\t\t\t}else{\t\n\t\t\t\t\t\t\t\tif(targets[\"row\"]){\n\t\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(component){\n\t\t\t\tmatches[key] = component;\n\t\t\t\ttargetMatches[key] = {\n\t\t\t\t\ttarget:target,\n\t\t\t\t\tcomponent:component,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.previousTargets = targetMatches;\n\t\t\n\t\treturn matches;\n\t}\n\t\n\ttriggerEvents(type, e, targets){\n\t\tvar listener = this.listeners[type];\n\n\t\tfor(let key in targets){\n\t\t\tif(targets[key] && listener.components.includes(key)){\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearWatchers(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.handler){\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\tlistener.handler = null;\n\t\t\t}\n\t\t}\n\t}\n}\n","export default class ComponentFunctionBinder{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\n\t\tthis.bindings = {};\n\t}\n\n\tbind(type, funcName, handler){\n\t\tif(!this.bindings[type]){\n\t\t\tthis.bindings[type] = {};\n\t\t}\n\n\t\tif(this.bindings[type][funcName]){\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, handler);\n\t\t}else{\n\t\t\tthis.bindings[type][funcName] = handler;\n\t\t}\n\t}\n\n\thandle(type, component, name){\n\t\tif(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){\n\t\t\treturn this.bindings[type][name].bind(null, component);\n\t\t}else{\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\n\t\t\t\tif(this.table.options.debugInvalidComponentFuncs){\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\n\nexport default class DataLoader extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\n\t\tthis.loading = false;\n\t}\n\t\n\tinitialize(){}\n\t\n\tload(data, params, config, replace, silent, columnsChanged){\n\t\tvar requestNo = ++this.requestOrder;\n\n\t\tif(this.table.destroyed){\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\t\n\t\tthis.dispatchExternal(\"dataLoading\", data);\n\t\t\n\t\t//parse json data to array\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\n\t\t\tthis.loading = true;\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.alertLoader();\n\t\t\t}\n\t\t\t\n\t\t\t//get params for request\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\n\t\t\t\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\n\t\t\t\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\n\t\t\t\n\t\t\treturn result.then((response) => {\n\t\t\t\tif(!this.table.destroyed){\n\t\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\n\t\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\n\t\t\t\t\t\n\t\t\t\t\tif(requestNo == this.requestOrder){\n\t\t\t\t\t\tthis.clearAlert();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(rowData !== false){\n\t\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\n\t\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - Table has been destroyed\");\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\n\t\t\t\t\n\t\t\t\tif(!silent){\n\t\t\t\t\tthis.alertError();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.clearAlert();\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\n\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t});\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\n\t\t\t\n\t\t\tif(!data){\n\t\t\t\tdata = [];\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\t\n\tmapParams(params, map){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in params){\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tobjectInvert(obj){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in obj){\n\t\t\toutput[obj[key]] = key;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tblockActiveLoad(){\n\t\tthis.requestOrder++;\n\t}\n\t\n\talertLoader(){\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\n\t\t\n\t\tif(shouldLoad){\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\n\t\t}\n\t}\n\t\n\talertError(){\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\n\t}\n\t\n\tclearAlert(){\n\t\tthis.table.alertManager.clear();\n\t}\n}","export default class ExternalEventBus {\n\n\tconstructor(table, optionsList, debug){\n\t\tthis.table = table;\n\t\tthis.events = {};\n\t\tthis.optionsList = optionsList || {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push(callback);\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tdelete this.events[key];\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift(),\n\t\tresult;\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((callback, i) => {\n\t\t\t\tlet callResult = callback.apply(this.table, args);\n\n\t\t\t\tif(!i){\n\t\t\t\t\tresult = callResult;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"ExternalEvent:\" + args[0];\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n}","export default class InternalEventBus {\n\n\tconstructor(debug){\n\t\tthis.events = {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback, priority = 10000){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push({callback, priority});\n\n\t\tthis.events[key].sort((a, b) => {\n\t\t\treturn a.priority - b.priority;\n\t\t});\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item.callback === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_chain(key, args, initialValue, fallback){\n\t\tvar value = initialValue;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\n\t\t\t});\n\n\t\t\treturn value;\n\t\t}else{\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\n\t\t}\n\t}\n\n\t_confirm(key, args){\n\t\tvar confirmed = false;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tif(subscriber.callback.apply(this, args)){\n\t\t\t\t\tconfirmed = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn confirmed;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift();\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((subscriber) => {\n\t\t\t\tsubscriber.callback.apply(this, args);\n\t\t\t});\n\t\t}\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n\n\t_debugChain(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._chain(...arguments);\n\t}\n\n\t_debugConfirm(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._confirm(...arguments);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class DeprecationAdvisor extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\t_warnUser(){\n\t\tif(this.options(\"debugDeprecation\")){\n\t\t\tconsole.warn(...arguments);\n\t\t}\n\t}\n\t\n\tcheck(oldOption, newOption, convert){\n\t\tvar msg = \"\";\n\t\t\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\n\t\t\t\n\t\t\tif(newOption){\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\n\t\t\t\tif(convert){\n\t\t\t\t\tthis.table.options[newOption] = this.table.options[oldOption];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tcheckMsg(oldOption, msg){\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tmsg(msg){\n\t\tthis._warnUser(msg);\n\t}\n}","import Tabulator from '../Tabulator.js';\n\nclass TableRegistry {\n\n\tstatic register(table){\n\t\tTableRegistry.tables.push(table);\n\t}\n\n\tstatic deregister(table){\n\t\tvar index = TableRegistry.tables.indexOf(table);\n\n\t\tif(index > -1){\n\t\t\tTableRegistry.tables.splice(index, 1);\n\t\t}\n\t}\n\n\tstatic lookupTable(query, silent){\n\t\tvar results = [],\n\t\tmatches, match;\n\n\t\tif(typeof query === \"string\"){\n\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\tif(matches.length){\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\n\t\t\tmatch = TableRegistry.matchElement(query);\n\n\t\t\tif(match){\n\t\t\t\tresults.push(match);\n\t\t\t}\n\t\t}else if(Array.isArray(query)){\n\t\t\tquery.forEach(function(item){\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\n\t\t\t});\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tstatic matchElement(element){\n\t\treturn TableRegistry.tables.find(function(table){\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n}\n\nTableRegistry.tables = [];\n\nexport default TableRegistry;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\nexport default function(columns, forced){\n\tcolumns.forEach(function(column){\n\t\tcolumn.reinitializeWidth();\n\t});\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","import fitData from './modes/fitData.js';\nimport fitDataGeneral from './modes/fitDataGeneral.js';\nimport fitDataStretch from './modes/fitDataStretch.js';\nimport fitColumns from './modes/fitColumns.js';\n\nexport default {\n\tfitData:fitData,\n\tfitDataFill:fitDataGeneral,\n\tfitDataTable:fitDataGeneral,\n\tfitDataStretch:fitDataStretch,\n\tfitColumns:fitColumns ,\n};","//resize columns to fit data they contain\nexport default function(columns, forced){\n\tif(forced){\n\t\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\n\t}\n\t\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","//resize columns to fit data the contain and stretch last column to fill table\nexport default function(columns, forced){\n\tvar colsWidth = 0,\n\ttableWidth = this.table.rowManager.element.clientWidth,\n\tgap = 0,\n\tlastCol = false;\n\n\tcolumns.forEach((column, i) => {\n\t\tif(!column.widthFixed){\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\n\t\t\tlastCol = column;\n\t\t}\n\n\t\tif(column.visible){\n\t\t\tcolsWidth += column.getWidth();\n\t\t}\n\t});\n\n\tif(lastCol){\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tlastCol.setWidth(0);\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\tif(gap > 0){\n\t\t\tlastCol.setWidth(gap);\n\t\t}else{\n\t\t\tlastCol.reinitializeWidth();\n\t\t}\n\t}else{\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t}\n}","//resize columns to fit\nexport default function(columns, forced){\n\tvar totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width\n\tvar fixedWidth = 0; //total width of columns with a defined width\n\tvar flexWidth = 0; //total width available to flexible columns\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks across all columns\n\tvar flexColWidth = 0; //desired width of flexible columns\n\tvar flexColumns = []; //array of flexible width columns\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks across all columns\n\tvar overflowWidth = 0; //horizontal overflow width\n\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\tfunction calcWidth(width){\n\t\tvar colWidth;\n\n\t\tif(typeof(width) == \"string\"){\n\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\n\t\t\t}else{\n\t\t\t\tcolWidth = parseInt(width);\n\t\t\t}\n\t\t}else{\n\t\t\tcolWidth = width;\n\t\t}\n\n\t\treturn colWidth;\n\t}\n\n\t//ensure columns resize to take up the correct amount of space\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\n\t\tvar oversizeCols = [],\n\t\toversizeSpace = 0,\n\t\tremainingSpace = 0,\n\t\tnextColWidth = 0,\n\t\tremainingFlexGrowUnits = flexGrowUnits,\n\t\tgap = 0,\n\t\tchangeUnits = 0,\n\t\tundersizeCols = [];\n\n\t\tfunction calcGrow(col){\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\n\t\t}\n\n\t\tfunction calcShrink(col){\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)));\n\t\t}\n\n\t\tcolumns.forEach(function(col, i){\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\t\t\tif(col.column.minWidth >= width){\n\t\t\t\toversizeCols.push(col);\n\t\t\t}else{\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\n\t\t\t\t\tcol.width = col.column.maxWidth;\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\n\t\t\t\t\tif(remainingFlexGrowUnits){\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tundersizeCols.push(col);\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(oversizeCols.length){\n\t\t\toversizeCols.forEach(function(col){\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t});\n\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\n\n\t\t\tgap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t}else{\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\n\n\t\t\tundersizeCols.forEach(function(column){\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t});\n\t\t}\n\n\t\treturn gap;\n\t}\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n\n\t//adjust for vertical scrollbar if present\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t}\n\n\tcolumns.forEach(function(column){\n\t\tvar width, minWidth, colWidth;\n\n\t\tif(column.visible){\n\n\t\t\twidth = column.definition.width;\n\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\tif(width){\n\n\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\tif(column.definition.widthShrink){\n\t\t\t\t\tfixedShrinkColumns.push({\n\t\t\t\t\t\tcolumn:column,\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\n\t\t\t\t\t});\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tflexColumns.push({\n\t\t\t\t\tcolumn:column,\n\t\t\t\t\twidth:0,\n\t\t\t\t});\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t}\n\t\t}\n\t});\n\n\t//calculate available space\n\tflexWidth = totalWidth - fixedWidth;\n\n\t//calculate correct column size\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t//generate column widths\n\tgapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t//increase width of last column to account for rounding errors\n\tif(flexColumns.length && gapFill > 0){\n\t\tflexColumns[flexColumns.length-1].width += gapFill;\n\t}\n\n\t//calculate space for columns to be shrunk into\n\tflexColumns.forEach(function(col){\n\t\tflexWidth -= col.width;\n\t});\n\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t//shrink oversize columns if there is no available space\n\tif(overflowWidth > 0 && flexShrinkUnits){\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t}\n\n\t//decrease width of last column to account for rounding errors\n\tif(gapFill && fixedShrinkColumns.length){\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\n\t}\n\n\tflexColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n\n\tfixedShrinkColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n}\n","import Module from '../../core/Module.js';\n\nimport defaultModes from './defaults/modes.js';\n\nclass Layout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table, \"layout\");\n\n\t\tthis.mode = null;\n\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\n\n\t\tthis.registerColumnOption(\"widthGrow\");\n\t\tthis.registerColumnOption(\"widthShrink\");\n\t}\n\n\t//initialize layout system\n\tinitialize(){\n\t\tvar layout = this.table.options.layout;\n\n\t\tif(Layout.modes[layout]){\n\t\t\tthis.mode = layout;\n\t\t}else{\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\t\t\tthis.mode = 'fitData';\n\t\t}\n\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.widthGrow){\n\t\t\tcolumn.definition.widthGrow = Number(column.definition.widthGrow);\n\t\t}\n\t\tif(column.definition.widthShrink){\n\t\t\tcolumn.definition.widthShrink = Number(column.definition.widthShrink);\n\t\t}\n\t}\n\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\n\t//trigger table layout\n\tlayout(dataChanged){\n\t\tthis.dispatch(\"layout-refreshing\");\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\n\t\tthis.dispatch(\"layout-refreshed\");\n\t}\n}\n\nLayout.moduleName = \"layout\";\n\n//load defaults\nLayout.modes = defaultModes;\n\nexport default Layout;","import Module from '../../core/Module.js';\n\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultLangs from './defaults/langs.js';\n\nclass Localize extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.locale = \"default\"; //current locale\n\t\tthis.lang = false; //current language\n\t\tthis.bindings = {}; //update events to call when locale is changed\n\t\tthis.langList = {};\n\n\t\tthis.registerTableOption(\"locale\", false); //current system language\n\t\tthis.registerTableOption(\"langs\", {});\n\t}\n\n\tinitialize(){\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\n\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\n\t\t}\n\n\t\tfor(let locale in this.table.options.langs){\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\n\t\t}\n\n\t\tthis.setLocale(this.table.options.locale);\n\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\n\t}\n\n\t//set header placeholder\n\tsetHeaderFilterPlaceholder(placeholder){\n\t\tthis.langList.default.headerFilters.default = placeholder;\n\t}\n\n\t//setup a lang description object\n\tinstallLang(locale, lang){\n\t\tif(this.langList[locale]){\n\t\t\tthis._setLangProp(this.langList[locale], lang);\n\t\t}else{\n\t\t\tthis.langList[locale] = lang;\n\t\t}\n\t}\n\n\t_setLangProp(lang, values){\n\t\tfor(let key in values){\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\n\t\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t\t}else{\n\t\t\t\tlang[key] = values[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t//set current locale\n\tsetLocale(desiredLocale){\n\t\tdesiredLocale = desiredLocale || \"default\";\n\n\t\t//fill in any matching language values\n\t\tfunction traverseLang(trans, path){\n\t\t\tfor(var prop in trans){\n\t\t\t\tif(typeof trans[prop] == \"object\"){\n\t\t\t\t\tif(!path[prop]){\n\t\t\t\t\t\tpath[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t\t}else{\n\t\t\t\t\tpath[prop] = trans[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//determining correct locale to load\n\t\tif(desiredLocale === true && navigator.language){\n\t\t\t//get local from system\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\n\t\t}\n\n\t\tif(desiredLocale){\n\t\t\t//if locale is not set, check for matching top level locale else use default\n\t\t\tif(!this.langList[desiredLocale]){\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\t\tif(this.langList[prefix]){\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\t\tdesiredLocale = prefix;\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\t\tdesiredLocale = \"default\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.locale = desiredLocale;\n\n\t\t//load default lang template\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\n\n\t\tif(desiredLocale != \"default\"){\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\n\t\t}\n\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\n\n\t\tthis._executeBindings();\n\t}\n\n\t//get current locale\n\tgetLocale(locale){\n\t\treturn this.locale;\n\t}\n\n\t//get lang object for given local or current if none provided\n\tgetLang(locale){\n\t\treturn locale ? this.langList[locale] : this.lang;\n\t}\n\n\t//get text for current locale\n\tgetText(path, value){\n\t\tvar fillPath = value ? path + \"|\" + value : path,\n\t\tpathArray = fillPath.split(\"|\"),\n\t\ttext = this._getLangElement(pathArray, this.locale);\n\n\t\t// if(text === false){\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t\t// }\n\n\t\treturn text || \"\";\n\t}\n\n\t//traverse langs object and find localized copy\n\t_getLangElement(path, locale){\n\t\tvar root = this.lang;\n\n\t\tpath.forEach(function(level){\n\t\t\tvar rootPath;\n\n\t\t\tif(root){\n\t\t\t\trootPath = root[level];\n\n\t\t\t\tif(typeof rootPath != \"undefined\"){\n\t\t\t\t\troot = rootPath;\n\t\t\t\t}else{\n\t\t\t\t\troot = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn root;\n\t}\n\n\t//set update binding\n\tbind(path, callback){\n\t\tif(!this.bindings[path]){\n\t\t\tthis.bindings[path] = [];\n\t\t}\n\n\t\tthis.bindings[path].push(callback);\n\n\t\tcallback(this.getText(path), this.lang);\n\t}\n\n\t//iterate through bindings and trigger updates\n\t_executeBindings(){\n\t\tfor(let path in this.bindings){\n\t\t\tthis.bindings[path].forEach((binding) => {\n\t\t\t\tbinding(this.getText(path), this.lang);\n\t\t\t});\n\t\t}\n\t}\n}\n\nLocalize.moduleName = \"localize\";\n\n//load defaults\nLocalize.langs = defaultLangs;\n\nexport default Localize;","export default {\n\t\"default\":{ //hold default locale text\n\t\t\"groups\":{\n\t\t\t\"item\":\"item\",\n\t\t\t\"items\":\"items\",\n\t\t},\n\t\t\"columns\":{\n\t\t},\n\t\t\"data\":{\n\t\t\t\"loading\":\"Loading\",\n\t\t\t\"error\":\"Error\",\n\t\t},\n\t\t\"pagination\":{\n\t\t\t\"page_size\":\"Page Size\",\n\t\t\t\"page_title\":\"Show Page\",\n\t\t\t\"first\":\"First\",\n\t\t\t\"first_title\":\"First Page\",\n\t\t\t\"last\":\"Last\",\n\t\t\t\"last_title\":\"Last Page\",\n\t\t\t\"prev\":\"Prev\",\n\t\t\t\"prev_title\":\"Prev Page\",\n\t\t\t\"next\":\"Next\",\n\t\t\t\"next_title\":\"Next Page\",\n\t\t\t\"all\":\"All\",\n\t\t\t\"counter\":{\n\t\t\t\t\"showing\": \"Showing\",\n\t\t\t\t\"of\": \"of\",\n\t\t\t\t\"rows\": \"rows\",\n\t\t\t\t\"pages\": \"pages\",\n\t\t\t}\n\t\t},\n\t\t\"headerFilters\":{\n\t\t\t\"default\":\"filter column...\",\n\t\t\t\"columns\":{}\n\t\t}\n\t},\n};","import Module from '../../core/Module.js';\nimport TableRegistry from '../../core/tools/TableRegistry.js';\n\nclass Comms extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\n\tinitialize(){\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\n\t}\n\n\tgetConnections(selectors){\n\t\tvar connections = [],\n\t\tconnection;\n\n\t\tconnection = TableRegistry.lookupTable(selectors);\n\n\t\tconnection.forEach((con) =>{\n\t\t\tif(this.table !== con){\n\t\t\t\tconnections.push(con);\n\t\t\t}\n\t\t});\n\n\t\treturn connections;\n\t}\n\n\tsend(selectors, module, action, data){\n\t\tvar connections = this.getConnections(selectors);\n\n\t\tconnections.forEach((connection) => {\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\n\t\t});\n\n\t\tif(!connections.length && selectors){\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t\t}\n\t}\n\n\treceive(table, module, action, data){\n\t\tif(this.table.modExists(module)){\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t\t}else{\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t\t}\n\t}\n}\n\nComms.moduleName = \"comms\";\n\nexport default Comms;","import * as coreModules from '../modules/core.js';\nimport TableRegistry from './TableRegistry.js';\n\nexport default class ModuleBinder {\n\t\n\tconstructor(tabulator, modules){\n\t\tthis.bindStaticFunctionality(tabulator);\n\t\tthis.bindModules(tabulator, coreModules, true);\n\t\t\n\t\tif(modules){\n\t\t\tthis.bindModules(tabulator, modules);\n\t\t}\n\t}\n\t\n\tbindStaticFunctionality(tabulator){\n\t\ttabulator.moduleBindings = {};\n\t\t\n\t\ttabulator.extendModule = function(name, property, values){\n\t\t\tif(tabulator.moduleBindings[name]){\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\n\t\t\t\t\n\t\t\t\tif(source){\n\t\t\t\t\tif(typeof values == \"object\"){\n\t\t\t\t\t\tfor(let key in values){\n\t\t\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t\t\t}\n\t\t};\n\t\t\n\t\ttabulator.registerModule = function(modules){\n\t\t\tif(!Array.isArray(modules)){\n\t\t\t\tmodules = [modules];\n\t\t\t}\n\t\t\t\n\t\t\tmodules.forEach((mod) => {\n\t\t\t\ttabulator.registerModuleBinding(mod);\n\t\t\t});\n\t\t};\n\t\t\n\t\ttabulator.registerModuleBinding = function(mod){\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\n\t\t};\n\t\t\n\t\ttabulator.findTable = function(query){\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\n\t\t};\n\t\t\n\t\t//ensure that module are bound to instantiated function\n\t\ttabulator.prototype.bindModules = function(){\n\t\t\tvar orderedStartMods = [],\n\t\t\torderedEndMods = [],\n\t\t\tunOrderedMods = [];\n\t\t\t\n\t\t\tthis.modules = {};\n\t\t\t\n\t\t\tfor(var name in tabulator.moduleBindings){\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\n\t\t\t\tlet module = new mod(this);\n\t\t\t\t\n\t\t\t\tthis.modules[name] = module;\n\t\t\t\t\n\t\t\t\tif(mod.prototype.moduleCore){\n\t\t\t\t\tthis.modulesCore.push(module);\n\t\t\t\t}else{\n\t\t\t\t\tif(mod.moduleInitOrder){\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\n\t\t\t\t\t\t\torderedStartMods.push(module);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\torderedEndMods.push(module);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}else{\n\t\t\t\t\t\tunOrderedMods.push(module);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\t\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\n\t\t};\n\t}\n\t\n\tbindModules(tabulator, modules, core){\n\t\tvar mods = Object.values(modules);\n\t\t\n\t\tif(core){\n\t\t\tmods.forEach((mod) => {\n\t\t\t\tmod.prototype.moduleCore = true;\n\t\t\t});\n\t\t}\n\t\t\n\t\ttabulator.registerModule(mods);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class Alert extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.element = this._createAlertElement();\n\t\tthis.msgElement = this._createMsgElement();\n\t\tthis.type = null;\n \n\t\tthis.element.appendChild(this.msgElement);\n\t}\n \n\t_createAlertElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert\");\n\t\treturn el;\n\t}\n \n\t_createMsgElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert-msg\");\n\t\tel.setAttribute(\"role\", \"alert\");\n\t\treturn el;\n\t}\n \n\t_typeClass(){\n\t\treturn \"tabulator-alert-state-\" + this.type;\n\t}\n \n\talert(content, type = \"msg\"){\n\t\tif(content){\n\t\t\tthis.clear();\n\n\t\t\tthis.dispatch(\"alert-show\", type);\n \n\t\t\tthis.type = type;\n \n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\n \n\t\t\tthis.msgElement.classList.add(this._typeClass());\n \n\t\t\tif(typeof content === \"function\"){\n\t\t\t\tcontent = content();\n\t\t\t}\n \n\t\t\tif(content instanceof HTMLElement){\n\t\t\t\tthis.msgElement.appendChild(content);\n\t\t\t}else{\n\t\t\t\tthis.msgElement.innerHTML = content;\n\t\t\t}\n \n\t\t\tthis.table.element.appendChild(this.element);\n\t\t}\n\t}\n \n\tclear(){\n\t\tthis.dispatch(\"alert-hide\", this.type);\n\n\t\tif(this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n \n\t\tthis.msgElement.classList.remove(this._typeClass());\n\t}\n}","'use strict';\n\nimport defaultOptions from './defaults/options.js';\n\nimport ColumnManager from './ColumnManager.js';\nimport RowManager from './RowManager.js';\nimport FooterManager from './FooterManager.js';\n\nimport InteractionMonitor from './tools/InteractionMonitor.js';\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\nimport DataLoader from './tools/DataLoader.js';\n\nimport ExternalEventBus from './tools/ExternalEventBus.js';\nimport InternalEventBus from './tools/InternalEventBus.js';\n\nimport DeprecationAdvisor from './tools/DeprecationAdvisor.js';\n\nimport TableRegistry from './tools/TableRegistry.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nimport OptionsList from './tools/OptionsList.js';\n\nimport Alert from './tools/Alert.js';\n\nclass Tabulator {\n\t\n\tconstructor(element, options){\n\t\t\n\t\tthis.options = {};\n\t\t\n\t\tthis.columnManager = null; // hold Column Manager\n\t\tthis.rowManager = null; //hold Row Manager\n\t\tthis.footerManager = null; //holder Footer Manager\n\t\tthis.alertManager = null; //hold Alert Manager\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\n\t\tthis.externalEvents = null; //handle external event messaging\n\t\tthis.eventBus = null; //handle internal event messaging\n\t\tthis.interactionMonitor = false; //track user interaction\n\t\tthis.browser = \"\"; //hold current browser type\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\n\t\tthis.rtl = false; //check if the table is in RTL mode\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\n\t\t\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\n\t\tthis.dataLoader = false; //bind component functions\n\t\t\n\t\tthis.modules = {}; //hold all modules bound to this table\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\n\t\t\n\t\tthis.deprecationAdvisor = new DeprecationAdvisor(this);\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.destroyed = false;\n\t\t\n\t\tif(this.initializeElement(element)){\n\t\t\t\n\t\t\tthis.initializeCoreSystems(options);\n\t\t\t\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._create();\n\t\t\t});\n\t\t}\n\t\t\n\t\tTableRegistry.register(this); //register table for inter-device communication\n\t}\n\t\n\tinitializeElement(element){\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\n\t\t\tthis.element = element;\n\t\t\treturn true;\n\t\t}else if(typeof element === \"string\"){\n\t\t\tthis.element = document.querySelector(element);\n\t\t\t\n\t\t\tif(this.element){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tinitializeCoreSystems(options){\n\t\tthis.columnManager = new ColumnManager(this);\n\t\tthis.rowManager = new RowManager(this);\n\t\tthis.footerManager = new FooterManager(this);\n\t\tthis.dataLoader = new DataLoader(this);\n\t\tthis.alertManager = new Alert(this);\n\t\t\n\t\tthis.bindModules();\n\t\t\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options);\n\t\t\n\t\tthis._clearObjectPointers();\n\t\t\n\t\tthis._mapDeprecatedFunctionality();\n\t\t\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\n\t\t\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\n\t\t\n\t\tthis.dataLoader.initialize();\n\t\t// this.columnManager.initialize();\n\t\t// this.rowManager.initialize();\n\t\tthis.footerManager.initialize();\n\t}\n\t\n\t//convert deprecated functionality to new functions\n\t_mapDeprecatedFunctionality(){\n\t\t//all previously deprecated functionality removed in the 5.0 release\n\t}\n\t\n\t_clearSelection(){\n\t\t\n\t\tthis.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tif (window.getSelection) {\n\t\t\tif (window.getSelection().empty) { // Chrome\n\t\t\t\twindow.getSelection().empty();\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t} else if (document.selection) { // IE?\n\t\t\tdocument.selection.empty();\n\t\t}\n\t\t\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\n\t}\n\t\n\t//create table\n\t_create(){\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\n\t\tthis.eventBus.dispatch(\"table-building\");\n\t\t\n\t\tthis._rtlCheck();\n\t\t\n\t\tthis._buildElement();\n\t\t\n\t\tthis._initializeTable();\n\t\t\n\t\tthis._loadInitialData();\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\n\t}\n\t\n\t_rtlCheck(){\n\t\tvar style = window.getComputedStyle(this.element);\n\t\t\n\t\tswitch(this.options.textDirection){\n\t\t\tcase\"auto\":\n\t\t\t\tif(style.direction !== \"rtl\"){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"rtl\":\n\t\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\t\tthis.rtl = true;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"ltr\":\n\t\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis.rtl = false;\n\t\t}\n\t}\n\t\n\t//clear pointers to objects in default config object\n\t_clearObjectPointers(){\n\t\tthis.options.columns = this.options.columns.slice(0);\n\t\t\n\t\tif(Array.isArray(this.options.data) && !this.options.reactiveData){\n\t\t\tthis.options.data = this.options.data.slice(0);\n\t\t}\n\t}\n\t\n\t//build tabulator element\n\t_buildElement(){\n\t\tvar element = this.element,\n\t\toptions = this.options,\n\t\tnewElement;\n\t\t\n\t\tif(element.tagName === \"TABLE\"){\n\t\t\tthis.originalElement = this.element;\n\t\t\tnewElement = document.createElement(\"div\");\n\t\t\t\n\t\t\t//transfer attributes to new element\n\t\t\tvar attributes = element.attributes;\n\t\t\t\n\t\t\t// loop through attributes and apply them on div\n\t\t\tfor(var i in attributes){\n\t\t\t\tif(typeof attributes[i] == \"object\"){\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// replace table with div element\n\t\t\telement.parentNode.replaceChild(newElement, element);\n\t\t\t\n\t\t\tthis.element = element = newElement;\n\t\t}\n\t\t\n\t\telement.classList.add(\"tabulator\");\n\t\telement.setAttribute(\"role\", \"grid\");\n\t\t\n\t\t//empty element\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\t//set table height\n\t\tif(options.height){\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\t\telement.style.height = options.height;\n\t\t}\n\t\t\n\t\t//set table min height\n\t\tif(options.minHeight !== false){\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\t\telement.style.minHeight = options.minHeight;\n\t\t}\n\t\t\n\t\t//set table maxHeight\n\t\tif(options.maxHeight !== false){\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\t\telement.style.maxHeight = options.maxHeight;\n\t\t}\n\t}\n\t\n\t//initialize core systems and modules\n\t_initializeTable(){\n\t\tvar element = this.element,\n\t\toptions = this.options;\n\t\t\n\t\tthis.interactionMonitor.initialize();\n\t\t\n\t\tthis.columnManager.initialize();\n\t\tthis.rowManager.initialize();\n\t\t\n\t\tthis._detectBrowser();\n\t\t\n\t\t//initialize core modules\n\t\tthis.modulesCore.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\t//build table elements\n\t\telement.appendChild(this.columnManager.getElement());\n\t\telement.appendChild(this.rowManager.getElement());\n\t\t\n\t\tif(options.footerElement){\n\t\t\tthis.footerManager.activate();\n\t\t}\n\t\t\n\t\tif(options.autoColumns && options.data){\n\t\t\t\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t\t}\n\t\t\n\t\t//initialize regular modules\n\t\tthis.modulesRegular.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\tthis.columnManager.setColumns(options.columns);\n\t\t\n\t\tthis.eventBus.dispatch(\"table-built\");\n\t}\n\t\n\t_loadInitialData(){\n\t\tthis.dataLoader.load(this.options.data);\n\t\tthis.columnManager.verticalAlignHeaders();\n\t}\n\t\n\t//deconstructor\n\tdestroy(){\n\t\tvar element = this.element;\n\t\t\n\t\tthis.destroyed = true;\n\t\t\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\n\t\t\n\t\tthis.eventBus.dispatch(\"table-destroy\");\n\t\t\n\t\t//clear row data\n\t\tthis.rowManager.destroy();\n\t\t\n\t\t//clear DOM\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\telement.classList.remove(\"tabulator\");\n\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\n\t}\n\t\n\t_detectBrowser(){\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\n\t\t\n\t\tif(ua.indexOf(\"Trident\") > -1){\n\t\t\tthis.browser = \"ie\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\n\t\t\tthis.browser = \"edge\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\n\t\t\tthis.browser = \"firefox\";\n\t\t\tthis.browserSlow = false;\n\t\t}else if(ua.indexOf(\"Mac OS\") > -1){\n\t\t\tthis.browser = \"safari\";\n\t\t\tthis.browserSlow = false;\n\t\t}else{\n\t\t\tthis.browser = \"other\";\n\t\t\tthis.browserSlow = false;\n\t\t}\n\t\t\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4));\n\t}\n\t\n\tinitGuard(func, msg){\n\t\tvar stack, line;\n\t\t\n\t\tif(this.options.debugInitialization && !this.initialized){\n\t\t\tif(!func){\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\n\t\t\t\t\n\t\t\t\tif(line[0] == \" \"){\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\n\t\t\t\t}else{\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\n\t\t}\n\t\t\n\t\treturn this.initialized;\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\t//block table redrawing\n\tblockRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\n\t\t\n\t\tthis.rowManager.blockRedraw();\n\t\tthis.columnManager.blockRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\n\n\t\tthis.rowManager.restoreRedraw();\n\t\tthis.columnManager.restoreRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\n\t}\n\t\n\t//load data\n\tsetData(data, params, config){\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, false);\n\t}\n\t\n\t//clear data\n\tclearData(){\n\t\tthis.initGuard();\n\t\t\n\t\tthis.dataLoader.blockActiveLoad();\n\t\tthis.rowManager.clearData();\n\t}\n\t\n\t//get table data array\n\tgetData(active){\n\t\treturn this.rowManager.getData(active);\n\t}\n\t\n\t//get table data array count\n\tgetDataCount(active){\n\t\treturn this.rowManager.getDataCount(active);\n\t}\n\t\n\t//replace data, keeping table in position with same sort\n\treplaceData(data, params, config){\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, true, true);\n\t}\n\t\n\t//update table data\n\tupdateData(data){\n\t\tvar responses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\tresponses++;\n\t\t\t\t\t\t\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\t\treject(\"Update Error - Unable to update row\", item, e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\treject(\"Update Error - Unable to find row\", item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\taddData(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data){\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\n\t\t\t\t\t.then((rows) => {\n\t\t\t\t\t\tvar output = [];\n\t\t\t\t\t\n\t\t\t\t\t\trows.forEach(function(row){\n\t\t\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\tresolve(output);\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//update table data\n\tupdateOrAddData(data){\n\t\tvar rows = [],\n\t\tresponses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tresponses++;\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.rowManager.addRows(item)\n\t\t\t\t\t\t\t.then((newRows)=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//get row object\n\tgetRow(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//get row object\n\tgetRowFromPosition(position){\n\t\tvar row = this.rowManager.getRowFromPosition(position);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//delete row from table\n\tdeleteRow(index){\n\t\tvar foundRows = [];\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(!Array.isArray(index)){\n\t\t\tindex = [index];\n\t\t}\n\t\t\n\t\t//find matching rows\n\t\tfor(let item of index){\n\t\t\tlet row = this.rowManager.findRow(item, true);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\tfoundRows.push(row);\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort((a, b) => {\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\t\t\n\t\t//delete rows\n\t\tfoundRows.forEach((row) =>{\n\t\t\trow.delete();\n\t\t});\n\t\t\n\t\tthis.rowManager.reRenderInPosition();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\t//add row to table\n\taddRow(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\treturn this.rowManager.addRows(data, pos, index, true)\n\t\t\t.then((rows)=>{\n\t\t\t\treturn rows[0].getComponent();\n\t\t\t});\n\t}\n\t\n\t//update a row if it exists otherwise create it\n\tupdateOrAddRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn row.getComponent();\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn this.rowManager.addRows(data)\n\t\t\t\t.then((rows)=>{\n\t\t\t\t\treturn rows[0].getComponent();\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\t//update row data\n\tupdateRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\n\t\t}\n\t}\n\t\n\t//scroll to row in DOM\n\tscrollToRow(index, position, ifVisible){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible);\n\t\t}else{\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\n\t\t}\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tvar fromRow = this.rowManager.findRow(from);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromRow){\n\t\t\tfromRow.moveToRow(to, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t\t}\n\t}\n\t\n\tgetRows(active){\n\t\treturn this.rowManager.getComponents(active);\t\n\t}\n\t\n\t//get position of row in table\n\tgetRowPosition(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getPosition();\n\t\t}else{\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t/////////////// Column Functions ///////////////\n\tsetColumns(definition){\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\n\t\t\n\t\tthis.columnManager.setColumns(definition);\n\t}\n\t\n\tgetColumns(structured){\n\t\treturn this.columnManager.getComponents(structured);\n\t}\n\t\n\tgetColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tif(column){\n\t\t\treturn column.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tgetColumnDefinitions(){\n\t\treturn this.columnManager.getDefinitionTree();\n\t}\n\t\n\tshowColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.show();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\thideColumn(field){\n\t\tvar column = this.columnManager.findColumn(field); \n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.hide();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\ttoggleColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tif(column.visible){\n\t\t\t\tcolumn.hide();\n\t\t\t}else{\n\t\t\t\tcolumn.show();\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\taddColumn(definition, before, field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.columnManager.addColumn(definition, before, column)\n\t\t\t.then((column) => {\n\t\t\t\treturn column.getComponent();\n\t\t\t});\n\t}\n\t\n\tdeleteColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.delete();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tupdateColumnDefinition(field, definition){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.updateDefinition(definition);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tvar fromColumn = this.columnManager.findColumn(from),\n\t\ttoColumn = this.columnManager.findColumn(to);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromColumn){\n\t\t\tif(toColumn){\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t\t}\n\t}\n\t\n\t//scroll to column in DOM\n\tscrollToColumn(field, position, ifVisible){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this.columnManager.findColumn(field);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//////////// General Public Functions ////////////\n\t//redraw list without updating data\n\tredraw(force){\n\t\tthis.initGuard();\n\n\t\tthis.columnManager.redraw(force);\n\t\tthis.rowManager.redraw(force);\n\t}\n\t\n\tsetHeight(height){\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.initializeRenderer();\n\t\tthis.rowManager.redraw(true);\n\t}\n\t\n\t//////////////////// Event Bus ///////////////////\n\t\n\ton(key, callback){\n\t\tthis.externalEvents.subscribe(key, callback);\n\t}\n\t\n\toff(key, callback){\n\t\tthis.externalEvents.unsubscribe(key, callback);\n\t}\n\t\n\tdispatchEvent(){\n\t\tvar args = Array.from(arguments);\n\t\targs.shift();\n\t\t\n\t\tthis.externalEvents.dispatch(...arguments);\n\t}\n\n\t//////////////////// Alerts ///////////////////\n\n\talert(contents, type){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.alert(contents, type);\n\t}\n\n\tclearAlert(){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.clear();\n\t}\n\t\n\t////////////// Extension Management //////////////\n\tmodExists(plugin, required){\n\t\tif(this.modules[plugin]){\n\t\t\treturn true;\n\t\t}else{\n\t\t\tif(required){\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule(key){\n\t\tvar mod = this.modules[key];\n\t\t\n\t\tif(!mod){\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\n\t\t}\n\t\t\n\t\treturn mod;\n\t}\n}\n\n//default setup options\nTabulator.defaultOptions = defaultOptions;\n\n//bind modules and static functionality\nnew ModuleBinder(Tabulator);\n\nexport default Tabulator;\n","export default {\n\n\tdebugEventsExternal:false, //flag to console log events\n\tdebugEventsInternal:false, //flag to console log events\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\n\tdebugInvalidComponentFuncs:true, //allow toggling of invalid component warnings\n\tdebugInitialization:true, //allow toggling of pre initialization function call warnings\n\tdebugDeprecation:true, //allow toggling of deprecation warnings\n\n\theight:false, //height of tabulator\n\tminHeight:false, //minimum height of tabulator\n\tmaxHeight:false, //maximum height of tabulator\n\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\n\n\tpopupContainer:false,\n\n\tcolumns:[],//store for colum header info\n\tcolumnDefaults:{}, //store column default props\n\n\tdata:false, //default starting data\n\n\tautoColumns:false, //build columns from data row structure\n\tautoColumnsDefinitions:false,\n\n\tnestedFieldSeparator:\".\", //separator for nested data\n\n\tfooterElement:false, //hold footer element\n\n\tindex:\"id\", //filed for row index\n\n\ttextDirection:\"auto\",\n\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\n\n\theaderVisible:true, //hide header\n\n\trenderVertical:\"virtual\",\n\trenderHorizontal:\"basic\",\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\n\n\tscrollToRowPosition:\"top\",\n\tscrollToRowIfVisible:true,\n\n\tscrollToColumnPosition:\"left\",\n\tscrollToColumnIfVisible:true,\n\n\trowFormatter:false,\n\trowFormatterPrint:null,\n\trowFormatterClipboard:null,\n\trowFormatterHtmlOutput:null,\n\n\trowHeight:null,\n\n\tplaceholder:false,\n\n\tdataLoader:true,\n\tdataLoaderLoading:false,\n\tdataLoaderError:false,\n\tdataLoaderErrorTimeout:3000,\n\n\tdataSendParams:{},\n\n\tdataReceiveParams:{},\n};\n","//tabulator with all modules installed\nimport {default as Tabulator} from './Tabulator.js';\nimport * as modules from '../core/modules/optional.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nclass TabulatorFull extends Tabulator {}\n\n//bind modules and static functionality\nnew ModuleBinder(TabulatorFull, modules);\n\nexport default TabulatorFull;\n","export default class PseudoRow {\n\n\tconstructor (type){\n\t\tthis.type = type;\n\t\tthis.element = this._createElement();\n\t}\n\n\t_createElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-row\");\n\t\treturn el;\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tgetComponent(){\n\t\treturn false;\n\t}\n\n\tgetData(){\n\t\treturn {};\n\t}\n\n\tgetHeight(){\n\t\treturn this.element.outerHeight;\n\t}\n\n\tinitialize(){}\n\n\treinitialize(){}\n\n\tnormalizeHeight(){}\n\n\tgenerateCells(){}\n\n\treinitializeHeight(){}\n\n\tcalcHeight(){}\n\n\tsetCellHeight(){}\n\n\tclearCellHeight(){}\n\n\trendered(){}\n}"],"names":["CoreFeature","constructor","table","this","reloadData","data","silent","columnsChanged","dataLoader","load","undefined","langText","modules","localize","getText","arguments","langBind","bind","langLocale","getLocale","commsConnections","comms","getConnections","commsSend","send","layoutMode","layout","getMode","layoutRefresh","force","subscribe","eventBus","unsubscribe","subscribed","key","subscriptionChange","dispatch","chain","confirm","dispatchExternal","externalEvents","subscribedExternal","subscriptionChangeExternal","options","setOption","value","deprecationCheck","oldOption","newOption","convert","deprecationAdvisor","check","deprecationCheckMsg","msg","checkMsg","deprecationMsg","module","Helpers","static","el","offsetWidth","offsetHeight","box","getBoundingClientRect","top","window","pageYOffset","document","documentElement","clientTop","left","pageXOffset","clientLeft","separator","field","output","structure","split","length","i","obj","clone","list","objectProto","__proto__","arrayProto","Object","assign","Array","isArray","match","copy","subject","findIndex","item","unshift","deepClone","Popup","element","parent","super","container","_lookupContainer","reversedX","childPopup","blurable","blurCallback","blurEventsBound","renderedCallback","visible","hideable","classList","add","blurEvent","hide","escEvent","_escapeCheck","destroyBinding","tableDestroyed","destroyed","popupContainer","querySelector","console","warn","_checkContainerIsParent","body","parentNode","renderCallback","callback","containerEventCoords","e","touch","MouseEvent","x","touches","pageX","y","pageY","parentOffset","elOffset","elementPositionCoords","position","containerOffset","offset","show","origin","parentEl","coords","HTMLElement","style","appendChild","_fitToScreen","addEventListener","stopPropagation","scrollTop","right","Math","max","scrollHeight","parseInt","isVisible","hideOnBlur","setTimeout","rowManager","keyCode","blockHide","restoreHide","removeEventListener","removeChild","child","Module","name","_handler","initialize","registerTableOption","optionsList","register","registerColumnOption","columnManager","registerTableFunction","func","args","initGuard","registerComponentFunction","component","handler","componentFunctionBinder","registerDataHandler","priority","registerDataPipelineHandler","registerDisplayHandler","registerDisplayPipelineHandler","displayRows","adjust","lookupIndex","index","displayPipeline","getDisplayRows","activeRows","refreshData","renderInPosition","refreshActiveData","footerAppend","footerManager","append","footerPrepend","prepend","footerRemove","remove","popup","menuEl","menuContainer","alert","content","type","alertManager","clearAlert","clear","Accessor","allowedTypes","initializeColumn","transformRow","column","config","forEach","accessor","charAt","toUpperCase","slice","definition","lookupAccessor","params","accessors","row","rowComponent","getComponent","traverse","colComponent","getFieldValue","setFieldValue","moduleName","generateParamsList","prefix","concat","push","serializeParams","encoded","encodeURIComponent","join","url","keys","method","toLowerCase","includes","json","headers","JSON","stringify","form","FormData","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","call","previousData","generateConfig","sendRequest","defaultConfig","ajaxRequesting","then","ajaxResponse","Promise","reject","contentType","resolve","ajaxContentType","Accept","mode","location","credentials","fetch","response","ok","catch","error","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","export","generateExportList","clipboardCopyConfig","clipboardCopyStyled","generateHTMLTable","generatePlainContent","clipboardData","setData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","rowData","columns","col","getKey","range","internal","sel","textRange","getSelection","createRange","selectNodeContents","toString","removeAllRanges","addRange","selection","createTextRange","moveToElementText","select","execCommand","action","pasteActions","parser","pasteParsers","rows","checkPasteOrigin","getPasteData","modExists","mutateData","mutator","valid","target","tagName","getData","replace","update","updateOrAddData","insert","addData","bounds","startCell","startRow","rowWidth","dataLength","selectRange","activeRange","singleCell","getBounds","start","end","indexOf","blockRedraw","updateData","restoreRedraw","headerFindSuccess","columnMap","find","title","trim","columnsByIndex","shift","colWidth","startCol","getVisibleColumnsByIndex","itemLength","CalcComponent","_row","Proxy","get","receiver","handle","transform","getElement","getTable","getCells","cells","cell","getCell","_getSelf","CellComponent","_cell","getValue","getOldValue","getInitialValue","initialValue","getRow","getType","getField","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","checkHeight","Cell","oldValue","height","width","minWidth","loaded","build","generateElement","setWidth","_configureCell","createElement","className","setAttribute","textAlign","hozAlign","vertAlign","display","alignItems","bottom","middle","justifyContent","center","cssClass","_generateContents","val","innerHTML","Node","firstChild","cellRendered","containerOnly","layoutElement","setValueProcessData","cellEdited","changed","widthStyled","clearWidth","getWidth","setMinWidth","minWidthStyled","setMaxWidth","maxWidth","maxWidthStyled","reinitializeHeight","clearHeight","setHeight","heightStyled","getHeight","delete","redrawBlock","deleteCell","calcs","getIndex","getCellIndex","ColumnComponent","_column","getDefinition","getTitleDownload","isGroup","toggle","getSubColumns","getParentColumn","Column","scrollTo","ifVisible","scrollToColumn","move","to","after","toColumn","findColumn","moveColumn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","result","reinitializeWidth","rerenderColumns","maxInitialWidth","variableHeight","headerVertical","headerHozAlign","headerWordWrap","editableTitle","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","widthFixed","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","columnHeaderVertAlign","defaults","columnDefaults","generate","defaultOptionList","checkDefinition","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","_buildColumnHeaderTitle","focus","text","_formatColumnHeaderTitle","contents","dataObj","columnRendered","verticalAlign","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","clearVerticalAlign","paddingTop","getFirstColumn","getLastColumn","getColumns","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","splice","setWidthActual","isNaN","floor","clientWidth","min","checkCellHeights","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","getLeftOffset","offsetLeft","ceil","cellCount","deregisterColumn","generateCell","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","fitToData","setTo","addColumn","getPosition","defaultOptions","RowComponent","watchPosition","scrollToRow","moveToRow","normalizeHeight","reformat","reinitialize","getNextRow","nextRow","getPrevRow","prevRow","Row","manualHeight","outerHeight","initialized","positionWatchers","created","create","detachElement","generateCells","inFragment","deleteCells","renderer","renderRowCells","rowFormatter","rerenderRowCells","rendered","deinitialize","deinitializeHeight","children","maxHeight","rowHeight","resizableRows","updatedData","newRowData","elVisible","tempData","parse","attrname","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","before","toRow","findRow","moveRowActual","deleteActual","detachModules","deleteRow","wipe","isDisplayed","setPosition","getGroup","group","avg","values","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","count","unique","filter","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","topRow","botRow","topInitialized","botInitialized","recalcAfterBlock","cellValueChanged","initializeColumnCheck","rowsUpdated","scrollHorizontal","recalcActiveRows","recalcActiveRowsRefresh","tableRedraw","visibleRows","adjustForScrollbar","resizeHolderWidth","getResults","userRecalc","headersElement","recalc","redraw","blockCheck","viewable","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","adjustTableSize","reinitializeCalcs","fragment","createDocumentFragment","getContentsElement","insertBefore","nextSibling","scrollLeft","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","generateTopRow","generateBottomRow","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","pos","disable","enable","format","formatter","getFormatter","paramKey","hasTopCalcs","hasBottomCalcs","results","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","groups","rtl","paddingLeft","paddingRight","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","initializeRow","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","tableRedrawing","getRows","reinitializeRowChildren","firstCol","getFirstVisibleColumn","dataTreeElementColumn","getTreeChildren","redrawNeeded","childArray","controlEl","generateControlElement","cloneNode","marginRight","marginLeft","getComputedStyle","getPropertyValue","oldControl","replaceChild","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sort","sub","childData","childRow","getTreeParentRoot","childIndex","findChildIndex","recurse","getChildField","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","compression","compress","writeOptions","bookType","bookSST","generateSheet","merges","worksheet","s","c","r","a","b","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","active","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","Download","mimeType","Blob","deprecatedOptionsCheck","download","downloadToTab","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","blob","downloadEncoder","URL","createObjectURL","navigator","msSaveOrOpenBlob","click","commsReceived","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","ctrlKey","metaKey","maskAutoFill","placeholder","defaultDownloaders","Edit","editor","onRendered","success","cancel","editorParams","edit","_initializeParams","displayItems","currentItems","focusedItem","input","_createInputElement","listEl","_createListElement","initialValues","isFilter","filterTimeout","filtered","typing","listIteration","lastAction","filterTerm","actions","_deprecatedOptionsCheck","_initializeValue","_onRendered","listItemFormatter","sortValuesList","searchFunc","searchingPlaceholder","defaultValue","multiselect","headerFilterInitialListGen","cellEl","clickStop","preventScroll","_preventPopupBlur","_preventBlur","_inputKeyDown","_setListWidth","attribs","elementAttributes","clearable","padding","boxSizing","autocomplete","cursor","caretColor","getAttribute","_bindInputEvents","valueCheck","valueKeys","verticalNavigation","placeholderLoading","placeholderEmpty","filterDelay","emptyValue","freetext","filterFunc","filterRemote","allowEmpty","listOnEmpty","valuesLookup","valuesURL","_inputFocus","_inputClick","_inputBlur","_inputSearch","_inputKeyUp","rebuildOptionsList","_filter","clearTimeout","_filterList","_resolveValue","_clearChoices","_keyUp","_keyDown","_keySide","_keyEnter","_keyEsc","_keyHomeEnd","_keyTab","_keySelectLetter","_keyAutoCompLetter","_chooseItem","stopImmediatePropagation","_focusItem","_cancel","_scrollToValue","character","fromCharCode","label","startsWith","scrollIntoView","behavior","block","inline","_generateOptions","_sortOptions","_buildList","_showList","isInteger","_filterOptions","iteration","_ajaxRequest","_uniqueColumnValues","valuesLookupField","_addPlaceholder","responseValues","_parseList","_clearList","term","urlBuilder","getColumnByField","inputValues","entries","map","_parseListItem","option","level","_parseListGroup","itemParams","selected","original","sorter","_defaultSortFunction","_sortGroup","as","bs","a1","b1","L","rx","rd","emptyAlign","isFinite","test","_defaultFilterFunc","_filterItem","matches","_buildItem","itemFormatter","_groupClick","_itemClick","_styleItem","startVis","blur","cellValue","search","onChange","selectContents","textarea","vertNav","whiteSpace","resize","heightNow","shiftKey","shiftEnterSubmit","selectionStart","number","step","blurFunc","date","inputFormat","DT","DateTime","luxon","convertDate","isDateTime","fromISO","fromFormat","toFormat","luxDate","toISO","relatedTarget","rangeParent","explicitOriginalTarget","time","newDatetime","luxTime","log","datetime","luxDateTime","List","star","self","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","browser","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","trueValueSet","falseValueSet","marginTop","checkedValue","checked","trueValue","falseValue","indeterminate","currentCell","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellIsEdited","clearEdited","editCell","cellCancelEdit","bindEditor","updateCellClass","columnDeleteCheck","rowDeleteCheck","rowEditableCheck","cancelEdit","pasteBlocker","keybindingNavigateNext","newRow","addRow","edited","allowEdit","nextCell","findPrevEditableCell","findNextEditableCell","prevCell","editable","getCurrentCell","clearEditor","cellEditCancelled","button","contains","focusCellNoEvent","forceEdit","focusScrollAdjust","getRenderMode","topEdge","bottomEdge","rowEl","offsetTop","leftEdge","rightEdge","leftMargin","rightMargin","renderHorizontal","vDomPadLeft","cellEditor","editFinished","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","selectedColumns","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","generateTable","generateTableElement","getVisibleRows","selectRow","selectedRows","pagination","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","visProp","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","generateHeaderElement","generateGroupElement","generateCalcElement","generateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","cellStyle","cellWrapper","formatCells","formatExportValue","align","holder","htmlOutputConfig","from","props","lookup","color","fromStyle","prop","filterVal","rowVal","filterParams","regex","RegExp","like","keywords","keyword","matchAll","starts","ends","endsWith","in","Filter","filterList","headerFilters","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","generatePlaceholder","filterMode","remoteFilterParams","initialFilter","setFilter","initialHeaderFilter","placeholderHeaderFilter","refreshFilter","addFilter","removeFilter","all","clearFilter","clearHeaderFilter","headerFilter","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","onRenderedCallback","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterPlaceholder","contentsElement","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","abs","link","urlPrefix","labelField","labelTraverse","path","urlField","retrieveNestedData","image","src","urlSuffix","empty","truthy","allowTruthy","tick","tickElement","cross","crossElement","outputFormat","invalid","invalidPlaceholder","isValid","timezone","setZone","datetimediff","suffix","humanize","now","diff","toHuman","traffic","percentValue","colors","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","relativeToPage","page","getPageSize","getPage","innerText","responsiveCollapse","responsiveLayout","toggleList","isOpen","rowSelection","checkbox","selectableRowsRangeMode","toggleSelect","handleComplexRowClick","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","initializationMode","layoutCell","reinitializeColumns","blockLayout","unblockLayout","margin","edge","frozenCheck","frozen","layoutCalcRows","layoutGroupCalcs","groupList","layoutColumnPosition","allCells","leftParents","marginValue","getColGroupParentElement","reinitializeRows","getTableElement","_calcSpace","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","frozenRows","initializeRows","rowType","isFrozen","styleRows","styleRow","GroupComponent","groupManager","getParentGroup","toggleVisibility","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","old","elementContents","arrowElement","createElements","addBindings","createValueGroups","elementsOnly","arrow","movableRows","moveRow","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","insertRow","conformRowData","toIndex","updateGroupRows","scrollHeader","getRowIndex","removeRow","groupValues","generateGroupHeaderContents","removeGroup","getHeadersAndRows","_visSet","groupClosedShowCalcs","prev","includeChildren","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","_blockRedrawing","_restore_redrawing","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","lang","items","getRealColumns","lookupFunc","prevValue","tableElement","assignRowToGroup","moveRowInArray","getGroupedData","toGroup","fromGroup","generateGroups","groupComponents","pullGroupListData","groupListData","rowCount","headerContent","countGroups","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","checkBasicModeGroupHeaderWidth","onlyGroupHeaders","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","newValue","undoers","redoers","_rebindRow","oldRow","cellEdit","rowAdd","checkPlaceholder","addRowActual","rowMove","getRowFromPosition","regenerateRowPositions","reRenderInPosition","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","originalElement","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","attributes","optionsArr","attrib","_attribValue","_findCol","exists","textContent","replaceAll","registeredDefaults","inQuote","nextChar","array","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","err","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","autoColumns","structureArrayToObject","structureArrayToColumns","defaultImporters","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowMouseDown","rowMouseUp","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellMouseDown","cellMouseUp","cellTap","cellDblTap","cellTapHold","headerClick","headerDblClick","headerContext","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","headerMouseDown","headerMouseUp","headerTap","headerDblTap","headerTapHold","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupMouseDown","groupMouseUp","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tap","tapDbl","tapHold","initializeExternalEvents","cellContentsSelectionFixer","clearTouchWatchers","selectNode","subscriptionChanged","added","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","noTouch","dispatchEvent","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","bindings","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","binding","mapBinding","symbolsList","ctrl","meta","code","checkBinding","navPrev","navNext","navUp","navDown","navLeft","navRight","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","rangeJumpUp","rangeJumpDown","rangeJumpLeft","rangeJumpRight","rangeExpandUp","rangeExpandDown","rangeExpandLeft","rangeExpandRight","rangeExpandJumpUp","rangeExpandJumpDown","rangeExpandJumpLeft","rangeExpandJumpRight","keyBlock","newPos","displayRowsCount","scrollMax","Menu","nestedMenuBlock","currentComponent","rootPopup","initializeRowWatchers","initializeGroupWatchers","rowContextMenu","loadMenuEvent","on","rowClickMenu","rowDblClickMenu","groupContextMenu","groupClickMenu","groupDblClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerDblClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","dblClickMenu","headerMenuEl","icon","headerMenuIcon","menu","loadMenu","parentPopup","itemEl","disabled","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","movableColumns","abortMove","colEl","mousemove","which","startMove","bindTouchEvents","nextColWidth","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","passive","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","moveColumnActual","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connection","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connections","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","elementRowDrop","connectionTables","query","prototype","querySelectorAll","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","movableRowsSender","senders","movableRowsReceiver","receivers","fromRow","fromTable","toTable","Mutator","enabled","transformCell","mutateLink","lookupMutator","mutators","mutatorEdit","links","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","pages","Page","progressiveLoad","pageCounterElement","pageCounter","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","previousPage","nextPage","getPageMax","setPageToRow","initialLoadComplete","calculatePageSizes","footerRedraw","paginationAddRow","rowAddingPosition","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","testElRow","testElCell","paginationSize","visibility","generatePageSizeSelectList","setPageSize","dir","loading","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","counter","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","paginationInitialPage","paginationButtonCount","setMaxRows","trigger","_setPageCounter","_setPageButtons","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","finally","last_page","last_row","addRows","progressiveLoadDelay","footer","containerElement","scrollWidth","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","setItem","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","removeItem","persistence","retrievedData","persistenceMode","persistenceID","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retrieveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","setColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","current","oldCols","newCols","mergeAllNew","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","definitions","excludedKeys","defStore","colDef","moduleInitOrder","defaultReaders","defaultWriters","_componentPopupCall","loadPopupEvent","rowContextPopup","rowClickPopup","rowDblClickPopup","groupContextPopup","groupClickPopup","groupDblClickPopup","headerContextPopup","loadPopupTableColumnEvent","headerClickPopup","headerDblClickPopup","headerPopup","initializeColumnHeaderPopup","contextPopup","loadPopupTableCellEvent","clickPopup","dblClickPopup","headerPopupEl","headerPopupIcon","loadPopup","contentsEl","Print","manualBlock","beforeprintEventHandler","afterprintEventHandler","printAsHtml","replaceTable","cleanup","destroy","printFullscreen","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","ReactiveData","origFuncs","currentVersion","reactiveData","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","apply","getRowFromDataObject","pop","newRows","reverse","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","unwatchRow","ResizeColumns","startColumn","startWidth","latestX","initialNextColumn","layoutColumnHeader","initializeEventWatchers","layoutCellHandles","deInitializeComponent","resizeHandle","columnLayoutUpdated","deInitializeColumn","columnWidthUpdated","resizable","reinitializeColumn","frozenColumnOffset","frozenOffset","handleEl","nearestColumn","_checkResizability","handleDown","_mouseDown","oldWidth","parentElement","mouseMove","blockedBefore","blockedAfter","startDiff","moveDiff","resizableColumnFit","browserSlow","mouseUp","ResizeRows","startHeight","prevHandle","prevHandleDown","screenY","ResizeTable","visibilityObserver","resizeObserver","containerObserver","tableHeight","tableWidth","containerHeight","containerWidth","autoResize","initialRedraw","tableStyle","IntersectionObserver","ResizeObserver","initializeVisibilityObserver","entry","browserMobile","nodeHeight","contentRect","nodeWidth","redrawTable","observe","fixedHeight","tableResized","isIntersecting","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","generateCollapsedRowContent","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","responsive","order","generateCollapsedContent","hideColumn","colCount","showColumn","working","getFlexBaseWidth","headerVisible","activeRowsCount","renderEmptyScroll","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectableRows","selectableRange","clearSelectionData","rowRetrieve","selectableRowsPersistence","_deselectRow","prevSelected","_rowSelectionChanged","selectable","checkRowSelectability","endSelect","_clearSelection","lastClickedRowIdx","getDisplayRowIndex","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","selectableRowsCheck","_selectRow","rowMatch","change","changes","rowInfo","selectableRowsRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","deselected","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","string","locale","localeCompare","boolean","calc","d","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortClickElement","headerSortElement","setColumnHeaderSortIcon","columnHeaderSortMulti","newSortList","findSorter","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","setColumnHeader","_sortItems","sortEl","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","RangeComponent","_range","getStructuredCells","getTopEdge","getBottomEdge","getLeftEdge","getRightEdge","setBounds","destroyedGuard","setStartBound","setEndBound","rangeManager","clearValues","Range","initializing","rowHeader","initElement","initBounds","_updateMinMax","setStart","setEnd","columnSelection","isRowHeader","rowsCount","_getTableRows","_getTableColumns","topLeftCell","bottomRightCell","_vDomTop","vDomTop","_vDomBottom","vDomBottom","_vDomLeft","leftCol","_vDomRight","rightCol","Infinity","overlaps","atTopLeft","atBottomRight","occupies","occupiesRow","occupiesColumn","structured","arr","clearValue","selectableRangeClearCellsValue","notify","rangeRemoved","SelectRange","mousedown","ranges","overlay","layoutChangeTimeout","maxRanges","blockKeydown","keyDownEvent","_handleKeyDown","mouseUpEvent","_handleMouseUp","getRangesData","getRanges","addRangeFromComponent","cellGetRanges","rowGetRanges","colGetRanges","initializeTable","initializeWatchers","rangeContainer","activeRangeCellElement","resetRanges","handleColumnMouseDown","handleColumnMouseMove","handleColumnResized","layoutChange","updateHeaderColumn","renderCell","handleCellMouseDown","handleCellMouseMove","handleCellClick","handleEditingCell","finishEditingCell","restoreFocus","keyNavigate","keyNavigateRange","getActiveCell","initializeFocus","some","selectedColumn","event","newSelection","rangeIdx","dataset","navigate","jump","expand","moved","rangeEdge","findJumpCellLeft","findJumpCellRight","findJumpCellUp","findJumpCellDown","getTableColumns","getTableRows","getRowByRangePos","getColumnByRangePos","autoScroll","removed","findJumpCell","emptyStart","emptySide","currentValue","rowPos","colPos","isStartingCellEmpty","isLeftOfStartingCellEmpty","jumpCol","targetCells","isRightOfStartingCellEmpty","isTopOfStartingCellEmpty","jumpRow","isBottomOfStartingCellEmpty","rect","withinHorizontalView","withinVerticalView","tableHolder","scrollbarWidth","layoutRanges","layoutColumn","occupied","activeCell","colIdx","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","float","numeric","alphanumeric","minLength","maxLength","cellData","required","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","editValidate","editorClear","editedClear","previousValue","validate","cancelled","validator","_extractValidator","substring","_buildValidator","validators","failedValidators","invalidIndex","defaultValidators","OptionsList","msgType","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","verticalFillMode","clearRows","clearColumns","reinitializeColumnWidths","renderRows","renderColumns","rerenderRows","scrollColumns","scrollRows","scrollToRowNearestTop","includingBuffer","render","rerender","scrollToRowPosition","rowIndex","scrollToRowIfVisible","BasicHorizontal","rowFrag","VirtualDomHorizontal","vDomScrollPosLeft","vDomScrollPosRight","vDomPadRight","fitDataColAvg","windowBuffer","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","clearVisRowCache","dataChange","scroll","calcWindowBuffer","buffer","cols","leftPos","rightPos","fitDataCheck","vdomHoz","reinitChanged","reinitializeRow","colEnd","otherRows","addColRight","removeColLeft","addColLeft","removeColRight","colPositionAdjust","fitDataColActualWidthCheck","ex","message","newWidth","widthDiff","appendCell","ColumnManager","blockHozScrollEvent","columnsByField","defaultColumnOptions","redrawBlockUpdate","initializeRenderer","createHeadersElement","createHeaderContentsElement","createHeaderElement","initializeScrollWheelWatcher","padVerticalScrollbar","renderClass","renderers","virtual","RendererVirtualDomHorizontal","basic","RendererBasicHorizontal","deltaX","generateColumnsFromRowData","autoColumnsDefinitions","_addColumn","_reIndexColumns","nextToColumn","topColumn","parentIndex","nextEl","root","getDefinitions","getDefinitionTree","getComponents","_moveColumnInArray","updateRows","fromIndex","scrollToColumnPosition","scrollToColumnIfVisible","totalWidth","fixedWidth","resetScroll","BasicVertical","tableFrag","tableEmpty","rowTop","VirtualDomVertical","vDomRowHeight","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topOffset","topDiff","bottomDiff","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topFound","bottomRow","forceMove","rowFragment","topPad","rowsHeight","heightOccupied","topPadHeight","renderedRows","totalRowsRendered","rowsToRender","avgRowHeight","resized","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","placeholderContents","firstRender","renderMode","activeRowsPipeline","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","initializePlaceholder","leftDir","topDir","_positionPlaceholder","_setDataActual","_wipeElements","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","refreshDisplayOnly","findAddRowPos","_clearPlaceholder","addRowPos","chainResult","clearData","findRowIndex","rowOnly","getDataCount","skipStage","stage","cascadeOrder","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","scrollBarCheck","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","_clearTable","_showPlaceholder","initialHeight","otherHeight","external","createEvent","initEvent","Event","FooterManager","createContainerElement","initializeElement","footerElement","activate","deactivate","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","bindPseudoEvents","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","comp","clearWatchers","updateEventListeners","track","composedPath","targets","findTargets","bindComponents","triggerEvents","elTargets","targetMatches","previousTarget","closest","ComponentFunctionBinder","funcName","debugInvalidComponentFuncs","DataLoader","requestOrder","requestNo","alertLoader","mapParams","dataSendParams","objectInvert","dataReceiveParams","alertError","dataLoaderErrorTimeout","blockActiveLoad","dataLoaderLoading","dataLoaderError","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifySubscriptionChange","notifiers","callResult","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","DeprecationAdvisor","_warnUser","TableRegistry","tables","matchElement","Tabulator","lookupTable","forced","fitData","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","modes","dataChanged","defaultModes","Localize","langList","langs","setHeaderFilterPlaceholder","installLang","setLocale","getLang","default","_setLangProp","desiredLocale","language","traverseLang","trans","_executeBindings","pathArray","_getLangElement","rootPath","page_size","page_title","first","first_title","last","last_title","prev_title","next","next_title","showing","of","Comms","receive","selectors","con","tableComms","ModuleBinder","tabulator","bindStaticFunctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","orderedStartMods","orderedEndMods","unOrderedMods","moduleCore","modulesCore","modulesRegular","core","mods","Alert","_createAlertElement","msgElement","_createMsgElement","_typeClass","interactionMonitor","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","textDirection","direction","newElement","_detectBrowser","deregister","ua","userAgent","vendor","opera","stack","line","debugInitialization","Error","replaceData","responses","foundRows","updateOrAddRow","updateRow","getRowPosition","getColumnDefinitions","toggleColumn","deleteColumn","updateColumnDefinition","fromColumn","off","plugin","debugDeprecation","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","TabulatorFull","PseudoRow","_createElement"],"mappings":"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"} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/package-lock.json b/tmp/tabulator-5.6.1/package-lock.json deleted file mode 100644 index 952900a..0000000 --- a/tmp/tabulator-5.6.1/package-lock.json +++ /dev/null @@ -1,5225 +0,0 @@ -{ - "name": "tabulator-tables", - "version": "5.6.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "tabulator-tables", - "version": "5.5.3", - "license": "MIT", - "devDependencies": { - "@rollup/plugin-node-resolve": "^11.0.1", - "eslint": "^8.10.0", - "eslint-plugin-only-warn": "^1.0.3", - "fs-extra": "^9.0.1", - "globby": "^11.0.2", - "node-sass": "^9.0.0", - "postcss": "^8.2.4", - "postcss-prettify": "^0.3.4", - "rollup": "^2.36.1", - "rollup-plugin-license": "^2.2.0", - "rollup-plugin-postcss": "^4.0.0", - "rollup-plugin-terser": "^7.0.2" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", - "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.0.1.tgz", - "integrity": "sha512-ltlsj/4Bhwwhb+Nb5xCz/6vieuEj2/BAkkqVIKmZwC7pIdl8srmgmglE4S0jFlZa32K4qvdQ6NHdmpRKD/LwoQ==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001420", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001420.tgz", - "integrity": "sha512-OnyeJ9ascFA9roEj72ok2Ikp7PHJTKubtEJIQ/VK3fdsS50q4KWy+Z5X0A1/GswEItKX0ctAp8n4SYDE7wTu6A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commenting": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", - "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/concat-with-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.0", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.283", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.283.tgz", - "integrity": "sha512-g6RQ9zCOV+U5QVHW9OpFR7rdk/V7xfopNXnyAamdpFgCHgZ1sjI8VuR1+zG2YG/TZk+tQ8mpNkug4P8FU0fuOA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", - "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.2.2", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-only-warn": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz", - "integrity": "sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/glob-parent/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", - "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/generic-names": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", - "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", - "dev": true, - "dependencies": { - "loader-utils": "^3.2.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globule": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", - "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", - "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "^4.17.21", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/globule/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", - "dev": true - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "dependencies": { - "import-from": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/magic-string": { - "version": "0.26.6", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.6.tgz", - "integrity": "sha512-6d+3bFybzyQFJYSoRsl9ZC0wheze8M1LrQC7tNMRqXR4izUTDOLMd9BtSuExK9iAukFh+s5K0WAhc/dlQ+HKYA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/node-gyp/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/node-gyp/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/node-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/node-gyp/node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-gyp/node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/node-gyp/node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/node-sass": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", - "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "async-foreach": "^0.1.3", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "make-fetch-happen": "^10.0.4", - "meow": "^9.0.0", - "nan": "^2.17.0", - "node-gyp": "^8.4.1", - "sass-graph": "^4.0.1", - "stdout-stream": "^1.4.0", - "true-case-path": "^2.2.1" - }, - "bin": { - "node-sass": "bin/node-sass" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/node-sass/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/node-sass/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/node-sass/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/node-sass/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/node-sass/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-sass/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-name-regex": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.6.tgz", - "integrity": "sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/dword-design" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", - "dev": true, - "dependencies": { - "browserslist": "^4.20.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", - "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", - "dev": true, - "dependencies": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-prettify": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/postcss-prettify/-/postcss-prettify-0.3.4.tgz", - "integrity": "sha1-Grl4mb6jR3fk/BjYymH4WAdlGEM=", - "dev": true, - "dependencies": { - "defined": "1.0.0", - "postcss": "5.0.19" - } - }, - "node_modules/postcss-prettify/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-prettify/node_modules/postcss": { - "version": "5.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.0.19.tgz", - "integrity": "sha1-tjQqAdx1uMq36Wiv2pau/Gf4iK8=", - "dev": true, - "dependencies": { - "js-base64": "^2.1.9", - "source-map": "^0.5.1", - "supports-color": "^3.1.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-prettify/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/promise.series": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.36.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.36.1.tgz", - "integrity": "sha512-eAfqho8dyzuVvrGqpR0ITgEdq0zG2QJeWYh+HeuTbpcaXk8vNFc48B7bJa1xYosTCKx0CuW+447oQOW8HgBIZQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.2" - } - }, - "node_modules/rollup-plugin-license": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-2.8.1.tgz", - "integrity": "sha512-VYd9pzaNL7NN6xQp93XiiCV2UoduXgSmTcz6rl9bHPdiifT6yH3Zw/omEr73Rq8TIyN4nqJACBbKIT/2eE66wg==", - "dev": true, - "dependencies": { - "commenting": "~1.1.0", - "glob": "~7.2.0", - "lodash": "~4.17.21", - "magic-string": "~0.26.2", - "mkdirp": "~1.0.4", - "moment": "~2.29.3", - "package-name-regex": "~2.0.6", - "spdx-expression-validate": "~2.0.0", - "spdx-satisfies": "~5.0.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "rollup": "^1.0.0 || ^2.0.0" - } - }, - "node_modules/rollup-plugin-license/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup-plugin-postcss": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", - "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "concat-with-sourcemaps": "^1.1.0", - "cssnano": "^5.0.1", - "import-cwd": "^3.0.0", - "p-queue": "^6.6.2", - "pify": "^5.0.0", - "postcss-load-config": "^3.0.0", - "postcss-modules": "^4.0.0", - "promise.series": "^0.2.0", - "resolve": "^1.19.0", - "rollup-pluginutils": "^2.8.2", - "safe-identifier": "^0.4.2", - "style-inject": "^0.3.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "8.x" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/rollup-plugin-postcss/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-identifier": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", - "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "node_modules/sass-graph": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", - "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "lodash": "^4.17.11", - "scss-tokenizer": "^0.4.3", - "yargs": "^17.2.1" - }, - "bin": { - "sassgraph": "bin/sassgraph" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/scss-tokenizer": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", - "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", - "dev": true, - "dependencies": { - "js-base64": "^2.4.9", - "source-map": "^0.7.3" - } - }, - "node_modules/scss-tokenizer/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdx-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", - "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.2", - "spdx-expression-parse": "^3.0.0", - "spdx-ranges": "^2.0.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-expression-validate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz", - "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "node_modules/spdx-ranges": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", - "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", - "dev": true - }, - "node_modules/spdx-satisfies": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz", - "integrity": "sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==", - "dev": true, - "dependencies": { - "spdx-compare": "^1.0.0", - "spdx-expression-parse": "^3.0.0", - "spdx-ranges": "^2.0.0" - } - }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/stdout-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stdout-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-inject": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", - "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", - "dev": true - }, - "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - } - } -} diff --git a/tmp/tabulator-5.6.1/package.json b/tmp/tabulator-5.6.1/package.json deleted file mode 100644 index 5e340bb..0000000 --- a/tmp/tabulator-5.6.1/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "tabulator-tables", - "version": "5.6.1", - "description": "Interactive table generation JavaScript library", - "style": "dist/css/tabulator.css", - "main": "dist/js/tabulator.js", - "module": "dist/js/tabulator_esm.js", - "sideEffects": [ - "**/*.css", - "**/*.scss" - ], - "scripts": { - "lint": "eslint src --fix", - "prebuild": "eslint src --fix", - "build": "rollup -c build/rollup.js", - "dev": "rollup -c build/rollup.js -w --environment TARGET:dev", - "dev:css": "rollup -c build/rollup.js -w --environment TARGET:css", - "dev:esm": "rollup -c build/rollup.js -w --environment TARGET:esm", - "dev:umd": "rollup -c build/rollup.js -w --environment TARGET:umd", - "dev:wrappers": "rollup -c build/rollup.js -w --environment TARGET:wrappers" - }, - "repository": { - "type": "git", - "url": "https://github.com/olifolkerd/tabulator.git" - }, - "keywords": [ - "table", - "grid", - "datagrid", - "tabulator", - "editable", - "sort", - "format", - "resizable", - "list", - "scrollable", - "ajax", - "json", - "widget", - "jquery", - "react", - "angular", - "vue" - ], - "author": "Oli Folkerd", - "license": "MIT", - "bugs": { - "url": "https://github.com/olifolkerd/tabulator/issues" - }, - "homepage": "https://tabulator.info/", - "devDependencies": { - "@rollup/plugin-node-resolve": "^11.0.1", - "eslint": "^8.10.0", - "eslint-plugin-only-warn": "^1.0.3", - "fs-extra": "^9.0.1", - "globby": "^11.0.2", - "node-sass": "^9.0.0", - "postcss": "^8.2.4", - "postcss-prettify": "^0.3.4", - "rollup": "^2.36.1", - "rollup-plugin-license": "^2.2.0", - "rollup-plugin-postcss": "^4.0.0", - "rollup-plugin-terser": "^7.0.2" - } -} diff --git a/tmp/tabulator-5.6.1/src/js/builds/esm.js b/tmp/tabulator-5.6.1/src/js/builds/esm.js deleted file mode 100644 index 5d68fb6..0000000 --- a/tmp/tabulator-5.6.1/src/js/builds/esm.js +++ /dev/null @@ -1,14 +0,0 @@ -export * from '../core/modules/optional.js'; -export {default as Tabulator} from '../core/Tabulator.js'; -export {default as TabulatorFull} from '../core/TabulatorFull.js'; - -export {default as CellComponent} from '../core/cell/CellComponent.js'; -export {default as ColumnComponent} from '../core/column/ColumnComponent.js'; -export {default as RowComponent} from '../core/row/RowComponent.js'; -export {default as GroupComponent} from '../modules/GroupRows/GroupComponent.js'; -export {default as CalcComponent} from '../modules/ColumnCalcs/CalcComponent.js'; - -export {default as PseudoRow} from '../core/row/PseudoRow.js'; - -export {default as Module} from '../core/Module.js'; -export {default as Renderer} from '../core/rendering/Renderer.js'; diff --git a/tmp/tabulator-5.6.1/src/js/builds/jquery_wrapper.js b/tmp/tabulator-5.6.1/src/js/builds/jquery_wrapper.js deleted file mode 100644 index aef69a3..0000000 --- a/tmp/tabulator-5.6.1/src/js/builds/jquery_wrapper.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of the Tabulator package. - * - * (c) Oliver Folkerd - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - * Full Documentation & Demos can be found at: http://olifolkerd.github.io/tabulator/ - * - */ - -(function (root, factory) { - "use strict"; - if (typeof define === 'function' && define.amd) { - define(['jquery', 'tabulator', 'jquery-ui'], factory); - } - else if(typeof module !== 'undefined' && module.exports) { - module.exports = factory( - require('jquery'), - require('tabulator'), - require('jquery-ui') - ); - } - else { - factory(root.jQuery, root.Tabulator); - } -}(this, function ($, Tabulator) { - - $.widget("ui.tabulator", { - _create:function(){ - var options = Object.assign({}, this.options); - var props = []; - - delete options.create; - delete options.disabled; - - this.table = new Tabulator(this.element[0], options); - window.table = this.table; - - //retrieve properties on prototype - props = Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(this.table))); - - //retrieve properties added by modules - props = props.concat(Object.getOwnPropertyNames(this.table)); - - //map tabulator functions to jquery wrapper - for(let key of props){ - if(typeof this.table[key] === "function" && key.charAt(0) !== "_"){ - this[key] = this.table[key].bind(this.table); - } - } - }, - - _setOption: function(option, value){ - console.error("Tabulator jQuery wrapper does not support setting options after the table has been instantiated"); - }, - - _destroy: function(option, value){ - this.table.destroy(); - }, - }); -})); diff --git a/tmp/tabulator-5.6.1/src/js/builds/usd.js b/tmp/tabulator-5.6.1/src/js/builds/usd.js deleted file mode 100644 index c8b610d..0000000 --- a/tmp/tabulator-5.6.1/src/js/builds/usd.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../core/TabulatorFull.js'; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/ColumnManager.js b/tmp/tabulator-5.6.1/src/js/core/ColumnManager.js deleted file mode 100644 index b4b55df..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/ColumnManager.js +++ /dev/null @@ -1,750 +0,0 @@ -import CoreFeature from './CoreFeature.js'; -import Column from './column/Column.js'; -import ColumnComponent from './column/ColumnComponent.js'; -import Helpers from './tools/Helpers.js'; -import OptionsList from './tools/OptionsList.js'; - -import RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js'; -import RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js'; - -import defaultColumnOptions from './column/defaults/options.js'; - -export default class ColumnManager extends CoreFeature { - - constructor (table){ - super(table); - - this.blockHozScrollEvent = false; - this.headersElement = null; - this.contentsElement = null; - this.element = null ; //containing element - this.columns = []; // column definition object - this.columnsByIndex = []; //columns by index - this.columnsByField = {}; //columns by field - this.scrollLeft = 0; - this.optionsList = new OptionsList(this.table, "column definition", defaultColumnOptions); - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing - this.redrawBlockUpdate = null; //store latest redraw update only status - - this.renderer = null; - } - - ////////////// Setup Functions ///////////////// - - initialize(){ - this.initializeRenderer(); - - this.headersElement = this.createHeadersElement(); - this.contentsElement = this.createHeaderContentsElement(); - this.element = this.createHeaderElement(); - - this.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild); - this.element.insertBefore(this.contentsElement, this.element.firstChild); - - this.initializeScrollWheelWatcher(); - - this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); - this.subscribe("scrollbar-vertical", this.padVerticalScrollbar.bind(this)); - } - - padVerticalScrollbar(width){ - if(this.table.rtl){ - this.headersElement.style.marginLeft = width + "px"; - }else{ - this.headersElement.style.marginRight = width + "px"; - } - } - - initializeRenderer(){ - var renderClass; - - var renderers = { - "virtual": RendererVirtualDomHorizontal, - "basic": RendererBasicHorizontal, - }; - - if(typeof this.table.options.renderHorizontal === "string"){ - renderClass = renderers[this.table.options.renderHorizontal]; - }else{ - renderClass = this.table.options.renderHorizontal; - } - - if(renderClass){ - this.renderer = new renderClass(this.table, this.element, this.tableElement); - this.renderer.initialize(); - }else{ - console.error("Unable to find matching renderer:", this.table.options.renderHorizontal); - } - } - - - createHeadersElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - el.setAttribute("role", "row"); - - return el; - } - - createHeaderContentsElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-header-contents"); - el.setAttribute("role", "rowgroup"); - - return el; - } - - createHeaderElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - el.setAttribute("role", "rowgroup"); - - if(!this.table.options.headerVisible){ - el.classList.add("tabulator-header-hidden"); - } - - return el; - } - - //return containing element - getElement(){ - return this.element; - } - - //return containing contents element - getContentsElement(){ - return this.contentsElement; - } - - - //return header containing element - getHeadersElement(){ - return this.headersElement; - } - - //scroll horizontally to match table body - scrollHorizontal(left){ - this.contentsElement.scrollLeft = left; - - this.scrollLeft = left; - - this.renderer.scrollColumns(left); - } - - initializeScrollWheelWatcher(){ - this.contentsElement.addEventListener("wheel", (e) => { - var left; - - if(e.deltaX){ - left = this.contentsElement.scrollLeft + e.deltaX; - - this.table.rowManager.scrollHorizontal(left); - this.table.columnManager.scrollHorizontal(left); - } - }); - } - - ///////////// Column Setup Functions ///////////// - generateColumnsFromRowData(data){ - var cols = [], - definitions = this.table.options.autoColumnsDefinitions, - row, sorter; - - if(data && data.length){ - - row = data[0]; - - for(var key in row){ - let col = { - field:key, - title:key, - }; - - let value = row[key]; - - switch(typeof value){ - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - case "object": - if(Array.isArray(value)){ - sorter = "array"; - }else{ - sorter = "string"; - } - break; - - default: - if(!isNaN(value) && value !== ""){ - sorter = "number"; - }else{ - if(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){ - sorter = "alphanum"; - }else{ - sorter = "string"; - } - } - break; - } - - col.sorter = sorter; - - cols.push(col); - } - - if(definitions){ - - switch(typeof definitions){ - case "function": - this.table.options.columns = definitions.call(this.table, cols); - break; - - case "object": - if(Array.isArray(definitions)){ - cols.forEach((col) => { - var match = definitions.find((def) => { - return def.field === col.field; - }); - - if(match){ - Object.assign(col, match); - } - }); - - }else{ - cols.forEach((col) => { - if(definitions[col.field]){ - Object.assign(col, definitions[col.field]); - } - }); - } - - this.table.options.columns = cols; - break; - } - }else{ - this.table.options.columns = cols; - } - - this.setColumns(this.table.options.columns); - } - } - - setColumns(cols, row){ - while(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild); - - this.columns = []; - this.columnsByIndex = []; - this.columnsByField = {}; - - this.dispatch("columns-loading"); - - cols.forEach((def, i) => { - this._addColumn(def); - }); - - this._reIndexColumns(); - - this.dispatch("columns-loaded"); - - this.rerenderColumns(false, true); - - this.redraw(true); - } - - _addColumn(definition, before, nextToColumn){ - var column = new Column(definition, this), - colEl = column.getElement(), - index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; - - if(nextToColumn && index > -1){ - var topColumn = nextToColumn.getTopColumn(); - var parentIndex = this.columns.indexOf(topColumn); - var nextEl = topColumn.getElement(); - - if(before){ - this.columns.splice(parentIndex, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl); - }else{ - this.columns.splice(parentIndex + 1, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - }else{ - if(before){ - this.columns.unshift(column); - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - }else{ - this.columns.push(column); - this.headersElement.appendChild(column.getElement()); - } - } - - column.columnRendered(); - - return column; - } - - registerColumnField(col){ - if(col.definition.field){ - this.columnsByField[col.definition.field] = col; - } - } - - registerColumnPosition(col){ - this.columnsByIndex.push(col); - } - - _reIndexColumns(){ - this.columnsByIndex = []; - - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); - } - - //ensure column headers take up the correct amount of space in column groups - verticalAlignHeaders(){ - var minHeight = 0; - - if(!this.redrawBlock){ - - this.headersElement.style.height=""; - - this.columns.forEach((column) => { - column.clearVerticalAlign(); - }); - - this.columns.forEach((column) => { - var height = column.getHeight(); - - if(height > minHeight){ - minHeight = height; - } - }); - - this.headersElement.style.height = minHeight + "px"; - - this.columns.forEach((column) => { - column.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight); - }); - - this.table.rowManager.adjustTableSize(); - } - } - - //////////////// Column Details ///////////////// - findColumn(subject){ - var columns; - - if(typeof subject == "object"){ - - if(subject instanceof Column){ - //subject is column element - return subject; - }else if(subject instanceof ColumnComponent){ - //subject is public column component - return subject._getSelf() || false; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - - columns = []; - - this.columns.forEach((column) => { - columns.push(column); - columns = columns.concat(column.getColumns(true)); - }); - - //subject is a HTML element of the column header - let match = columns.find((column) => { - return column.element === subject; - }); - - return match || false; - } - - }else{ - //subject should be treated as the field name of the column - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - return false; - } - - getColumnByField(field){ - return this.columnsByField[field]; - } - - getColumnsByFieldRoot(root){ - var matches = []; - - Object.keys(this.columnsByField).forEach((field) => { - var fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field; - if(fieldRoot === root){ - matches.push(this.columnsByField[field]); - } - }); - - return matches; - } - - getColumnByIndex(index){ - return this.columnsByIndex[index]; - } - - getFirstVisibleColumn(){ - var index = this.columnsByIndex.findIndex((col) => { - return col.visible; - }); - - return index > -1 ? this.columnsByIndex[index] : false; - } - - getVisibleColumnsByIndex() { - return this.columnsByIndex.filter((col) => col.visible); - } - - getColumns(){ - return this.columns; - } - - findColumnIndex(column){ - return this.columnsByIndex.findIndex((col) => { - return column === col; - }); - } - - //return all columns that are not groups - getRealColumns(){ - return this.columnsByIndex; - } - - //traverse across columns and call action - traverse(callback){ - this.columnsByIndex.forEach((column,i) =>{ - callback(column, i); - }); - } - - //get definitions of actual columns - getDefinitions(active){ - var output = []; - - this.columnsByIndex.forEach((column) => { - if(!active || (active && column.visible)){ - output.push(column.getDefinition()); - } - }); - - return output; - } - - //get full nested definition tree - getDefinitionTree(){ - var output = []; - - this.columns.forEach((column) => { - output.push(column.getDefinition(true)); - }); - - return output; - } - - getComponents(structured){ - var output = [], - columns = structured ? this.columns : this.columnsByIndex; - - columns.forEach((column) => { - output.push(column.getComponent()); - }); - - return output; - } - - getWidth(){ - var width = 0; - - this.columnsByIndex.forEach((column) => { - if(column.visible){ - width += column.getWidth(); - } - }); - - return width; - } - - moveColumn(from, to, after){ - to.element.parentNode.insertBefore(from.element, to.element); - - if(after){ - to.element.parentNode.insertBefore(to.element, from.element); - } - - this.moveColumnActual(from, to, after); - - this.verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); - } - - moveColumnActual(from, to, after){ - if(from.parent.isGroup){ - this._moveColumnInArray(from.parent.columns, from, to, after); - }else{ - this._moveColumnInArray(this.columns, from, to, after); - } - - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - this.rerenderColumns(true); - - this.dispatch("column-moved", from, to, after); - - if(this.subscribedExternal("columnMoved")){ - this.dispatchExternal("columnMoved", from.getComponent(), this.table.columnManager.getComponents()); - } - } - - _moveColumnInArray(columns, from, to, after, updateRows){ - var fromIndex = columns.indexOf(from), - toIndex, rows = []; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if(after){ - toIndex = toIndex+1; - } - - }else{ - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if(updateRows){ - - rows = this.chain("column-moving-rows", [from, to, after], null, []) || []; - - rows = rows.concat(this.table.rowManager.rows); - - rows.forEach(function(row){ - if(row.cells.length){ - var cell = row.cells.splice(fromIndex, 1)[0]; - row.cells.splice(toIndex, 0, cell); - } - }); - - } - } - } - - scrollToColumn(column, position, ifVisible){ - var left = 0, - offset = column.getLeftOffset(), - adjust = 0, - colEl = column.getElement(); - - - return new Promise((resolve, reject) => { - - if(typeof position === "undefined"){ - position = this.table.options.scrollToColumnPosition; - } - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToColumnIfVisible; - } - - if(column.visible){ - - //align to correct position - switch(position){ - case "middle": - case "center": - adjust = -this.element.clientWidth / 2; - break; - - case "right": - adjust = colEl.clientWidth - this.headersElement.clientWidth; - break; - } - - //check column visibility - if(!ifVisible){ - if(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){ - return false; - } - } - - //calculate scroll position - left = offset + adjust; - - left = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0); - - this.table.rowManager.scrollHorizontal(left); - this.scrollHorizontal(left); - - resolve(); - }else{ - console.warn("Scroll Error - Column not visible"); - reject("Scroll Error - Column not visible"); - } - - }); - } - - //////////////// Cell Management ///////////////// - generateCells(row){ - var cells = []; - - this.columnsByIndex.forEach((column) => { - cells.push(column.generateCell(row)); - }); - - return cells; - } - - //////////////// Column Management ///////////////// - getFlexBaseWidth(){ - var totalWidth = this.table.element.clientWidth, //table element width - fixedWidth = 0; - - //adjust for vertical scrollbar if present - if(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){ - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - this.columnsByIndex.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width || 0; - - minWidth = parseInt(column.minWidth); - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width) ; - }else{ - colWidth = parseInt(width); - } - }else{ - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - } - }); - - return fixedWidth; - } - - addColumn(definition, before, nextToColumn){ - return new Promise((resolve, reject) => { - var column = this._addColumn(definition, before, nextToColumn); - - this._reIndexColumns(); - - this.dispatch("column-add", definition, before, nextToColumn); - - if(this.layoutMode() != "fitColumns"){ - column.reinitializeWidth(); - } - - this.redraw(true); - - this.table.rowManager.reinitialize(); - - this.rerenderColumns(); - - resolve(column); - }); - } - - //remove column from system - deregisterColumn(column){ - var field = column.getField(), - index; - - //remove from field list - if(field){ - delete this.columnsByField[field]; - } - - //remove from index list - index = this.columnsByIndex.indexOf(column); - - if(index > -1){ - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - index = this.columns.indexOf(column); - - if(index > -1){ - this.columns.splice(index, 1); - } - - this.verticalAlignHeaders(); - - this.redraw(); - } - - rerenderColumns(update, silent){ - if(!this.redrawBlock){ - this.renderer.rerenderColumns(update, silent); - }else{ - if(update === false || (update === true && this.redrawBlockUpdate === null)){ - this.redrawBlockUpdate = update; - } - } - } - - blockRedraw(){ - this.redrawBlock = true; - this.redrawBlockUpdate = null; - } - - restoreRedraw(){ - this.redrawBlock = false; - this.verticalAlignHeaders(); - this.renderer.rerenderColumns(this.redrawBlockUpdate); - - } - - //redraw columns - redraw(force){ - if(Helpers.elVisible(this.element)){ - this.verticalAlignHeaders(); - } - - if(force){ - this.table.rowManager.resetScroll(); - this.table.rowManager.reinitialize(); - } - - if(!this.confirm("table-redrawing", force)){ - this.layoutRefresh(force); - } - - this.dispatch("table-redraw", force); - - this.table.footerManager.redraw(); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/CoreFeature.js b/tmp/tabulator-5.6.1/src/js/core/CoreFeature.js deleted file mode 100644 index 7e19be5..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/CoreFeature.js +++ /dev/null @@ -1,139 +0,0 @@ -export default class CoreFeature{ - - constructor(table){ - this.table = table; - } - - ////////////////////////////////////////// - /////////////// DataLoad ///////////////// - ////////////////////////////////////////// - - reloadData(data, silent, columnsChanged){ - return this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged); - } - - ////////////////////////////////////////// - ///////////// Localization /////////////// - ////////////////////////////////////////// - - langText(){ - return this.table.modules.localize.getText(...arguments); - } - - langBind(){ - return this.table.modules.localize.bind(...arguments); - } - - langLocale(){ - return this.table.modules.localize.getLocale(...arguments); - } - - - ////////////////////////////////////////// - ////////// Inter Table Comms ///////////// - ////////////////////////////////////////// - - commsConnections(){ - return this.table.modules.comms.getConnections(...arguments); - } - - commsSend(){ - return this.table.modules.comms.send(...arguments); - } - - ////////////////////////////////////////// - //////////////// Layout ///////////////// - ////////////////////////////////////////// - - layoutMode(){ - return this.table.modules.layout.getMode(); - } - - layoutRefresh(force){ - return this.table.modules.layout.layout(force); - } - - - ////////////////////////////////////////// - /////////////// Event Bus //////////////// - ////////////////////////////////////////// - - subscribe(){ - return this.table.eventBus.subscribe(...arguments); - } - - unsubscribe(){ - return this.table.eventBus.unsubscribe(...arguments); - } - - subscribed(key){ - return this.table.eventBus.subscribed(key); - } - - subscriptionChange(){ - return this.table.eventBus.subscriptionChange(...arguments); - } - - dispatch(){ - return this.table.eventBus.dispatch(...arguments); - } - - chain(){ - return this.table.eventBus.chain(...arguments); - } - - confirm(){ - return this.table.eventBus.confirm(...arguments); - } - - dispatchExternal(){ - return this.table.externalEvents.dispatch(...arguments); - } - - subscribedExternal(key){ - return this.table.externalEvents.subscribed(key); - } - - subscriptionChangeExternal(){ - return this.table.externalEvents.subscriptionChange(...arguments); - } - - ////////////////////////////////////////// - //////////////// Options ///////////////// - ////////////////////////////////////////// - - options(key){ - return this.table.options[key]; - } - - setOption(key, value){ - if(typeof value !== "undefined"){ - this.table.options[key] = value; - } - - return this.table.options[key]; - } - - ////////////////////////////////////////// - /////////// Deprecation Checks /////////// - ////////////////////////////////////////// - - deprecationCheck(oldOption, newOption, convert){ - return this.table.deprecationAdvisor.check(oldOption, newOption, convert); - } - - deprecationCheckMsg(oldOption, msg){ - return this.table.deprecationAdvisor.checkMsg(oldOption, msg); - } - - deprecationMsg(msg){ - return this.table.deprecationAdvisor.msg(msg); - } - ////////////////////////////////////////// - //////////////// Modules ///////////////// - ////////////////////////////////////////// - - module(key){ - return this.table.module(key); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/FooterManager.js b/tmp/tabulator-5.6.1/src/js/core/FooterManager.js deleted file mode 100644 index 3e7950f..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/FooterManager.js +++ /dev/null @@ -1,102 +0,0 @@ -import CoreFeature from './CoreFeature.js'; - -export default class FooterManager extends CoreFeature{ - - constructor(table){ - super(table); - - this.active = false; - this.element = this.createElement(); //containing element - this.containerElement = this.createContainerElement(); //containing element - this.external = false; - } - - initialize(){ - this.initializeElement(); - } - - createElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; - } - - - createContainerElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-footer-contents"); - - this.element.appendChild(el); - - return el; - } - - initializeElement(){ - if(this.table.options.footerElement){ - - switch(typeof this.table.options.footerElement){ - case "string": - if(this.table.options.footerElement[0] === "<"){ - this.containerElement.innerHTML = this.table.options.footerElement; - }else{ - this.external = true; - this.containerElement = document.querySelector(this.table.options.footerElement); - } - break; - - default: - this.element = this.table.options.footerElement; - break; - } - } - } - - getElement(){ - return this.element; - } - - append(element){ - this.activate(); - - this.containerElement.appendChild(element); - this.table.rowManager.adjustTableSize(); - } - - prepend(element){ - this.activate(); - - this.element.insertBefore(element, this.element.firstChild); - this.table.rowManager.adjustTableSize(); - } - - remove(element){ - element.parentNode.removeChild(element); - this.deactivate(); - } - - deactivate(force){ - if(!this.element.firstChild || force){ - if(!this.external){ - this.element.parentNode.removeChild(this.element); - } - this.active = false; - } - } - - activate(){ - if(!this.active){ - this.active = true; - if(!this.external){ - this.table.element.appendChild(this.getElement()); - this.table.element.style.display = ''; - } - } - } - - redraw(){ - this.dispatch("footer-redraw"); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/Module.js b/tmp/tabulator-5.6.1/src/js/core/Module.js deleted file mode 100644 index c9de1e6..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/Module.js +++ /dev/null @@ -1,142 +0,0 @@ -import CoreFeature from './CoreFeature.js'; -import Popup from './tools/Popup.js'; - -class Module extends CoreFeature{ - - constructor(table, name){ - super(table); - - this._handler = null; - } - - initialize(){ - // setup module when table is initialized, to be overridden in module - } - - - /////////////////////////////////// - ////// Options Registration /////// - /////////////////////////////////// - - registerTableOption(key, value){ - this.table.optionsList.register(key, value); - } - - registerColumnOption(key, value){ - this.table.columnManager.optionsList.register(key, value); - } - - /////////////////////////////////// - /// Public Function Registration /// - /////////////////////////////////// - - registerTableFunction(name, func){ - if(typeof this.table[name] === "undefined"){ - this.table[name] = (...args) => { - this.table.initGuard(name); - - return func(...args); - }; - }else{ - console.warn("Unable to bind table function, name already in use", name); - } - } - - registerComponentFunction(component, func, handler){ - return this.table.componentFunctionBinder.bind(component, func, handler); - } - - /////////////////////////////////// - ////////// Data Pipeline ////////// - /////////////////////////////////// - - registerDataHandler(handler, priority){ - this.table.rowManager.registerDataPipelineHandler(handler, priority); - this._handler = handler; - } - - registerDisplayHandler(handler, priority){ - this.table.rowManager.registerDisplayPipelineHandler(handler, priority); - this._handler = handler; - } - - displayRows(adjust){ - var index = this.table.rowManager.displayRows.length - 1, - lookupIndex; - - if(this._handler){ - lookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => { - return item.handler === this._handler; - }); - - if(lookupIndex > -1){ - index = lookupIndex; - } - } - - if(adjust){ - index = index + adjust; - } - - if(this._handler){ - if(index > -1){ - return this.table.rowManager.getDisplayRows(index); - }else{ - return this.activeRows(); - } - } - } - - activeRows(){ - return this.table.rowManager.activeRows; - } - - refreshData(renderInPosition, handler){ - if(!handler){ - handler = this._handler; - } - - if(handler){ - this.table.rowManager.refreshActiveData(handler, false, renderInPosition); - } - } - - /////////////////////////////////// - //////// Footer Management //////// - /////////////////////////////////// - - footerAppend(element){ - return this.table.footerManager.append(element); - } - - footerPrepend(element){ - return this.table.footerManager.prepend(element); - } - - footerRemove(element){ - return this.table.footerManager.remove(element); - } - - /////////////////////////////////// - //////// Popups Management //////// - /////////////////////////////////// - - popup(menuEl, menuContainer){ - return new Popup(this.table, menuEl, menuContainer); - } - - /////////////////////////////////// - //////// Alert Management //////// - /////////////////////////////////// - - alert(content, type){ - return this.table.alertManager.alert(content, type); - } - - clearAlert(){ - return this.table.alertManager.clear(); - } - -} - -export default Module; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/RowManager.js b/tmp/tabulator-5.6.1/src/js/core/RowManager.js deleted file mode 100644 index 3a1dac6..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/RowManager.js +++ /dev/null @@ -1,1135 +0,0 @@ -import CoreFeature from './CoreFeature.js'; -import Row from './row/Row.js'; -import RowComponent from './row/RowComponent.js'; -import Helpers from './tools/Helpers.js'; - -import RendererBasicVertical from './rendering/renderers/BasicVertical.js'; -import RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js'; - -export default class RowManager extends CoreFeature{ - - constructor(table){ - super(table); - - this.element = this.createHolderElement(); //containing element - this.tableElement = this.createTableElement(); //table element - this.heightFixer = this.createTableElement(); //table element - this.placeholder = null; //placeholder element - this.placeholderContents = null; //placeholder element - - this.firstRender = false; //handle first render - this.renderMode = "virtual"; //current rendering mode - this.fixedHeight = false; //current rendering mode - - this.rows = []; //hold row data objects - this.activeRowsPipeline = []; //hold calculation of active rows - this.activeRows = []; //rows currently available to on display in the table - this.activeRowsCount = 0; //count of active rows - - this.displayRows = []; //rows currently on display in the table - this.displayRowsCount = 0; //count of display rows - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing - this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed - this.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed - - this.dataPipeline = []; //hold data pipeline tasks - this.displayPipeline = []; //hold data display pipeline tasks - - this.scrollbarWidth = 0; - - this.renderer = null; - } - - //////////////// Setup Functions ///////////////// - - createHolderElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-tableholder"); - el.setAttribute("tabindex", 0); - // el.setAttribute("role", "rowgroup"); - - return el; - } - - createTableElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - el.setAttribute("role", "rowgroup"); - - return el; - } - - initializePlaceholder(){ - var placeholder = this.table.options.placeholder; - - if(typeof placeholder === "function"){ - placeholder = placeholder.call(this.table); - } - - placeholder = this.chain("placeholder", [placeholder], placeholder, placeholder) || placeholder; - - //configure placeholder element - if(placeholder){ - let el = document.createElement("div"); - el.classList.add("tabulator-placeholder"); - - if(typeof placeholder == "string"){ - let contents = document.createElement("div"); - contents.classList.add("tabulator-placeholder-contents"); - contents.innerHTML = placeholder; - - el.appendChild(contents); - - this.placeholderContents = contents; - - }else if(typeof HTMLElement !== "undefined" && placeholder instanceof HTMLElement){ - - el.appendChild(placeholder); - this.placeholderContents = placeholder; - }else{ - console.warn("Invalid placeholder provided, must be string or HTML Element", placeholder); - - this.el = null; - } - - this.placeholder = el; - } - } - - //return containing element - getElement(){ - return this.element; - } - - //return table element - getTableElement(){ - return this.tableElement; - } - - initialize(){ - this.initializePlaceholder(); - this.initializeRenderer(); - - //initialize manager - this.element.appendChild(this.tableElement); - - this.firstRender = true; - - //scroll header along with table body - this.element.addEventListener("scroll", () => { - var left = this.element.scrollLeft, - leftDir = this.scrollLeft > left, - top = this.element.scrollTop, - topDir = this.scrollTop > top; - - //handle horizontal scrolling - if(this.scrollLeft != left){ - this.scrollLeft = left; - - this.dispatch("scroll-horizontal", left, leftDir); - this.dispatchExternal("scrollHorizontal", left, leftDir); - - this._positionPlaceholder(); - } - - //handle vertical scrolling - if(this.scrollTop != top){ - this.scrollTop = top; - - this.renderer.scrollRows(top, topDir); - - this.dispatch("scroll-vertical", top, topDir); - this.dispatchExternal("scrollVertical", top, topDir); - } - }); - } - - ////////////////// Row Manipulation ////////////////// - findRow(subject){ - if(typeof subject == "object"){ - if(subject instanceof Row){ - //subject is row element - return subject; - }else if(subject instanceof RowComponent){ - //subject is public row component - return subject._getSelf() || false; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - //subject is a HTML element of the row - let match = this.rows.find((row) => { - return row.getElement() === subject; - }); - - return match || false; - }else if(subject === null){ - return false; - } - }else if(typeof subject == "undefined"){ - return false; - }else{ - //subject should be treated as the index of the row - let match = this.rows.find((row) => { - return row.data[this.table.options.index] == subject; - }); - - return match || false; - } - - //catch all for any other type of input - return false; - } - - getRowFromDataObject(data){ - var match = this.rows.find((row) => { - return row.data === data; - }); - - return match || false; - } - - getRowFromPosition(position){ - return this.getDisplayRows().find((row) => { - return row.getPosition() === position && row.isDisplayed(); - }); - } - - scrollToRow(row, position, ifVisible){ - return this.renderer.scrollToRowPosition(row, position, ifVisible); - } - - ////////////////// Data Handling ////////////////// - setData(data, renderInPosition, columnsChanged){ - return new Promise((resolve, reject)=>{ - if(renderInPosition && this.getDisplayRows().length){ - if(this.table.options.pagination){ - this._setDataActual(data, true); - }else{ - this.reRenderInPosition(() => { - this._setDataActual(data); - }); - } - }else{ - if(this.table.options.autoColumns && columnsChanged && this.table.initialized){ - this.table.columnManager.generateColumnsFromRowData(data); - } - this.resetScroll(); - - this._setDataActual(data); - } - - resolve(); - }); - } - - _setDataActual(data, renderInPosition){ - this.dispatchExternal("dataProcessing", data); - - this._wipeElements(); - - if(Array.isArray(data)){ - this.dispatch("data-processing", data); - - data.forEach((def, i) => { - if(def && typeof def === "object"){ - var row = new Row(def, this); - this.rows.push(row); - }else{ - console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); - } - }); - - this.refreshActiveData(false, false, renderInPosition); - - this.dispatch("data-processed", data); - this.dispatchExternal("dataProcessed", data); - }else{ - console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data); - } - } - - _wipeElements(){ - this.dispatch("rows-wipe"); - - this.destroy(); - - this.adjustTableSize(); - - this.dispatch("rows-wiped"); - } - - destroy(){ - this.rows.forEach((row) => { - row.wipe(); - }); - - this.rows = []; - this.activeRows = []; - this.activeRowsPipeline = []; - this.activeRowsCount = 0; - this.displayRows = []; - this.displayRowsCount = 0; - } - - deleteRow(row, blockRedraw){ - var allIndex = this.rows.indexOf(row), - activeIndex = this.activeRows.indexOf(row); - - if(activeIndex > -1){ - this.activeRows.splice(activeIndex, 1); - } - - if(allIndex > -1){ - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator((rows) => { - var displayIndex = rows.indexOf(row); - - if(displayIndex > -1){ - rows.splice(displayIndex, 1); - } - }); - - if(!blockRedraw){ - this.reRenderInPosition(); - } - - this.regenerateRowPositions(); - - this.dispatchExternal("rowDeleted", row.getComponent()); - - if(!this.displayRowsCount){ - this.tableEmpty(); - } - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.getData()); - } - } - - addRow(data, pos, index, blockRedraw){ - var row = this.addRowActual(data, pos, index, blockRedraw); - return row; - } - - //add multiple rows - addRows(data, pos, index, refreshDisplayOnly){ - var rows = []; - - return new Promise((resolve, reject) => { - pos = this.findAddRowPos(pos); - - if(!Array.isArray(data)){ - data = [data]; - } - - if((typeof index == "undefined" && pos) || (typeof index !== "undefined" && !pos)){ - data.reverse(); - } - - data.forEach((item, i) => { - var row = this.addRow(item, pos, index, true); - rows.push(row); - this.dispatch("row-added", row, item, pos, index); - }); - - this.refreshActiveData(refreshDisplayOnly ? "displayPipeline" : false, false, true); - - this.regenerateRowPositions(); - - if(this.displayRowsCount){ - this._clearPlaceholder(); - } - - resolve(rows); - }); - } - - findAddRowPos(pos){ - if(typeof pos === "undefined"){ - pos = this.table.options.addRowPos; - } - - if(pos === "pos"){ - pos = true; - } - - if(pos === "bottom"){ - pos = false; - } - - return pos; - } - - addRowActual(data, pos, index, blockRedraw){ - var row = data instanceof Row ? data : new Row(data || {}, this), - top = this.findAddRowPos(pos), - allIndex = -1, - activeIndex, chainResult; - - if(!index){ - chainResult = this.chain("row-adding-position", [row, top], null, {index, top}); - - index = chainResult.index; - top = chainResult.top; - } - - if(typeof index !== "undefined"){ - index = this.findRow(index); - } - - index = this.chain("row-adding-index", [row, index, top], null, index); - - if(index){ - allIndex = this.rows.indexOf(index); - } - - if(index && allIndex > -1){ - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function(rows){ - var displayIndex = rows.indexOf(index); - - if(displayIndex > -1){ - rows.splice((top ? displayIndex : displayIndex + 1), 0, row); - } - }); - - if(activeIndex > -1){ - this.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row); - } - - this.rows.splice((top ? allIndex : allIndex + 1), 0, row); - - }else{ - - if(top){ - - this.displayRowIterator(function(rows){ - rows.unshift(row); - }); - - this.activeRows.unshift(row); - this.rows.unshift(row); - }else{ - this.displayRowIterator(function(rows){ - rows.push(row); - }); - - this.activeRows.push(row); - this.rows.push(row); - } - } - - this.setActiveRows(this.activeRows); - - this.dispatchExternal("rowAdded", row.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - - if(!blockRedraw){ - this.reRenderInPosition(); - } - - return row; - } - - moveRow(from, to, after){ - this.dispatch("row-move", from, to, after); - - this.moveRowActual(from, to, after); - - this.regenerateRowPositions(); - - this.dispatch("row-moved", from, to, after); - this.dispatchExternal("rowMoved", from.getComponent()); - } - - moveRowActual(from, to, after){ - this.moveRowInArray(this.rows, from, to, after); - this.moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator((rows) => { - this.moveRowInArray(rows, from, to, after); - }); - - this.dispatch("row-moving", from, to, after); - } - - moveRowInArray(rows, from, to, after){ - var fromIndex, toIndex, start, end; - - if(from !== to){ - - fromIndex = rows.indexOf(from); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if(after){ - rows.splice(toIndex+1, 0, from); - }else{ - rows.splice(toIndex, 0, from); - } - - }else{ - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - if(rows === this.getDisplayRows()){ - - start = fromIndex < toIndex ? fromIndex : toIndex; - end = toIndex > fromIndex ? toIndex : fromIndex +1; - - for(let i = start; i <= end; i++){ - if(rows[i]){ - this.styleRow(rows[i], i); - } - } - } - } - } - - clearData(){ - this.setData([]); - } - - getRowIndex(row){ - return this.findRowIndex(row, this.rows); - } - - getDisplayRowIndex(row){ - var index = this.getDisplayRows().indexOf(row); - return index > -1 ? index : false; - } - - nextDisplayRow(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - nextRow = false; - - - if(index !== false && index < this.displayRowsCount -1){ - nextRow = this.getDisplayRows()[index+1]; - } - - if(nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")){ - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; - } - - prevDisplayRow(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if(index){ - prevRow = this.getDisplayRows()[index-1]; - } - - if(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")){ - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; - } - - findRowIndex(row, list){ - var rowIndex; - - row = this.findRow(row); - - if(row){ - rowIndex = list.indexOf(row); - - if(rowIndex > -1){ - return rowIndex; - } - } - - return false; - } - - getData(active, transform){ - var output = [], - rows = this.getRows(active); - - rows.forEach(function(row){ - if(row.type == "row"){ - output.push(row.getData(transform || "data")); - } - }); - - return output; - } - - getComponents(active){ - var output = [], - rows = this.getRows(active); - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - return output; - } - - getDataCount(active){ - var rows = this.getRows(active); - - return rows.length; - } - - scrollHorizontal(left){ - this.scrollLeft = left; - this.element.scrollLeft = left; - - this.dispatch("scroll-horizontal", left); - } - - registerDataPipelineHandler(handler, priority){ - if(typeof priority !== "undefined"){ - this.dataPipeline.push({handler, priority}); - this.dataPipeline.sort((a, b) => { - return a.priority - b.priority; - }); - }else{ - console.error("Data pipeline handlers must have a priority in order to be registered"); - } - } - - registerDisplayPipelineHandler(handler, priority){ - if(typeof priority !== "undefined"){ - this.displayPipeline.push({handler, priority}); - this.displayPipeline.sort((a, b) => { - return a.priority - b.priority; - }); - }else{ - console.error("Display pipeline handlers must have a priority in order to be registered"); - } - } - - //set active data set - refreshActiveData(handler, skipStage, renderInPosition){ - var table = this.table, - stage = "", - index = 0, - cascadeOrder = ["all", "dataPipeline", "display", "displayPipeline", "end"]; - - if(!this.table.destroyed){ - if(typeof handler === "function"){ - index = this.dataPipeline.findIndex((item) => { - return item.handler === handler; - }); - - if(index > -1){ - stage = "dataPipeline"; - - if(skipStage){ - if(index == this.dataPipeline.length - 1){ - stage = "display"; - }else{ - index++; - } - } - }else{ - index = this.displayPipeline.findIndex((item) => { - return item.handler === handler; - }); - - if(index > -1){ - stage = "displayPipeline"; - - if(skipStage){ - if(index == this.displayPipeline.length - 1){ - stage = "end"; - }else{ - index++; - } - } - }else{ - console.error("Unable to refresh data, invalid handler provided", handler); - return; - } - } - }else{ - stage = handler || "all"; - index = 0; - } - - if(this.redrawBlock){ - if(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){ - this.redrawBlockRestoreConfig = { - handler: handler, - skipStage: skipStage, - renderInPosition: renderInPosition, - stage:stage, - index:index, - }; - } - - return; - }else{ - if(Helpers.elVisible(this.element)){ - if(renderInPosition){ - this.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition)); - }else{ - this.refreshPipelines(handler, stage, index, renderInPosition); - - if(!handler){ - this.table.columnManager.renderer.renderColumns(); - } - - this.renderTable(); - - if(table.options.layoutColumnsOnNewData){ - this.table.columnManager.redraw(true); - } - } - }else{ - this.refreshPipelines(handler, stage, index, renderInPosition); - } - - this.dispatch("data-refreshed"); - } - } - } - - refreshPipelines(handler, stage, index, renderInPosition){ - this.dispatch("data-refreshing"); - - if(!handler || !this.activeRowsPipeline[0]){ - this.activeRowsPipeline[0] = this.rows.slice(0); - } - - //cascade through data refresh stages - switch(stage){ - case "all": - //handle case where all data needs refreshing - - case "dataPipeline": - for(let i = index; i < this.dataPipeline.length; i++){ - let result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0)); - - this.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0); - } - - this.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]); - - case "display": - index = 0; - this.resetDisplayRows(); - - case "displayPipeline": - for(let i = index; i < this.displayPipeline.length; i++){ - let result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition); - - this.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i); - } - - case "end": - //case to handle scenario when trying to skip past end stage - this.regenerateRowPositions(); - } - - if(this.getDisplayRows().length){ - this._clearPlaceholder(); - } - } - - //regenerate row positions - regenerateRowPositions(){ - var rows = this.getDisplayRows(); - var index = 1; - - rows.forEach((row) => { - if (row.type === "row"){ - row.setPosition(index); - index++; - } - }); - } - - setActiveRows(activeRows){ - this.activeRows = this.activeRows = Object.assign([], activeRows); - this.activeRowsCount = this.activeRows.length; - } - - //reset display rows array - resetDisplayRows(){ - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - } - - //set display row pipeline data - setDisplayRows(displayRows, index){ - this.displayRows[index] = displayRows; - - if(index == this.displayRows.length -1){ - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; - } - } - - getDisplayRows(index){ - if(typeof index == "undefined"){ - return this.displayRows.length ? this.displayRows[this.displayRows.length -1] : []; - }else{ - return this.displayRows[index] || []; - } - } - - getVisibleRows(chain, viewable){ - var rows = Object.assign([], this.renderer.visibleRows(!viewable)); - - if(chain){ - rows = this.chain("rows-visible", [viewable], rows, rows); - } - - return rows; - } - - //repeat action across display rows - displayRowIterator(callback){ - this.activeRowsPipeline.forEach(callback); - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; - } - - //return only actual rows (not group headers etc) - getRows(type){ - var rows = []; - - switch(type){ - case "active": - rows = this.activeRows; - break; - - case "display": - rows = this.table.rowManager.getDisplayRows(); - break; - - case "visible": - rows = this.getVisibleRows(false, true); - break; - - default: - rows = this.chain("rows-retrieve", type, null, this.rows) || this.rows; - } - - return rows; - } - - ///////////////// Table Rendering ///////////////// - //trigger rerender of table in current position - reRenderInPosition(callback){ - if(this.redrawBlock){ - if(callback){ - callback(); - }else{ - this.redrawBlockRenderInPosition = true; - } - }else{ - this.dispatchExternal("renderStarted"); - - this.renderer.rerenderRows(callback); - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.scrollBarCheck(); - - this.dispatchExternal("renderComplete"); - } - } - - scrollBarCheck(){ - var scrollbarWidth = 0; - - //adjust for vertical scrollbar moving table when present - if(this.element.scrollHeight > this.element.clientHeight){ - scrollbarWidth = this.element.offsetWidth - this.element.clientWidth; - } - - if(scrollbarWidth !== this.scrollbarWidth){ - this.scrollbarWidth = scrollbarWidth; - this.dispatch("scrollbar-vertical", scrollbarWidth); - } - } - - initializeRenderer(){ - var renderClass; - - var renderers = { - "virtual": RendererVirtualDomVertical, - "basic": RendererBasicVertical, - }; - - if(typeof this.table.options.renderVertical === "string"){ - renderClass = renderers[this.table.options.renderVertical]; - }else{ - renderClass = this.table.options.renderVertical; - } - - if(renderClass){ - this.renderMode = this.table.options.renderVertical; - - this.renderer = new renderClass(this.table, this.element, this.tableElement); - this.renderer.initialize(); - - if((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){ - this.fixedHeight = true; - }else{ - this.fixedHeight = false; - } - }else{ - console.error("Unable to find matching renderer:", this.table.options.renderVertical); - } - } - - getRenderMode(){ - return this.renderMode; - } - - renderTable(){ - this.dispatchExternal("renderStarted"); - - this.element.scrollTop = 0; - - this._clearTable(); - - if(this.displayRowsCount){ - this.renderer.renderRows(); - - if(this.firstRender){ - this.firstRender = false; - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.layoutRefresh(true); - } - }else{ - this.renderEmptyScroll(); - } - - if(!this.fixedHeight){ - this.adjustTableSize(); - } - - this.dispatch("table-layout"); - - if(!this.displayRowsCount){ - this._showPlaceholder(); - } - - this.scrollBarCheck(); - - this.dispatchExternal("renderComplete"); - } - - //show scrollbars on empty table div - renderEmptyScroll(){ - if(this.placeholder){ - this.tableElement.style.display = "none"; - }else{ - this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px"; - // this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; - } - } - - _clearTable(){ - this._clearPlaceholder(); - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.renderer.clearRows(); - } - - tableEmpty(){ - this.renderEmptyScroll(); - this._showPlaceholder(); - } - - checkPlaceholder(){ - if(this.displayRowsCount){ - this._clearPlaceholder(); - }else{ - this.tableEmpty(); - } - } - - _showPlaceholder(){ - if(this.placeholder){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.parentNode.removeChild(this.placeholder); - } - - this.initializePlaceholder(); - - this.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - - this.getElement().appendChild(this.placeholder); - this._positionPlaceholder(); - - this.adjustTableSize(); - } - } - - _clearPlaceholder(){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.parentNode.removeChild(this.placeholder); - } - - // clear empty table placeholder min - this.tableElement.style.minWidth = ""; - this.tableElement.style.display = ""; - } - - _positionPlaceholder(){ - if(this.placeholder && this.placeholder.parentNode){ - this.placeholder.style.width = this.table.columnManager.getWidth() + "px"; - this.placeholderContents.style.width = this.table.rowManager.element.clientWidth + "px"; - this.placeholderContents.style.marginLeft = this.scrollLeft + "px"; - } - } - - styleRow(row, index){ - var rowEl = row.getElement(); - - if(index % 2){ - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - }else{ - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } - } - - //normalize height of active rows - normalizeHeight(){ - this.activeRows.forEach(function(row){ - row.normalizeHeight(); - }); - } - - //adjust the height of the table holder to fit in the Tabulator element - adjustTableSize(){ - let initialHeight = this.element.clientHeight, minHeight; - let resized = false; - - if(this.renderer.verticalFillMode === "fill"){ - let otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0)); - - if(this.fixedHeight){ - minHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + "px"; - - const height = "calc(100% - " + otherHeight + "px)"; - this.element.style.minHeight = minHeight || "calc(100% - " + otherHeight + "px)"; - this.element.style.height = height; - this.element.style.maxHeight = height; - } else { - this.element.style.height = ""; - this.element.style.height = - this.table.element.clientHeight - otherHeight + "px"; - this.element.scrollTop = this.scrollTop; - } - - this.renderer.resize(); - - //check if the table has changed size when dealing with variable height tables - if(!this.fixedHeight && initialHeight != this.element.clientHeight){ - resized = true; - if(this.subscribed("table-resize")){ - this.dispatch("table-resize"); - }else{ - this.redraw(); - } - } - - this.scrollBarCheck(); - } - - this._positionPlaceholder(); - return resized; - } - - //reinitialize all rows - reinitialize(){ - this.rows.forEach(function(row){ - row.reinitialize(true); - }); - } - - //prevent table from being redrawn - blockRedraw (){ - this.redrawBlock = true; - this.redrawBlockRestoreConfig = false; - } - - //restore table redrawing - restoreRedraw (){ - this.redrawBlock = false; - - if(this.redrawBlockRestoreConfig){ - this.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition); - - this.redrawBlockRestoreConfig = false; - }else{ - if(this.redrawBlockRenderInPosition){ - this.reRenderInPosition(); - } - } - - this.redrawBlockRenderInPosition = false; - } - - //redraw table - redraw (force){ - this.adjustTableSize(); - this.table.tableWidth = this.table.element.clientWidth; - - if(!force){ - this.reRenderInPosition(); - this.scrollHorizontal(this.scrollLeft); - }else{ - this.renderTable(); - } - } - - resetScroll(){ - this.element.scrollLeft = 0; - this.element.scrollTop = 0; - - if(this.table.browser === "ie"){ - var event = document.createEvent("Event"); - event.initEvent("scroll", false, true); - this.element.dispatchEvent(event); - }else{ - this.element.dispatchEvent(new Event('scroll')); - } - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/Tabulator.js b/tmp/tabulator-5.6.1/src/js/core/Tabulator.js deleted file mode 100644 index 2950a0b..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/Tabulator.js +++ /dev/null @@ -1,896 +0,0 @@ -'use strict'; - -import defaultOptions from './defaults/options.js'; - -import ColumnManager from './ColumnManager.js'; -import RowManager from './RowManager.js'; -import FooterManager from './FooterManager.js'; - -import InteractionMonitor from './tools/InteractionMonitor.js'; -import ComponentFunctionBinder from './tools/ComponentFunctionBinder.js'; -import DataLoader from './tools/DataLoader.js'; - -import ExternalEventBus from './tools/ExternalEventBus.js'; -import InternalEventBus from './tools/InternalEventBus.js'; - -import DeprecationAdvisor from './tools/DeprecationAdvisor.js'; - -import TableRegistry from './tools/TableRegistry.js'; -import ModuleBinder from './tools/ModuleBinder.js'; - -import OptionsList from './tools/OptionsList.js'; - -import Alert from './tools/Alert.js'; - -class Tabulator { - - constructor(element, options){ - - this.options = {}; - - this.columnManager = null; // hold Column Manager - this.rowManager = null; //hold Row Manager - this.footerManager = null; //holder Footer Manager - this.alertManager = null; //hold Alert Manager - this.vdomHoz = null; //holder horizontal virtual dom - this.externalEvents = null; //handle external event messaging - this.eventBus = null; //handle internal event messaging - this.interactionMonitor = false; //track user interaction - this.browser = ""; //hold current browser type - this.browserSlow = false; //handle reduced functionality for slower browsers - this.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance - this.rtl = false; //check if the table is in RTL mode - this.originalElement = null; //hold original table element if it has been replaced - - this.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions - this.dataLoader = false; //bind component functions - - this.modules = {}; //hold all modules bound to this table - this.modulesCore = []; //hold core modules bound to this table (for initialization purposes) - this.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes) - - this.deprecationAdvisor = new DeprecationAdvisor(this); - this.optionsList = new OptionsList(this, "table constructor"); - - this.initialized = false; - this.destroyed = false; - - if(this.initializeElement(element)){ - - this.initializeCoreSystems(options); - - //delay table creation to allow event bindings immediately after the constructor - setTimeout(() => { - this._create(); - }); - } - - TableRegistry.register(this); //register table for inter-device communication - } - - initializeElement(element){ - if(typeof HTMLElement !== "undefined" && element instanceof HTMLElement){ - this.element = element; - return true; - }else if(typeof element === "string"){ - this.element = document.querySelector(element); - - if(this.element){ - return true; - }else{ - console.error("Tabulator Creation Error - no element found matching selector: ", element); - return false; - } - }else{ - console.error("Tabulator Creation Error - Invalid element provided:", element); - return false; - } - } - - initializeCoreSystems(options){ - this.columnManager = new ColumnManager(this); - this.rowManager = new RowManager(this); - this.footerManager = new FooterManager(this); - this.dataLoader = new DataLoader(this); - this.alertManager = new Alert(this); - - this.bindModules(); - - this.options = this.optionsList.generate(Tabulator.defaultOptions, options); - - this._clearObjectPointers(); - - this._mapDeprecatedFunctionality(); - - this.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal); - this.eventBus = new InternalEventBus(this.options.debugEventsInternal); - - this.interactionMonitor = new InteractionMonitor(this); - - this.dataLoader.initialize(); - // this.columnManager.initialize(); - // this.rowManager.initialize(); - this.footerManager.initialize(); - } - - //convert deprecated functionality to new functions - _mapDeprecatedFunctionality(){ - //all previously deprecated functionality removed in the 5.0 release - } - - _clearSelection(){ - - this.element.classList.add("tabulator-block-select"); - - if (window.getSelection) { - if (window.getSelection().empty) { // Chrome - window.getSelection().empty(); - } else if (window.getSelection().removeAllRanges) { // Firefox - window.getSelection().removeAllRanges(); - } - } else if (document.selection) { // IE? - document.selection.empty(); - } - - this.element.classList.remove("tabulator-block-select"); - } - - //create table - _create(){ - this.externalEvents.dispatch("tableBuilding"); - this.eventBus.dispatch("table-building"); - - this._rtlCheck(); - - this._buildElement(); - - this._initializeTable(); - - this._loadInitialData(); - - this.initialized = true; - - this.externalEvents.dispatch("tableBuilt"); - } - - _rtlCheck(){ - var style = window.getComputedStyle(this.element); - - switch(this.options.textDirection){ - case"auto": - if(style.direction !== "rtl"){ - break; - } - - case "rtl": - this.element.classList.add("tabulator-rtl"); - this.rtl = true; - break; - - case "ltr": - this.element.classList.add("tabulator-ltr"); - - default: - this.rtl = false; - } - } - - //clear pointers to objects in default config object - _clearObjectPointers(){ - this.options.columns = this.options.columns.slice(0); - - if(Array.isArray(this.options.data) && !this.options.reactiveData){ - this.options.data = this.options.data.slice(0); - } - } - - //build tabulator element - _buildElement(){ - var element = this.element, - options = this.options, - newElement; - - if(element.tagName === "TABLE"){ - this.originalElement = this.element; - newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - for(var i in attributes){ - if(typeof attributes[i] == "object"){ - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - this.element = element = newElement; - } - - element.classList.add("tabulator"); - element.setAttribute("role", "grid"); - - //empty element - while(element.firstChild) element.removeChild(element.firstChild); - - //set table height - if(options.height){ - options.height = isNaN(options.height) ? options.height : options.height + "px"; - element.style.height = options.height; - } - - //set table min height - if(options.minHeight !== false){ - options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px"; - element.style.minHeight = options.minHeight; - } - - //set table maxHeight - if(options.maxHeight !== false){ - options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px"; - element.style.maxHeight = options.maxHeight; - } - } - - //initialize core systems and modules - _initializeTable(){ - var element = this.element, - options = this.options; - - this.interactionMonitor.initialize(); - - this.columnManager.initialize(); - this.rowManager.initialize(); - - this._detectBrowser(); - - //initialize core modules - this.modulesCore.forEach((mod) => { - mod.initialize(); - }); - - //build table elements - element.appendChild(this.columnManager.getElement()); - element.appendChild(this.rowManager.getElement()); - - if(options.footerElement){ - this.footerManager.activate(); - } - - if(options.autoColumns && options.data){ - - this.columnManager.generateColumnsFromRowData(this.options.data); - } - - //initialize regular modules - this.modulesRegular.forEach((mod) => { - mod.initialize(); - }); - - this.columnManager.setColumns(options.columns); - - this.eventBus.dispatch("table-built"); - } - - _loadInitialData(){ - this.dataLoader.load(this.options.data); - this.columnManager.verticalAlignHeaders(); - } - - //deconstructor - destroy(){ - var element = this.element; - - this.destroyed = true; - - TableRegistry.deregister(this); //deregister table from inter-device communication - - this.eventBus.dispatch("table-destroy"); - - //clear row data - this.rowManager.destroy(); - - //clear DOM - while(element.firstChild) element.removeChild(element.firstChild); - element.classList.remove("tabulator"); - - this.externalEvents.dispatch("tableDestroyed"); - } - - _detectBrowser(){ - var ua = navigator.userAgent||navigator.vendor||window.opera; - - if(ua.indexOf("Trident") > -1){ - this.browser = "ie"; - this.browserSlow = true; - }else if(ua.indexOf("Edge") > -1){ - this.browser = "edge"; - this.browserSlow = true; - }else if(ua.indexOf("Firefox") > -1){ - this.browser = "firefox"; - this.browserSlow = false; - }else if(ua.indexOf("Mac OS") > -1){ - this.browser = "safari"; - this.browserSlow = false; - }else{ - this.browser = "other"; - this.browserSlow = false; - } - - this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4)); - } - - initGuard(func, msg){ - var stack, line; - - if(this.options.debugInitialization && !this.initialized){ - if(!func){ - stack = new Error().stack.split("\n"); - - line = stack[0] == "Error" ? stack[2] : stack[1]; - - if(line[0] == " "){ - func = line.trim().split(" ")[1].split(".")[1]; - }else{ - func = line.trim().split("@")[0]; - } - } - - console.warn("Table Not Initialized - Calling the " + func + " function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function." + (msg ? " " + msg : "")); - } - - return this.initialized; - } - - ////////////////// Data Handling ////////////////// - //block table redrawing - blockRedraw(){ - this.initGuard(); - - this.eventBus.dispatch("redraw-blocking"); - - this.rowManager.blockRedraw(); - this.columnManager.blockRedraw(); - - this.eventBus.dispatch("redraw-blocked"); - } - - //restore table redrawing - restoreRedraw(){ - this.initGuard(); - - this.eventBus.dispatch("redraw-restoring"); - - this.rowManager.restoreRedraw(); - this.columnManager.restoreRedraw(); - - this.eventBus.dispatch("redraw-restored"); - } - - //load data - setData(data, params, config){ - this.initGuard(false, "To set initial data please use the 'data' property in the table constructor."); - - return this.dataLoader.load(data, params, config, false); - } - - //clear data - clearData(){ - this.initGuard(); - - this.dataLoader.blockActiveLoad(); - this.rowManager.clearData(); - } - - //get table data array - getData(active){ - return this.rowManager.getData(active); - } - - //get table data array count - getDataCount(active){ - return this.rowManager.getDataCount(active); - } - - //replace data, keeping table in position with same sort - replaceData(data, params, config){ - this.initGuard(); - - return this.dataLoader.load(data, params, config, true, true); - } - - //update table data - updateData(data){ - var responses = 0; - - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data && data.length > 0){ - data.forEach((item) => { - var row = this.rowManager.findRow(item[this.options.index]); - - if(row){ - responses++; - - row.updateData(item) - .then(()=>{ - responses--; - - if(!responses){ - resolve(); - } - }) - .catch((e) => { - reject("Update Error - Unable to update row", item, e); - }); - }else{ - reject("Update Error - Unable to find row", item); - } - }); - }else{ - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - addData(data, pos, index){ - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data){ - this.rowManager.addRows(data, pos, index) - .then((rows) => { - var output = []; - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - resolve(output); - }); - }else{ - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - //update table data - updateOrAddData(data){ - var rows = [], - responses = 0; - - this.initGuard(); - - return new Promise((resolve, reject) => { - this.dataLoader.blockActiveLoad(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data && data.length > 0){ - data.forEach((item) => { - var row = this.rowManager.findRow(item[this.options.index]); - - responses++; - - if(row){ - row.updateData(item) - .then(()=>{ - responses--; - rows.push(row.getComponent()); - - if(!responses){ - resolve(rows); - } - }); - }else{ - this.rowManager.addRows(item) - .then((newRows)=>{ - responses--; - rows.push(newRows[0].getComponent()); - - if(!responses){ - resolve(rows); - } - }); - } - }); - }else{ - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - } - - //get row object - getRow(index){ - var row = this.rowManager.findRow(index); - - if(row){ - return row.getComponent(); - }else{ - console.warn("Find Error - No matching row found:", index); - return false; - } - } - - //get row object - getRowFromPosition(position){ - var row = this.rowManager.getRowFromPosition(position); - - if(row){ - return row.getComponent(); - }else{ - console.warn("Find Error - No matching row found:", position); - return false; - } - } - - //delete row from table - deleteRow(index){ - var foundRows = []; - - this.initGuard(); - - if(!Array.isArray(index)){ - index = [index]; - } - - //find matching rows - for(let item of index){ - let row = this.rowManager.findRow(item, true); - - if(row){ - foundRows.push(row); - }else{ - console.error("Delete Error - No matching row found:", item); - return Promise.reject("Delete Error - No matching row found"); - } - } - - //sort rows into correct order to ensure smooth delete from table - foundRows.sort((a, b) => { - return this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1; - }); - - //delete rows - foundRows.forEach((row) =>{ - row.delete(); - }); - - this.rowManager.reRenderInPosition(); - - return Promise.resolve(); - } - - //add row to table - addRow(data, pos, index){ - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - return this.rowManager.addRows(data, pos, index, true) - .then((rows)=>{ - return rows[0].getComponent(); - }); - } - - //update a row if it exists otherwise create it - updateOrAddRow(index, data){ - var row = this.rowManager.findRow(index); - - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - return row.updateData(data) - .then(()=>{ - return row.getComponent(); - }); - }else{ - return this.rowManager.addRows(data) - .then((rows)=>{ - return rows[0].getComponent(); - }); - } - } - - //update row data - updateRow(index, data){ - var row = this.rowManager.findRow(index); - - this.initGuard(); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - return row.updateData(data) - .then(()=>{ - return Promise.resolve(row.getComponent()); - }); - }else{ - console.warn("Update Error - No matching row found:", index); - return Promise.reject("Update Error - No matching row found"); - } - } - - //scroll to row in DOM - scrollToRow(index, position, ifVisible){ - var row = this.rowManager.findRow(index); - - if(row){ - return this.rowManager.scrollToRow(row, position, ifVisible); - }else{ - console.warn("Scroll Error - No matching row found:", index); - return Promise.reject("Scroll Error - No matching row found"); - } - } - - moveRow(from, to, after){ - var fromRow = this.rowManager.findRow(from); - - this.initGuard(); - - if(fromRow){ - fromRow.moveToRow(to, after); - }else{ - console.warn("Move Error - No matching row found:", from); - } - } - - getRows(active){ - return this.rowManager.getComponents(active); - } - - //get position of row in table - getRowPosition(index){ - var row = this.rowManager.findRow(index); - - if(row){ - return row.getPosition(); - }else{ - console.warn("Position Error - No matching row found:", index); - return false; - } - } - - /////////////// Column Functions /////////////// - setColumns(definition){ - this.initGuard(false, "To set initial columns please use the 'columns' property in the table constructor"); - - this.columnManager.setColumns(definition); - } - - getColumns(structured){ - return this.columnManager.getComponents(structured); - } - - getColumn(field){ - var column = this.columnManager.findColumn(field); - - if(column){ - return column.getComponent(); - }else{ - console.warn("Find Error - No matching column found:", field); - return false; - } - } - - getColumnDefinitions(){ - return this.columnManager.getDefinitionTree(); - } - - showColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - column.show(); - }else{ - console.warn("Column Show Error - No matching column found:", field); - return false; - } - } - - hideColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - column.hide(); - }else{ - console.warn("Column Hide Error - No matching column found:", field); - return false; - } - } - - toggleColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - if(column.visible){ - column.hide(); - }else{ - column.show(); - } - }else{ - console.warn("Column Visibility Toggle Error - No matching column found:", field); - return false; - } - } - - addColumn(definition, before, field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - return this.columnManager.addColumn(definition, before, column) - .then((column) => { - return column.getComponent(); - }); - } - - deleteColumn(field){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - return column.delete(); - }else{ - console.warn("Column Delete Error - No matching column found:", field); - return Promise.reject(); - } - } - - updateColumnDefinition(field, definition){ - var column = this.columnManager.findColumn(field); - - this.initGuard(); - - if(column){ - return column.updateDefinition(definition); - }else{ - console.warn("Column Update Error - No matching column found:", field); - return Promise.reject(); - } - } - - moveColumn(from, to, after){ - var fromColumn = this.columnManager.findColumn(from), - toColumn = this.columnManager.findColumn(to); - - this.initGuard(); - - if(fromColumn){ - if(toColumn){ - this.columnManager.moveColumn(fromColumn, toColumn, after); - }else{ - console.warn("Move Error - No matching column found:", toColumn); - } - }else{ - console.warn("Move Error - No matching column found:", from); - } - } - - //scroll to column in DOM - scrollToColumn(field, position, ifVisible){ - return new Promise((resolve, reject) => { - var column = this.columnManager.findColumn(field); - - if(column){ - return this.columnManager.scrollToColumn(column, position, ifVisible); - }else{ - console.warn("Scroll Error - No matching column found:", field); - return Promise.reject("Scroll Error - No matching column found"); - } - }); - } - - //////////// General Public Functions //////////// - //redraw list without updating data - redraw(force){ - this.initGuard(); - - this.columnManager.redraw(force); - this.rowManager.redraw(force); - } - - setHeight(height){ - this.options.height = isNaN(height) ? height : height + "px"; - this.element.style.height = this.options.height; - this.rowManager.initializeRenderer(); - this.rowManager.redraw(true); - } - - //////////////////// Event Bus /////////////////// - - on(key, callback){ - this.externalEvents.subscribe(key, callback); - } - - off(key, callback){ - this.externalEvents.unsubscribe(key, callback); - } - - dispatchEvent(){ - var args = Array.from(arguments); - args.shift(); - - this.externalEvents.dispatch(...arguments); - } - - //////////////////// Alerts /////////////////// - - alert(contents, type){ - this.initGuard(); - - this.alertManager.alert(contents, type); - } - - clearAlert(){ - this.initGuard(); - - this.alertManager.clear(); - } - - ////////////// Extension Management ////////////// - modExists(plugin, required){ - if(this.modules[plugin]){ - return true; - }else{ - if(required){ - console.error("Tabulator Module Not Installed: " + plugin); - } - return false; - } - } - - module(key){ - var mod = this.modules[key]; - - if(!mod){ - console.error("Tabulator module not installed: " + key); - } - - return mod; - } -} - -//default setup options -Tabulator.defaultOptions = defaultOptions; - -//bind modules and static functionality -new ModuleBinder(Tabulator); - -export default Tabulator; diff --git a/tmp/tabulator-5.6.1/src/js/core/TabulatorFull.js b/tmp/tabulator-5.6.1/src/js/core/TabulatorFull.js deleted file mode 100644 index 334692b..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/TabulatorFull.js +++ /dev/null @@ -1,11 +0,0 @@ -//tabulator with all modules installed -import {default as Tabulator} from './Tabulator.js'; -import * as modules from '../core/modules/optional.js'; -import ModuleBinder from './tools/ModuleBinder.js'; - -class TabulatorFull extends Tabulator {} - -//bind modules and static functionality -new ModuleBinder(TabulatorFull, modules); - -export default TabulatorFull; diff --git a/tmp/tabulator-5.6.1/src/js/core/cell/Cell.js b/tmp/tabulator-5.6.1/src/js/core/cell/Cell.js deleted file mode 100644 index f597aaf..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/cell/Cell.js +++ /dev/null @@ -1,295 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; -import CellComponent from './CellComponent.js'; - -export default class Cell extends CoreFeature{ - constructor(column, row){ - super(column.table); - - this.table = column.table; - this.column = column; - this.row = row; - this.element = null; - this.value = null; - this.initialValue; - this.oldValue = null; - this.modules = {}; - - this.height = null; - this.width = null; - this.minWidth = null; - - this.component = null; - - this.loaded = false; //track if the cell has been added to the DOM yet - - this.build(); - } - - //////////////// Setup Functions ///////////////// - //generate element - build(){ - this.generateElement(); - - this.setWidth(); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); - - this.initialValue = this.value; - } - - generateElement(){ - this.element = document.createElement('div'); - this.element.className = "tabulator-cell"; - this.element.setAttribute("role", "gridcell"); - } - - _configureCell(){ - var element = this.element, - field = this.column.getField(), - vertAligns = { - top:"flex-start", - bottom:"flex-end", - middle:"center", - }, - hozAligns = { - left:"flex-start", - right:"flex-end", - center:"center", - }; - - //set text alignment - element.style.textAlign = this.column.hozAlign; - - if(this.column.vertAlign){ - element.style.display = "inline-flex"; - - element.style.alignItems = vertAligns[this.column.vertAlign] || ""; - - if(this.column.hozAlign){ - element.style.justifyContent = hozAligns[this.column.hozAlign] || ""; - } - } - - if(field){ - element.setAttribute("tabulator-field", field); - } - - //add class to cell if needed - if(this.column.definition.cssClass){ - var classNames = this.column.definition.cssClass.split(" "); - classNames.forEach((className) => { - element.classList.add(className); - }); - } - - this.dispatch("cell-init", this); - - //hide cell if not visible - if(!this.column.visible){ - this.hide(); - } - } - - //generate cell contents - _generateContents(){ - var val; - - val = this.chain("cell-format", this, null, () => { - return this.element.innerHTML = this.value; - }); - - switch(typeof val){ - case "object": - if(val instanceof Node){ - - //clear previous cell contents - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - this.element.appendChild(val); - }else{ - this.element.innerHTML = ""; - - if(val != null){ - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - } - break; - case "undefined": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = val; - } - } - - cellRendered(){ - this.dispatch("cell-rendered", this); - } - - //////////////////// Getters //////////////////// - getElement(containerOnly){ - if(!this.loaded){ - this.loaded = true; - if(!containerOnly){ - this.layoutElement(); - } - } - - return this.element; - } - - getValue(){ - return this.value; - } - - getOldValue(){ - return this.oldValue; - } - - //////////////////// Actions //////////////////// - setValue(value, mutate, force){ - var changed = this.setValueProcessData(value, mutate, force); - - if(changed){ - this.dispatch("cell-value-updated", this); - - this.cellRendered(); - - if(this.column.definition.cellEdited){ - this.column.definition.cellEdited.call(this.table, this.getComponent()); - } - - this.dispatchExternal("cellEdited", this.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - } - } - - setValueProcessData(value, mutate, force){ - var changed = false; - - if(this.value !== value || force){ - - changed = true; - - if(mutate){ - value = this.chain("cell-value-changing", [this, value], null, value); - } - } - - this.setValueActual(value); - - if(changed){ - this.dispatch("cell-value-changed", this); - } - - return changed; - } - - setValueActual(value){ - this.oldValue = this.value; - - this.value = value; - - this.dispatch("cell-value-save-before", this); - - this.column.setFieldValue(this.row.data, value); - - this.dispatch("cell-value-save-after", this); - - if(this.loaded){ - this.layoutElement(); - } - } - - layoutElement(){ - this._generateContents(); - - this.dispatch("cell-layout", this); - } - - setWidth(){ - this.width = this.column.width; - this.element.style.width = this.column.widthStyled; - } - - clearWidth(){ - this.width = ""; - this.element.style.width = ""; - } - - getWidth(){ - return this.width || this.element.offsetWidth; - } - - setMinWidth(){ - this.minWidth = this.column.minWidth; - this.element.style.minWidth = this.column.minWidthStyled; - } - - setMaxWidth(){ - this.maxWidth = this.column.maxWidth; - this.element.style.maxWidth = this.column.maxWidthStyled; - } - - checkHeight(){ - // var height = this.element.css("height"); - this.row.reinitializeHeight(); - } - - clearHeight(){ - this.element.style.height = ""; - this.height = null; - - this.dispatch("cell-height", this, ""); - } - - setHeight(){ - this.height = this.row.height; - this.element.style.height = this.row.heightStyled; - - this.dispatch("cell-height", this, this.row.heightStyled); - } - - getHeight(){ - return this.height || this.element.offsetHeight; - } - - show(){ - this.element.style.display = this.column.vertAlign ? "inline-flex" : ""; - } - - hide(){ - this.element.style.display = "none"; - } - - delete(){ - this.dispatch("cell-delete", this); - - if(!this.table.rowManager.redrawBlock && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.element = false; - this.column.deleteCell(this); - this.row.deleteCell(this); - this.calcs = {}; - } - - getIndex(){ - return this.row.getCellIndex(this); - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new CellComponent(this); - } - - return this.component; - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/cell/CellComponent.js b/tmp/tabulator-5.6.1/src/js/core/cell/CellComponent.js deleted file mode 100644 index 2796a16..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/cell/CellComponent.js +++ /dev/null @@ -1,79 +0,0 @@ -//public cell object -export default class CellComponent { - - constructor (cell){ - this._cell = cell; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else{ - return target._cell.table.componentFunctionBinder.handle("cell", target._cell, name); - } - } - }); - } - - getValue(){ - return this._cell.getValue(); - } - - getOldValue(){ - return this._cell.getOldValue(); - } - - getInitialValue(){ - return this._cell.initialValue; - } - - getElement(){ - return this._cell.getElement(); - } - - getRow(){ - return this._cell.row.getComponent(); - } - - getData(transform){ - return this._cell.row.getData(transform); - } - getType(){ - return "cell"; - } - getField(){ - return this._cell.column.getField(); - } - - getColumn(){ - return this._cell.column.getComponent(); - } - - setValue(value, mutate){ - if(typeof mutate == "undefined"){ - mutate = true; - } - - this._cell.setValue(value, mutate); - } - - restoreOldValue(){ - this._cell.setValueActual(this._cell.getOldValue()); - } - - restoreInitialValue(){ - this._cell.setValueActual(this._cell.initialValue); - } - - checkHeight(){ - this._cell.checkHeight(); - } - - getTable(){ - return this._cell.table; - } - - _getSelf(){ - return this._cell; - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/column/Column.js b/tmp/tabulator-5.6.1/src/js/core/column/Column.js deleted file mode 100644 index 4135e18..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/column/Column.js +++ /dev/null @@ -1,959 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; -import ColumnComponent from './ColumnComponent.js'; -import defaultOptions from './defaults/options.js'; - -import Cell from '../cell/Cell.js'; - -class Column extends CoreFeature{ - - constructor(def, parent){ - super(parent.table); - - this.definition = def; //column definition - this.parent = parent; //hold parent object - this.type = "column"; //type of element - this.columns = []; //child columns - this.cells = []; //cells bound to this column - this.element = this.createElement(); //column header element - this.contentElement = false; - this.titleHolderElement = false; - this.titleElement = false; - this.groupElement = this.createGroupElement(); //column group holder element - this.isGroup = false; - this.hozAlign = ""; //horizontal text alignment - this.vertAlign = ""; //vert text alignment - - //multi dimensional filed handling - this.field =""; - this.fieldStructure = ""; - this.getFieldValue = ""; - this.setFieldValue = ""; - - this.titleDownload = null; - this.titleFormatterRendered = false; - - this.mapDefinitions(); - - this.setField(this.definition.field); - - this.modules = {}; //hold module variables; - - this.width = null; //column width - this.widthStyled = ""; //column width pre-styled to improve render efficiency - this.maxWidth = null; //column maximum width - this.maxWidthStyled = ""; //column maximum pre-styled to improve render efficiency - this.maxInitialWidth = null; - this.minWidth = null; //column minimum width - this.minWidthStyled = ""; //column minimum pre-styled to improve render efficiency - this.widthFixed = false; //user has specified a width for this column - - this.visible = true; //default visible state - - this.component = null; - - //initialize column - if(this.definition.columns){ - - this.isGroup = true; - - this.definition.columns.forEach((def, i) => { - var newCol = new Column(def, this); - this.attachColumn(newCol); - }); - - this.checkColumnVisibility(); - }else{ - parent.registerColumnField(this); - } - - this._initialize(); - } - - createElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.setAttribute("role", "columnheader"); - el.setAttribute("aria-sort", "none"); - - switch(this.table.options.columnHeaderVertAlign){ - case "middle": - el.style.justifyContent = "center"; - break; - case "bottom": - el.style.justifyContent = "flex-end"; - break; - } - - return el; - } - - createGroupElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; - } - - mapDefinitions(){ - var defaults = this.table.options.columnDefaults; - - //map columnDefaults onto column definitions - if(defaults){ - for(let key in defaults){ - if(typeof this.definition[key] === "undefined"){ - this.definition[key] = defaults[key]; - } - } - } - - this.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition); - } - - checkDefinition(){ - Object.keys(this.definition).forEach((key) => { - if(Column.defaultOptionList.indexOf(key) === -1){ - console.warn("Invalid column definition option in '" + (this.field || this.definition.title) + "' column:", key); - } - }); - } - - setField(field){ - this.field = field; - this.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : []; - this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData; - this.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData; - } - - //register column position with column manager - registerColumnPosition(column){ - this.parent.registerColumnPosition(column); - } - - //register column position with column manager - registerColumnField(column){ - this.parent.registerColumnField(column); - } - - //trigger position registration - reRegisterPosition(){ - if(this.isGroup){ - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); - }else{ - this.registerColumnPosition(this); - } - } - - //build header element - _initialize(){ - var def = this.definition; - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(def.headerVertical){ - this.element.classList.add("tabulator-col-vertical"); - - if(def.headerVertical === "flip"){ - this.element.classList.add("tabulator-col-vertical-flip"); - } - } - - this.contentElement = this._buildColumnHeaderContent(); - - this.element.appendChild(this.contentElement); - - if(this.isGroup){ - this._buildGroupHeader(); - }else{ - this._buildColumnHeader(); - } - - this.dispatch("column-init", this); - } - - //build header element for header - _buildColumnHeader(){ - var def = this.definition; - - this.dispatch("column-layout", this); - - //set column visibility - if(typeof def.visible != "undefined"){ - if(def.visible){ - this.show(true); - }else{ - this.hide(true); - } - } - - //assign additional css classes to column header - if(def.cssClass){ - var classNames = def.cssClass.split(" "); - classNames.forEach((className) => { - this.element.classList.add(className); - }); - } - - if(def.field){ - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - this.setMinWidth(parseInt(def.minWidth)); - - if (def.maxInitialWidth) { - this.maxInitialWidth = parseInt(def.maxInitialWidth); - } - - if(def.maxWidth){ - this.setMaxWidth(parseInt(def.maxWidth)); - } - - this.reinitializeWidth(); - - //set horizontal text alignment - this.hozAlign = this.definition.hozAlign; - this.vertAlign = this.definition.vertAlign; - - this.titleElement.style.textAlign = this.definition.headerHozAlign; - } - - _buildColumnHeaderContent(){ - var contentElement = document.createElement("div"); - contentElement.classList.add("tabulator-col-content"); - - this.titleHolderElement = document.createElement("div"); - this.titleHolderElement.classList.add("tabulator-col-title-holder"); - - contentElement.appendChild(this.titleHolderElement); - - this.titleElement = this._buildColumnHeaderTitle(); - - this.titleHolderElement.appendChild(this.titleElement); - - return contentElement; - } - - //build title element of column - _buildColumnHeaderTitle(){ - var def = this.definition; - - var titleHolderElement = document.createElement("div"); - titleHolderElement.classList.add("tabulator-col-title"); - - if(def.headerWordWrap){ - titleHolderElement.classList.add("tabulator-col-title-wrap"); - } - - if(def.editableTitle){ - var titleElement = document.createElement("input"); - titleElement.classList.add("tabulator-title-editor"); - - titleElement.addEventListener("click", (e) => { - e.stopPropagation(); - titleElement.focus(); - }); - - titleElement.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - titleElement.addEventListener("change", () => { - def.title = titleElement.value; - this.dispatchExternal("columnTitleChanged", this.getComponent()); - }); - - titleHolderElement.appendChild(titleElement); - - if(def.field){ - this.langBind("columns|" + def.field, (text) => { - titleElement.value = text || (def.title || " "); - }); - }else{ - titleElement.value = def.title || " "; - } - - }else{ - if(def.field){ - this.langBind("columns|" + def.field, (text) => { - this._formatColumnHeaderTitle(titleHolderElement, text || (def.title || " ")); - }); - }else{ - this._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; - } - - _formatColumnHeaderTitle(el, title){ - var contents = this.chain("column-format", [this, title, el], null, () => { - return title; - }); - - switch(typeof contents){ - case "object": - if(contents instanceof Node){ - el.appendChild(contents); - }else{ - el.innerHTML = ""; - console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); - } - break; - case "undefined": - el.innerHTML = ""; - break; - default: - el.innerHTML = contents; - } - } - - //build header element for column group - _buildGroupHeader(){ - this.element.classList.add("tabulator-col-group"); - this.element.setAttribute("role", "columngroup"); - this.element.setAttribute("aria-title", this.definition.title); - - //asign additional css classes to column header - if(this.definition.cssClass){ - var classNames = this.definition.cssClass.split(" "); - classNames.forEach((className) => { - this.element.classList.add(className); - }); - } - - this.titleElement.style.textAlign = this.definition.headerHozAlign; - - this.element.appendChild(this.groupElement); - } - - //flat field lookup - _getFlatData(data){ - return data[this.field]; - } - - //nested field lookup - _getNestedData(data){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for(let i = 0; i < length; i++){ - - dataObj = dataObj[structure[i]]; - - output = dataObj; - - if(!dataObj){ - break; - } - } - - return output; - } - - //flat field set - _setFlatData(data, value){ - if(this.field){ - data[this.field] = value; - } - } - - //nested field set - _setNestedData(data, value){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for(let i = 0; i < length; i++){ - - if(i == length -1){ - dataObj[structure[i]] = value; - }else{ - if(!dataObj[structure[i]]){ - if(typeof value !== "undefined"){ - dataObj[structure[i]] = {}; - }else{ - break; - } - } - - dataObj = dataObj[structure[i]]; - } - } - } - - //attach column to this group - attachColumn(column){ - if(this.groupElement){ - this.columns.push(column); - this.groupElement.appendChild(column.getElement()); - - column.columnRendered(); - }else{ - console.warn("Column Warning - Column being attached to another column instead of column group"); - } - } - - //vertically align header in column - verticalAlign(alignment, height){ - - //calculate height of column header and group holder element - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight); - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - this.element.style.height = parentHeight + "px"; - - this.dispatch("column-height", this, this.element.style.height); - - if(this.isGroup){ - this.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + "px"; - } - - //vertically align cell contents - // if(!this.isGroup && alignment !== "top"){ - // if(alignment === "bottom"){ - // this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + "px"; - // }else{ - // this.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + "px"; - // } - // } - - this.columns.forEach(function(column){ - column.verticalAlign(alignment); - }); - } - - //clear vertical alignment - clearVerticalAlign(){ - this.element.style.paddingTop = ""; - this.element.style.height = ""; - this.element.style.minHeight = ""; - this.groupElement.style.minHeight = ""; - - this.columns.forEach(function(column){ - column.clearVerticalAlign(); - }); - - this.dispatch("column-height", this, ""); - } - - //// Retrieve Column Information //// - //return column header element - getElement(){ - return this.element; - } - - //return column group element - getGroupElement(){ - return this.groupElement; - } - - //return field name - getField(){ - return this.field; - } - - getTitleDownload() { - return this.titleDownload; - } - - //return the first column in a group - getFirstColumn(){ - if(!this.isGroup){ - return this; - }else{ - if(this.columns.length){ - return this.columns[0].getFirstColumn(); - }else{ - return false; - } - } - } - - //return the last column in a group - getLastColumn(){ - if(!this.isGroup){ - return this; - }else{ - if(this.columns.length){ - return this.columns[this.columns.length -1].getLastColumn(); - }else{ - return false; - } - } - } - - //return all columns in a group - getColumns(traverse){ - var columns = []; - - if(traverse){ - this.columns.forEach((column) => { - columns.push(column); - - columns = columns.concat(column.getColumns(true)); - }); - }else{ - columns = this.columns; - } - - return columns; - } - - //return all columns in a group - getCells(){ - return this.cells; - } - - //retrieve the top column in a group of columns - getTopColumn(){ - if(this.parent.isGroup){ - return this.parent.getTopColumn(); - }else{ - return this; - } - } - - //return column definition object - getDefinition(updateBranches){ - var colDefs = []; - - if(this.isGroup && updateBranches){ - this.columns.forEach(function(column){ - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; - } - - //////////////////// Actions //////////////////// - checkColumnVisibility(){ - var visible = false; - - this.columns.forEach(function(column){ - if(column.visible){ - visible = true; - } - }); - - if(visible){ - this.show(); - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); - }else{ - this.hide(); - } - } - - //show column - show(silent, responsiveToggle){ - if(!this.visible){ - this.visible = true; - - this.element.style.display = ""; - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.show(); - }); - - if(!this.isGroup && this.width === null){ - this.reinitializeWidth(); - } - - this.table.columnManager.verticalAlignHeaders(); - - this.dispatch("column-show", this, responsiveToggle); - - if(!silent){ - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), true); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - if(!this.silent){ - this.table.columnManager.rerenderColumns(); - } - } - } - - //hide column - hide(silent, responsiveToggle){ - if(this.visible){ - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager.verticalAlignHeaders(); - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.hide(); - }); - - this.dispatch("column-hide", this, responsiveToggle); - - if(!silent){ - this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - if(!this.silent){ - this.table.columnManager.rerenderColumns(); - } - } - } - - matchChildWidths(){ - var childWidth = 0; - - if(this.contentElement && this.columns.length){ - this.columns.forEach(function(column){ - if(column.visible){ - childWidth += column.getWidth(); - } - }); - - this.contentElement.style.maxWidth = (childWidth - 1) + "px"; - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - } - } - - removeChild(child){ - var index = this.columns.indexOf(child); - - if(index > -1){ - this.columns.splice(index, 1); - } - - if(!this.columns.length){ - this.delete(); - } - } - - setWidth(width){ - this.widthFixed = true; - this.setWidthActual(width); - } - - setWidthActual(width){ - if(isNaN(width)){ - width = Math.floor((this.table.element.clientWidth/100) * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - if(this.maxWidth){ - width = Math.min(this.maxWidth, width); - } - - this.width = width; - this.widthStyled = width ? width + "px" : ""; - - this.element.style.width = this.widthStyled; - - if(!this.isGroup){ - this.cells.forEach(function(cell){ - cell.setWidth(); - }); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - this.dispatch("column-width", this); - } - - checkCellHeights(){ - var rows = []; - - this.cells.forEach(function(cell){ - if(cell.row.heightInitialized){ - if(cell.row.getElement().offsetParent !== null){ - rows.push(cell.row); - cell.row.clearCellHeight(); - }else{ - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function(row){ - row.calcHeight(); - }); - - rows.forEach(function(row){ - row.setCellHeight(); - }); - } - - getWidth(){ - var width = 0; - - if(this.isGroup){ - this.columns.forEach(function(column){ - if(column.visible){ - width += column.getWidth(); - } - }); - }else{ - width = this.width; - } - - return width; - } - - getLeftOffset(){ - var offset = this.element.offsetLeft; - - if(this.parent.isGroup){ - offset += this.parent.getLeftOffset(); - } - - return offset; - } - - getHeight(){ - return Math.ceil(this.element.getBoundingClientRect().height); - } - - setMinWidth(minWidth){ - if(this.maxWidth && minWidth > this.maxWidth){ - minWidth = this.maxWidth; - - console.warn("the minWidth ("+ minWidth + "px) for column '" + this.field + "' cannot be bigger that its maxWidth ("+ this.maxWidthStyled + ")"); - } - - this.minWidth = minWidth; - this.minWidthStyled = minWidth ? minWidth + "px" : ""; - - this.element.style.minWidth = this.minWidthStyled; - - this.cells.forEach(function(cell){ - cell.setMinWidth(); - }); - } - - setMaxWidth(maxWidth){ - if(this.minWidth && maxWidth < this.minWidth){ - maxWidth = this.minWidth; - - console.warn("the maxWidth ("+ maxWidth + "px) for column '" + this.field + "' cannot be smaller that its minWidth ("+ this.minWidthStyled + ")"); - } - - this.maxWidth = maxWidth; - this.maxWidthStyled = maxWidth ? maxWidth + "px" : ""; - - this.element.style.maxWidth = this.maxWidthStyled; - - this.cells.forEach(function(cell){ - cell.setMaxWidth(); - }); - } - - delete(){ - return new Promise((resolve, reject) => { - if(this.isGroup){ - this.columns.forEach(function(column){ - column.delete(); - }); - } - - this.dispatch("column-delete", this); - - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.element = false; - this.contentElement = false; - this.titleElement = false; - this.groupElement = false; - - if(this.parent.isGroup){ - this.parent.removeChild(this); - } - - this.table.columnManager.deregisterColumn(this); - - this.table.columnManager.rerenderColumns(true); - - this.dispatch("column-deleted", this); - - resolve(); - }); - } - - columnRendered(){ - if(this.titleFormatterRendered){ - this.titleFormatterRendered(); - } - - this.dispatch("column-rendered", this); - } - - //////////////// Cell Management ///////////////// - //generate cell for this column - generateCell(row){ - var cell = new Cell(this, row); - - this.cells.push(cell); - - return cell; - } - - nextColumn(){ - var index = this.table.columnManager.findColumnIndex(this); - return index > -1 ? this._nextVisibleColumn(index + 1) : false; - } - - _nextVisibleColumn(index){ - var column = this.table.columnManager.getColumnByIndex(index); - return !column || column.visible ? column : this._nextVisibleColumn(index + 1); - } - - prevColumn(){ - var index = this.table.columnManager.findColumnIndex(this); - return index > -1 ? this._prevVisibleColumn(index - 1) : false; - } - - _prevVisibleColumn(index){ - var column = this.table.columnManager.getColumnByIndex(index); - return !column || column.visible ? column : this._prevVisibleColumn(index - 1); - } - - reinitializeWidth(force){ - this.widthFixed = false; - - //set width if present - if(typeof this.definition.width !== "undefined" && !force){ - // maxInitialWidth ignored here as width specified - this.setWidth(this.definition.width); - } - - this.dispatch("column-width-fit-before", this); - - this.fitToData(force); - - this.dispatch("column-width-fit-after", this); - } - - //set column width to maximum cell width for non group columns - fitToData(force){ - if(this.isGroup){ - return; - } - - if(!this.widthFixed){ - this.element.style.width = ""; - - this.cells.forEach((cell) => { - cell.clearWidth(); - }); - } - - var maxWidth = this.element.offsetWidth; - - if(!this.width || !this.widthFixed){ - this.cells.forEach((cell) => { - var width = cell.getWidth(); - - if(width > maxWidth){ - maxWidth = width; - } - }); - - if(maxWidth){ - var setTo = maxWidth + 1; - if (this.maxInitialWidth && !force) { - setTo = Math.min(setTo, this.maxInitialWidth); - } - this.setWidthActual(setTo); - } - } - } - - updateDefinition(updates){ - var definition; - - if(!this.isGroup){ - if(!this.parent.isGroup){ - definition = Object.assign({}, this.getDefinition()); - definition = Object.assign(definition, updates); - - return this.table.columnManager.addColumn(definition, false, this) - .then((column) => { - - if(definition.field == this.field){ - this.field = false; //clear field name to prevent deletion of duplicate column from arrays - } - - return this.delete() - .then(() => { - return column.getComponent(); - }); - - }); - }else{ - console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"); - return Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); - } - }else{ - console.error("Column Update Error - The updateDefinition function is only available on ungrouped columns"); - return Promise.reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); - } - } - - deleteCell(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new ColumnComponent(this); - } - - return this.component; - } - - getPosition(){ - return this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1; - } -} - -Column.defaultOptionList = defaultOptions; - -export default Column; diff --git a/tmp/tabulator-5.6.1/src/js/core/column/ColumnComponent.js b/tmp/tabulator-5.6.1/src/js/core/column/ColumnComponent.js deleted file mode 100644 index 1c76eb2..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/column/ColumnComponent.js +++ /dev/null @@ -1,153 +0,0 @@ -import Column from './Column.js'; - -//public column object -export default class ColumnComponent { - constructor (column){ - this._column = column; - this.type = "ColumnComponent"; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else{ - return target._column.table.componentFunctionBinder.handle("column", target._column, name); - } - } - }); - } - - getElement(){ - return this._column.getElement(); - } - - getDefinition(){ - return this._column.getDefinition(); - } - - getField(){ - return this._column.getField(); - } - - getTitleDownload() { - return this._column.getTitleDownload(); - } - - getCells(){ - var cells = []; - - this._column.cells.forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - isVisible(){ - return this._column.visible; - } - - show(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.show(); - }); - }else{ - this._column.show(); - } - } - - hide(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.hide(); - }); - }else{ - this._column.hide(); - } - } - - toggle(){ - if(this._column.visible){ - this.hide(); - }else{ - this.show(); - } - } - - delete(){ - return this._column.delete(); - } - - getSubColumns(){ - var output = []; - - if(this._column.columns.length){ - this._column.columns.forEach(function(column){ - output.push(column.getComponent()); - }); - } - - return output; - } - - getParentColumn(){ - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; - } - - _getSelf(){ - return this._column; - } - - scrollTo(position, ifVisible){ - return this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible); - } - - getTable(){ - return this._column.table; - } - - move(to, after){ - var toColumn = this._column.table.columnManager.findColumn(to); - - if(toColumn){ - this._column.table.columnManager.moveColumn(this._column, toColumn, after); - }else{ - console.warn("Move Error - No matching column found:", toColumn); - } - } - - getNextColumn(){ - var nextCol = this._column.nextColumn(); - - return nextCol ? nextCol.getComponent() : false; - } - - getPrevColumn(){ - var prevCol = this._column.prevColumn(); - - return prevCol ? prevCol.getComponent() : false; - } - - updateDefinition(updates){ - return this._column.updateDefinition(updates); - } - - getWidth(){ - return this._column.getWidth(); - } - - setWidth(width){ - var result; - - if(width === true){ - result = this._column.reinitializeWidth(true); - }else{ - result = this._column.setWidth(width); - } - - this._column.table.columnManager.rerenderColumns(true); - - return result; - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/column/defaults/options.js b/tmp/tabulator-5.6.1/src/js/core/column/defaults/options.js deleted file mode 100644 index 1046463..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/column/defaults/options.js +++ /dev/null @@ -1,18 +0,0 @@ -export default { - "title": undefined, - "field": undefined, - "columns": undefined, - "visible": undefined, - "hozAlign": undefined, - "vertAlign": undefined, - "width": undefined, - "minWidth": 40, - "maxWidth": undefined, - "maxInitialWidth": undefined, - "cssClass": undefined, - "variableHeight": undefined, - "headerVertical": undefined, - "headerHozAlign": undefined, - "headerWordWrap": false, - "editableTitle": undefined, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/defaults/options.js b/tmp/tabulator-5.6.1/src/js/core/defaults/options.js deleted file mode 100644 index 230f6b4..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/defaults/options.js +++ /dev/null @@ -1,65 +0,0 @@ -export default { - - debugEventsExternal:false, //flag to console log events - debugEventsInternal:false, //flag to console log events - debugInvalidOptions:true, //allow toggling of invalid option warnings - debugInvalidComponentFuncs:true, //allow toggling of invalid component warnings - debugInitialization:true, //allow toggling of pre initialization function call warnings - debugDeprecation:true, //allow toggling of deprecation warnings - - height:false, //height of tabulator - minHeight:false, //minimum height of tabulator - maxHeight:false, //maximum height of tabulator - - columnHeaderVertAlign:"top", //vertical alignment of column headers - - popupContainer:false, - - columns:[],//store for colum header info - columnDefaults:{}, //store column default props - - data:false, //default starting data - - autoColumns:false, //build columns from data row structure - autoColumnsDefinitions:false, - - nestedFieldSeparator:".", //separator for nested data - - footerElement:false, //hold footer element - - index:"id", //filed for row index - - textDirection:"auto", - - addRowPos:"bottom", //position to insert blank rows, top|bottom - - headerVisible:true, //hide header - - renderVertical:"virtual", - renderHorizontal:"basic", - renderVerticalBuffer:0, // set virtual DOM buffer size - - scrollToRowPosition:"top", - scrollToRowIfVisible:true, - - scrollToColumnPosition:"left", - scrollToColumnIfVisible:true, - - rowFormatter:false, - rowFormatterPrint:null, - rowFormatterClipboard:null, - rowFormatterHtmlOutput:null, - - rowHeight:null, - - placeholder:false, - - dataLoader:true, - dataLoaderLoading:false, - dataLoaderError:false, - dataLoaderErrorTimeout:3000, - - dataSendParams:{}, - - dataReceiveParams:{}, -}; diff --git a/tmp/tabulator-5.6.1/src/js/core/modules/core.js b/tmp/tabulator-5.6.1/src/js/core/modules/core.js deleted file mode 100644 index 2755a07..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/modules/core.js +++ /dev/null @@ -1,3 +0,0 @@ -export {default as LayoutModule} from '../../modules/Layout/Layout.js'; -export {default as LocalizeModule} from '../../modules/Localize/Localize.js'; -export {default as CommsModule} from '../../modules/Comms/Comms.js'; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/modules/optional.js b/tmp/tabulator-5.6.1/src/js/core/modules/optional.js deleted file mode 100644 index 3f7f153..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/modules/optional.js +++ /dev/null @@ -1,36 +0,0 @@ -export {default as AccessorModule} from '../../modules/Accessor/Accessor.js'; -export {default as AjaxModule} from '../../modules/Ajax/Ajax.js'; -export {default as ClipboardModule} from '../../modules/Clipboard/Clipboard.js'; -export {default as ColumnCalcsModule} from '../../modules/ColumnCalcs/ColumnCalcs.js'; -export {default as DataTreeModule} from '../../modules/DataTree/DataTree.js'; -export {default as DownloadModule} from '../../modules/Download/Download.js'; -export {default as EditModule} from '../../modules/Edit/Edit.js'; -export {default as ExportModule} from '../../modules/Export/Export.js'; -export {default as FilterModule} from '../../modules/Filter/Filter.js'; -export {default as FormatModule} from '../../modules/Format/Format.js'; -export {default as FrozenColumnsModule} from '../../modules/FrozenColumns/FrozenColumns.js'; -export {default as FrozenRowsModule} from '../../modules/FrozenRows/FrozenRows.js'; -export {default as GroupRowsModule} from '../../modules/GroupRows/GroupRows.js'; -export {default as HistoryModule} from '../../modules/History/History.js'; -export {default as HtmlTableImportModule} from '../../modules/HtmlTableImport/HtmlTableImport.js'; -export {default as ImportModule} from '../../modules/Import/Import.js'; -export {default as InteractionModule} from '../../modules/Interaction/Interaction.js'; -export {default as KeybindingsModule} from '../../modules/Keybindings/Keybindings.js'; -export {default as MenuModule} from '../../modules/Menu/Menu.js'; -export {default as MoveColumnsModule} from '../../modules/MoveColumns/MoveColumns.js'; -export {default as MoveRowsModule} from '../../modules/MoveRows/MoveRows.js'; -export {default as MutatorModule} from '../../modules/Mutator/Mutator.js'; -export {default as PageModule} from '../../modules/Page/Page.js'; -export {default as PersistenceModule} from '../../modules/Persistence/Persistence.js'; -export {default as PopupModule} from '../../modules/Popup/Popup.js'; -export {default as PrintModule} from '../../modules/Print/Print.js'; -export {default as ReactiveDataModule} from '../../modules/ReactiveData/ReactiveData.js'; -export {default as ResizeColumnsModule} from '../../modules/ResizeColumns/ResizeColumns.js'; -export {default as ResizeRowsModule} from '../../modules/ResizeRows/ResizeRows.js'; -export {default as ResizeTableModule} from '../../modules/ResizeTable/ResizeTable.js'; -export {default as ResponsiveLayoutModule} from '../../modules/ResponsiveLayout/ResponsiveLayout.js'; -export {default as SelectRowModule} from '../../modules/SelectRow/SelectRow.js'; -export {default as SortModule} from '../../modules/Sort/Sort.js'; -export {default as SelectRangeModule} from '../../modules/SelectRange/SelectRange.js'; -export {default as TooltipModule} from '../../modules/Tooltip/Tooltip.js'; -export {default as ValidateModule} from '../../modules/Validate/Validate.js'; diff --git a/tmp/tabulator-5.6.1/src/js/core/rendering/Renderer.js b/tmp/tabulator-5.6.1/src/js/core/rendering/Renderer.js deleted file mode 100644 index 5f58249..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/rendering/Renderer.js +++ /dev/null @@ -1,204 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; -import Helpers from '../tools/Helpers.js'; - -export default class Renderer extends CoreFeature{ - constructor(table){ - super(table); - - this.elementVertical = table.rowManager.element; - this.elementHorizontal = table.columnManager.element; - this.tableElement = table.rowManager.tableElement; - - this.verticalFillMode = "fit"; // used by row manager to determine how to size the render area ("fit" - fits container to the contents, "fill" - fills the container without resizing it) - } - - - /////////////////////////////////// - /////// Internal Bindings ///////// - /////////////////////////////////// - - initialize(){ - //initialize core functionality - } - - clearRows(){ - //clear down existing rows layout - } - - clearColumns(){ - //clear down existing columns layout - } - - - reinitializeColumnWidths(columns){ - //resize columns to fit data - } - - - renderRows(){ - //render rows from a clean slate - } - - renderColumns(){ - //render columns from a clean slate - } - - rerenderRows(callback){ - // rerender rows and keep position - if(callback){ - callback(); - } - } - - rerenderColumns(update, blockRedraw){ - //rerender columns - } - - renderRowCells(row){ - //render the cells in a row - } - - rerenderRowCells(row, force){ - //rerender the cells in a row - } - - scrollColumns(left, dir){ - //handle horizontal scrolling - } - - scrollRows(top, dir){ - //handle vertical scrolling - } - - resize(){ - //container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION) - } - - scrollToRow(row){ - //scroll to a specific row - } - - scrollToRowNearestTop(row){ - //determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom - } - - visibleRows(includingBuffer){ - //return the visible rows - return []; - } - - /////////////////////////////////// - //////// Helper Functions ///////// - /////////////////////////////////// - - rows(){ - return this.table.rowManager.getDisplayRows(); - } - - styleRow(row, index){ - var rowEl = row.getElement(); - - if(index % 2){ - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - }else{ - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } - } - - /////////////////////////////////// - /////// External Triggers ///////// - /////// (DO NOT OVERRIDE) ///////// - /////////////////////////////////// - - clear(){ - //clear down existing layout - this.clearRows(); - this.clearColumns(); - } - - render(){ - //render from a clean slate - this.renderRows(); - this.renderColumns(); - } - - rerender(callback){ - // rerender and keep position - this.rerenderRows(); - this.rerenderColumns(); - } - - scrollToRowPosition(row, position, ifVisible){ - var rowIndex = this.rows().indexOf(row), - rowEl = row.getElement(), - offset = 0; - - return new Promise((resolve, reject) => { - if(rowIndex > -1){ - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToRowIfVisible; - } - - //check row visibility - if(!ifVisible){ - if(Helpers.elVisible(rowEl)){ - offset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top; - - if(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){ - resolve(); - return false; - } - } - } - - if(typeof position === "undefined"){ - position = this.table.options.scrollToRowPosition; - } - - if(position === "nearest"){ - position = this.scrollToRowNearestTop(row) ? "top" : "bottom"; - } - - //scroll to row - this.scrollToRow(row); - - //align to correct position - switch(position){ - case "middle": - case "center": - - if(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){ - this.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2); - }else{ - this.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2); - } - - break; - - case "bottom": - - if(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){ - this.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; - }else{ - this.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight; - } - - break; - - case "top": - this.elementVertical.scrollTop = rowEl.offsetTop; - break; - } - - resolve(); - - }else{ - console.warn("Scroll Error - Row not visible"); - reject("Scroll Error - Row not visible"); - } - }); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/BasicHorizontal.js b/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/BasicHorizontal.js deleted file mode 100644 index 747903f..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/BasicHorizontal.js +++ /dev/null @@ -1,27 +0,0 @@ -import Renderer from '../Renderer.js'; - -export default class BasicHorizontal extends Renderer{ - constructor(table){ - super(table); - } - - renderRowCells(row, inFragment) { - const rowFrag = document.createDocumentFragment(); - row.cells.forEach((cell) => { - rowFrag.appendChild(cell.getElement()); - }); - row.element.appendChild(rowFrag); - - if(!inFragment){ - row.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - } - - reinitializeColumnWidths(columns){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/BasicVertical.js b/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/BasicVertical.js deleted file mode 100644 index 8af834d..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/BasicVertical.js +++ /dev/null @@ -1,103 +0,0 @@ -import Renderer from '../Renderer.js'; -import Helpers from '../../tools/Helpers.js'; - -export default class BasicVertical extends Renderer{ - constructor(table){ - super(table); - - this.verticalFillMode = "fill"; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.scrollTop = 0; - this.scrollLeft = 0; - } - - clearRows(){ - var element = this.tableElement; - - // element.children.detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - element.scrollTop = 0; - element.scrollLeft = 0; - - element.style.minWidth = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - } - - renderRows() { - var element = this.tableElement, - onlyGroupHeaders = true, - tableFrag = document.createDocumentFragment(), - rows = this.rows(); - - rows.forEach((row, index) => { - this.styleRow(row, index); - row.initialize(false, true); - - if (row.type !== "group") { - onlyGroupHeaders = false; - } - - tableFrag.appendChild(row.getElement()); - }); - - element.appendChild(tableFrag); - - rows.forEach((row) => { - row.rendered(); - - if(!row.heightInitialized) { - row.calcHeight(true); - } - }); - - rows.forEach((row) => { - if(!row.heightInitialized) { - row.setCellHeight(); - } - }); - - if(onlyGroupHeaders){ - element.style.minWidth = this.table.columnManager.getWidth() + "px"; - }else{ - element.style.minWidth = ""; - } - } - - - rerenderRows(callback){ - this.clearRows(); - - if(callback){ - callback(); - } - - this.renderRows(); - - if(!this.rows().length){ - this.table.rowManager.tableEmpty(); - } - } - - scrollToRowNearestTop(row){ - var rowTop = Helpers.elOffset(row.getElement()).top; - - return !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop)); - } - - scrollToRow(row){ - var rowEl = row.getElement(); - - this.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop; - } - - visibleRows(includingBuffer){ - return this.rows(); - } - -} diff --git a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/VirtualDomHorizontal.js b/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/VirtualDomHorizontal.js deleted file mode 100644 index 9044f4e..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/VirtualDomHorizontal.js +++ /dev/null @@ -1,583 +0,0 @@ -import Renderer from '../Renderer.js'; - -export default class VirtualDomHorizontal extends Renderer{ - constructor(table){ - super(table); - - this.leftCol = 0; - this.rightCol = 0; - this.scrollLeft = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - - this.fitDataColAvg = 0; - - this.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen - - this.visibleRows = null; - - this.initialized = false; - this.isFitData = false; - - this.columns = []; - } - - initialize(){ - this.compatibilityCheck(); - this.layoutCheck(); - this.vertScrollListen(); - } - - compatibilityCheck(){ - if(this.options("layout") == "fitDataTable"){ - console.warn("Horizontal Virtual DOM is not compatible with fitDataTable layout mode"); - } - - if(this.options("responsiveLayout")){ - console.warn("Horizontal Virtual DOM is not compatible with responsive columns"); - } - - if(this.options("rtl")){ - console.warn("Horizontal Virtual DOM is not currently compatible with RTL text direction"); - } - } - - layoutCheck(){ - this.isFitData = this.options("layout").startsWith('fitData'); - } - - vertScrollListen(){ - this.subscribe("scroll-vertical", this.clearVisRowCache.bind(this)); - this.subscribe("data-refreshed", this.clearVisRowCache.bind(this)); - } - - clearVisRowCache(){ - this.visibleRows = null; - } - - ////////////////////////////////////// - ///////// Public Functions /////////// - ////////////////////////////////////// - - renderColumns(row, force){ - this.dataChange(); - } - - - scrollColumns(left, dir){ - if(this.scrollLeft != left){ - this.scrollLeft = left; - - this.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer)); - } - } - - calcWindowBuffer(){ - var buffer = this.elementVertical.clientWidth; - - this.table.columnManager.columnsByIndex.forEach((column) => { - if(column.visible){ - var width = column.getWidth(); - - if(width > buffer){ - buffer = width; - } - } - }); - - this.windowBuffer = buffer * 2; - } - - rerenderColumns(update, blockRedraw){ - var old = { - cols:this.columns, - leftCol:this.leftCol, - rightCol:this.rightCol, - }, - colPos = 0; - - if(update && !this.initialized){ - return; - } - - this.clear(); - - this.calcWindowBuffer(); - - this.scrollLeft = this.elementVertical.scrollLeft; - - this.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer; - this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer; - - this.table.columnManager.columnsByIndex.forEach((column) => { - var config = {}, - width; - - if(column.visible){ - if(!column.modules.frozen){ - width = column.getWidth(); - - config.leftPos = colPos; - config.rightPos = colPos + width; - - config.width = width; - - if (this.isFitData) { - config.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true; - } - - if((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){ - //column is visible - - if(this.leftCol == -1){ - this.leftCol = this.columns.length; - this.vDomPadLeft = colPos; - } - - this.rightCol = this.columns.length; - }else{ - // column is hidden - if(this.leftCol !== -1){ - this.vDomPadRight += width; - } - } - - this.columns.push(column); - - column.modules.vdomHoz = config; - - colPos += width; - } - } - }); - - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - - this.initialized = true; - - if(!blockRedraw){ - if(!update || this.reinitChanged(old)){ - this.reinitializeRows(); - } - } - - this.elementVertical.scrollLeft = this.scrollLeft; - } - - renderRowCells(row){ - if(this.initialized){ - this.initializeRow(row); - }else{ - const rowFrag = document.createDocumentFragment(); - row.cells.forEach((cell) => { - rowFrag.appendChild(cell.getElement()); - }); - row.element.appendChild(rowFrag); - - row.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - } - - rerenderRowCells(row, force){ - this.reinitializeRow(row, force); - } - - reinitializeColumnWidths(columns){ - for(let i = this.leftCol; i <= this.rightCol; i++){ - this.columns[i].reinitializeWidth(); - } - } - - ////////////////////////////////////// - //////// Internal Rendering ////////// - ////////////////////////////////////// - - deinitialize(){ - this.initialized = false; - } - - clear(){ - this.columns = []; - - this.leftCol = -1; - this.rightCol = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - } - - dataChange(){ - var change = false, - row, rowEl; - - if(this.isFitData){ - this.table.columnManager.columnsByIndex.forEach((column) => { - if(!column.definition.width && column.visible){ - change = true; - } - }); - - if(change && this.table.rowManager.getDisplayRows().length){ - this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer; - - row = this.chain("rows-sample", [1], [], () => { - return this.table.rowManager.getDisplayRows(); - })[0]; - - if(row){ - rowEl = row.getElement(); - - row.generateCells(); - - this.tableElement.appendChild(rowEl); - - for(let colEnd = 0; colEnd < row.cells.length; colEnd++){ - let cell = row.cells[colEnd]; - rowEl.appendChild(cell.getElement()); - - cell.column.reinitializeWidth(); - } - - rowEl.parentNode.removeChild(rowEl); - - this.rerenderColumns(false, true); - } - } - }else{ - if(this.options("layout") === "fitColumns"){ - this.layoutRefresh(); - this.rerenderColumns(false, true); - } - } - } - - reinitChanged(old){ - var match = true; - - if(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){ - return true; - } - - old.cols.forEach((col, i) => { - if(col !== this.columns[i]){ - match = false; - } - }); - - return !match; - } - - reinitializeRows(){ - var visibleRows = this.getVisibleRows(), - otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row)); - - visibleRows.forEach((row) => { - this.reinitializeRow(row, true); - }); - - otherRows.forEach((row) =>{ - row.deinitialize(); - }); - } - - getVisibleRows(){ - if (!this.visibleRows){ - this.visibleRows = this.table.rowManager.getVisibleRows(); - } - - return this.visibleRows; - } - - scroll(diff){ - this.vDomScrollPosLeft += diff; - this.vDomScrollPosRight += diff; - - if(Math.abs(diff) > (this.windowBuffer / 2)){ - this.rerenderColumns(); - }else{ - if(diff > 0){ - //scroll right - this.addColRight(); - this.removeColLeft(); - }else{ - //scroll left - this.addColLeft(); - this.removeColRight(); - } - } - } - - colPositionAdjust (start, end, diff){ - for(let i = start; i < end; i++){ - let column = this.columns[i]; - - column.modules.vdomHoz.leftPos += diff; - column.modules.vdomHoz.rightPos += diff; - } - } - - addColRight(){ - var changes = false, - working = true; - - while(working){ - - let column = this.columns[this.rightCol + 1]; - - if(column){ - if(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling); - cell.cellRendered(); - } - }); - - this.fitDataColActualWidthCheck(column); - - this.rightCol++; // Don't move this below the >= check below - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.rightCol = this.rightCol; - } - }); - - if(this.rightCol >= (this.columns.length - 1)){ - this.vDomPadRight = 0; - }else{ - this.vDomPadRight -= column.getWidth(); - } - }else{ - working = false; - } - }else{ - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - } - } - - addColLeft(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.leftCol - 1]; - - if(column){ - if(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - row.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement()); - cell.cellRendered(); - } - }); - - this.leftCol--; // don't move this below the <= check below - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.leftCol = this.leftCol; - } - }); - - if(this.leftCol <= 0){ // replicating logic in addColRight - this.vDomPadLeft = 0; - }else{ - this.vDomPadLeft -= column.getWidth(); - } - - let diff = this.fitDataColActualWidthCheck(column); - - if(diff){ - this.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff; - this.vDomPadRight -= diff; - } - - }else{ - working = false; - } - }else{ - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - } - } - - removeColRight(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.rightCol]; - - if(column){ - if(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - - try { - row.getElement().removeChild(cell.getElement()); - } catch (ex) { - console.warn("Could not removeColRight", ex.message); - } - } - }); - - this.vDomPadRight += column.getWidth(); - this.rightCol --; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.rightCol = this.rightCol; - } - }); - }else{ - working = false; - } - }else{ - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingRight = this.vDomPadRight + "px"; - } - } - - removeColLeft(){ - var changes = false, - working = true; - - while(working){ - let column = this.columns[this.leftCol]; - - if(column){ - if(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){ - changes = true; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - var cell = row.getCell(column); - - try { - row.getElement().removeChild(cell.getElement()); - } catch (ex) { - console.warn("Could not removeColLeft", ex.message); - } - } - }); - - this.vDomPadLeft += column.getWidth(); - this.leftCol ++; - - this.getVisibleRows().forEach((row) => { - if(row.type !== "group"){ - row.modules.vdomHoz.leftCol = this.leftCol; - } - }); - }else{ - working = false; - } - }else{ - working = false; - } - } - - if(changes){ - this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; - } - } - - fitDataColActualWidthCheck(column){ - var newWidth, widthDiff; - - if(column.modules.vdomHoz.fitDataCheck){ - column.reinitializeWidth(); - - newWidth = column.getWidth(); - widthDiff = newWidth - column.modules.vdomHoz.width; - - if(widthDiff){ - column.modules.vdomHoz.rightPos += widthDiff; - column.modules.vdomHoz.width = newWidth; - this.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff); - } - - column.modules.vdomHoz.fitDataCheck = false; - } - - return widthDiff; - } - - initializeRow(row){ - if(row.type !== "group"){ - row.modules.vdomHoz = { - leftCol:this.leftCol, - rightCol:this.rightCol, - }; - - if(this.table.modules.frozenColumns){ - this.table.modules.frozenColumns.leftColumns.forEach((column) => { - this.appendCell(row, column); - }); - } - - for(let i = this.leftCol; i <= this.rightCol; i++){ - this.appendCell(row, this.columns[i]); - } - - if(this.table.modules.frozenColumns){ - this.table.modules.frozenColumns.rightColumns.forEach((column) => { - this.appendCell(row, column); - }); - } - } - } - - appendCell(row, column){ - if(column && column.visible){ - let cell = row.getCell(column); - - row.getElement().appendChild(cell.getElement()); - cell.cellRendered(); - } - } - - reinitializeRow(row, force){ - if(row.type !== "group"){ - if(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){ - - var rowEl = row.getElement(); - while(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild); - - this.initializeRow(row); - } - } - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/VirtualDomVertical.js b/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/VirtualDomVertical.js deleted file mode 100644 index c4b775b..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/rendering/renderers/VirtualDomVertical.js +++ /dev/null @@ -1,637 +0,0 @@ -import Renderer from '../Renderer.js'; -import Helpers from '../../tools/Helpers.js'; - -export default class VirtualDomVertical extends Renderer{ - constructor(table){ - super(table); - - this.verticalFillMode = "fill"; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - this.vDomBottom = 0; //hold position for last rendered row in the virtual DOM - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed - } - - ////////////////////////////////////// - ///////// Public Functions /////////// - ////////////////////////////////////// - - clearRows(){ - var element = this.tableElement; - - // element.children.detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - element.style.paddingTop = ""; - element.style.paddingBottom = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - - this.elementVertical.scrollTop = 0; - this.elementVertical.scrollLeft = 0; - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomTop = 0; - this.vDomBottom = 0; - this.vDomTopPad = 0; - this.vDomBottomPad = 0; - this.vDomScrollPosTop = 0; - this.vDomScrollPosBottom = 0; - } - - renderRows(){ - this._virtualRenderFill(); - } - - rerenderRows(callback){ - var scrollTop = this.elementVertical.scrollTop; - var topRow = false; - var topOffset = false; - - var left = this.table.rowManager.scrollLeft; - - var rows = this.rows(); - - for(var i = this.vDomTop; i <= this.vDomBottom; i++){ - - if(rows[i]){ - var diff = scrollTop - rows[i].getElement().offsetTop; - - if(topOffset === false || Math.abs(diff) < topOffset){ - topOffset = diff; - topRow = i; - }else{ - break; - } - } - } - - rows.forEach((row) => { - row.deinitializeHeight(); - }); - - if(callback){ - callback(); - } - - if(this.rows().length){ - this._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0); - }else{ - this.clear(); - this.table.rowManager.tableEmpty(); - } - - this.scrollColumns(left); - } - - scrollColumns(left){ - this.table.rowManager.scrollHorizontal(left); - } - - scrollRows(top, dir){ - var topDiff = top - this.vDomScrollPosTop; - var bottomDiff = top - this.vDomScrollPosBottom; - var margin = this.vDomWindowBuffer * 2; - var rows = this.rows(); - - this.scrollTop = top; - - if(-topDiff > margin || bottomDiff > margin){ - //if big scroll redraw table; - var left = this.table.rowManager.scrollLeft; - this._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length)); - this.scrollColumns(left); - }else{ - - if(dir){ - //scrolling up - if(topDiff < 0){ - this._addTopRow(rows, -topDiff); - } - - if(bottomDiff < 0){ - //hide bottom row if needed - if(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){ - this._removeBottomRow(rows, -bottomDiff); - }else{ - this.vDomScrollPosBottom = this.scrollTop; - } - } - }else{ - - if(bottomDiff >= 0){ - this._addBottomRow(rows, bottomDiff); - } - - //scrolling down - if(topDiff >= 0){ - //hide top row if needed - if(this.scrollTop > this.vDomWindowBuffer){ - this._removeTopRow(rows, topDiff); - }else{ - this.vDomScrollPosTop = this.scrollTop; - } - } - } - } - } - - resize(){ - this.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight; - } - - scrollToRowNearestTop(row){ - var rowIndex = this.rows().indexOf(row); - - return !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex)); - } - - scrollToRow(row){ - var index = this.rows().indexOf(row); - - if(index > -1){ - this._virtualRenderFill(index, true); - } - } - - visibleRows(includingBuffer){ - var topEdge = this.elementVertical.scrollTop, - bottomEdge = this.elementVertical.clientHeight + topEdge, - topFound = false, - topRow = 0, - bottomRow = 0, - rows = this.rows(); - - if(includingBuffer){ - topRow = this.vDomTop; - bottomRow = this.vDomBottom; - }else{ - for(var i = this.vDomTop; i <= this.vDomBottom; i++){ - if(rows[i]){ - if(!topFound){ - if((topEdge - rows[i].getElement().offsetTop) >= 0){ - topRow = i; - }else{ - topFound = true; - - if(bottomEdge - rows[i].getElement().offsetTop >= 0){ - bottomRow = i; - }else{ - break; - } - } - }else{ - if(bottomEdge - rows[i].getElement().offsetTop >= 0){ - bottomRow = i; - }else{ - break; - } - } - } - } - } - - return rows.slice(topRow, bottomRow + 1); - } - - ////////////////////////////////////// - //////// Internal Rendering ////////// - ////////////////////////////////////// - - //full virtual render - _virtualRenderFill(position, forceMove, offset) { - var element = this.tableElement, - holder = this.elementVertical, - topPad = 0, - rowsHeight = 0, - rowHeight = 0, - heightOccupied = 0, - topPadHeight = 0, - i = 0, - rows = this.rows(), - rowsCount = rows.length, - index = 0, - row, - rowFragment, - renderedRows = [], - totalRowsRendered = 0, - rowsToRender = 0, - fixedHeight = this.table.rowManager.fixedHeight, - containerHeight = this.elementVertical.clientHeight, - avgRowHeight = this.table.options.rowHeight, - resized = true; - - position = position || 0; - - offset = offset || 0; - - if(!position){ - this.clear(); - }else { - while(element.firstChild) element.removeChild(element.firstChild); - - //check if position is too close to bottom of table - heightOccupied = (rowsCount - position + 1) * this.vDomRowHeight; - - if(heightOccupied < containerHeight){ - position -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight); - if(position < 0){ - position = 0; - } - } - - //calculate initial pad - topPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position); - position -= topPad; - } - - if(rowsCount && Helpers.elVisible(this.elementVertical)){ - this.vDomTop = position; - this.vDomBottom = position -1; - - if(fixedHeight || this.table.options.maxHeight) { - if(avgRowHeight) { - rowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight); - } - rowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender)); - } - else { - rowsToRender = rowsCount; - } - - while(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) { - renderedRows = []; - rowFragment = document.createDocumentFragment(); - - i = 0; - - while ((i < rowsToRender) && this.vDomBottom < rowsCount -1) { - index = this.vDomBottom + 1, - row = rows[index]; - - this.styleRow(row, index); - - row.initialize(false, true); - if(!row.heightInitialized && !this.table.options.rowHeight){ - row.clearCellHeight(); - } - - rowFragment.appendChild(row.getElement()); - renderedRows.push(row); - this.vDomBottom ++; - i++; - } - - if(!renderedRows.length){ - break; - } - - element.appendChild(rowFragment); - - // NOTE: The next 3 loops are separate on purpose - // This is to batch up the dom writes and reads which drastically improves performance - - renderedRows.forEach((row) => { - row.rendered(); - - if(!row.heightInitialized) { - row.calcHeight(true); - } - }); - - renderedRows.forEach((row) => { - if(!row.heightInitialized) { - row.setCellHeight(); - } - }); - - renderedRows.forEach((row) => { - rowHeight = row.getHeight(); - - if(totalRowsRendered < topPad){ - topPadHeight += rowHeight; - }else { - rowsHeight += rowHeight; - } - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - totalRowsRendered++; - }); - - resized = this.table.rowManager.adjustTableSize(); - containerHeight = this.elementVertical.clientHeight; - if(resized && (fixedHeight || this.table.options.maxHeight)) - { - avgRowHeight = rowsHeight / totalRowsRendered; - rowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight))); - } - } - - if(!position){ - this.vDomTopPad = 0; - //adjust row height to match average of rendered elements - this.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered); - this.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1); - - this.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight; - }else { - this.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset; - this.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = this.vDomTopPad+"px"; - element.style.paddingBottom = this.vDomBottomPad+"px"; - - if(forceMove){ - this.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0); - } - - this.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight); - - //adjust for horizontal scrollbar if present (and not at top of table) - if(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){ - this.scrollTop += this.elementVertical.offsetHeight - containerHeight; - } - - this.vDomScrollPosTop = this.scrollTop; - this.vDomScrollPosBottom = this.scrollTop; - - holder.scrollTop = this.scrollTop; - - this.dispatch("render-virtual-fill"); - } - } - - _addTopRow(rows, fillableSpace){ - var table = this.tableElement, - addedRows = [], - paddingAdjust = 0, - index = this.vDomTop -1, - i = 0, - working = true; - - while(working){ - if(this.vDomTop){ - let row = rows[index], - rowHeight, initialized; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - initialized = row.initialized; - - if(fillableSpace >= rowHeight){ - - this.styleRow(row, index); - table.insertBefore(row.getElement(), table.firstChild); - - if(!row.initialized || !row.heightInitialized){ - addedRows.push(row); - } - - row.initialize(); - - if(!initialized){ - rowHeight = row.getElement().offsetHeight; - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - } - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - this.vDomTop--; - index--; - i++; - - }else{ - working = false; - } - - }else{ - working = false; - } - - }else{ - working = false; - } - } - - for (let row of addedRows){ - row.clearCellHeight(); - } - - this._quickNormalizeRowHeight(addedRows); - - if(paddingAdjust){ - this.vDomTopPad -= paddingAdjust; - - if(this.vDomTopPad < 0){ - this.vDomTopPad = index * this.vDomRowHeight; - } - - if(index < 1){ - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop -= paddingAdjust; - } - } - - _removeTopRow(rows, fillableSpace){ - var removableRows = [], - paddingAdjust = 0, - i = 0, - working = true; - - while(working){ - let row = rows[this.vDomTop], - rowHeight; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - - if(fillableSpace >= rowHeight){ - this.vDomTop++; - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - removableRows.push(row); - i++; - }else{ - working = false; - } - }else{ - working = false; - } - } - - for (let row of removableRows){ - let rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - } - - if(paddingAdjust){ - this.vDomTopPad += paddingAdjust; - this.tableElement.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer; - } - } - - _addBottomRow(rows, fillableSpace){ - var table = this.tableElement, - addedRows = [], - paddingAdjust = 0, - index = this.vDomBottom + 1, - i = 0, - working = true; - - while(working){ - let row = rows[index], - rowHeight, initialized; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - initialized = row.initialized; - - if(fillableSpace >= rowHeight){ - - this.styleRow(row, index); - table.appendChild(row.getElement()); - - if(!row.initialized || !row.heightInitialized){ - addedRows.push(row); - } - - row.initialize(); - - if(!initialized){ - rowHeight = row.getElement().offsetHeight; - - if(rowHeight > this.vDomWindowBuffer){ - this.vDomWindowBuffer = rowHeight * 2; - } - } - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - this.vDomBottom++; - index++; - i++; - }else{ - working = false; - } - }else{ - working = false; - } - } - - for (let row of addedRows){ - row.clearCellHeight(); - } - - this._quickNormalizeRowHeight(addedRows); - - if(paddingAdjust){ - this.vDomBottomPad -= paddingAdjust; - - if(this.vDomBottomPad < 0 || index == rows.length -1){ - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom += paddingAdjust; - } - } - - _removeBottomRow(rows, fillableSpace){ - var removableRows = [], - paddingAdjust = 0, - i = 0, - working = true; - - while(working){ - let row = rows[this.vDomBottom], - rowHeight; - - if(row && i < this.vDomMaxRenderChain){ - rowHeight = row.getHeight() || this.vDomRowHeight; - - if(fillableSpace >= rowHeight){ - this.vDomBottom --; - - fillableSpace -= rowHeight; - paddingAdjust += rowHeight; - - removableRows.push(row); - i++; - }else{ - working = false; - } - }else{ - working = false; - } - } - - for (let row of removableRows){ - let rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - } - - if(paddingAdjust){ - this.vDomBottomPad += paddingAdjust; - - if(this.vDomBottomPad < 0){ - this.vDomBottomPad = 0; - } - - this.tableElement.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom -= paddingAdjust; - } - } - - _quickNormalizeRowHeight(rows){ - for(let row of rows){ - row.calcHeight(); - } - - for(let row of rows){ - row.setCellHeight(); - } - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/row/PseudoRow.js b/tmp/tabulator-5.6.1/src/js/core/row/PseudoRow.js deleted file mode 100644 index a36ac7b..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/row/PseudoRow.js +++ /dev/null @@ -1,47 +0,0 @@ -export default class PseudoRow { - - constructor (type){ - this.type = type; - this.element = this._createElement(); - } - - _createElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-row"); - return el; - } - - getElement(){ - return this.element; - } - - getComponent(){ - return false; - } - - getData(){ - return {}; - } - - getHeight(){ - return this.element.outerHeight; - } - - initialize(){} - - reinitialize(){} - - normalizeHeight(){} - - generateCells(){} - - reinitializeHeight(){} - - calcHeight(){} - - setCellHeight(){} - - clearCellHeight(){} - - rendered(){} -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/row/Row.js b/tmp/tabulator-5.6.1/src/js/core/row/Row.js deleted file mode 100644 index 8782359..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/row/Row.js +++ /dev/null @@ -1,463 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; -import RowComponent from './RowComponent.js'; -import Helpers from '../tools/Helpers.js'; - -export default class Row extends CoreFeature{ - constructor (data, parent, type = "row"){ - super(parent.table); - - this.parent = parent; - this.data = {}; - this.type = type; //type of element - this.element = false; - this.modules = {}; //hold module variables; - this.cells = []; - this.height = 0; //hold element height - this.heightStyled = ""; //hold element height pre-styled to improve render efficiency - this.manualHeight = false; //user has manually set row height - this.outerHeight = 0; //hold elements outer height - this.initialized = false; //element has been rendered - this.heightInitialized = false; //element has resized cells to fit - this.position = 0; //store position of element in row list - this.positionWatchers = []; - - this.component = null; - - this.created = false; - - this.setData(data); - } - - create(){ - if(!this.created){ - this.created = true; - this.generateElement(); - } - } - - createElement (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.setAttribute("role", "row"); - - this.element = el; - } - - getElement(){ - this.create(); - return this.element; - } - - detachElement(){ - if (this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - generateElement(){ - this.createElement(); - this.dispatch("row-init", this); - } - - generateCells(){ - this.cells = this.table.columnManager.generateCells(this); - } - - //functions to setup on first render - initialize(force, inFragment){ - this.create(); - - if(!this.initialized || force){ - - this.deleteCells(); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - this.dispatch("row-layout-before", this); - - this.generateCells(); - - this.initialized = true; - - this.table.columnManager.renderer.renderRowCells(this, inFragment); - - if(force){ - this.normalizeHeight(); - } - - this.dispatch("row-layout", this); - - if(this.table.options.rowFormatter){ - this.table.options.rowFormatter(this.getComponent()); - } - - this.dispatch("row-layout-after", this); - }else{ - this.table.columnManager.renderer.rerenderRowCells(this, inFragment); - } - } - - rendered(){ - this.cells.forEach((cell) => { - cell.cellRendered(); - }); - } - - reinitializeHeight(){ - this.heightInitialized = false; - - if(this.element && this.element.offsetParent !== null){ - this.normalizeHeight(true); - } - } - - deinitialize(){ - this.initialized = false; - } - - deinitializeHeight(){ - this.heightInitialized = false; - } - - reinitialize(children){ - this.initialized = false; - this.heightInitialized = false; - - if(!this.manualHeight){ - this.height = 0; - this.heightStyled = ""; - } - - if(this.element && this.element.offsetParent !== null){ - this.initialize(true); - } - - this.dispatch("row-relayout", this); - } - - //get heights when doing bulk row style calcs in virtual DOM - calcHeight(force){ - var maxHeight = 0, - minHeight; - - if(this.table.options.rowHeight){ - this.height = this.table.options.rowHeight; - }else{ - minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; - - this.cells.forEach(function(cell){ - var height = cell.getHeight(); - if(height > maxHeight){ - maxHeight = height; - } - }); - - if(force){ - this.height = Math.max(maxHeight, minHeight); - }else{ - this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight); - } - } - - this.heightStyled = this.height ? this.height + "px" : ""; - this.outerHeight = this.element.offsetHeight; - } - - //set of cells - setCellHeight(){ - this.cells.forEach(function(cell){ - cell.setHeight(); - }); - - this.heightInitialized = true; - } - - clearCellHeight(){ - this.cells.forEach(function(cell){ - cell.clearHeight(); - }); - } - - //normalize the height of elements in the row - normalizeHeight(force){ - if(force && !this.table.options.rowHeight){ - this.clearCellHeight(); - } - - this.calcHeight(force); - - this.setCellHeight(); - } - - //set height of rows - setHeight(height, force){ - if(this.height != height || force){ - - this.manualHeight = true; - - this.height = height; - this.heightStyled = height ? height + "px" : ""; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - this.outerHeight = this.element.offsetHeight; - } - } - - //return rows outer height - getHeight(){ - return this.outerHeight; - } - - //return rows outer Width - getWidth(){ - return this.element.offsetWidth; - } - - //////////////// Cell Management ///////////////// - deleteCell(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } - } - - //////////////// Data Management ///////////////// - setData(data){ - this.data = this.chain("row-data-init-before", [this, data], undefined, data); - - this.dispatch("row-data-init-after", this); - } - - //update the rows data - updateData(updatedData){ - var visible = this.element && Helpers.elVisible(this.element), - tempData = {}, - newRowData; - - return new Promise((resolve, reject) => { - - if(typeof updatedData === "string"){ - updatedData = JSON.parse(updatedData); - } - - this.dispatch("row-data-save-before", this); - - if(this.subscribed("row-data-changing")){ - tempData = Object.assign(tempData, this.data); - tempData = Object.assign(tempData, updatedData); - } - - newRowData = this.chain("row-data-changing", [this, tempData, updatedData], null, updatedData); - - //set data - for (let attrname in newRowData) { - this.data[attrname] = newRowData[attrname]; - } - - this.dispatch("row-data-save-after", this); - - //update affected cells only - for (let attrname in updatedData) { - - let columns = this.table.columnManager.getColumnsByFieldRoot(attrname); - - columns.forEach((column) => { - let cell = this.getCell(column.getField()); - - if(cell){ - let value = column.getFieldValue(newRowData); - if(cell.getValue() !== value){ - cell.setValueProcessData(value); - - if(visible){ - cell.cellRendered(); - } - } - } - }); - } - - //Partial reinitialization if visible - if(visible){ - this.normalizeHeight(true); - - if(this.table.options.rowFormatter){ - this.table.options.rowFormatter(this.getComponent()); - } - }else{ - this.initialized = false; - this.height = 0; - this.heightStyled = ""; - } - - this.dispatch("row-data-changed", this, visible, updatedData); - - //this.reinitialize(); - - this.dispatchExternal("rowUpdated", this.getComponent()); - - if(this.subscribedExternal("dataChanged")){ - this.dispatchExternal("dataChanged", this.table.rowManager.getData()); - } - - resolve(); - }); - } - - getData(transform){ - if(transform){ - return this.chain("row-data-retrieve", [this, transform], null, this.data); - } - - return this.data; - } - - getCell(column){ - var match = false; - - column = this.table.columnManager.findColumn(column); - - if(!this.initialized && this.cells.length === 0){ - this.generateCells(); - } - - match = this.cells.find(function(cell){ - return cell.column === column; - }); - - return match; - } - - getCellIndex(findCell){ - return this.cells.findIndex(function(cell){ - return cell === findCell; - }); - } - - findCell(subject){ - return this.cells.find((cell) => { - return cell.element === subject; - }); - } - - getCells(){ - if(!this.initialized && this.cells.length === 0){ - this.generateCells(); - } - - return this.cells; - } - - nextRow(){ - var row = this.table.rowManager.nextDisplayRow(this, true); - return row || false; - } - - prevRow(){ - var row = this.table.rowManager.prevDisplayRow(this, true); - return row || false; - } - - moveToRow(to, before){ - var toRow = this.table.rowManager.findRow(to); - - if(toRow){ - this.table.rowManager.moveRowActual(this, toRow, !before); - this.table.rowManager.refreshActiveData("display", false, true); - }else{ - console.warn("Move Error - No matching row found:", to); - } - } - - ///////////////////// Actions ///////////////////// - delete(){ - this.dispatch("row-delete", this); - - this.deleteActual(); - - return Promise.resolve(); - } - - deleteActual(blockRedraw){ - this.detachModules(); - - this.table.rowManager.deleteRow(this, blockRedraw); - - this.deleteCells(); - - this.initialized = false; - this.heightInitialized = false; - this.element = false; - - this.dispatch("row-deleted", this); - } - - detachModules(){ - this.dispatch("row-deleting", this); - } - - deleteCells(){ - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } - } - - wipe(){ - this.detachModules(); - this.deleteCells(); - - if(this.element){ - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - this.element = false; - this.modules = {}; - } - - isDisplayed(){ - return this.table.rowManager.getDisplayRows().includes(this); - } - - getPosition(){ - return this.isDisplayed() ? this.position : false; - } - - setPosition(position){ - if(position != this.position){ - this.position = position; - - this.positionWatchers.forEach((callback) => { - callback(this.position); - }); - } - } - - watchPosition(callback){ - this.positionWatchers.push(callback); - - callback(this.position); - } - - getGroup(){ - return this.modules.group || false; - } - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new RowComponent(this); - } - - return this.component; - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/row/RowComponent.js b/tmp/tabulator-5.6.1/src/js/core/row/RowComponent.js deleted file mode 100644 index e9868ef..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/row/RowComponent.js +++ /dev/null @@ -1,94 +0,0 @@ -//public row object -export default class RowComponent { - - constructor (row){ - this._row = row; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else{ - return target._row.table.componentFunctionBinder.handle("row", target._row, name); - } - } - }); - } - - getData(transform){ - return this._row.getData(transform); - } - - getElement(){ - return this._row.getElement(); - } - - getCells(){ - var cells = []; - - this._row.getCells().forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - getCell(column){ - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; - } - - getIndex(){ - return this._row.getData("data")[this._row.table.options.index]; - } - - getPosition(){ - return this._row.getPosition(); - } - - watchPosition(callback){ - return this._row.watchPosition(callback); - } - - delete(){ - return this._row.delete(); - } - - scrollTo(position, ifVisible){ - return this._row.table.rowManager.scrollToRow(this._row, position, ifVisible); - } - - move(to, after){ - this._row.moveToRow(to, after); - } - - update(data){ - return this._row.updateData(data); - } - - normalizeHeight(){ - this._row.normalizeHeight(true); - } - - _getSelf(){ - return this._row; - } - - reformat(){ - return this._row.reinitialize(); - } - - getTable(){ - return this._row.table; - } - - getNextRow(){ - var row = this._row.nextRow(); - return row ? row.getComponent() : row; - } - - getPrevRow(){ - var row = this._row.prevRow(); - return row ? row.getComponent() : row; - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/Alert.js b/tmp/tabulator-5.6.1/src/js/core/tools/Alert.js deleted file mode 100644 index 5df03f7..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/Alert.js +++ /dev/null @@ -1,66 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; - -export default class Alert extends CoreFeature{ - constructor(table){ - super(table); - - this.element = this._createAlertElement(); - this.msgElement = this._createMsgElement(); - this.type = null; - - this.element.appendChild(this.msgElement); - } - - _createAlertElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-alert"); - return el; - } - - _createMsgElement(){ - var el = document.createElement("div"); - el.classList.add("tabulator-alert-msg"); - el.setAttribute("role", "alert"); - return el; - } - - _typeClass(){ - return "tabulator-alert-state-" + this.type; - } - - alert(content, type = "msg"){ - if(content){ - this.clear(); - - this.dispatch("alert-show", type); - - this.type = type; - - while(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild); - - this.msgElement.classList.add(this._typeClass()); - - if(typeof content === "function"){ - content = content(); - } - - if(content instanceof HTMLElement){ - this.msgElement.appendChild(content); - }else{ - this.msgElement.innerHTML = content; - } - - this.table.element.appendChild(this.element); - } - } - - clear(){ - this.dispatch("alert-hide", this.type); - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.msgElement.classList.remove(this._typeClass()); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/ComponentFunctionBinder.js b/tmp/tabulator-5.6.1/src/js/core/tools/ComponentFunctionBinder.js deleted file mode 100644 index e922629..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/ComponentFunctionBinder.js +++ /dev/null @@ -1,32 +0,0 @@ -export default class ComponentFunctionBinder{ - - constructor(table){ - this.table = table; - - this.bindings = {}; - } - - bind(type, funcName, handler){ - if(!this.bindings[type]){ - this.bindings[type] = {}; - } - - if(this.bindings[type][funcName]){ - console.warn("Unable to bind component handler, a matching function name is already bound", type, funcName, handler); - }else{ - this.bindings[type][funcName] = handler; - } - } - - handle(type, component, name){ - if(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){ - return this.bindings[type][name].bind(null, component); - }else{ - if(name !== "then" && typeof name === "string" && !name.startsWith("_")){ - if(this.table.options.debugInvalidComponentFuncs){ - console.error("The " + type + " component does not have a " + name + " function, have you checked that you have the correct Tabulator module installed?"); - } - } - } - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/DataLoader.js b/tmp/tabulator-5.6.1/src/js/core/tools/DataLoader.js deleted file mode 100644 index 34856f7..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/DataLoader.js +++ /dev/null @@ -1,128 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; - -export default class DataLoader extends CoreFeature{ - constructor(table){ - super(table); - - this.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request - this.loading = false; - } - - initialize(){} - - load(data, params, config, replace, silent, columnsChanged){ - var requestNo = ++this.requestOrder; - - if(this.table.destroyed){ - return Promise.resolve(); - } - - this.dispatchExternal("dataLoading", data); - - //parse json data to array - if (data && (data.indexOf("{") == 0 || data.indexOf("[") == 0)){ - data = JSON.parse(data); - } - - if(this.confirm("data-loading", [data, params, config, silent])){ - this.loading = true; - - if(!silent){ - this.alertLoader(); - } - - //get params for request - params = this.chain("data-params", [data, config, silent], params || {}, params || {}); - - params = this.mapParams(params, this.table.options.dataSendParams); - - var result = this.chain("data-load", [data, params, config, silent], false, Promise.resolve([])); - - return result.then((response) => { - if(!this.table.destroyed){ - if(!Array.isArray(response) && typeof response == "object"){ - response = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams)); - } - - var rowData = this.chain("data-loaded", response, null, response); - - if(requestNo == this.requestOrder){ - this.clearAlert(); - - if(rowData !== false){ - this.dispatchExternal("dataLoaded", rowData); - this.table.rowManager.setData(rowData, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged); - } - }else{ - console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made"); - } - }else{ - console.warn("Data Load Response Blocked - Table has been destroyed"); - } - }).catch((error) => { - console.error("Data Load Error: ", error); - this.dispatchExternal("dataLoadError", error); - - if(!silent){ - this.alertError(); - } - - setTimeout(() => { - this.clearAlert(); - }, this.table.options.dataLoaderErrorTimeout); - }) - .finally(() => { - this.loading = false; - }); - }else{ - this.dispatchExternal("dataLoaded", data); - - if(!data){ - data = []; - } - - this.table.rowManager.setData(data, replace, typeof columnsChanged === "undefined" ? !replace : columnsChanged); - return Promise.resolve(); - } - } - - mapParams(params, map){ - var output = {}; - - for(let key in params){ - output[map.hasOwnProperty(key) ? map[key] : key] = params[key]; - } - - return output; - } - - objectInvert(obj){ - var output = {}; - - for(let key in obj){ - output[obj[key]] = key; - } - - return output; - } - - blockActiveLoad(){ - this.requestOrder++; - } - - alertLoader(){ - var shouldLoad = typeof this.table.options.dataLoader === "function" ? this.table.options.dataLoader() : this.table.options.dataLoader; - - if(shouldLoad){ - this.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText("data|loading")); - } - } - - alertError(){ - this.table.alertManager.alert(this.table.options.dataLoaderError || this.langText("data|error"), "error"); - } - - clearAlert(){ - this.table.alertManager.clear(); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/DeprecationAdvisor.js b/tmp/tabulator-5.6.1/src/js/core/tools/DeprecationAdvisor.js deleted file mode 100644 index 86ff8eb..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/DeprecationAdvisor.js +++ /dev/null @@ -1,51 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; - -export default class DeprecationAdvisor extends CoreFeature{ - - constructor(table){ - super(table); - } - - _warnUser(){ - if(this.options("debugDeprecation")){ - console.warn(...arguments); - } - } - - check(oldOption, newOption, convert){ - var msg = ""; - - if(typeof this.options(oldOption) !== "undefined"){ - msg = "Deprecated Setup Option - Use of the %c" + oldOption + "%c option is now deprecated"; - - if(newOption){ - msg = msg + ", Please use the %c" + newOption + "%c option instead"; - this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;'); - - if(convert){ - this.table.options[newOption] = this.table.options[oldOption]; - } - }else{ - this._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;'); - } - - return false; - }else{ - return true; - } - } - - checkMsg(oldOption, msg){ - if(typeof this.options(oldOption) !== "undefined"){ - this._warnUser("%cDeprecated Setup Option - Use of the %c" + oldOption + " %c option is now deprecated, " + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;'); - - return false; - }else{ - return true; - } - } - - msg(msg){ - this._warnUser(msg); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/ExternalEventBus.js b/tmp/tabulator-5.6.1/src/js/core/tools/ExternalEventBus.js deleted file mode 100644 index 1bc7235..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/ExternalEventBus.js +++ /dev/null @@ -1,105 +0,0 @@ -export default class ExternalEventBus { - - constructor(table, optionsList, debug){ - this.table = table; - this.events = {}; - this.optionsList = optionsList || {}; - this.subscriptionNotifiers = {}; - - this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); - this.debug = debug; - } - - subscriptionChange(key, callback){ - if(!this.subscriptionNotifiers[key]){ - this.subscriptionNotifiers[key] = []; - } - - this.subscriptionNotifiers[key].push(callback); - - if(this.subscribed(key)){ - this._notifySubscriptionChange(key, true); - } - } - - subscribe(key, callback){ - if(!this.events[key]){ - this.events[key] = []; - } - - this.events[key].push(callback); - - this._notifySubscriptionChange(key, true); - } - - unsubscribe(key, callback){ - var index; - - if(this.events[key]){ - if(callback){ - index = this.events[key].findIndex((item) => { - return item === callback; - }); - - if(index > -1){ - this.events[key].splice(index, 1); - }else{ - console.warn("Cannot remove event, no matching event found:", key, callback); - return; - } - }else{ - delete this.events[key]; - } - }else{ - console.warn("Cannot remove event, no events set on:", key); - return; - } - - this._notifySubscriptionChange(key, false); - } - - subscribed(key){ - return this.events[key] && this.events[key].length; - } - - _notifySubscriptionChange(key, subscribed){ - var notifiers = this.subscriptionNotifiers[key]; - - if(notifiers){ - notifiers.forEach((callback)=>{ - callback(subscribed); - }); - } - } - - _dispatch(){ - var args = Array.from(arguments), - key = args.shift(), - result; - - if(this.events[key]){ - this.events[key].forEach((callback, i) => { - let callResult = callback.apply(this.table, args); - - if(!i){ - result = callResult; - } - }); - } - - return result; - } - - _debugDispatch(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "ExternalEvent:" + args[0]; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._dispatch(...arguments); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/Helpers.js b/tmp/tabulator-5.6.1/src/js/core/tools/Helpers.js deleted file mode 100644 index 078e175..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/Helpers.js +++ /dev/null @@ -1,66 +0,0 @@ -export default class Helpers{ - - static elVisible(el){ - return !(el.offsetWidth <= 0 && el.offsetHeight <= 0); - } - - static elOffset(el){ - var box = el.getBoundingClientRect(); - - return { - top: box.top + window.pageYOffset - document.documentElement.clientTop, - left: box.left + window.pageXOffset - document.documentElement.clientLeft - }; - } - - static retrieveNestedData(separator, field, data){ - var structure = separator ? field.split(separator) : [field], - length = structure.length, - output; - - for(let i = 0; i < length; i++){ - - data = data[structure[i]]; - - output = data; - - if(!data){ - break; - } - } - - return output; - } - - static deepClone(obj, clone, list = []){ - var objectProto = {}.__proto__, - arrayProto = [].__proto__; - - if (!clone){ - clone = Object.assign(Array.isArray(obj) ? [] : {}, obj); - } - - for(var i in obj) { - let subject = obj[i], - match, copy; - - if(subject != null && typeof subject === "object" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){ - match = list.findIndex((item) => { - return item.subject === subject; - }); - - if(match > -1){ - clone[i] = list[match].copy; - }else{ - copy = Object.assign(Array.isArray(subject) ? [] : {}, subject); - - list.unshift({subject, copy}); - - clone[i] = this.deepClone(subject, copy, list); - } - } - } - - return clone; - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/InteractionMonitor.js b/tmp/tabulator-5.6.1/src/js/core/tools/InteractionMonitor.js deleted file mode 100644 index 6ecbd05..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/InteractionMonitor.js +++ /dev/null @@ -1,322 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; -import Row from '../row/Row.js'; - -export default class InteractionManager extends CoreFeature { - - constructor (table){ - super(table); - - this.el = null; - - this.abortClasses = ["tabulator-headers", "tabulator-table"]; - - this.previousTargets = {}; - - this.listeners = [ - "click", - "dblclick", - "contextmenu", - "mouseenter", - "mouseleave", - "mouseover", - "mouseout", - "mousemove", - "mouseup", - "mousedown", - "touchstart", - "touchend", - ]; - - this.componentMap = { - "tabulator-cell":"cell", - "tabulator-row":"row", - "tabulator-group":"group", - "tabulator-col":"column", - }; - - this.pseudoTrackers = { - "row":{ - subscriber:null, - target:null, - }, - "cell":{ - subscriber:null, - target:null, - }, - "group":{ - subscriber:null, - target:null, - }, - "column":{ - subscriber:null, - target:null, - }, - }; - - this.pseudoTracking = false; - } - - initialize(){ - this.el = this.table.element; - - this.buildListenerMap(); - this.bindSubscriptionWatchers(); - } - - buildListenerMap(){ - var listenerMap = {}; - - this.listeners.forEach((listener) => { - listenerMap[listener] = { - handler:null, - components:[], - }; - }); - - this.listeners = listenerMap; - } - - bindPseudoEvents(){ - Object.keys(this.pseudoTrackers).forEach((key) => { - this.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key); - this.subscribe(key + "-mouseover", this.pseudoTrackers[key].subscriber); - }); - - this.pseudoTracking = true; - } - - pseudoMouseEnter(key, e, target){ - if(this.pseudoTrackers[key].target !== target){ - - if(this.pseudoTrackers[key].target){ - this.dispatch(key + "-mouseleave", e, this.pseudoTrackers[key].target); - } - - this.pseudoMouseLeave(key, e); - - this.pseudoTrackers[key].target = target; - - this.dispatch(key + "-mouseenter", e, target); - } - } - - pseudoMouseLeave(key, e){ - var leaveList = Object.keys(this.pseudoTrackers), - linkedKeys = { - "row":["cell"], - "cell":["row"], - }; - - leaveList = leaveList.filter((item) => { - var links = linkedKeys[key]; - return item !== key && (!links || (links && !links.includes(item))); - }); - - - leaveList.forEach((key) => { - var target = this.pseudoTrackers[key].target; - - if(this.pseudoTrackers[key].target){ - this.dispatch(key + "-mouseleave", e, target); - - this.pseudoTrackers[key].target = null; - } - }); - } - - - bindSubscriptionWatchers(){ - var listeners = Object.keys(this.listeners), - components = Object.values(this.componentMap); - - for(let comp of components){ - for(let listener of listeners){ - let key = comp + "-" + listener; - - this.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener)); - } - } - - this.subscribe("table-destroy", this.clearWatchers.bind(this)); - } - - subscriptionChanged(component, key, added){ - var listener = this.listeners[key].components, - index = listener.indexOf(component), - changed = false; - - if(added){ - if(index === -1){ - listener.push(component); - changed = true; - } - }else{ - if(!this.subscribed(component + "-" + key)){ - if(index > -1){ - listener.splice(index, 1); - changed = true; - } - } - } - - if((key === "mouseenter" || key === "mouseleave") && !this.pseudoTracking){ - this.bindPseudoEvents(); - } - - if(changed){ - this.updateEventListeners(); - } - } - - updateEventListeners(){ - for(let key in this.listeners){ - let listener = this.listeners[key]; - - if(listener.components.length){ - if(!listener.handler){ - listener.handler = this.track.bind(this, key); - this.el.addEventListener(key, listener.handler); - // this.el.addEventListener(key, listener.handler, {passive: true}) - } - }else{ - if(listener.handler){ - this.el.removeEventListener(key, listener.handler); - listener.handler = null; - } - } - } - } - - track(type, e){ - var path = (e.composedPath && e.composedPath()) || e.path; - - var targets = this.findTargets(path); - targets = this.bindComponents(type, targets); - - this.triggerEvents(type, e, targets); - - if(this.pseudoTracking && (type == "mouseover" || type == "mouseleave") && !Object.keys(targets).length){ - this.pseudoMouseLeave("none", e); - } - } - - findTargets(path){ - var targets = {}; - - let componentMap = Object.keys(this.componentMap); - - for (let el of path) { - let classList = el.classList ? [...el.classList] : []; - - let abort = classList.filter((item) => { - return this.abortClasses.includes(item); - }); - - if(abort.length){ - break; - } - - let elTargets = classList.filter((item) => { - return componentMap.includes(item); - }); - - for (let target of elTargets) { - if(!targets[this.componentMap[target]]){ - targets[this.componentMap[target]] = el; - } - } - } - - if(targets.group && targets.group === targets.row){ - delete targets.row; - } - - return targets; - } - - bindComponents(type, targets){ - //ensure row component is looked up before cell - var keys = Object.keys(targets).reverse(), - listener = this.listeners[type], - matches = {}, - targetMatches = {}; - - for(let key of keys){ - let component, - target = targets[key], - previousTarget = this.previousTargets[key]; - - if(previousTarget && previousTarget.target === target){ - component = previousTarget.component; - }else{ - switch(key){ - case "row": - case "group": - if(listener.components.includes("row") || listener.components.includes("cell") || listener.components.includes("group")){ - let rows = this.table.rowManager.getVisibleRows(true); - - component = rows.find((row) => { - return row.getElement() === target; - }); - - if(targets["row"] && targets["row"].parentNode && targets["row"].parentNode.closest(".tabulator-row")){ - targets[key] = false; - } - } - break; - - case "column": - if(listener.components.includes("column")){ - component = this.table.columnManager.findColumn(target); - } - break; - - case "cell": - if(listener.components.includes("cell")){ - if(matches["row"] instanceof Row){ - component = matches["row"].findCell(target); - }else{ - if(targets["row"]){ - console.warn("Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?"); - } - } - } - break; - } - } - - if(component){ - matches[key] = component; - targetMatches[key] = { - target:target, - component:component, - }; - } - } - - this.previousTargets = targetMatches; - - return matches; - } - - triggerEvents(type, e, targets){ - var listener = this.listeners[type]; - - for(let key in targets){ - if(targets[key] && listener.components.includes(key)){ - this.dispatch(key + "-" + type, e, targets[key]); - } - } - } - - clearWatchers(){ - for(let key in this.listeners){ - let listener = this.listeners[key]; - - if(listener.handler){ - this.el.removeEventListener(key, listener.handler); - listener.handler = null; - } - } - } -} diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/InternalEventBus.js b/tmp/tabulator-5.6.1/src/js/core/tools/InternalEventBus.js deleted file mode 100644 index 7d7e4d9..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/InternalEventBus.js +++ /dev/null @@ -1,162 +0,0 @@ -export default class InternalEventBus { - - constructor(debug){ - this.events = {}; - this.subscriptionNotifiers = {}; - - this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); - this.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this); - this.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this); - this.debug = debug; - } - - subscriptionChange(key, callback){ - if(!this.subscriptionNotifiers[key]){ - this.subscriptionNotifiers[key] = []; - } - - this.subscriptionNotifiers[key].push(callback); - - if(this.subscribed(key)){ - this._notifySubscriptionChange(key, true); - } - } - - subscribe(key, callback, priority = 10000){ - if(!this.events[key]){ - this.events[key] = []; - } - - this.events[key].push({callback, priority}); - - this.events[key].sort((a, b) => { - return a.priority - b.priority; - }); - - this._notifySubscriptionChange(key, true); - } - - unsubscribe(key, callback){ - var index; - - if(this.events[key]){ - if(callback){ - index = this.events[key].findIndex((item) => { - return item.callback === callback; - }); - - if(index > -1){ - this.events[key].splice(index, 1); - }else{ - console.warn("Cannot remove event, no matching event found:", key, callback); - return; - } - } - }else{ - console.warn("Cannot remove event, no events set on:", key); - return; - } - - this._notifySubscriptionChange(key, false); - } - - subscribed(key){ - return this.events[key] && this.events[key].length; - } - - _chain(key, args, initialValue, fallback){ - var value = initialValue; - - if(!Array.isArray(args)){ - args = [args]; - } - - if(this.subscribed(key)){ - this.events[key].forEach((subscriber, i) => { - value = subscriber.callback.apply(this, args.concat([value])); - }); - - return value; - }else{ - return typeof fallback === "function" ? fallback() : fallback; - } - } - - _confirm(key, args){ - var confirmed = false; - - if(!Array.isArray(args)){ - args = [args]; - } - - if(this.subscribed(key)){ - this.events[key].forEach((subscriber, i) => { - if(subscriber.callback.apply(this, args)){ - confirmed = true; - } - }); - } - - return confirmed; - } - - _notifySubscriptionChange(key, subscribed){ - var notifiers = this.subscriptionNotifiers[key]; - - if(notifiers){ - notifiers.forEach((callback)=>{ - callback(subscribed); - }); - } - } - - _dispatch(){ - var args = Array.from(arguments), - key = args.shift(); - - if(this.events[key]){ - this.events[key].forEach((subscriber) => { - subscriber.callback.apply(this, args); - }); - } - } - - _debugDispatch(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._dispatch(...arguments); - } - - _debugChain(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._chain(...arguments); - } - - _debugConfirm(){ - var args = Array.from(arguments), - key = args[0]; - - args[0] = "InternalEvent:" + key; - - if(this.debug === true || this.debug.includes(key)){ - console.log(...args); - } - - return this._confirm(...arguments); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/ModuleBinder.js b/tmp/tabulator-5.6.1/src/js/core/tools/ModuleBinder.js deleted file mode 100644 index ca5c22c..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/ModuleBinder.js +++ /dev/null @@ -1,105 +0,0 @@ -import * as coreModules from '../modules/core.js'; -import TableRegistry from './TableRegistry.js'; - -export default class ModuleBinder { - - constructor(tabulator, modules){ - this.bindStaticFunctionality(tabulator); - this.bindModules(tabulator, coreModules, true); - - if(modules){ - this.bindModules(tabulator, modules); - } - } - - bindStaticFunctionality(tabulator){ - tabulator.moduleBindings = {}; - - tabulator.extendModule = function(name, property, values){ - if(tabulator.moduleBindings[name]){ - var source = tabulator.moduleBindings[name][property]; - - if(source){ - if(typeof values == "object"){ - for(let key in values){ - source[key] = values[key]; - } - }else{ - console.warn("Module Error - Invalid value type, it must be an object"); - } - }else{ - console.warn("Module Error - property does not exist:", property); - } - }else{ - console.warn("Module Error - module does not exist:", name); - } - }; - - tabulator.registerModule = function(modules){ - if(!Array.isArray(modules)){ - modules = [modules]; - } - - modules.forEach((mod) => { - tabulator.registerModuleBinding(mod); - }); - }; - - tabulator.registerModuleBinding = function(mod){ - tabulator.moduleBindings[mod.moduleName] = mod; - }; - - tabulator.findTable = function(query){ - var results = TableRegistry.lookupTable(query, true); - return Array.isArray(results) && !results.length ? false : results; - }; - - //ensure that module are bound to instantiated function - tabulator.prototype.bindModules = function(){ - var orderedStartMods = [], - orderedEndMods = [], - unOrderedMods = []; - - this.modules = {}; - - for(var name in tabulator.moduleBindings){ - let mod = tabulator.moduleBindings[name]; - let module = new mod(this); - - this.modules[name] = module; - - if(mod.prototype.moduleCore){ - this.modulesCore.push(module); - }else{ - if(mod.moduleInitOrder){ - if(mod.moduleInitOrder < 0){ - orderedStartMods.push(module); - }else{ - orderedEndMods.push(module); - } - - }else{ - unOrderedMods.push(module); - } - } - } - - orderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1); - orderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1); - - this.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods)); - }; - } - - bindModules(tabulator, modules, core){ - var mods = Object.values(modules); - - if(core){ - mods.forEach((mod) => { - mod.prototype.moduleCore = true; - }); - } - - tabulator.registerModule(mods); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/OptionsList.js b/tmp/tabulator-5.6.1/src/js/core/tools/OptionsList.js deleted file mode 100644 index 1fd9b1e..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/OptionsList.js +++ /dev/null @@ -1,45 +0,0 @@ -export default class OptionsList { - constructor(table, msgType, defaults = {}){ - this.table = table; - this.msgType = msgType; - this.registeredDefaults = Object.assign({}, defaults); - } - - register(option, value){ - this.registeredDefaults[option] = value; - } - - generate(defaultOptions, userOptions = {}){ - var output = Object.assign({}, this.registeredDefaults), - warn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true; - - Object.assign(output, defaultOptions); - - for (let key in userOptions){ - if(!output.hasOwnProperty(key)){ - if(warn){ - console.warn("Invalid " + this.msgType + " option:", key); - } - - output[key] = userOptions.key; - } - } - - - for (let key in output){ - if(key in userOptions){ - output[key] = userOptions[key]; - }else{ - if(Array.isArray(output[key])){ - output[key] = Object.assign([], output[key]); - }else if(typeof output[key] === "object" && output[key] !== null){ - output[key] = Object.assign({}, output[key]); - }else if (typeof output[key] === "undefined"){ - delete output[key]; - } - } - } - - return output; - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/Popup.js b/tmp/tabulator-5.6.1/src/js/core/tools/Popup.js deleted file mode 100644 index 644838c..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/Popup.js +++ /dev/null @@ -1,305 +0,0 @@ -import CoreFeature from '../CoreFeature.js'; -import Helpers from './Helpers.js'; - -export default class Popup extends CoreFeature{ - constructor(table, element, parent){ - super(table); - - this.element = element; - this.container = this._lookupContainer(); - - this.parent = parent; - - this.reversedX = false; - this.childPopup = null; - this.blurable = false; - this.blurCallback = null; - this.blurEventsBound = false; - this.renderedCallback = null; - - this.visible = false; - this.hideable = true; - - this.element.classList.add("tabulator-popup-container"); - - this.blurEvent = this.hide.bind(this, false); - this.escEvent = this._escapeCheck.bind(this); - - this.destroyBinding = this.tableDestroyed.bind(this); - this.destroyed = false; - } - - tableDestroyed(){ - this.destroyed = true; - this.hide(true); - } - - _lookupContainer(){ - var container = this.table.options.popupContainer; - - if(typeof container === "string"){ - container = document.querySelector(container); - - if(!container){ - console.warn("Menu Error - no container element found matching selector:", this.table.options.popupContainer , "(defaulting to document body)"); - } - }else if (container === true){ - container = this.table.element; - } - - if(container && !this._checkContainerIsParent(container)){ - container = false; - console.warn("Menu Error - container element does not contain this table:", this.table.options.popupContainer , "(defaulting to document body)"); - } - - if(!container){ - container = document.body; - } - - return container; - } - - _checkContainerIsParent(container, element = this.table.element){ - if(container === element){ - return true; - }else{ - return element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false; - } - } - - renderCallback(callback){ - this.renderedCallback = callback; - } - - containerEventCoords(e){ - var touch = !(e instanceof MouseEvent); - - var x = touch ? e.touches[0].pageX : e.pageX; - var y = touch ? e.touches[0].pageY : e.pageY; - - if(this.container !== document.body){ - let parentOffset = Helpers.elOffset(this.container); - - x -= parentOffset.left; - y -= parentOffset.top; - } - - return {x, y}; - } - - elementPositionCoords(element, position = "right"){ - var offset = Helpers.elOffset(element), - containerOffset, x, y; - - if(this.container !== document.body){ - containerOffset = Helpers.elOffset(this.container); - - offset.left -= containerOffset.left; - offset.top -= containerOffset.top; - } - - switch(position){ - case "right": - x = offset.left + element.offsetWidth; - y = offset.top - 1; - break; - - case "bottom": - x = offset.left; - y = offset.top + element.offsetHeight; - break; - - case "left": - x = offset.left; - y = offset.top - 1; - break; - - case "top": - x = offset.left; - y = offset.top; - break; - - case "center": - x = offset.left + (element.offsetWidth / 2); - y = offset.top + (element.offsetHeight / 2); - break; - - } - - return {x, y, offset}; - } - - show(origin, position){ - var x, y, parentEl, parentOffset, coords; - - if(this.destroyed || this.table.destroyed){ - return this; - } - - if(origin instanceof HTMLElement){ - parentEl = origin; - coords = this.elementPositionCoords(origin, position); - - parentOffset = coords.offset; - x = coords.x; - y = coords.y; - - }else if(typeof origin === "number"){ - parentOffset = {top:0, left:0}; - x = origin; - y = position; - }else{ - coords = this.containerEventCoords(origin); - - x = coords.x; - y = coords.y; - - this.reversedX = false; - } - - this.element.style.top = y + "px"; - this.element.style.left = x + "px"; - - this.container.appendChild(this.element); - - if(typeof this.renderedCallback === "function"){ - this.renderedCallback(); - } - - this._fitToScreen(x, y, parentEl, parentOffset, position); - - this.visible = true; - - this.subscribe("table-destroy", this.destroyBinding); - - this.element.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - return this; - } - - _fitToScreen(x, y, parentEl, parentOffset, position){ - var scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop; - - //move menu to start on right edge if it is too close to the edge of the screen - if((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){ - this.element.style.left = ""; - - if(parentEl){ - this.element.style.right = (this.container.offsetWidth - parentOffset.left) + "px"; - }else{ - this.element.style.right = (this.container.offsetWidth - x) + "px"; - } - - this.reversedX = true; - } - - //move menu to start on bottom edge if it is too close to the edge of the screen - if((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) { - if(parentEl){ - switch(position){ - case "bottom": - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + "px"; - break; - - default: - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + "px"; - } - - }else{ - this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + "px"; - } - } - } - - isVisible(){ - return this.visible; - } - - hideOnBlur(callback){ - this.blurable = true; - - if(this.visible){ - setTimeout(() => { - if(this.visible){ - this.table.rowManager.element.addEventListener("scroll", this.blurEvent); - this.subscribe("cell-editing", this.blurEvent); - document.body.addEventListener("click", this.blurEvent); - document.body.addEventListener("contextmenu", this.blurEvent); - document.body.addEventListener("mousedown", this.blurEvent); - window.addEventListener("resize", this.blurEvent); - document.body.addEventListener("keydown", this.escEvent); - - this.blurEventsBound = true; - } - }, 100); - - this.blurCallback = callback; - } - - return this; - } - - _escapeCheck(e){ - if(e.keyCode == 27){ - this.hide(); - } - } - - blockHide(){ - this.hideable = false; - } - - restoreHide(){ - this.hideable = true; - } - - hide(silent = false){ - if(this.visible && this.hideable){ - if(this.blurable && this.blurEventsBound){ - document.body.removeEventListener("keydown", this.escEvent); - document.body.removeEventListener("click", this.blurEvent); - document.body.removeEventListener("contextmenu", this.blurEvent); - document.body.removeEventListener("mousedown", this.blurEvent); - window.removeEventListener("resize", this.blurEvent); - this.table.rowManager.element.removeEventListener("scroll", this.blurEvent); - this.unsubscribe("cell-editing", this.blurEvent); - - this.blurEventsBound = false; - } - - if(this.childPopup){ - this.childPopup.hide(); - } - - if(this.parent){ - this.parent.childPopup = null; - } - - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - - this.visible = false; - - if(this.blurCallback && !silent){ - this.blurCallback(); - } - - this.unsubscribe("table-destroy", this.destroyBinding); - } - - return this; - } - - child(element){ - if(this.childPopup){ - this.childPopup.hide(); - } - - this.childPopup = new Popup(this.table, element, this); - - return this.childPopup; - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/core/tools/TableRegistry.js b/tmp/tabulator-5.6.1/src/js/core/tools/TableRegistry.js deleted file mode 100644 index c25b5ac..0000000 --- a/tmp/tabulator-5.6.1/src/js/core/tools/TableRegistry.js +++ /dev/null @@ -1,62 +0,0 @@ -import Tabulator from '../Tabulator.js'; - -class TableRegistry { - - static register(table){ - TableRegistry.tables.push(table); - } - - static deregister(table){ - var index = TableRegistry.tables.indexOf(table); - - if(index > -1){ - TableRegistry.tables.splice(index, 1); - } - } - - static lookupTable(query, silent){ - var results = [], - matches, match; - - if(typeof query === "string"){ - matches = document.querySelectorAll(query); - - if(matches.length){ - for(var i = 0; i < matches.length; i++){ - match = TableRegistry.matchElement(matches[i]); - - if(match){ - results.push(match); - } - } - } - - }else if((typeof HTMLElement !== "undefined" && query instanceof HTMLElement) || query instanceof Tabulator){ - match = TableRegistry.matchElement(query); - - if(match){ - results.push(match); - } - }else if(Array.isArray(query)){ - query.forEach(function(item){ - results = results.concat(TableRegistry.lookupTable(item)); - }); - }else{ - if(!silent){ - console.warn("Table Connection Error - Invalid Selector", query); - } - } - - return results; - } - - static matchElement(element){ - return TableRegistry.tables.find(function(table){ - return element instanceof Tabulator ? table === element : table.element === element; - }); - } -} - -TableRegistry.tables = []; - -export default TableRegistry; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Accessor/Accessor.js b/tmp/tabulator-5.6.1/src/js/modules/Accessor/Accessor.js deleted file mode 100644 index 669de14..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Accessor/Accessor.js +++ /dev/null @@ -1,116 +0,0 @@ -import Module from '../../core/Module.js'; -import Helpers from '../../core/tools/Helpers.js'; - -import defaultAccessors from './defaults/accessors.js'; - -class Accessor extends Module{ - - constructor(table){ - super(table); - - this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types - - this.registerColumnOption("accessor"); - this.registerColumnOption("accessorParams"); - this.registerColumnOption("accessorData"); - this.registerColumnOption("accessorDataParams"); - this.registerColumnOption("accessorDownload"); - this.registerColumnOption("accessorDownloadParams"); - this.registerColumnOption("accessorClipboard"); - this.registerColumnOption("accessorClipboardParams"); - this.registerColumnOption("accessorPrint"); - this.registerColumnOption("accessorPrintParams"); - this.registerColumnOption("accessorHtmlOutput"); - this.registerColumnOption("accessorHtmlOutputParams"); - } - - initialize(){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("row-data-retrieve", this.transformRow.bind(this)); - } - - //initialize column accessor - initializeColumn(column){ - var match = false, - config = {}; - - this.allowedTypes.forEach((type) => { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if(column.definition[key]){ - accessor = this.lookupAccessor(column.definition[key]); - - if(accessor){ - match = true; - - config[key] = { - accessor:accessor, - params: column.definition[key + "Params"] || {}, - }; - } - } - }); - - if(match){ - column.modules.accessor = config; - } - } - - lookupAccessor(value){ - var accessor = false; - - //set column accessor - switch(typeof value){ - case "string": - if(Accessor.accessors[value]){ - accessor = Accessor.accessors[value]; - }else{ - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; - } - - //apply accessor to row - transformRow(row, type){ - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - rowComponent = row.getComponent(); - - //clone data object with deep copy to isolate internal data from returned result - var data = Helpers.deepClone(row.data || {}); - - this.table.columnManager.traverse(function(column){ - var value, accessor, params, colComponent; - - if(column.modules.accessor){ - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if(accessor){ - value = column.getFieldValue(data); - - if(value != "undefined"){ - colComponent = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent)); - } - } - } - }); - - return data; - } -} - -//load defaults -Accessor.moduleName = "accessor"; -Accessor.accessors = defaultAccessors; - -export default Accessor; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Accessor/defaults/accessors.js b/tmp/tabulator-5.6.1/src/js/modules/Accessor/defaults/accessors.js deleted file mode 100644 index 7c645e4..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Accessor/defaults/accessors.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Ajax/Ajax.js b/tmp/tabulator-5.6.1/src/js/modules/Ajax/Ajax.js deleted file mode 100644 index cd41d5b..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Ajax/Ajax.js +++ /dev/null @@ -1,144 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultConfig from './defaults/config.js'; -import defaultURLGenerator from './defaults/urlGenerator.js'; -import defaultLoaderPromise from './defaults/loaderPromise.js'; -import defaultContentTypeFormatters from './defaults/contentTypeFormatters.js'; - -class Ajax extends Module{ - - constructor(table){ - super(table); - - this.config = {}; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderPromise = false; - - this.registerTableOption("ajaxURL", false); //url for ajax loading - this.registerTableOption("ajaxURLGenerator", false); - this.registerTableOption("ajaxParams", {}); //params for ajax loading - this.registerTableOption("ajaxConfig", "get"); //ajax request type - this.registerTableOption("ajaxContentType", "form"); //ajax request type - this.registerTableOption("ajaxRequestFunc", false); //promise function - - this.registerTableOption("ajaxRequesting", function(){}); - this.registerTableOption("ajaxResponse", false); - - this.contentTypeFormatters = Ajax.contentTypeFormatters; - } - - //initialize setup options - initialize(){ - this.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise; - this.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator; - - if(this.table.options.ajaxURL){ - this.setUrl(this.table.options.ajaxURL); - } - - - this.setDefaultConfig(this.table.options.ajaxConfig); - - this.registerTableFunction("getAjaxUrl", this.getUrl.bind(this)); - - this.subscribe("data-loading", this.requestDataCheck.bind(this)); - this.subscribe("data-params", this.requestParams.bind(this)); - this.subscribe("data-load", this.requestData.bind(this)); - } - - requestParams(data, config, silent, params){ - var ajaxParams = this.table.options.ajaxParams; - - if(ajaxParams){ - if(typeof ajaxParams === "function"){ - ajaxParams = ajaxParams.call(this.table); - } - - params = Object.assign(Object.assign({}, ajaxParams), params); - } - - return params; - } - - requestDataCheck(data, params, config, silent){ - return !!((!data && this.url) || typeof data === "string"); - } - - requestData(url, params, config, silent, previousData){ - var ajaxConfig; - - if(!previousData && this.requestDataCheck(url)){ - if(url){ - this.setUrl(url); - } - - ajaxConfig = this.generateConfig(config); - - return this.sendRequest(this.url, params, ajaxConfig); - }else{ - return previousData; - } - } - - setDefaultConfig(config = {}){ - this.config = Object.assign({}, Ajax.defaultConfig); - - if(typeof config == "string"){ - this.config.method = config; - }else{ - Object.assign(this.config, config); - } - } - - //load config object - generateConfig(config = {}){ - var ajaxConfig = Object.assign({}, this.config); - - if(typeof config == "string"){ - ajaxConfig.method = config; - }else{ - Object.assign(ajaxConfig, config); - } - - return ajaxConfig; - } - - //set request url - setUrl(url){ - this.url = url; - } - - //get request url - getUrl(){ - return this.url; - } - - //send ajax request - sendRequest(url, params, config){ - if(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){ - return this.loaderPromise(url, config, params) - .then((data)=>{ - if(this.table.options.ajaxResponse){ - data = this.table.options.ajaxResponse.call(this.table, url, params, data); - } - - return data; - }); - }else{ - return Promise.reject(); - } - } -} - -Ajax.moduleName = "ajax"; - -//load defaults -Ajax.defaultConfig = defaultConfig; -Ajax.defaultURLGenerator = defaultURLGenerator; -Ajax.defaultLoaderPromise = defaultLoaderPromise; -Ajax.contentTypeFormatters = defaultContentTypeFormatters; - -export default Ajax; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/config.js b/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/config.js deleted file mode 100644 index 174ee36..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/config.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - method: "GET", -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/contentTypeFormatters.js b/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/contentTypeFormatters.js deleted file mode 100644 index f38d81e..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/contentTypeFormatters.js +++ /dev/null @@ -1,45 +0,0 @@ -function generateParamsList(data, prefix){ - var output = []; - - prefix = prefix || ""; - - if(Array.isArray(data)){ - data.forEach((item, i) => { - output = output.concat(generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - }else if (typeof data === "object"){ - for (var key in data){ - output = output.concat(generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - }else{ - output.push({key:prefix, value:data}); - } - - return output; -} - -export default { - "json":{ - headers:{ - 'Content-Type': 'application/json', - }, - body:function(url, config, params){ - return JSON.stringify(params); - }, - }, - "form":{ - headers:{ - }, - body:function(url, config, params){ - - var output = generateParamsList(params), - form = new FormData(); - - output.forEach(function(item){ - form.append(item.key, item.value); - }); - - return form; - }, - }, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/loaderPromise.js b/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/loaderPromise.js deleted file mode 100644 index 0ba69bc..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/loaderPromise.js +++ /dev/null @@ -1,87 +0,0 @@ -export default function(url, config, params){ - var contentType; - - return new Promise((resolve, reject) => { - //set url - url = this.urlGenerator.call(this.table, url, config, params); - - //set body content if not GET request - if(config.method.toUpperCase() != "GET"){ - contentType = typeof this.table.options.ajaxContentType === "object" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType]; - if(contentType){ - - for(var key in contentType.headers){ - if(!config.headers){ - config.headers = {}; - } - - if(typeof config.headers[key] === "undefined"){ - config.headers[key] = contentType.headers[key]; - } - } - - config.body = contentType.body.call(this, url, config, params); - - }else{ - console.warn("Ajax Error - Invalid ajaxContentType value:", this.table.options.ajaxContentType); - } - } - - if(url){ - //configure headers - if(typeof config.headers === "undefined"){ - config.headers = {}; - } - - if(typeof config.headers.Accept === "undefined"){ - config.headers.Accept = "application/json"; - } - - if(typeof config.headers["X-Requested-With"] === "undefined"){ - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - if(typeof config.mode === "undefined"){ - config.mode = "cors"; - } - - if(config.mode == "cors"){ - if(typeof config.headers["Origin"] === "undefined"){ - config.headers["Origin"] = window.location.origin; - } - - if(typeof config.credentials === "undefined"){ - config.credentials = 'same-origin'; - } - }else{ - if(typeof config.credentials === "undefined"){ - config.credentials = 'include'; - } - } - - //send request - fetch(url, config) - .then((response)=>{ - if(response.ok) { - response.json() - .then((data)=>{ - resolve(data); - }).catch((error)=>{ - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - }else{ - console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText); - reject(response); - } - }) - .catch((error)=>{ - console.error("Ajax Load Error - Connection Error: ", error); - reject(error); - }); - }else{ - console.warn("Ajax Load Error - No URL Set"); - resolve([]); - } - }); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/urlGenerator.js b/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/urlGenerator.js deleted file mode 100644 index 26506de..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Ajax/defaults/urlGenerator.js +++ /dev/null @@ -1,44 +0,0 @@ -function generateParamsList(data, prefix){ - var output = []; - - prefix = prefix || ""; - - if(Array.isArray(data)){ - data.forEach((item, i) => { - output = output.concat(generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - }else if (typeof data === "object"){ - for (var key in data){ - output = output.concat(generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - }else{ - output.push({key:prefix, value:data}); - } - - return output; -} - -function serializeParams(params){ - var output = generateParamsList(params), - encoded = []; - - output.forEach(function(item){ - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); -} - -export default function(url, config, params){ - if(url){ - if(params && Object.keys(params).length){ - if(!config.method || config.method.toLowerCase() == "get"){ - config.method = "get"; - - url += (url.includes("?") ? "&" : "?") + serializeParams(params); - } - } - } - - return url; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Clipboard/Clipboard.js b/tmp/tabulator-5.6.1/src/js/modules/Clipboard/Clipboard.js deleted file mode 100644 index 99ab674..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Clipboard/Clipboard.js +++ /dev/null @@ -1,282 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultPasteActions from './defaults/pasteActions.js'; -import defaultPasteParsers from './defaults/pasteParsers.js'; - -class Clipboard extends Module{ - - constructor(table){ - super(table); - - this.mode = true; - this.pasteParser = function(){}; - this.pasteAction = function(){}; - this.customSelection = false; - this.rowRange = false; - this.blocked = true; //block copy actions not originating from this command - - this.registerTableOption("clipboard", false); //enable clipboard - this.registerTableOption("clipboardCopyStyled", true); //formatted table data - this.registerTableOption("clipboardCopyConfig", false); //clipboard config - this.registerTableOption("clipboardCopyFormatter", false); //DEPRECATED - REMOVE in 5.0 - this.registerTableOption("clipboardCopyRowRange", "active"); //restrict clipboard to visible rows only - this.registerTableOption("clipboardPasteParser", "table"); //convert pasted clipboard data to rows - this.registerTableOption("clipboardPasteAction", "insert"); //how to insert pasted data into the table - - this.registerColumnOption("clipboard"); - this.registerColumnOption("titleClipboard"); - } - - initialize(){ - this.mode = this.table.options.clipboard; - - this.rowRange = this.table.options.clipboardCopyRowRange; - - if(this.mode === true || this.mode === "copy"){ - this.table.element.addEventListener("copy", (e) => { - var plain, html, list; - - if(!this.blocked){ - e.preventDefault(); - - if(this.customSelection){ - plain = this.customSelection; - - if(this.table.options.clipboardCopyFormatter){ - plain = this.table.options.clipboardCopyFormatter("plain", plain); - } - }else{ - - list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, "clipboard"); - - html = this.table.modules.export.generateHTMLTable(list); - plain = html ? this.generatePlainContent(list) : ""; - - if(this.table.options.clipboardCopyFormatter){ - plain = this.table.options.clipboardCopyFormatter("plain", plain); - html = this.table.options.clipboardCopyFormatter("html", html); - } - } - - if (window.clipboardData && window.clipboardData.setData) { - window.clipboardData.setData('Text', plain); - } else if (e.clipboardData && e.clipboardData.setData) { - e.clipboardData.setData('text/plain', plain); - if(html){ - e.clipboardData.setData('text/html', html); - } - } else if (e.originalEvent && e.originalEvent.clipboardData.setData) { - e.originalEvent.clipboardData.setData('text/plain', plain); - if(html){ - e.originalEvent.clipboardData.setData('text/html', html); - } - } - - this.dispatchExternal("clipboardCopied", plain, html); - - this.reset(); - } - }); - } - - if(this.mode === true || this.mode === "paste"){ - this.table.element.addEventListener("paste", (e) => { - this.paste(e); - }); - } - - this.setPasteParser(this.table.options.clipboardPasteParser); - this.setPasteAction(this.table.options.clipboardPasteAction); - - this.registerTableFunction("copyToClipboard", this.copy.bind(this)); - } - - reset(){ - this.blocked = true; - this.customSelection = false; - } - - generatePlainContent (list) { - var output = []; - - list.forEach((row) => { - var rowData = []; - - row.columns.forEach((col) => { - var value = ""; - - if(col){ - - if(row.type === "group"){ - col.value = col.component.getKey(); - } - - if(col.value === null){ - value = ""; - }else{ - switch(typeof col.value){ - case "object": - value = JSON.stringify(col.value); - break; - - case "undefined": - value = ""; - break; - - default: - value = col.value; - } - } - } - - rowData.push(value); - }); - - output.push(rowData.join("\t")); - }); - - return output.join("\n"); - } - - copy (range, internal) { - var sel, textRange; - this.blocked = false; - this.customSelection = false; - - - if (this.mode === true || this.mode === "copy") { - - this.rowRange = range || this.table.options.clipboardCopyRowRange; - - if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") { - range = document.createRange(); - range.selectNodeContents(this.table.element); - sel = window.getSelection(); - - if (sel.toString() && internal) { - this.customSelection = sel.toString(); - } - - sel.removeAllRanges(); - sel.addRange(range); - } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") { - textRange = document.body.createTextRange(); - textRange.moveToElementText(this.table.element); - textRange.select(); - } - - document.execCommand('copy'); - - if (sel) { - sel.removeAllRanges(); - } - } - } - - //PASTE EVENT HANDLING - setPasteAction(action){ - - switch(typeof action){ - case "string": - this.pasteAction = Clipboard.pasteActions[action]; - - if(!this.pasteAction){ - console.warn("Clipboard Error - No such paste action found:", action); - } - break; - - case "function": - this.pasteAction = action; - break; - } - } - - setPasteParser(parser){ - switch(typeof parser){ - case "string": - this.pasteParser = Clipboard.pasteParsers[parser]; - - if(!this.pasteParser){ - console.warn("Clipboard Error - No such paste parser found:", parser); - } - break; - - case "function": - this.pasteParser = parser; - break; - } - } - - paste(e){ - var data, rowData, rows; - - if(this.checkPasteOrigin(e)){ - - data = this.getPasteData(e); - - rowData = this.pasteParser.call(this, data); - - if(rowData){ - e.preventDefault(); - - if(this.table.modExists("mutator")){ - rowData = this.mutateData(rowData); - } - - rows = this.pasteAction.call(this, rowData); - - this.dispatchExternal("clipboardPasted", data, rowData, rows); - }else{ - this.dispatchExternal("clipboardPasteError", data); - } - } - } - - mutateData(data){ - var output = []; - - if(Array.isArray(data)){ - data.forEach((row) => { - output.push(this.table.modules.mutator.transformRow(row, "clipboard")); - }); - }else{ - output = data; - } - - return output; - } - - - checkPasteOrigin(e){ - var valid = true; - var blocked = this.confirm("clipboard-paste", [e]); - - if(blocked || !["DIV", "SPAN"].includes(e.target.tagName)){ - valid = false; - } - - return valid; - } - - getPasteData(e){ - var data; - - if (window.clipboardData && window.clipboardData.getData) { - data = window.clipboardData.getData('Text'); - } else if (e.clipboardData && e.clipboardData.getData) { - data = e.clipboardData.getData('text/plain'); - } else if (e.originalEvent && e.originalEvent.clipboardData.getData) { - data = e.originalEvent.clipboardData.getData('text/plain'); - } - - return data; - } -} - -Clipboard.moduleName = "clipboard"; - -//load defaults -Clipboard.pasteActions = defaultPasteActions; -Clipboard.pasteParsers = defaultPasteParsers; - -export default Clipboard; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Clipboard/defaults/pasteActions.js b/tmp/tabulator-5.6.1/src/js/modules/Clipboard/defaults/pasteActions.js deleted file mode 100644 index 48a3b4c..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Clipboard/defaults/pasteActions.js +++ /dev/null @@ -1,54 +0,0 @@ -export default { - replace:function(data){ - return this.table.setData(data); - }, - update:function(data){ - return this.table.updateOrAddData(data); - }, - insert:function(data){ - return this.table.addData(data); - }, - range:function(data){ - var rows = [], - range = this.table.modules.selectRange.activeRange, - singleCell = false, - bounds, startCell, startRow, rowWidth, dataLength; - - dataLength = data.length; - - if(range){ - bounds = range.getBounds(); - startCell = bounds.start; - - if(bounds.start === bounds.end){ - singleCell = true; - } - - if(startCell){ - rows = this.table.rowManager.activeRows.slice(); - startRow = rows.indexOf(startCell.row); - - if(singleCell){ - rowWidth = data.length; - }else{ - rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1; - } - - - if(startRow >-1){ - this.table.blockRedraw(); - - rows = rows.slice(startRow, startRow + rowWidth); - - rows.forEach((row, i) => { - row.updateData(data[i % dataLength]); - }); - - this.table.restoreRedraw(); - } - } - } - - return rows; - } -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Clipboard/defaults/pasteParsers.js b/tmp/tabulator-5.6.1/src/js/modules/Clipboard/defaults/pasteParsers.js deleted file mode 100644 index 5587d2b..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Clipboard/defaults/pasteParsers.js +++ /dev/null @@ -1,130 +0,0 @@ -export default { - table:function(clipboard){ - var data = [], - headerFindSuccess = true, - columns = this.table.columnManager.columns, - columnMap = [], - rows = []; - - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function(row){ - data.push(row.split("\t")); - }); - - if(data.length && !(data.length === 1 && data[0].length < 2)){ - - //check if headers are present by title - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else{ - headerFindSuccess = false; - } - }); - - //check if column headers are present by field - if(!headerFindSuccess){ - headerFindSuccess = true; - columnMap = []; - - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.field && value.trim() && column.field.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else{ - headerFindSuccess = false; - } - }); - - if(!headerFindSuccess){ - columnMap = this.table.columnManager.columnsByIndex; - } - } - - //remove header row if found - if(headerFindSuccess){ - data.shift(); - } - - data.forEach(function(item){ - var row = {}; - - item.forEach(function(value, i){ - if(columnMap[i]){ - row[columnMap[i].field] = value; - } - }); - - rows.push(row); - }); - - return rows; - }else{ - return false; - } - }, - range:function(clipboard){ - var data = [], - rows = [], - range = this.table.modules.selectRange.activeRange, - singleCell = false, - bounds, startCell, colWidth, columnMap, startCol; - - if(range){ - bounds = range.getBounds(); - startCell = bounds.start; - - if(bounds.start === bounds.end){ - singleCell = true; - } - - if(startCell){ - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function(row){ - data.push(row.split("\t")); - }); - - if(data.length){ - columnMap = this.table.columnManager.getVisibleColumnsByIndex(); - startCol = columnMap.indexOf(startCell.column); - - if(startCol > -1){ - if(singleCell){ - colWidth = data[0].length; - }else{ - colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1; - } - - columnMap = columnMap.slice(startCol, startCol + colWidth); - - data.forEach((item) => { - var row = {}; - var itemLength = item.length; - - columnMap.forEach(function(col, i){ - row[col.field] = item[i % itemLength]; - }); - - rows.push(row); - }); - - return rows; - } - } - } - } - - return false; - } -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/CalcComponent.js b/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/CalcComponent.js deleted file mode 100644 index 3b6822d..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/CalcComponent.js +++ /dev/null @@ -1,48 +0,0 @@ -class CalcComponent{ - constructor (row){ - this._row = row; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else{ - return target._row.table.componentFunctionBinder.handle("row", target._row, name); - } - } - }); - } - - getData(transform){ - return this._row.getData(transform); - } - - getElement(){ - return this._row.getElement(); - } - - getTable(){ - return this._row.table; - } - - getCells(){ - var cells = []; - - this._row.getCells().forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; - } - - getCell(column){ - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; - } - - _getSelf(){ - return this._row; - } -} - -export default CalcComponent; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/ColumnCalcs.js b/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/ColumnCalcs.js deleted file mode 100644 index 5ecf772..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/ColumnCalcs.js +++ /dev/null @@ -1,588 +0,0 @@ -import Module from '../../core/Module.js'; - -import CalcComponent from './CalcComponent.js'; - -import Cell from '../../core/cell/Cell.js'; -import Column from '../../core/column/Column.js'; -import Row from '../../core/row/Row.js'; - -import defaultCalculations from './defaults/calculations.js'; - -class ColumnCalcs extends Module{ - - constructor(table){ - super(table); - - this.topCalcs = []; - this.botCalcs = []; - this.genColumn = false; - this.topElement = this.createElement(); - this.botElement = this.createElement(); - this.topRow = false; - this.botRow = false; - this.topInitialized = false; - this.botInitialized = false; - - this.blocked = false; - this.recalcAfterBlock = false; - - this.registerTableOption("columnCalcs", true); - - this.registerColumnOption("topCalc"); - this.registerColumnOption("topCalcParams"); - this.registerColumnOption("topCalcFormatter"); - this.registerColumnOption("topCalcFormatterParams"); - this.registerColumnOption("bottomCalc"); - this.registerColumnOption("bottomCalcParams"); - this.registerColumnOption("bottomCalcFormatter"); - this.registerColumnOption("bottomCalcFormatterParams"); - } - - createElement (){ - var el = document.createElement("div"); - el.classList.add("tabulator-calcs-holder"); - return el; - } - - initialize(){ - this.genColumn = new Column({field:"value"}, this); - - this.subscribe("cell-value-changed", this.cellValueChanged.bind(this)); - this.subscribe("column-init", this.initializeColumnCheck.bind(this)); - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); - this.subscribe("row-added", this.rowsUpdated.bind(this)); - this.subscribe("column-moved", this.recalcActiveRows.bind(this)); - this.subscribe("column-add", this.recalcActiveRows.bind(this)); - this.subscribe("data-refreshed", this.recalcActiveRowsRefresh.bind(this)); - this.subscribe("table-redraw", this.tableRedraw.bind(this)); - this.subscribe("rows-visible", this.visibleRows.bind(this)); - this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this)); - - this.subscribe("redraw-blocked", this.blockRedraw.bind(this)); - this.subscribe("redraw-restored", this.restoreRedraw.bind(this)); - - this.subscribe("table-redrawing", this.resizeHolderWidth.bind(this)); - this.subscribe("column-resized", this.resizeHolderWidth.bind(this)); - this.subscribe("column-show", this.resizeHolderWidth.bind(this)); - this.subscribe("column-hide", this.resizeHolderWidth.bind(this)); - - this.registerTableFunction("getCalcResults", this.getResults.bind(this)); - this.registerTableFunction("recalc", this.userRecalc.bind(this)); - - - this.resizeHolderWidth(); - } - - resizeHolderWidth(){ - this.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + "px"; - } - - - tableRedraw(force){ - this.recalc(this.table.rowManager.activeRows); - - if(force){ - this.redraw(); - } - } - - blockRedraw(){ - this.blocked = true; - this.recalcAfterBlock = false; - } - - - restoreRedraw(){ - this.blocked = false; - - if(this.recalcAfterBlock){ - this.recalcAfterBlock = false; - this.recalcActiveRowsRefresh(); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - userRecalc(){ - this.recalc(this.table.rowManager.activeRows); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - blockCheck(){ - if(this.blocked){ - this.recalcAfterBlock = true; - } - - return this.blocked; - } - - visibleRows(viewable, rows){ - if(this.topRow){ - rows.unshift(this.topRow); - } - - if(this.botRow){ - rows.push(this.botRow); - } - - return rows; - } - - rowsUpdated(row){ - if(this.table.options.groupBy){ - this.recalcRowGroup(row); - }else{ - this.recalcActiveRows(); - } - } - - recalcActiveRowsRefresh(){ - if(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){ - this.recalcAll(); - }else{ - this.recalcActiveRows(); - } - } - - recalcActiveRows(){ - this.recalc(this.table.rowManager.activeRows); - } - - cellValueChanged(cell){ - if(cell.column.definition.topCalc || cell.column.definition.bottomCalc){ - if(this.table.options.groupBy){ - if(this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both"){ - this.recalcActiveRows(); - } - - if(this.table.options.columnCalcs != "table"){ - this.recalcRowGroup(cell.row); - } - }else{ - this.recalcActiveRows(); - } - } - } - - initializeColumnCheck(column){ - if(column.definition.topCalc || column.definition.bottomCalc){ - this.initializeColumn(column); - } - } - - //initialize column calcs - initializeColumn(column){ - var def = column.definition; - - var config = { - topCalcParams:def.topCalcParams || {}, - botCalcParams:def.bottomCalcParams || {}, - }; - - if(def.topCalc){ - - switch(typeof def.topCalc){ - case "string": - if(ColumnCalcs.calculations[def.topCalc]){ - config.topCalc = ColumnCalcs.calculations[def.topCalc]; - }else{ - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc); - } - break; - - case "function": - config.topCalc = def.topCalc; - break; - - } - - if(config.topCalc){ - column.modules.columnCalcs = config; - this.topCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeTopRow(); - } - } - - } - - if(def.bottomCalc){ - switch(typeof def.bottomCalc){ - case "string": - if(ColumnCalcs.calculations[def.bottomCalc]){ - config.botCalc = ColumnCalcs.calculations[def.bottomCalc]; - }else{ - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc); - } - break; - - case "function": - config.botCalc = def.bottomCalc; - break; - - } - - if(config.botCalc){ - column.modules.columnCalcs = config; - this.botCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeBottomRow(); - } - } - } - - } - - //dummy functions to handle being mock column manager - registerColumnField(){} - - removeCalcs(){ - var changed = false; - - if(this.topInitialized){ - this.topInitialized = false; - this.topElement.parentNode.removeChild(this.topElement); - changed = true; - } - - if(this.botInitialized){ - this.botInitialized = false; - this.footerRemove(this.botElement); - changed = true; - } - - if(changed){ - this.table.rowManager.adjustTableSize(); - } - } - - reinitializeCalcs(){ - if(this.topCalcs.length){ - this.initializeTopRow(); - } - - if(this.botCalcs.length){ - this.initializeBottomRow(); - } - } - - initializeTopRow(){ - var fragment = document.createDocumentFragment(); - - if(!this.topInitialized){ - - fragment.appendChild(document.createElement("br")); - fragment.appendChild(this.topElement); - - this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling); - this.topInitialized = true; - } - } - - initializeBottomRow(){ - if(!this.botInitialized){ - this.footerPrepend(this.botElement); - this.botInitialized = true; - } - } - - scrollHorizontal(left){ - if(this.botInitialized && this.botRow){ - this.botElement.scrollLeft = left; - } - } - - recalc(rows){ - var data, row; - - if(!this.blockCheck()){ - if(this.topInitialized || this.botInitialized){ - data = this.rowsToData(rows); - - if(this.topInitialized){ - if(this.topRow){ - this.topRow.deleteCells(); - } - - row = this.generateRow("top", data); - this.topRow = row; - while(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild); - this.topElement.appendChild(row.getElement()); - row.initialize(true); - } - - if(this.botInitialized){ - if(this.botRow){ - this.botRow.deleteCells(); - } - - row = this.generateRow("bottom", data); - this.botRow = row; - while(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild); - this.botElement.appendChild(row.getElement()); - row.initialize(true); - } - - this.table.rowManager.adjustTableSize(); - - //set resizable handles - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layout(); - } - } - } - } - - recalcRowGroup(row){ - this.recalcGroup(this.table.modules.groupRows.getRowGroup(row)); - } - - recalcAll(){ - if(this.topCalcs.length || this.botCalcs.length){ - if(this.table.options.columnCalcs !== "group"){ - this.recalcActiveRows(); - } - - if(this.table.options.groupBy && this.table.options.columnCalcs !== "table"){ - - var groups = this.table.modules.groupRows.getChildGroups(); - - groups.forEach((group) => { - this.recalcGroup(group); - }); - } - } - } - - recalcGroup(group){ - var data, rowData; - - if(!this.blockCheck()){ - if(group){ - if(group.calcs){ - if(group.calcs.bottom){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("bottom", data); - - group.calcs.bottom.updateData(rowData); - group.calcs.bottom.reinitialize(); - } - - if(group.calcs.top){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("top", data); - - group.calcs.top.updateData(rowData); - group.calcs.top.reinitialize(); - } - } - } - } - } - - //generate top stats row - generateTopRow(rows){ - return this.generateRow("top", this.rowsToData(rows)); - } - //generate bottom stats row - generateBottomRow(rows){ - return this.generateRow("bottom", this.rowsToData(rows)); - } - - rowsToData(rows){ - var data = []; - - rows.forEach((row) => { - data.push(row.getData()); - - if(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){ - if(row.modules.dataTree && row.modules.dataTree.open){ - var children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row)); - data = data.concat(children); - } - } - }); - - return data; - } - - //generate stats row - generateRow(pos, data){ - var rowData = this.generateRowData(pos, data), - row; - - if(this.table.modExists("mutator")){ - this.table.modules.mutator.disable(); - } - - row = new Row(rowData, this, "calc"); - - if(this.table.modExists("mutator")){ - this.table.modules.mutator.enable(); - } - - row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos); - - row.component = false; - - row.getComponent = () => { - if(!row.component){ - row.component = new CalcComponent(row); - } - - return row.component; - }; - - row.generateCells = () => { - - var cells = []; - - this.table.columnManager.columnsByIndex.forEach((column) => { - - //set field name of mock column - this.genColumn.setField(column.getField()); - this.genColumn.hozAlign = column.hozAlign; - - if(column.definition[pos + "CalcFormatter"] && this.table.modExists("format")){ - this.genColumn.modules.format = { - formatter: this.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]), - params: column.definition[pos + "CalcFormatterParams"] || {}, - }; - }else{ - this.genColumn.modules.format = { - formatter: this.table.modules.format.getFormatter("plaintext"), - params:{} - }; - } - - //ensure css class definition is replicated to calculation cell - this.genColumn.definition.cssClass = column.definition.cssClass; - - //generate cell and assign to correct column - var cell = new Cell(this.genColumn, row); - cell.getElement(); - cell.column = column; - cell.setWidth(); - - column.cells.push(cell); - cells.push(cell); - - if(!column.visible){ - cell.hide(); - } - }); - - row.cells = cells; - }; - - return row; - } - - //generate stats row - generateRowData(pos, data){ - var rowData = {}, - calcs = pos == "top" ? this.topCalcs : this.botCalcs, - type = pos == "top" ? "topCalc" : "botCalc", - params, paramKey; - - calcs.forEach(function(column){ - var values = []; - - if(column.modules.columnCalcs && column.modules.columnCalcs[type]){ - data.forEach(function(item){ - values.push(column.getFieldValue(item)); - }); - - paramKey = type + "Params"; - params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey]; - - column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params)); - } - }); - - return rowData; - } - - hasTopCalcs(){ - return !!(this.topCalcs.length); - } - - hasBottomCalcs(){ - return !!(this.botCalcs.length); - } - - //handle table redraw - redraw(){ - if(this.topRow){ - this.topRow.normalizeHeight(true); - } - if(this.botRow){ - this.botRow.normalizeHeight(true); - } - } - - //return the calculated - getResults(){ - var results = {}, - groups; - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - groups = this.table.modules.groupRows.getGroups(true); - - groups.forEach((group) => { - results[group.getKey()] = this.getGroupResults(group); - }); - }else{ - results = { - top: this.topRow ? this.topRow.getData() : {}, - bottom: this.botRow ? this.botRow.getData() : {}, - }; - } - - return results; - } - - //get results from a group - getGroupResults(group){ - var groupObj = group._getSelf(), - subGroups = group.getSubGroups(), - subGroupResults = {}, - results = {}; - - subGroups.forEach((subgroup) => { - subGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup); - }); - - results = { - top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {}, - bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {}, - groups: subGroupResults, - }; - - return results; - } - - adjustForScrollbar(width){ - if(this.botRow){ - if(this.table.rtl){ - this.botElement.style.paddingLeft = width + "px"; - }else{ - this.botElement.style.paddingRight = width + "px"; - } - } - } -} - -ColumnCalcs.moduleName = "columnCalcs"; - -//load defaults -ColumnCalcs.calculations = defaultCalculations; - -export default ColumnCalcs; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/defaults/calculations.js b/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/defaults/calculations.js deleted file mode 100644 index c79ab24..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ColumnCalcs/defaults/calculations.js +++ /dev/null @@ -1,93 +0,0 @@ -export default { - "avg":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2; - - if(values.length){ - output = values.reduce(function(sum, value){ - return Number(sum) + Number(value); - }); - - output = output / values.length; - - output = precision !== false ? output.toFixed(precision) : output; - } - - return parseFloat(output).toString(); - }, - "max":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value > output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "min":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value < output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "sum":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if(values.length){ - values.forEach(function(value){ - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - output = values.reduce(function(sum, value){ - return String(sum) + String(value); - }); - } - - return output; - }, - "count":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - values.forEach(function(value){ - if(value){ - output ++; - } - }); - } - - return output; - }, - "unique":function(values, data, calcParams){ - var unique = values.filter((value, index) => { - return (values || value === 0) && values.indexOf(value) === index; - }); - - return unique.length; - }, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Comms/Comms.js b/tmp/tabulator-5.6.1/src/js/modules/Comms/Comms.js deleted file mode 100644 index aaba386..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Comms/Comms.js +++ /dev/null @@ -1,52 +0,0 @@ -import Module from '../../core/Module.js'; -import TableRegistry from '../../core/tools/TableRegistry.js'; - -class Comms extends Module{ - - constructor(table){ - super(table); - } - - initialize(){ - this.registerTableFunction("tableComms", this.receive.bind(this)); - } - - getConnections(selectors){ - var connections = [], - connection; - - connection = TableRegistry.lookupTable(selectors); - - connection.forEach((con) =>{ - if(this.table !== con){ - connections.push(con); - } - }); - - return connections; - } - - send(selectors, module, action, data){ - var connections = this.getConnections(selectors); - - connections.forEach((connection) => { - connection.tableComms(this.table.element, module, action, data); - }); - - if(!connections.length && selectors){ - console.warn("Table Connection Error - No tables matching selector found", selectors); - } - } - - receive(table, module, action, data){ - if(this.table.modExists(module)){ - return this.table.modules[module].commsReceived(table, action, data); - }else{ - console.warn("Inter-table Comms Error - no such module:", module); - } - } -} - -Comms.moduleName = "comms"; - -export default Comms; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/DataTree/DataTree.js b/tmp/tabulator-5.6.1/src/js/modules/DataTree/DataTree.js deleted file mode 100644 index e494363..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/DataTree/DataTree.js +++ /dev/null @@ -1,607 +0,0 @@ -import Module from '../../core/Module.js'; - -import Row from '../../core/row/Row.js'; - -import RowComponent from '../../core/row/RowComponent.js'; - -class DataTree extends Module{ - - constructor(table){ - super(table); - - this.indent = 10; - this.field = ""; - this.collapseEl = null; - this.expandEl = null; - this.branchEl = null; - this.elementField = false; - - this.startOpen = function(){}; - - this.registerTableOption("dataTree", false); //enable data tree - this.registerTableOption("dataTreeFilter", true); //filter child rows - this.registerTableOption("dataTreeSort", true); //sort child rows - this.registerTableOption("dataTreeElementColumn", false); - this.registerTableOption("dataTreeBranchElement", true);//show data tree branch element - this.registerTableOption("dataTreeChildIndent", 9); //data tree child indent in px - this.registerTableOption("dataTreeChildField", "_children");//data tre column field to look for child rows - this.registerTableOption("dataTreeCollapseElement", false);//data tree row collapse element - this.registerTableOption("dataTreeExpandElement", false);//data tree row expand element - this.registerTableOption("dataTreeStartExpanded", false); - this.registerTableOption("dataTreeChildColumnCalcs", false);//include visible data tree rows in column calculations - this.registerTableOption("dataTreeSelectPropagate", false);//selecting a parent row selects its children - - //register component functions - this.registerComponentFunction("row", "treeCollapse", this.collapseRow.bind(this)); - this.registerComponentFunction("row", "treeExpand", this.expandRow.bind(this)); - this.registerComponentFunction("row", "treeToggle", this.toggleRow.bind(this)); - this.registerComponentFunction("row", "getTreeParent", this.getTreeParent.bind(this)); - this.registerComponentFunction("row", "getTreeChildren", this.getRowChildren.bind(this)); - this.registerComponentFunction("row", "addTreeChild", this.addTreeChildRow.bind(this)); - this.registerComponentFunction("row", "isTreeExpanded", this.isRowExpanded.bind(this)); - } - - initialize(){ - if(this.table.options.dataTree){ - var dummyEl = null, - options = this.table.options; - - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - - if(this.options("movableRows")){ - console.warn("The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior"); - } - - if(options.dataTreeBranchElement){ - - if(options.dataTreeBranchElement === true){ - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - }else{ - if(typeof options.dataTreeBranchElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; - }else{ - this.branchEl = options.dataTreeBranchElement; - } - } - }else{ - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch-empty"); - } - - if(options.dataTreeCollapseElement){ - if(typeof options.dataTreeCollapseElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; - }else{ - this.collapseEl = options.dataTreeCollapseElement; - } - }else{ - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.tabIndex = 0; - this.collapseEl.innerHTML = "
    "; - } - - if(options.dataTreeExpandElement){ - if(typeof options.dataTreeExpandElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; - }else{ - this.expandEl = options.dataTreeExpandElement; - } - }else{ - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.tabIndex = 0; - this.expandEl.innerHTML = "
    "; - } - - - switch(typeof options.dataTreeStartExpanded){ - case "boolean": - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded; - }; - break; - - case "function": - this.startOpen = options.dataTreeStartExpanded; - break; - - default: - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded[index]; - }; - break; - } - - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-layout-after", this.layoutRow.bind(this)); - this.subscribe("row-deleted", this.rowDelete.bind(this),0); - this.subscribe("row-data-changed", this.rowDataChanged.bind(this), 10); - this.subscribe("cell-value-updated", this.cellValueChanged.bind(this)); - this.subscribe("edit-cancelled", this.cellValueChanged.bind(this)); - this.subscribe("column-moving-rows", this.columnMoving.bind(this)); - this.subscribe("table-built", this.initializeElementField.bind(this)); - this.subscribe("table-redrawing", this.tableRedrawing.bind(this)); - - this.registerDisplayHandler(this.getRows.bind(this), 30); - } - } - - tableRedrawing(force){ - var rows; - - if(force){ - rows = this.table.rowManager.getRows(); - - rows.forEach((row) => { - this.reinitializeRowChildren(row); - }); - } - } - - initializeElementField(){ - var firstCol = this.table.columnManager.getFirstVisibleColumn(); - - this.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false); - } - - getRowChildren(row){ - return this.getTreeChildren(row, true); - } - - columnMoving(){ - var rows = []; - - this.table.rowManager.rows.forEach((row) => { - rows = rows.concat(this.getTreeChildren(row, false, true)); - }); - - return rows; - } - - rowDataChanged(row, visible, updatedData){ - if(this.redrawNeeded(updatedData)){ - this.initializeRow(row); - - if(visible){ - this.layoutRow(row); - this.refreshData(true); - } - } - } - - cellValueChanged(cell){ - var field = cell.column.getField(); - - if(field === this.elementField){ - this.layoutRow(cell.row); - } - } - - initializeRow(row){ - var childArray = row.getData()[this.field]; - var isArray = Array.isArray(childArray); - - var children = isArray || (!isArray && typeof childArray === "object" && childArray !== null); - - if(!children && row.modules.dataTree && row.modules.dataTree.branchEl){ - row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl); - } - - if(!children && row.modules.dataTree && row.modules.dataTree.controlEl){ - row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl); - } - - row.modules.dataTree = { - index: row.modules.dataTree ? row.modules.dataTree.index : 0, - open: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false, - controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false, - branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false, - parent: row.modules.dataTree ? row.modules.dataTree.parent : false, - children:children, - }; - } - - reinitializeRowChildren(row){ - var children = this.getTreeChildren(row, false, true); - - children.forEach(function(child){ - child.reinitialize(true); - }); - } - - layoutRow(row){ - var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0], - el = cell.getElement(), - config = row.modules.dataTree; - - if(config.branchEl){ - if(config.branchEl.parentNode){ - config.branchEl.parentNode.removeChild(config.branchEl); - } - config.branchEl = false; - } - - if(config.controlEl){ - if(config.controlEl.parentNode){ - config.controlEl.parentNode.removeChild(config.controlEl); - } - config.controlEl = false; - } - - this.generateControlElement(row, el); - - row.getElement().classList.add("tabulator-tree-level-" + config.index); - - if(config.index){ - if(this.branchEl){ - config.branchEl = this.branchEl.cloneNode(true); - el.insertBefore(config.branchEl, el.firstChild); - - if(this.table.rtl){ - config.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + "px"; - }else{ - config.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + "px"; - } - }else{ - - if(this.table.rtl){ - el.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + "px"; - }else{ - el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + "px"; - } - } - } - } - - generateControlElement(row, el){ - var config = row.modules.dataTree, - oldControl = config.controlEl; - - el = el || row.getCells()[0].getElement(); - - if(config.children !== false){ - - if(config.open){ - config.controlEl = this.collapseEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.collapseRow(row); - }); - }else{ - config.controlEl = this.expandEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.expandRow(row); - }); - } - - config.controlEl.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - if(oldControl && oldControl.parentNode === el){ - oldControl.parentNode.replaceChild(config.controlEl,oldControl); - }else{ - el.insertBefore(config.controlEl, el.firstChild); - } - } - } - - getRows(rows){ - var output = []; - - rows.forEach((row, i) => { - var config, children; - - output.push(row); - - if(row instanceof Row){ - - row.create(); - - config = row.modules.dataTree; - - if(!config.index && config.children !== false){ - children = this.getChildren(row); - - children.forEach((child) => { - child.create(); - output.push(child); - }); - } - } - }); - - return output; - } - - getChildren(row, allChildren){ - var config = row.modules.dataTree, - children = [], - output = []; - - if(config.children !== false && (config.open || allChildren)){ - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - if(this.table.modExists("filter") && this.table.options.dataTreeFilter){ - children = this.table.modules.filter.filter(config.children); - }else{ - children = config.children; - } - - if(this.table.modExists("sort") && this.table.options.dataTreeSort){ - this.table.modules.sort.sort(children); - } - - children.forEach((child) => { - output.push(child); - - var subChildren = this.getChildren(child); - - subChildren.forEach((sub) => { - output.push(sub); - }); - }); - } - - return output; - } - - generateChildren(row){ - var children = []; - - var childArray = row.getData()[this.field]; - - if(!Array.isArray(childArray)){ - childArray = [childArray]; - } - - childArray.forEach((childData) => { - var childRow = new Row(childData || {}, this.table.rowManager); - - childRow.create(); - - childRow.modules.dataTree.index = row.modules.dataTree.index + 1; - childRow.modules.dataTree.parent = row; - - if(childRow.modules.dataTree.children){ - childRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); - } - children.push(childRow); - }); - - return children; - } - - expandRow(row, silent){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = true; - - row.reinitialize(); - - this.refreshData(true); - - this.dispatchExternal("dataTreeRowExpanded", row.getComponent(), row.modules.dataTree.index); - } - } - - collapseRow(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = false; - - row.reinitialize(); - - this.refreshData(true); - - this.dispatchExternal("dataTreeRowCollapsed", row.getComponent(), row.modules.dataTree.index); - } - } - - toggleRow(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - if(config.open){ - this.collapseRow(row); - }else{ - this.expandRow(row); - } - } - } - - isRowExpanded(row){ - return row.modules.dataTree.open; - } - - getTreeParent(row){ - return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false; - } - - getTreeParentRoot(row){ - return row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row; - } - - getFilteredTreeChildren(row){ - var config = row.modules.dataTree, - output = [], children; - - if(config.children){ - - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - if(this.table.modExists("filter") && this.table.options.dataTreeFilter){ - children = this.table.modules.filter.filter(config.children); - }else{ - children = config.children; - } - - children.forEach((childRow) => { - if(childRow instanceof Row){ - output.push(childRow); - } - }); - } - - return output; - } - - rowDelete(row){ - var parent = row.modules.dataTree.parent, - childIndex; - - if(parent){ - childIndex = this.findChildIndex(row, parent); - - if(childIndex !== false){ - parent.data[this.field].splice(childIndex, 1); - } - - if(!parent.data[this.field].length){ - delete parent.data[this.field]; - } - - this.initializeRow(parent); - this.layoutRow(parent); - } - - this.refreshData(true); - } - - addTreeChildRow(row, data, top, index){ - var childIndex = false; - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(!Array.isArray(row.data[this.field])){ - row.data[this.field] = []; - - row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index); - } - - if(typeof index !== "undefined"){ - childIndex = this.findChildIndex(index, row); - - if(childIndex !== false){ - row.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data); - } - } - - if(childIndex === false){ - if(top){ - row.data[this.field].unshift(data); - }else{ - row.data[this.field].push(data); - } - } - - this.initializeRow(row); - this.layoutRow(row); - - this.refreshData(true); - } - - findChildIndex(subject, parent){ - var match = false; - - if(typeof subject == "object"){ - - if(subject instanceof Row){ - //subject is row element - match = subject.data; - }else if(subject instanceof RowComponent){ - //subject is public row component - match = subject._getSelf().data; - }else if(typeof HTMLElement !== "undefined" && subject instanceof HTMLElement){ - if(parent.modules.dataTree){ - match = parent.modules.dataTree.children.find((childRow) => { - return childRow instanceof Row ? childRow.element === subject : false; - }); - - if(match){ - match = match.data; - } - } - }else if(subject === null){ - match = false; - } - - }else if(typeof subject == "undefined"){ - match = false; - }else{ - //subject should be treated as the index of the row - match = parent.data[this.field].find((row) => { - return row.data[this.table.options.index] == subject; - }); - } - - if(match){ - - if(Array.isArray(parent.data[this.field])){ - match = parent.data[this.field].indexOf(match); - } - - if(match == -1){ - match = false; - } - } - - //catch all for any other type of input - - return match; - } - - getTreeChildren(row, component, recurse){ - var config = row.modules.dataTree, - output = []; - - if(config && config.children){ - - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - config.children.forEach((childRow) => { - if(childRow instanceof Row){ - output.push(component ? childRow.getComponent() : childRow); - - if(recurse){ - output = output.concat(this.getTreeChildren(childRow, component, recurse)); - } - } - }); - } - - return output; - } - - getChildField(){ - return this.field; - } - - redrawNeeded(data){ - return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false); - } -} - -DataTree.moduleName = "dataTree"; - -export default DataTree; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/Download.js b/tmp/tabulator-5.6.1/src/js/modules/Download/Download.js deleted file mode 100644 index 0dcf1b2..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/Download.js +++ /dev/null @@ -1,149 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultDownloaders from './defaults/downloaders.js'; - -class Download extends Module{ - - constructor(table){ - super(table); - - this.registerTableOption("downloadEncoder", function(data, mimeType){ - return new Blob([data],{type:mimeType}); - }); //function to manipulate download data - this.registerTableOption("downloadReady", undefined); //warn of function deprecation - this.registerTableOption("downloadConfig", {}); //download config - this.registerTableOption("downloadRowRange", "active"); //restrict download to active rows only - - this.registerColumnOption("download"); - this.registerColumnOption("titleDownload"); - } - - initialize(){ - this.deprecatedOptionsCheck(); - - this.registerTableFunction("download", this.download.bind(this)); - this.registerTableFunction("downloadToTab", this.downloadToTab.bind(this)); - } - - deprecatedOptionsCheck(){ - this.deprecationCheck("downloadReady", "downloadEncoder"); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - downloadToTab(type, filename, options, active){ - this.download(type, filename, options, active, true); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - //trigger file download - download(type, filename, options, range, interceptCallback){ - var downloadFunc = false; - - function buildLink(data, mime){ - if(interceptCallback){ - if(interceptCallback === true){ - this.triggerDownload(data, mime, type, filename, true); - }else{ - interceptCallback(data); - } - - }else{ - this.triggerDownload(data, mime, type, filename); - } - } - - if(typeof type == "function"){ - downloadFunc = type; - }else{ - if(Download.downloaders[type]){ - downloadFunc = Download.downloaders[type]; - }else{ - console.warn("Download Error - No such download type found: ", type); - } - } - - if(downloadFunc){ - var list = this.generateExportList(range); - - downloadFunc.call(this.table, list , options || {}, buildLink.bind(this)); - } - } - - generateExportList(range){ - var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download"); - - //assign group header formatter - var groupHeader = this.table.options.groupHeaderDownload; - - if(groupHeader && !Array.isArray(groupHeader)){ - groupHeader = [groupHeader]; - } - - list.forEach((row) => { - var group; - - if(row.type === "group"){ - group = row.columns[0]; - - if(groupHeader && groupHeader[row.indent]){ - group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - }); - - return list; - } - - triggerDownload(data, mime, type, filename, newTab){ - var element = document.createElement('a'), - blob = this.table.options.downloadEncoder(data, mime); - - if(blob){ - if(newTab){ - window.open(window.URL.createObjectURL(blob)); - }else{ - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - if(navigator.msSaveOrOpenBlob){ - navigator.msSaveOrOpenBlob(blob, filename); - }else{ - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - } - - this.dispatchExternal("downloadComplete"); - } - } - - commsReceived(table, action, data){ - switch(action){ - case "intercept": - this.download(data.type, "", data.options, data.active, data.intercept); - break; - } - } -} - -Download.moduleName = "download"; - -//load defaults -Download.downloaders = defaultDownloaders; - -export default Download; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders.js b/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders.js deleted file mode 100644 index b1136f3..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders.js +++ /dev/null @@ -1,15 +0,0 @@ -import csv from './downloaders/csv.js'; -import json from './downloaders/json.js'; -import pdf from './downloaders/pdf.js'; -import xlsx from './downloaders/xlsx.js'; -import html from './downloaders/html.js'; -import jsonLines from './downloaders/jsonLines.js'; - -export default { - csv:csv, - json:json, - jsonLines:jsonLines, - pdf:pdf, - xlsx:xlsx, - html:html, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/csv.js b/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/csv.js deleted file mode 100644 index 3745d0e..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/csv.js +++ /dev/null @@ -1,61 +0,0 @@ -export default function(list, options = {}, setFileContents){ - var delimiter = options.delimiter ? options.delimiter : ",", - fileContents = [], - headers = []; - - list.forEach((row) => { - var item = []; - - switch(row.type){ - case "group": - console.warn("Download Warning - CSV downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - CSV downloader cannot process column calculations"); - break; - - case "header": - row.columns.forEach((col, i) => { - if(col && col.depth === 1){ - headers[i] = typeof col.value == "undefined" || col.value === null ? "" : ('"' + String(col.value).split('"').join('""') + '"'); - } - }); - break; - - case "row": - row.columns.forEach((col) => { - - if(col){ - - switch(typeof col.value){ - case "object": - col.value = col.value !== null ? JSON.stringify(col.value) : ""; - break; - - case "undefined": - col.value = ""; - break; - } - - item.push('"' + String(col.value).split('"').join('""') + '"'); - } - }); - - fileContents.push(item.join(delimiter)); - break; - } - }); - - if(headers.length){ - fileContents.unshift(headers.join(delimiter)); - } - - fileContents = fileContents.join("\n"); - - if(options.bom){ - fileContents = "\ufeff" + fileContents; - } - - setFileContents(fileContents, "text/csv"); -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/html.js b/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/html.js deleted file mode 100644 index bfb0801..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/html.js +++ /dev/null @@ -1,5 +0,0 @@ -export default function(list, options, setFileContents){ - if(this.modExists("export", true)){ - setFileContents(this.modules.export.generateHTMLTable(list), "text/html"); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/json.js b/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/json.js deleted file mode 100644 index de1e54d..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/json.js +++ /dev/null @@ -1,34 +0,0 @@ -export default function(list, options, setFileContents){ - var fileContents = []; - - list.forEach((row) => { - var item = {}; - - switch(row.type){ - case "header": - break; - - case "group": - console.warn("Download Warning - JSON downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - JSON downloader cannot process column calculations"); - break; - - case "row": - row.columns.forEach((col) => { - if(col){ - item[col.component.getTitleDownload() || col.component.getField()] = col.value; - } - }); - - fileContents.push(item); - break; - } - }); - - fileContents = JSON.stringify(fileContents, null, '\t'); - - setFileContents(fileContents, "application/json"); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/jsonLines.js b/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/jsonLines.js deleted file mode 100644 index 18fc791..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/jsonLines.js +++ /dev/null @@ -1,32 +0,0 @@ -export default function (list, options, setFileContents) { - const fileContents = []; - - list.forEach((row) => { - const item = {}; - - switch (row.type) { - case "header": - break; - - case "group": - console.warn("Download Warning - JSON downloader cannot process row groups"); - break; - - case "calc": - console.warn("Download Warning - JSON downloader cannot process column calculations"); - break; - - case "row": - row.columns.forEach((col) => { - if (col) { - item[col.component.getTitleDownload() || col.component.getField()] = col.value; - } - }); - - fileContents.push(JSON.stringify(item)); - break; - } - }); - - setFileContents(fileContents.join("\n"), "application/x-ndjson"); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/pdf.js b/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/pdf.js deleted file mode 100644 index 03b74c1..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/pdf.js +++ /dev/null @@ -1,111 +0,0 @@ -export default function(list, options = {}, setFileContents){ - var header = [], - body = [], - autoTableParams = {}, - rowGroupStyles = options.rowGroupStyles || { - fontStyle: "bold", - fontSize: 12, - cellPadding: 6, - fillColor: 220, - }, - rowCalcStyles = options.rowCalcStyles || { - fontStyle: "bold", - fontSize: 10, - cellPadding: 4, - fillColor: 232, - }, - jsPDFParams = options.jsPDF || {}, - title = options.title ? options.title : ""; - - if(!jsPDFParams.orientation){ - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if(!jsPDFParams.unit){ - jsPDFParams.unit = "pt"; - } - - //parse row list - list.forEach((row) => { - switch(row.type){ - case "header": - header.push(parseRow(row)); - break; - - case "group": - body.push(parseRow(row, rowGroupStyles)); - break; - - case "calc": - body.push(parseRow(row, rowCalcStyles)); - break; - - case "row": - body.push(parseRow(row)); - break; - } - }); - - function parseRow(row, styles){ - var rowData = []; - - row.columns.forEach((col) =>{ - var cell; - - if(col){ - switch(typeof col.value){ - case "object": - col.value = col.value !== null ? JSON.stringify(col.value) : ""; - break; - - case "undefined": - col.value = ""; - break; - } - - cell = { - content:col.value, - colSpan:col.width, - rowSpan:col.height, - }; - - if(styles){ - cell.styles = styles; - } - - rowData.push(cell); - } - }); - - return rowData; - } - - - //configure PDF - var doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if(options.autoTable){ - if(typeof options.autoTable === "function"){ - autoTableParams = options.autoTable(doc) || {}; - }else{ - autoTableParams = options.autoTable; - } - } - - if(title){ - autoTableParams.didDrawPage = function(data) { - doc.text(title, 40, 30); - }; - } - - autoTableParams.head = header; - autoTableParams.body = body; - - doc.autoTable(autoTableParams); - - if(options.documentProcessing){ - options.documentProcessing(doc); - } - - setFileContents(doc.output("arraybuffer"), "application/pdf"); -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/xlsx.js b/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/xlsx.js deleted file mode 100644 index b9c933e..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Download/defaults/downloaders/xlsx.js +++ /dev/null @@ -1,102 +0,0 @@ -import CoreFeature from '../../../../core/CoreFeature.js'; - -export default function(list, options, setFileContents){ - var self = this, - sheetName = options.sheetName || "Sheet1", - workbook = XLSX.utils.book_new(), - tableFeatures = new CoreFeature(this), - compression = 'compress' in options ? options.compress : true, - writeOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression}, - output; - - writeOptions.type = 'binary'; - - workbook.SheetNames = []; - workbook.Sheets = {}; - - function generateSheet(){ - var rows = [], - merges = [], - worksheet = {}, - range = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }}; - - //parse row list - list.forEach((row, i) => { - var rowData = []; - - row.columns.forEach(function(col, j){ - - if(col){ - rowData.push(!(col.value instanceof Date) && typeof col.value === "object" ? JSON.stringify(col.value) : col.value); - - if(col.width > 1 || col.height > -1){ - if(col.height > 1 || col.width > 1){ - merges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}}); - } - } - }else{ - rowData.push(""); - } - }); - - rows.push(rowData); - }); - - //convert rows to worksheet - XLSX.utils.sheet_add_aoa(worksheet, rows); - - worksheet['!ref'] = XLSX.utils.encode_range(range); - - if(merges.length){ - worksheet["!merges"] = merges; - } - - return worksheet; - } - - if(options.sheetOnly){ - setFileContents(generateSheet()); - return; - } - - if(options.sheets){ - for(var sheet in options.sheets){ - - if(options.sheets[sheet] === true){ - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - }else{ - - workbook.SheetNames.push(sheet); - - tableFeatures.commsSend(options.sheets[sheet], "download", "intercept",{ - type:"xlsx", - options:{sheetOnly:true}, - active:self.active, - intercept:function(data){ - workbook.Sheets[sheet] = data; - } - }); - } - } - }else{ - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - if(options.documentProcessing){ - workbook = options.documentProcessing(workbook); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; - return buf; - } - - output = XLSX.write(workbook, writeOptions); - - setFileContents(s2ab(output), "application/octet-stream"); -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/Edit.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/Edit.js deleted file mode 100644 index 53938d7..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/Edit.js +++ /dev/null @@ -1,783 +0,0 @@ -import Module from '../../core/Module.js'; -import Helpers from '../../core/tools/Helpers.js'; - -import defaultEditors from './defaults/editors.js'; - -class Edit extends Module{ - - constructor(table){ - super(table); - - this.currentCell = false; //hold currently editing cell - this.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening - this.recursionBlock = false; //prevent focus recursion - this.invalidEdit = false; - this.editedCells = []; - - this.editors = Edit.editors; - - this.registerColumnOption("editable"); - this.registerColumnOption("editor"); - this.registerColumnOption("editorParams"); - - this.registerColumnOption("cellEditing"); - this.registerColumnOption("cellEdited"); - this.registerColumnOption("cellEditCancelled"); - - this.registerTableOption("editTriggerEvent", "focus"); - - this.registerTableFunction("getEditedCells", this.getEditedCells.bind(this)); - this.registerTableFunction("clearCellEdited", this.clearCellEdited.bind(this)); - this.registerTableFunction("navigatePrev", this.navigatePrev.bind(this)); - this.registerTableFunction("navigateNext", this.navigateNext.bind(this)); - this.registerTableFunction("navigateLeft", this.navigateLeft.bind(this)); - this.registerTableFunction("navigateRight", this.navigateRight.bind(this)); - this.registerTableFunction("navigateUp", this.navigateUp.bind(this)); - this.registerTableFunction("navigateDown", this.navigateDown.bind(this)); - - this.registerComponentFunction("cell", "isEdited", this.cellIsEdited.bind(this)); - this.registerComponentFunction("cell", "clearEdited", this.clearEdited.bind(this)); - this.registerComponentFunction("cell", "edit", this.editCell.bind(this)); - this.registerComponentFunction("cell", "cancelEdit", this.cellCancelEdit.bind(this)); - - this.registerComponentFunction("cell", "navigatePrev", this.navigatePrev.bind(this)); - this.registerComponentFunction("cell", "navigateNext", this.navigateNext.bind(this)); - this.registerComponentFunction("cell", "navigateLeft", this.navigateLeft.bind(this)); - this.registerComponentFunction("cell", "navigateRight", this.navigateRight.bind(this)); - this.registerComponentFunction("cell", "navigateUp", this.navigateUp.bind(this)); - this.registerComponentFunction("cell", "navigateDown", this.navigateDown.bind(this)); - } - - initialize(){ - this.subscribe("cell-init", this.bindEditor.bind(this)); - this.subscribe("cell-delete", this.clearEdited.bind(this)); - this.subscribe("cell-value-changed", this.updateCellClass.bind(this)); - this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); - this.subscribe("column-delete", this.columnDeleteCheck.bind(this)); - this.subscribe("row-deleting", this.rowDeleteCheck.bind(this)); - this.subscribe("row-layout", this.rowEditableCheck.bind(this)); - this.subscribe("data-refreshing", this.cancelEdit.bind(this)); - this.subscribe("clipboard-paste", this.pasteBlocker.bind(this)); - - this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this, undefined)); - this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this)); - - - // this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this, undefined)); - // this.subscribe("keybinding-nav-right", this.navigateRight.bind(this, undefined)); - this.subscribe("keybinding-nav-up", this.navigateUp.bind(this, undefined)); - this.subscribe("keybinding-nav-down", this.navigateDown.bind(this, undefined)); - } - - - /////////////////////////////////// - ///////// Paste Negation ////////// - /////////////////////////////////// - - pasteBlocker(e){ - if(this.currentCell){ - return true; - } - } - - - /////////////////////////////////// - ////// Keybinding Functions /////// - /////////////////////////////////// - - keybindingNavigateNext(e){ - var cell = this.currentCell, - newRow = this.options("tabEndNewRow"); - - if(cell){ - if(!this.navigateNext(cell, e)){ - if(newRow){ - cell.getElement().firstChild.blur(); - - if(!this.invalidEdit){ - - if(newRow === true){ - newRow = this.table.addRow({}); - }else{ - if(typeof newRow == "function"){ - newRow = this.table.addRow(newRow(cell.row.getComponent())); - }else{ - newRow = this.table.addRow(Object.assign({}, newRow)); - } - } - - newRow.then(() => { - setTimeout(() => { - cell.getComponent().navigateNext(); - }); - }); - } - } - } - } - } - - /////////////////////////////////// - ///////// Cell Functions ////////// - /////////////////////////////////// - - cellIsEdited(cell){ - return !! cell.modules.edit && cell.modules.edit.edited; - } - - cellCancelEdit(cell){ - if(cell === this.currentCell){ - this.table.modules.edit.cancelEdit(); - }else{ - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } - - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - updateCellClass(cell){ - if(this.allowEdit(cell)) { - cell.getElement().classList.add("tabulator-editable"); - } - else { - cell.getElement().classList.remove("tabulator-editable"); - } - } - - clearCellEdited(cells){ - if(!cells){ - cells = this.table.modules.edit.getEditedCells(); - } - - if(!Array.isArray(cells)){ - cells = [cells]; - } - - cells.forEach((cell) => { - this.table.modules.edit.clearEdited(cell._getSelf()); - }); - } - - navigatePrev(cell = this.currentCell, e){ - var nextCell, prevRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - nextCell = this.navigateLeft(); - - if(nextCell){ - return true; - }else{ - prevRow = this.table.rowManager.prevDisplayRow(cell.row, true); - - if(prevRow){ - nextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - } - } - - return false; - } - - navigateNext(cell = this.currentCell, e){ - var nextCell, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - nextCell = this.navigateRight(); - - if(nextCell){ - return true; - }else{ - nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); - - if(nextRow){ - nextCell = this.findNextEditableCell(nextRow, -1); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - } - } - - return false; - } - - navigateLeft(cell = this.currentCell, e){ - var index, nextCell; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextCell = this.findPrevEditableCell(cell.row, index); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - - return false; - } - - navigateRight(cell = this.currentCell, e){ - var index, nextCell; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextCell = this.findNextEditableCell(cell.row, index); - - if(nextCell){ - nextCell.getComponent().edit(); - return true; - } - } - - return false; - } - - navigateUp(cell = this.currentCell, e){ - var index, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextRow = this.table.rowManager.prevDisplayRow(cell.row, true); - - if(nextRow){ - nextRow.cells[index].getComponent().edit(); - return true; - } - } - - return false; - } - - navigateDown(cell = this.currentCell, e){ - var index, nextRow; - - if(cell){ - - if(e){ - e.preventDefault(); - } - - index = cell.getIndex(); - nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); - - if(nextRow){ - nextRow.cells[index].getComponent().edit(); - return true; - } - } - - return false; - } - - findNextEditableCell(row, index){ - var nextCell = false; - - if(index < row.cells.length-1){ - for(var i = index+1; i < row.cells.length; i++){ - let cell = row.cells[i]; - - if(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){ - let allowEdit = this.allowEdit(cell); - - if(allowEdit){ - nextCell = cell; - break; - } - } - } - } - - return nextCell; - } - - findPrevEditableCell(row, index){ - var prevCell = false; - - if(index > 0){ - for(var i = index-1; i >= 0; i--){ - let cell = row.cells[i]; - - if(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){ - let allowEdit = this.allowEdit(cell); - - if(allowEdit){ - prevCell = cell; - break; - } - } - } - } - - return prevCell; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnCheck(column){ - if(typeof column.definition.editor !== "undefined"){ - this.initializeColumn(column); - } - } - - columnDeleteCheck(column){ - if(this.currentCell && this.currentCell.column === column){ - this.cancelEdit(); - } - } - - rowDeleteCheck(row){ - if(this.currentCell && this.currentCell.row === row){ - this.cancelEdit(); - } - } - - rowEditableCheck(row){ - row.getCells().forEach((cell) => { - if(cell.column.modules.edit && typeof cell.column.modules.edit.check === "function"){ - this.updateCellClass(cell); - } - }); - } - - //initialize column editor - initializeColumn(column){ - var config = { - editor:false, - blocked:false, - check:column.definition.editable, - params:column.definition.editorParams || {} - }; - - //set column editor - switch(typeof column.definition.editor){ - case "string": - if(this.editors[column.definition.editor]){ - config.editor = this.editors[column.definition.editor]; - }else{ - console.warn("Editor Error - No such editor found: ", column.definition.editor); - } - break; - - case "function": - config.editor = column.definition.editor; - break; - - case "boolean": - if(column.definition.editor === true){ - if(typeof column.definition.formatter !== "function"){ - if(this.editors[column.definition.formatter]){ - config.editor = this.editors[column.definition.formatter]; - }else{ - config.editor = this.editors["input"]; - } - }else{ - console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); - } - } - break; - } - - if(config.editor){ - column.modules.edit = config; - } - } - - getCurrentCell(){ - return this.currentCell ? this.currentCell.getComponent() : false; - } - - clearEditor(cancel){ - var cell = this.currentCell, - cellEl; - - this.invalidEdit = false; - - if(cell){ - this.currentCell = false; - - cellEl = cell.getElement(); - - this.dispatch("edit-editor-clear", cell, cancel); - - cellEl.classList.remove("tabulator-editing"); - - while(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild); - - cell.row.getElement().classList.remove("tabulator-editing"); - - cell.table.element.classList.remove("tabulator-editing"); - } - } - - cancelEdit(){ - if(this.currentCell){ - var cell = this.currentCell; - var component = this.currentCell.getComponent(); - - this.clearEditor(true); - cell.setValueActual(cell.getValue()); - cell.cellRendered(); - - if(cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight){ - cell.row.normalizeHeight(true); - } - - if(cell.column.definition.cellEditCancelled){ - cell.column.definition.cellEditCancelled.call(this.table, component); - } - - this.dispatch("edit-cancelled", cell); - this.dispatchExternal("cellEditCancelled", component); - } - } - - //return a formatted value for a cell - bindEditor(cell){ - if(cell.column.modules.edit){ - var self = this, - element = cell.getElement(true); - - this.updateCellClass(cell); - element.setAttribute("tabindex", 0); - - element.addEventListener("mousedown", function(e){ - if (e.button === 2) { - e.preventDefault(); - }else{ - self.mouseClick = true; - } - }); - - if(this.options("editTriggerEvent") === "dblclick"){ - element.addEventListener("dblclick", function(e){ - if(!element.classList.contains("tabulator-editing")){ - element.focus({preventScroll: true}); - self.edit(cell, e, false); - } - }); - } - - - if(this.options("editTriggerEvent") === "focus" || this.options("editTriggerEvent") === "click"){ - element.addEventListener("click", function(e){ - if(!element.classList.contains("tabulator-editing")){ - element.focus({preventScroll: true}); - self.edit(cell, e, false); - } - }); - } - - if(this.options("editTriggerEvent") === "focus"){ - element.addEventListener("focus", function(e){ - if(!self.recursionBlock){ - self.edit(cell, e, false); - } - }); - } - } - } - - focusCellNoEvent(cell, block){ - this.recursionBlock = true; - - if(!(block && this.table.browser === "ie")){ - cell.getElement().focus({preventScroll: true}); - } - - this.recursionBlock = false; - } - - editCell(cell, forceEdit){ - this.focusCellNoEvent(cell); - this.edit(cell, false, forceEdit); - } - - focusScrollAdjust(cell){ - if(this.table.rowManager.getRenderMode() == "virtual"){ - var topEdge = this.table.rowManager.element.scrollTop, - bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop, - rowEl = cell.row.getElement(); - - if(rowEl.offsetTop < topEdge){ - this.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop); - }else{ - if(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){ - this.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge); - } - } - - var leftEdge = this.table.rowManager.element.scrollLeft, - rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft, - cellEl = cell.getElement(); - - if(this.table.modExists("frozenColumns")){ - leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0); - rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0); - } - - if(this.table.options.renderHorizontal === "virtual"){ - leftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); - rightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); - } - - if(cellEl.offsetLeft < leftEdge){ - this.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft); - }else{ - if(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){ - this.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge); - } - } - } - } - - allowEdit(cell) { - var check = cell.column.modules.edit ? true : false; - - if(cell.column.modules.edit){ - switch(typeof cell.column.modules.edit.check){ - case "function": - if(cell.row.initialized){ - check = cell.column.modules.edit.check(cell.getComponent()); - } - break; - - case "string": - check = !!cell.row.data[cell.column.modules.edit.check]; - break; - - case "boolean": - check = cell.column.modules.edit.check; - break; - } - } - - return check; - } - - edit(cell, e, forceEdit){ - var self = this, - allowEdit = true, - rendered = function(){}, - element = cell.getElement(), - editFinished = false, - cellEditor, component, params; - - //prevent editing if another cell is refusing to leave focus (eg. validation fail) - - if(this.currentCell){ - if(!this.invalidEdit && this.currentCell !== cell){ - this.cancelEdit(); - } - return; - } - - //handle successful value change - function success(value){ - if(self.currentCell === cell && !editFinished){ - var valid = self.chain("edit-success", [cell, value], true, true); - - if(valid === true || self.table.options.validationMode === "highlight"){ - - editFinished = true; - - self.clearEditor(); - - if(!cell.modules.edit){ - cell.modules.edit = {}; - } - - cell.modules.edit.edited = true; - - if(self.editedCells.indexOf(cell) == -1){ - self.editedCells.push(cell); - } - - cell.setValue(value, true); - - return valid === true; - }else{ - editFinished = true; - self.invalidEdit = true; - self.focusCellNoEvent(cell, true); - rendered(); - - setTimeout(() => { - editFinished = false; - }, 10); - return false; - } - }else{ - // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited"); - } - } - - //handle aborted edit - function cancel(){ - // editFinished = true; - - if(self.currentCell === cell && !editFinished){ - self.cancelEdit(); - }else{ - // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited"); - } - } - - function onRendered(callback){ - rendered = callback; - } - - if(!cell.column.modules.edit.blocked){ - if(e){ - e.stopPropagation(); - } - - allowEdit = this.allowEdit(cell); - - if(allowEdit || forceEdit){ - self.cancelEdit(); - - self.currentCell = cell; - - this.focusScrollAdjust(cell); - - component = cell.getComponent(); - - if(this.mouseClick){ - this.mouseClick = false; - - if(cell.column.definition.cellClick){ - cell.column.definition.cellClick.call(this.table, e, component); - } - } - - if(cell.column.definition.cellEditing){ - cell.column.definition.cellEditing.call(this.table, component); - } - - this.dispatch("cell-editing", cell); - this.dispatchExternal("cellEditing", component); - - params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; - - cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); - - //if editor returned, add to DOM, if false, abort edit - if(this.currentCell && cellEditor !== false){ - if(cellEditor instanceof Node){ - element.classList.add("tabulator-editing"); - cell.row.getElement().classList.add("tabulator-editing"); - cell.table.element.classList.add("tabulator-editing"); - while(element.firstChild) element.removeChild(element.firstChild); - element.appendChild(cellEditor); - - //trigger onRendered Callback - rendered(); - - //prevent editing from triggering rowClick event - var children = element.children; - - for (var i = 0; i < children.length; i++) { - children[i].addEventListener("click", function(e){ - e.stopPropagation(); - }); - } - }else{ - console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor); - this.blur(element); - return false; - } - }else{ - this.blur(element); - return false; - } - - return true; - }else{ - this.mouseClick = false; - this.blur(element); - return false; - } - }else{ - this.mouseClick = false; - this.blur(element); - return false; - } - } - - blur(element){ - if(!this.confirm("edit-blur", [element]) ){ - element.blur(); - } - } - - getEditedCells(){ - var output = []; - - this.editedCells.forEach((cell) => { - output.push(cell.getComponent()); - }); - - return output; - } - - clearEdited(cell){ - var editIndex; - - if(cell.modules.edit && cell.modules.edit.edited){ - cell.modules.edit.edited = false; - - this.dispatch("edit-edited-clear", cell); - } - - editIndex = this.editedCells.indexOf(cell); - - if(editIndex > -1){ - this.editedCells.splice(editIndex, 1); - } - } -} - -Edit.moduleName = "edit"; - -//load defaults -Edit.editors = defaultEditors; - - -export default Edit; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/List.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/List.js deleted file mode 100644 index c3f6070..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/List.js +++ /dev/null @@ -1,1048 +0,0 @@ -import maskInput from './inputMask.js'; -import urlBuilder from '../Ajax/defaults/urlGenerator.js'; - -export default class Edit{ - constructor(editor, cell, onRendered, success, cancel, editorParams){ - this.edit = editor; - this.table = editor.table; - this.cell = cell; - this.params = this._initializeParams(editorParams); - - this.data = []; - this.displayItems = []; - this.currentItems = []; - this.focusedItem = null; - - this.input = this._createInputElement(); - this.listEl = this._createListElement(); - - this.initialValues = null; - - this.isFilter = cell.getType() === "header"; - - this.filterTimeout = null; - this.filtered = false; - this.typing = false; - - this.values = []; - this.popup = null; - - this.listIteration = 0; - - this.lastAction=""; - this.filterTerm=""; - - this.blurable = true; - - this.actions = { - success:success, - cancel:cancel - }; - - this._deprecatedOptionsCheck(); - this._initializeValue(); - - onRendered(this._onRendered.bind(this)); - } - - _deprecatedOptionsCheck(){ - if(this.params.listItemFormatter){ - this.cell.getTable().deprecationAdvisor.msg("The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.sortValuesList){ - this.cell.getTable().deprecationAdvisor.msg("The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.searchFunc){ - this.cell.getTable().deprecationAdvisor.msg("The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options"); - } - - if(this.params.searchingPlaceholder){ - this.cell.getTable().deprecationAdvisor.msg("The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options"); - } - } - - _initializeValue(){ - var initialValue = this.cell.getValue(); - - if(typeof initialValue === "undefined" && typeof this.params.defaultValue !== "undefined"){ - initialValue = this.params.defaultValue; - } - - this.initialValues = this.params.multiselect ? initialValue : [initialValue]; - - if(this.isFilter){ - this.input.value = this.initialValues ? this.initialValues.join(",") : ""; - this.headerFilterInitialListGen(); - } - } - - _onRendered(){ - var cellEl = this.cell.getElement(); - - function clickStop(e){ - e.stopPropagation(); - } - - if(!this.isFilter){ - this.input.style.height = "100%"; - this.input.focus({preventScroll: true}); - } - - - cellEl.addEventListener("click", clickStop); - - setTimeout(() => { - cellEl.removeEventListener("click", clickStop); - }, 1000); - - this.input.addEventListener("mousedown", this._preventPopupBlur.bind(this)); - } - - _createListElement(){ - var listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-list"); - - listEl.addEventListener("mousedown", this._preventBlur.bind(this)); - listEl.addEventListener("keydown", this._inputKeyDown.bind(this)); - - return listEl; - } - - _setListWidth(){ - var element = this.isFilter ? this.input : this.cell.getElement(); - - this.listEl.style.minWidth = element.offsetWidth + "px"; - - if(this.params.maxWidth){ - if(this.params.maxWidth === true){ - this.listEl.style.maxWidth = element.offsetWidth + "px"; - }else if(typeof this.params.maxWidth === "number"){ - this.listEl.style.maxWidth = this.params.maxWidth + "px"; - }else{ - this.listEl.style.maxWidth = this.params.maxWidth; - } - } - - } - - _createInputElement(){ - var attribs = this.params.elementAttributes; - var input = document.createElement("input"); - - input.setAttribute("type", this.params.clearable ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(!this.params.autocomplete){ - input.style.cursor = "default"; - input.style.caretColor = "transparent"; - // input.readOnly = (this.edit.currentCell != false); - } - - if(attribs && typeof attribs == "object"){ - for (let key in attribs){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + attribs["+" + key]); - }else{ - input.setAttribute(key, attribs[key]); - } - } - } - - if(this.params.mask){ - maskInput(input, this.params); - } - - this._bindInputEvents(input); - - return input; - } - - _initializeParams(params){ - var valueKeys = ["values", "valuesURL", "valuesLookup"], - valueCheck; - - params = Object.assign({}, params); - - params.verticalNavigation = params.verticalNavigation || "editor"; - params.placeholderLoading = typeof params.placeholderLoading === "undefined" ? "Searching ..." : params.placeholderLoading; - params.placeholderEmpty = typeof params.placeholderEmpty === "undefined" ? "No Results Found" : params.placeholderEmpty; - params.filterDelay = typeof params.filterDelay === "undefined" ? 300 : params.filterDelay; - - params.emptyValue = Object.keys(params).includes("emptyValue") ? params.emptyValue : ""; - - valueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length; - - if(!valueCheck){ - console.warn("list editor config error - either the values, valuesURL, or valuesLookup option must be set"); - }else if(valueCheck > 1){ - console.warn("list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor"); - } - - if(params.autocomplete){ - if(params.multiselect){ - params.multiselect = false; - console.warn("list editor config error - multiselect option is not available when autocomplete is enabled"); - } - }else{ - if(params.freetext){ - params.freetext = false; - console.warn("list editor config error - freetext option is only available when autocomplete is enabled"); - } - - if(params.filterFunc){ - params.filterFunc = false; - console.warn("list editor config error - filterFunc option is only available when autocomplete is enabled"); - } - - if(params.filterRemote){ - params.filterRemote = false; - console.warn("list editor config error - filterRemote option is only available when autocomplete is enabled"); - } - - if(params.mask){ - params.mask = false; - console.warn("list editor config error - mask option is only available when autocomplete is enabled"); - } - - if(params.allowEmpty){ - params.allowEmpty = false; - console.warn("list editor config error - allowEmpty option is only available when autocomplete is enabled"); - } - - if(params.listOnEmpty){ - params.listOnEmpty = false; - console.warn("list editor config error - listOnEmpty option is only available when autocomplete is enabled"); - } - } - - if(params.filterRemote && !(typeof params.valuesLookup === "function" || params.valuesURL)){ - params.filterRemote = false; - console.warn("list editor config error - filterRemote option should only be used when values list is populated from a remote source"); - } - return params; - } - ////////////////////////////////////// - ////////// Event Handling //////////// - ////////////////////////////////////// - - _bindInputEvents(input){ - input.addEventListener("focus", this._inputFocus.bind(this)); - input.addEventListener("click", this._inputClick.bind(this)); - input.addEventListener("blur", this._inputBlur.bind(this)); - input.addEventListener("keydown", this._inputKeyDown.bind(this)); - input.addEventListener("search", this._inputSearch.bind(this)); - - if(this.params.autocomplete){ - input.addEventListener("keyup", this._inputKeyUp.bind(this)); - } - } - - - _inputFocus(e){ - this.rebuildOptionsList(); - } - - _filter(){ - if(this.params.filterRemote){ - clearTimeout(this.filterTimeout); - - this.filterTimeout = setTimeout(() => { - this.rebuildOptionsList(); - }, this.params.filterDelay); - }else{ - this._filterList(); - } - } - - _inputClick(e){ - e.stopPropagation(); - } - - _inputBlur(e){ - if(this.blurable){ - if(this.popup){ - this.popup.hide(); - }else{ - this._resolveValue(true); - } - } - } - - _inputSearch(){ - this._clearChoices(); - } - - _inputKeyDown(e){ - switch(e.keyCode){ - - case 38: //up arrow - this._keyUp(e); - break; - - case 40: //down arrow - this._keyDown(e); - break; - - case 37: //left arrow - case 39: //right arrow - this._keySide(e); - break; - - case 13: //enter - this._keyEnter(); - break; - - case 27: //escape - this._keyEsc(); - break; - - case 36: //home - case 35: //end - this._keyHomeEnd(e); - break; - - case 9: //tab - this._keyTab(e); - break; - - default: - this._keySelectLetter(e); - } - } - - _inputKeyUp(e){ - switch(e.keyCode){ - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: //escape - break; - - default: - this._keyAutoCompLetter(e); - } - } - - _preventPopupBlur(){ - if(this.popup){ - this.popup.blockHide(); - } - - setTimeout(() =>{ - if(this.popup){ - this.popup.restoreHide(); - } - }, 10); - } - - _preventBlur(){ - this.blurable = false; - - setTimeout(() =>{ - this.blurable = true; - }, 10); - } - - ////////////////////////////////////// - //////// Keyboard Navigation ///////// - ////////////////////////////////////// - - _keyTab(e){ - if(this.params.autocomplete && this.lastAction === "typing"){ - this._resolveValue(true); - }else{ - if(this.focusedItem){ - this._chooseItem(this.focusedItem, true); - } - } - } - - _keyUp(e){ - var index = this.displayItems.indexOf(this.focusedItem); - - if(this.params.verticalNavigation == "editor" || (this.params.verticalNavigation == "hybrid" && index)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if(index > 0){ - this._focusItem(this.displayItems[index - 1]); - } - } - } - - _keyDown(e){ - var index = this.displayItems.indexOf(this.focusedItem); - - if(this.params.verticalNavigation == "editor" || (this.params.verticalNavigation == "hybrid" && index < this.displayItems.length - 1)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if(index < this.displayItems.length - 1){ - if(index == -1){ - this._focusItem(this.displayItems[0]); - }else{ - this._focusItem(this.displayItems[index + 1]); - } - } - } - } - - _keySide(e){ - if(!this.params.autocomplete){ - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - } - } - - _keyEnter(e){ - if(this.params.autocomplete && this.lastAction === "typing"){ - this._resolveValue(true); - }else{ - if(this.focusedItem){ - this._chooseItem(this.focusedItem); - } - } - } - - _keyEsc(e){ - this._cancel(); - } - - _keyHomeEnd(e){ - if(this.params.autocomplete){ - //prevent table navigation while using input element - e.stopImmediatePropagation(); - } - } - - _keySelectLetter(e){ - if(!this.params.autocomplete){ - // if(this.edit.currentCell === false){ - e.preventDefault(); - // } - - if(e.keyCode >= 38 && e.keyCode <= 90){ - this._scrollToValue(e.keyCode); - } - } - } - - _keyAutoCompLetter(e){ - this._filter(); - this.lastAction = "typing"; - this.typing = true; - } - - - _scrollToValue(char){ - clearTimeout(this.filterTimeout); - - var character = String.fromCharCode(char).toLowerCase(); - this.filterTerm += character.toLowerCase(); - - var match = this.displayItems.find((item) => { - return typeof item.label !== "undefined" && item.label.toLowerCase().startsWith(this.filterTerm); - }); - - if(match){ - this._focusItem(match); - } - - this.filterTimeout = setTimeout(() => { - this.filterTerm = ""; - }, 800); - } - - _focusItem(item){ - this.lastAction = "focus"; - - if(this.focusedItem && this.focusedItem.element){ - this.focusedItem.element.classList.remove("focused"); - } - - this.focusedItem = item; - - if(item && item.element){ - item.element.classList.add("focused"); - item.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'}); - } - } - - - ////////////////////////////////////// - /////// Data List Generation ///////// - ////////////////////////////////////// - headerFilterInitialListGen(){ - this._generateOptions(true); - } - - rebuildOptionsList(){ - this._generateOptions() - .then(this._sortOptions.bind(this)) - .then(this._buildList.bind(this)) - .then(this._showList.bind(this)) - .catch((e) => { - if(!Number.isInteger(e)){ - console.error("List generation error", e); - } - }); - } - - _filterList(){ - this._buildList(this._filterOptions()); - this._showList(); - } - - _generateOptions(silent){ - var values = []; - var iteration = ++ this.listIteration; - - this.filtered = false; - - if(this.params.values){ - values = this.params.values; - }else if (this.params.valuesURL){ - values = this._ajaxRequest(this.params.valuesURL, this.input.value); - }else{ - if(typeof this.params.valuesLookup === "function"){ - values = this.params.valuesLookup(this.cell, this.input.value); - }else if(this.params.valuesLookup){ - values = this._uniqueColumnValues(this.params.valuesLookupField); - } - } - - if(values instanceof Promise){ - if(!silent){ - this._addPlaceholder(this.params.placeholderLoading); - } - - return values.then() - .then((responseValues) => { - if(this.listIteration === iteration){ - return this._parseList(responseValues); - }else{ - return Promise.reject(iteration); - } - }); - }else{ - return Promise.resolve(this._parseList(values)); - } - } - - _addPlaceholder(contents){ - var placeholder = document.createElement("div"); - - if(typeof contents === "function"){ - contents = contents(this.cell.getComponent(), this.listEl); - } - - if(contents){ - this._clearList(); - - if(contents instanceof HTMLElement){ - placeholder = contents; - }else{ - placeholder.classList.add("tabulator-edit-list-placeholder"); - placeholder.innerHTML = contents; - } - - this.listEl.appendChild(placeholder); - - this._showList(); - } - } - - _ajaxRequest(url, term){ - var params = this.params.filterRemote ? {term:term} : {}; - url = urlBuilder(url, {}, params); - - return fetch(url) - .then((response)=>{ - if(response.ok) { - return response.json() - .catch((error)=>{ - console.warn("List Ajax Load Error - Invalid JSON returned", error); - return Promise.reject(error); - }); - }else{ - console.error("List Ajax Load Error - Connection Error: " + response.status, response.statusText); - return Promise.reject(response); - } - }) - .catch((error)=>{ - console.error("List Ajax Load Error - Connection Error: ", error); - return Promise.reject(error); - }); - } - - _uniqueColumnValues(field){ - var output = {}, - data = this.table.getData(this.params.valuesLookup), - column; - - if(field){ - column = this.table.columnManager.getColumnByField(field); - }else{ - column = this.cell.getColumn()._getSelf(); - } - - if(column){ - data.forEach((row) => { - var val = column.getFieldValue(row); - - if(val !== null && typeof val !== "undefined" && val !== ""){ - output[val] = true; - } - }); - }else{ - console.warn("unable to find matching column to create select lookup list:", field); - output = []; - } - - return Object.keys(output); - } - - - _parseList(inputValues){ - var data = []; - - if(!Array.isArray(inputValues)){ - inputValues = Object.entries(inputValues).map(([key, value]) => { - return { - label:value, - value:key, - }; - }); - } - - inputValues.forEach((value) => { - if(typeof value !== "object"){ - value = { - label:value, - value:value, - }; - } - - this._parseListItem(value, data, 0); - }); - - if(!this.currentItems.length && this.params.freetext){ - this.input.value = this.initialValues; - this.typing = true; - this.lastAction = "typing"; - } - - this.data = data; - - return data; - } - - _parseListItem(option, data, level){ - var item = {}; - - if(option.options){ - item = this._parseListGroup(option, level + 1); - }else{ - item = { - label:option.label, - value:option.value, - itemParams:option.itemParams, - elementAttributes: option.elementAttributes, - element:false, - selected:false, - visible:true, - level:level, - original:option, - }; - - if(this.initialValues && this.initialValues.indexOf(option.value) > -1){ - this._chooseItem(item, true); - } - } - - data.push(item); - } - - _parseListGroup(option, level){ - var item = { - label:option.label, - group:true, - itemParams:option.itemParams, - elementAttributes:option.elementAttributes, - element:false, - visible:true, - level:level, - options:[], - original:option, - }; - - option.options.forEach((child) => { - this._parseListItem(child, item.options, level); - }); - - return item; - } - - _sortOptions(options){ - var sorter; - - if(this.params.sort){ - sorter = typeof this.params.sort === "function" ? this.params.sort : this._defaultSortFunction.bind(this); - - this._sortGroup(sorter, options); - } - - return options; - } - - _sortGroup(sorter, options){ - options.sort((a,b) => { - return sorter(a.label, b.label, a.value, b.value, a.original, b.original); - }); - - options.forEach((option) => { - if(option.group){ - this._sortGroup(sorter, option.options); - } - }); - } - - _defaultSortFunction(as, bs){ - var a, b, a1, b1, i= 0, L, rx = /(\d+)|(\D+)/g, rd = /\d/; - var emptyAlign = 0; - - if(this.params.sort === "desc"){ - [as, bs] = [bs, as]; - } - - //handle empty values - if(!as && as!== 0){ - emptyAlign = !bs && bs!== 0 ? 0 : -1; - }else if(!bs && bs!== 0){ - emptyAlign = 1; - }else{ - if(isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if(a === b) return 0; - if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while(i < L){ - a1= a[i]; - b1= b[i++]; - if(a1 !== b1){ - if(isFinite(a1) && isFinite(b1)){ - if(a1.charAt(0) === "0") a1 = "." + a1; - if(b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } - else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - return emptyAlign; - } - - _filterOptions(){ - var filterFunc = this.params.filterFunc || this._defaultFilterFunc, - term = this.input.value; - - if(term){ - this.filtered = true; - - this.data.forEach((item) => { - this._filterItem(filterFunc, term, item); - }); - }else{ - this.filtered = false; - } - - return this.data; - } - - _filterItem(func, term, item){ - var matches = false; - - if(!item.group){ - item.visible = func(term, item.label, item.value, item.original); - }else{ - item.options.forEach((option) => { - if(this._filterItem(func, term, option)){ - matches = true; - } - }); - - item.visible = matches; - } - - return item.visible; - } - - _defaultFilterFunc(term, label, value, item){ - term = String(term).toLowerCase(); - - if(label !== null && typeof label !== "undefined"){ - if(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){ - return true; - } - } - - return false; - } - - ////////////////////////////////////// - /////////// Display List ///////////// - ////////////////////////////////////// - - _clearList(){ - while(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild); - - this.displayItems = []; - } - - _buildList(data){ - this._clearList(); - - data.forEach((option) => { - this._buildItem(option); - }); - - if(!this.displayItems.length){ - this._addPlaceholder(this.params.placeholderEmpty); - } - } - - _buildItem(item){ - var el = item.element, - contents; - - if(!this.filtered || item.visible){ - - if(!el){ - el = document.createElement("div"); - el.tabIndex = 0; - - contents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label; - - if(contents instanceof HTMLElement){ - el.appendChild(contents); - }else{ - el.innerHTML = contents; - } - - if(item.group){ - el.classList.add("tabulator-edit-list-group"); - }else{ - el.classList.add("tabulator-edit-list-item"); - } - - el.classList.add("tabulator-edit-list-group-level-" + item.level); - - if(item.elementAttributes && typeof item.elementAttributes == "object"){ - for (let key in item.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - el.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes["+" + key]); - }else{ - el.setAttribute(key, item.elementAttributes[key]); - } - } - } - - if(item.group){ - el.addEventListener("click", this._groupClick.bind(this, item)); - }else{ - el.addEventListener("click", this._itemClick.bind(this, item)); - } - - el.addEventListener("mousedown", this._preventBlur.bind(this)); - - item.element = el; - } - - this._styleItem(item); - - this.listEl.appendChild(el); - - if(item.group){ - item.options.forEach((option) => { - this._buildItem(option); - }); - }else{ - this.displayItems.push(item); - } - } - } - - _showList(){ - var startVis = this.popup && this.popup.isVisible(); - - if(this.input.parentNode){ - if(this.params.autocomplete && this.input.value === "" && !this.params.listOnEmpty){ - if(this.popup){ - this.popup.hide(true); - } - return; - } - - this._setListWidth(); - - if(!this.popup){ - this.popup = this.edit.popup(this.listEl); - } - - this.popup.show(this.cell.getElement(), "bottom"); - - if(!startVis){ - setTimeout(() => { - this.popup.hideOnBlur(this._resolveValue.bind(this, true)); - }, 10); - } - } - } - - _styleItem(item){ - if(item && item.element){ - if(item.selected){ - item.element.classList.add("active"); - }else{ - item.element.classList.remove("active"); - } - } - } - - ////////////////////////////////////// - ///////// User Interaction /////////// - ////////////////////////////////////// - - _itemClick(item, e){ - e.stopPropagation(); - - this._chooseItem(item); - } - - _groupClick(item, e){ - e.stopPropagation(); - } - - - ////////////////////////////////////// - ////// Current Item Management /////// - ////////////////////////////////////// - - _cancel(){ - this.popup.hide(true); - this.actions.cancel(); - } - - _clearChoices(){ - this.typing = true; - - this.currentItems.forEach((item) => { - item.selected = false; - this._styleItem(item); - }); - - this.currentItems = []; - - this.focusedItem = null; - } - - _chooseItem(item, silent){ - var index; - - this.typing = false; - - if(this.params.multiselect){ - index = this.currentItems.indexOf(item); - - if(index > -1){ - this.currentItems.splice(index, 1); - item.selected = false; - }else{ - this.currentItems.push(item); - item.selected = true; - } - - this.input.value = this.currentItems.map(item => item.label).join(","); - - this._styleItem(item); - - }else{ - this.currentItems = [item]; - item.selected = true; - - this.input.value = item.label; - - this._styleItem(item); - - if(!silent){ - this._resolveValue(); - } - } - - this._focusItem(item); - } - - _resolveValue(blur){ - var output, initialValue; - - if(this.popup){ - this.popup.hide(true); - } - - if(this.params.multiselect){ - output = this.currentItems.map(item => item.value); - }else{ - if(blur && this.params.autocomplete && this.typing){ - if(this.params.freetext || (this.params.allowEmpty && this.input.value === "")){ - output = this.input.value; - }else{ - this.actions.cancel(); - return; - } - }else{ - if(this.currentItems[0]){ - output = this.currentItems[0].value; - }else{ - initialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues; - - if(initialValue === null || typeof initialValue === "undefined" || initialValue === ""){ - output = initialValue; - }else{ - output = this.params.emptyValue; - } - } - - } - } - - if(output === ""){ - output = this.params.emptyValue; - } - - this.actions.success(output); - - if(this.isFilter){ - this.initialValues = output && !Array.isArray(output) ? [output] : output; - this.currentItems = []; - } - } - -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors.js deleted file mode 100644 index 47ff54d..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors.js +++ /dev/null @@ -1,29 +0,0 @@ -import input from './editors/input.js'; -import textarea from './editors/textarea.js'; -import number from './editors/number.js'; -import range from './editors/range.js'; -import date from './editors/date.js'; -import time from './editors/time.js'; -import datetime from './editors/datetime.js'; -import select from './editors/select.js'; -import list from './editors/list.js'; -import autocomplete from './editors/autocomplete.js'; -import star from './editors/star.js'; -import progress from './editors/progress.js'; -import tickCross from './editors/tickCross.js'; - -export default { - input:input, - textarea:textarea, - number:number, - range:range, - date:date, - time:time, - datetime:datetime, - select:select, - list:list, - autocomplete:autocomplete, - star:star, - progress:progress, - tickCross:tickCross, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/autocomplete.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/autocomplete.js deleted file mode 100644 index 568a82e..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/autocomplete.js +++ /dev/null @@ -1,12 +0,0 @@ -import List from '../../List.js'; - -export default function(cell, onRendered, success, cancel, editorParams){ - - this.deprecationMsg("The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam"); - - editorParams.autocomplete = true; - - var list = new List(this, cell, onRendered, success, cancel, editorParams); - - return list.input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/date.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/date.js deleted file mode 100644 index c1a3584..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/date.js +++ /dev/null @@ -1,138 +0,0 @@ -//input element -export default function(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - function convertDate(value){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else{ - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - return newDatetime.toFormat("yyyy-MM-dd"); - } - - input.type = "date"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.max){ - input.setAttribute("max", inputFormat ? convertDate(editorParams.max) : editorParams.max); - } - - if(editorParams.min){ - input.setAttribute("min", inputFormat ? convertDate(editorParams.min) : editorParams.min); - } - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - cellValue = convertDate(cellValue); - }else{ - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxDate; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxDate = DT.fromFormat(String(value), "yyyy-MM-dd"); - - switch(inputFormat){ - case true: - value = luxDate; - break; - - case "iso": - value = luxDate.toISO(); - break; - - default: - value = luxDate.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else{ - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/datetime.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/datetime.js deleted file mode 100644 index a708ccc..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/datetime.js +++ /dev/null @@ -1,125 +0,0 @@ -//input element -export default function(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null, - newDatetime; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.type = "datetime-local"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - if(DT.isDateTime(cellValue)){ - newDatetime = cellValue; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(cellValue)); - }else{ - newDatetime = DT.fromFormat(String(cellValue), inputFormat); - } - - cellValue = newDatetime.toFormat("yyyy-MM-dd") + "T" + newDatetime.toFormat("HH:mm"); - }else{ - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxDateTime; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxDateTime = DT.fromISO(String(value)); - - switch(inputFormat){ - case true: - value = luxDateTime; - break; - - case "iso": - value = luxDateTime.toISO(); - break; - - default: - value = luxDateTime.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else{ - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/input.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/input.js deleted file mode 100644 index 58efe26..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/input.js +++ /dev/null @@ -1,77 +0,0 @@ -import maskInput from '../../inputMask.js'; - -//input element -export default function(cell, onRendered, success, cancel, editorParams){ - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", editorParams.search ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = typeof cellValue !== "undefined" ? cellValue : ""; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(e){ - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value !== cellValue){ - if(success(input.value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else{ - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(e); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/list.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/list.js deleted file mode 100644 index bc58032..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/list.js +++ /dev/null @@ -1,7 +0,0 @@ -import List from '../../List.js'; - -export default function(cell, onRendered, success, cancel, editorParams){ - var list = new List(this, cell, onRendered, success, cancel, editorParams); - - return list.input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/number.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/number.js deleted file mode 100644 index 41e3934..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/number.js +++ /dev/null @@ -1,110 +0,0 @@ -import maskInput from '../../inputMask.js'; - -//input element with type of number -export default function(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - input = document.createElement("input"); - - input.setAttribute("type", "number"); - - if(typeof editorParams.max != "undefined"){ - input.setAttribute("max", editorParams.max); - } - - if(typeof editorParams.min != "undefined"){ - input.setAttribute("min", editorParams.min); - } - - if(typeof editorParams.step != "undefined"){ - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - var blurFunc = function(e){ - onChange(); - }; - - onRendered(function () { - if(cell.getType() === "cell"){ - //submit new value on blur - input.removeEventListener("blur", blurFunc); - - input.focus({preventScroll: true}); - input.style.height = "100%"; - - //submit new value on blur - input.addEventListener("blur", blurFunc); - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value !== cellValue){ - if(success(value)){ - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - }else{ - cancel(); - } - } - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/progress.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/progress.js deleted file mode 100644 index 32f224e..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/progress.js +++ /dev/null @@ -1,127 +0,0 @@ -//draggable progress bar -export default function(cell, onRendered, success, cancel, editorParams){ - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("max")) || 100) : editorParams.max, - min = typeof editorParams.min === "undefined" ? ((element.getElementsByTagName("div")[0] && element.getElementsByTagName("div")[0].getAttribute("min")) || 0) : editorParams.min, - percent = (max - min) / 100, - value = cell.getValue() || 0, - handle = document.createElement("div"), - bar = document.createElement("div"), - mouseDrag, mouseDragWidth; - - //set new value - function updateValue(){ - var style = window.getComputedStyle(element, null); - - var calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue("padding-left")) - parseInt(style.getPropertyValue("padding-right")))/100))) + min; - success(calcVal); - element.setAttribute("aria-valuenow", calcVal); - element.setAttribute("aria-label", value); - } - - //style handle - handle.style.position = "absolute"; - handle.style.right = "0"; - handle.style.top = "0"; - handle.style.bottom = "0"; - handle.style.width = "5px"; - handle.classList.add("tabulator-progress-handle"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "relative"; - // bar.style.top = "8px"; - // bar.style.bottom = "8px"; - // bar.style.left = "4px"; - // bar.style.marginRight = "4px"; - bar.style.height = "100%"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - bar.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //style cell - element.style.padding = "4px 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = Math.round((value - min) / percent); - // bar.style.right = value + "%"; - bar.style.width = value + "%"; - - element.setAttribute("aria-valuemin", min); - element.setAttribute("aria-valuemax", max); - - bar.appendChild(handle); - - handle.addEventListener("mousedown", function(e){ - mouseDrag = e.screenX; - mouseDragWidth = bar.offsetWidth; - }); - - handle.addEventListener("mouseover", function(){ - handle.style.cursor = "ew-resize"; - }); - - element.addEventListener("mousemove", function(e){ - if(mouseDrag){ - bar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + "px"; - } - }); - - element.addEventListener("mouseup", function(e){ - if(mouseDrag){ - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - e.preventDefault(); - bar.style.width = (bar.clientWidth + element.clientWidth/100) + "px"; - break; - - case 37: //left arrow - e.preventDefault(); - bar.style.width = (bar.clientWidth - element.clientWidth/100) + "px"; - break; - - case 9: //tab - case 13: //enter - updateValue(); - break; - - case 27: //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function(){ - cancel(); - }); - - return bar; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/range.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/range.js deleted file mode 100644 index de7bec8..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/range.js +++ /dev/null @@ -1,81 +0,0 @@ -//input element with type of number -export default function(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "range"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - onRendered(function () { - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - } - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value != cellValue){ - if(success(value)){ - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - }else{ - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e){ - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/select.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/select.js deleted file mode 100644 index 49df977..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/select.js +++ /dev/null @@ -1,10 +0,0 @@ -import List from '../../List.js'; - -export default function(cell, onRendered, success, cancel, editorParams){ - - this.deprecationMsg("The select editor has been deprecated, please use the new list editor"); - - var list = new List(this, cell, onRendered, success, cancel, editorParams); - - return list.input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/star.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/star.js deleted file mode 100644 index ecd8741..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/star.js +++ /dev/null @@ -1,146 +0,0 @@ -//star rating -export default function(cell, onRendered, success, cancel, editorParams){ - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - - //change star type - function starChange(val){ - stars.forEach(function(star, i){ - if(i < val){ - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-active"); - }else{ - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - }else{ - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-inactive"); - }else{ - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i){ - - var starHolder = document.createElement("span"); - var nextStar = star.cloneNode(true); - - stars.push(nextStar); - - starHolder.addEventListener("mouseenter", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - starChange(i); - }); - - starHolder.addEventListener("mousemove", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - }); - - starHolder.addEventListener("click", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - success(i); - element.blur(); - }); - - starHolder.appendChild(nextStar); - starsHolder.appendChild(starHolder); - - } - - //handle keyboard navigation value change - function changeValue(val){ - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - star.setAttribute("width", size); - star.setAttribute("height", size); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - starsHolder.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //create correct number of stars - for(var i=1;i<= maxStars;i++){ - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mousemove", function(e){ - starChange(0); - }); - - starsHolder.addEventListener("click", function(e){ - success(0); - }); - - element.addEventListener("blur", function(e){ - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - changeValue(value + 1); - break; - - case 37: //left arrow - changeValue(value - 1); - break; - - case 13: //enter - success(value); - break; - - case 27: //escape - cancel(); - break; - } - }); - - return starsHolder; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/textarea.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/textarea.js deleted file mode 100644 index 58b6662..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/textarea.js +++ /dev/null @@ -1,123 +0,0 @@ -import maskInput from '../../inputMask.js'; - -//resizable text area element -export default function(cell, onRendered, success, cancel, editorParams){ - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "hybrid", - value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""), - input = document.createElement("textarea"), - scrollHeight = 0; - - //create and style input - input.style.display = "block"; - input.style.padding = "2px"; - input.style.height = "100%"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.style.whiteSpace = "pre-wrap"; - input.style.resize = "none"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - input.scrollHeight; - input.style.height = input.scrollHeight + "px"; - cell.getRow().normalizeHeight(); - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(e){ - - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value !== cellValue){ - - if(success(input.value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - - setTimeout(function(){ - cell.getRow().normalizeHeight(); - },300); - }else{ - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - input.addEventListener("keyup", function(){ - - input.style.height = ""; - - var heightNow = input.scrollHeight; - - input.style.height = heightNow + "px"; - - if(heightNow != scrollHeight){ - scrollHeight = heightNow; - cell.getRow().normalizeHeight(); - } - }); - - input.addEventListener("keydown", function(e){ - - switch(e.keyCode){ - - case 13: - if(e.shiftKey && editorParams.shiftEnterSubmit){ - onChange(e); - } - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - if(vertNav == "editor" || (vertNav == "hybrid" && input.selectionStart)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - - break; - - case 40: //down arrow - if(vertNav == "editor" || (vertNav == "hybrid" && input.selectionStart !== input.value.length)){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - - case 35: - case 36: - e.stopPropagation(); - break; - } - }); - - if(editorParams.mask){ - maskInput(input, editorParams); - } - - return input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/tickCross.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/tickCross.js deleted file mode 100644 index 4ee31e3..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/tickCross.js +++ /dev/null @@ -1,95 +0,0 @@ -//checkbox -export default function(cell, onRendered, success, cancel, editorParams){ - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false, - trueValueSet = Object.keys(editorParams).includes("trueValue"), - falseValueSet = Object.keys(editorParams).includes("falseValue"); - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - if(tristate && (typeof value === "undefined" || value === indetermValue || value === "")){ - indetermState = true; - input.indeterminate = true; - } - - if(this.table.browser != "firefox" && this.table.browser != "safari"){ //prevent blur issue on mac firefox - onRendered(function(){ - if(cell.getType() === "cell"){ - input.focus({preventScroll: true}); - } - }); - } - - input.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === "true" || value === "True" || value === 1); - - function setValue(blur){ - var checkedValue = input.checked; - - if(trueValueSet && checkedValue){ - checkedValue = editorParams.trueValue; - }else if(falseValueSet && !checkedValue){ - checkedValue = editorParams.falseValue; - } - - if(tristate){ - if(!blur){ - if(input.checked && !indetermState){ - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - }else{ - indetermState = false; - return checkedValue; - } - }else{ - if(indetermState){ - return indetermValue; - }else{ - return checkedValue; - } - } - }else{ - return checkedValue; - } - } - - //submit new value on blur - input.addEventListener("change", function(e){ - success(setValue()); - }); - - input.addEventListener("blur", function(e){ - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - if(e.keyCode == 13){ - success(setValue()); - } - if(e.keyCode == 27){ - cancel(); - } - }); - - return input; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/time.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/time.js deleted file mode 100644 index acdd6b7..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/defaults/editors/time.js +++ /dev/null @@ -1,128 +0,0 @@ -//input element -export default function(cell, onRendered, success, cancel, editorParams){ - var inputFormat = editorParams.format, - vertNav = editorParams.verticalNavigation || "editor", - DT = inputFormat ? (window.DateTime || luxon.DateTime) : null, - newDatetime; - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.type = "time"; - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if(editorParams.elementAttributes && typeof editorParams.elementAttributes == "object"){ - for (let key in editorParams.elementAttributes){ - if(key.charAt(0) == "+"){ - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - }else{ - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - cellValue = typeof cellValue !== "undefined" ? cellValue : ""; - - if(inputFormat){ - if(DT){ - if(DT.isDateTime(cellValue)){ - newDatetime = cellValue; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(cellValue)); - }else{ - newDatetime = DT.fromFormat(String(cellValue), inputFormat); - } - - cellValue = newDatetime.toFormat("HH:mm"); - - }else{ - console.error("Editor Error - 'date' editor 'format' param is dependant on luxon.js"); - } - } - - console.log("val", cellValue); - - input.value = cellValue; - - onRendered(function(){ - if(cell.getType() == "cell"){ - input.focus({preventScroll: true}); - input.style.height = "100%"; - - if(editorParams.selectContents){ - input.select(); - } - } - }); - - function onChange(){ - var value = input.value, - luxTime; - - if(((cellValue === null || typeof cellValue === "undefined") && value !== "") || value !== cellValue){ - - if(value && inputFormat){ - luxTime = DT.fromFormat(String(value), "hh:mm"); - - switch(inputFormat){ - case true: - value = luxTime; - break; - - case "iso": - value = luxTime.toISO(); - break; - - default: - value = luxTime.toFormat(inputFormat); - } - } - - if(success(value)){ - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - }else{ - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e) { - if (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) { - onChange(); // only on a "true" blur; not when focusing browser's date/time picker - } - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - // case 9: - case 13: - onChange(); - break; - - case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); - break; - - case 38: //up arrow - case 40: //down arrow - if(vertNav == "editor"){ - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - return input; -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Edit/inputMask.js b/tmp/tabulator-5.6.1/src/js/modules/Edit/inputMask.js deleted file mode 100644 index 75df342..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Edit/inputMask.js +++ /dev/null @@ -1,74 +0,0 @@ -export default function maskInput(el, options){ - var mask = options.mask, - maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A", - maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9", - maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*"; - - function fillSymbols(index){ - var symbol = mask[index]; - if(typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){ - el.value = el.value + "" + symbol; - fillSymbols(index+1); - } - } - - el.addEventListener("keydown", (e) => { - var index = el.value.length, - char = e.key; - - if(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){ - if(index >= mask.length){ - e.preventDefault(); - e.stopPropagation(); - return false; - }else{ - switch(mask[index]){ - case maskLetter: - if(char.toUpperCase() == char.toLowerCase()){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - break; - - case maskNumber: - if(isNaN(char)){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - break; - - case maskWildcard: - break; - - default: - if(char !== mask[index]){ - e.preventDefault(); - e.stopPropagation(); - return false; - } - } - } - } - - return; - }); - - el.addEventListener("keyup", (e) => { - if(e.keyCode > 46){ - if(options.maskAutoFill){ - fillSymbols(el.value.length); - } - } - }); - - - if(!el.placeholder){ - el.placeholder = mask; - } - - if(options.maskAutoFill){ - fillSymbols(el.value.length); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Export/Export.js b/tmp/tabulator-5.6.1/src/js/modules/Export/Export.js deleted file mode 100644 index b1851d3..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Export/Export.js +++ /dev/null @@ -1,646 +0,0 @@ -import Module from '../../core/Module.js'; - -import ExportRow from './ExportRow.js'; -import ExportColumn from './ExportColumn.js'; - -class Export extends Module{ - - constructor(table){ - super(table); - - this.config = {}; - this.cloneTableStyle = true; - this.colVisProp = ""; - - this.registerTableOption("htmlOutputConfig", false); //html output config - - this.registerColumnOption("htmlOutput"); - this.registerColumnOption("titleHtmlOutput"); - } - - initialize(){ - this.registerTableFunction("getHtml", this.getHtml.bind(this)); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - generateExportList(config, style, range, colVisProp){ - this.cloneTableStyle = style; - this.config = config || {}; - this.colVisProp = colVisProp; - - var headers, body; - - if (range === 'range') { - var columns = this.table.modules.selectRange.selectedColumns(); - headers = this.config.columnHeaders !== false - ? this.headersToExportRows(this.generateColumnGroupHeaders(columns)) - : []; - body = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true)); - } else { - headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : []; - body = this.bodyToExportRows(this.rowLookup(range)); - } - - return headers.concat(body); - } - - generateTable(config, style, range, colVisProp){ - var list = this.generateExportList(config, style, range, colVisProp); - - return this.generateTableElement(list); - } - - rowLookup(range){ - var rows = []; - - if(typeof range == "function"){ - range.call(this.table).forEach((row) =>{ - row = this.table.rowManager.findRow(row); - - if(row){ - rows.push(row); - } - }); - }else{ - switch(range){ - case true: - case "visible": - rows = this.table.rowManager.getVisibleRows(false, true); - break; - - case "all": - rows = this.table.rowManager.rows; - break; - - case "selected": - rows = this.table.modules.selectRow.selectedRows; - break; - - case "range": - rows = this.table.modules.selectRange.selectedRows(); - break; - - case "active": - default: - if(this.table.options.pagination){ - rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2); - }else{ - rows = this.table.rowManager.getDisplayRows(); - } - } - } - - return Object.assign([], rows); - } - - generateColumnGroupHeaders(columns){ - var output = []; - - if (!columns) { - columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex; - } - - columns.forEach((column) => { - var colData = this.processColumnGroup(column); - - if(colData){ - output.push(colData); - } - }); - - return output; - } - - processColumnGroup(column){ - var subGroups = column.columns, - maxDepth = 0, - title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title; - - var groupData = { - title:title, - column:column, - depth:1, - }; - - if(subGroups.length){ - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach((subGroup) => { - var subGroupData = this.processColumnGroup(subGroup); - - if(subGroupData){ - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - - if(subGroupData.depth > maxDepth){ - maxDepth = subGroupData.depth; - } - } - }); - - groupData.depth += maxDepth; - - if(!groupData.width){ - return false; - } - }else{ - if(this.columnVisCheck(column)){ - groupData.width = 1; - }else{ - return false; - } - } - - return groupData; - } - - columnVisCheck(column){ - var visProp = column.definition[this.colVisProp]; - - if(typeof visProp === "function"){ - visProp = visProp.call(this.table, column.getComponent()); - } - - return visProp !== false && (column.visible || (!column.visible && visProp)); - } - - headersToExportRows(columns){ - var headers = [], - headerDepth = 0, - exportRows = []; - - function parseColumnGroup(column, level){ - - var depth = headerDepth - level; - - if(typeof headers[level] === "undefined"){ - headers[level] = []; - } - - column.height = column.subGroups ? 1 : (depth - column.depth) + 1; - - headers[level].push(column); - - if(column.height > 1){ - for(let i = 1; i < column.height; i ++){ - - if(typeof headers[level + i] === "undefined"){ - headers[level + i] = []; - } - - headers[level + i].push(false); - } - } - - if(column.width > 1){ - for(let i = 1; i < column.width; i ++){ - headers[level].push(false); - } - } - - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - } - } - - //calculate maximum header depth - columns.forEach(function(column){ - if(column.depth > headerDepth){ - headerDepth = column.depth; - } - }); - - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - - headers.forEach((header) => { - var columns = []; - - header.forEach((col) => { - if(col){ - let title = typeof col.title === "undefined" ? "" : col.title; - columns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth)); - }else{ - columns.push(null); - } - }); - - exportRows.push(new ExportRow("header", columns)); - }); - - return exportRows; - } - - bodyToExportRows(rows, columns = []){ - var exportRows = []; - - if (columns.length === 0) { - this.table.columnManager.columnsByIndex.forEach((column) => { - if (this.columnVisCheck(column)) { - columns.push(column.getComponent()); - } - }); - } - - if(this.config.columnCalcs !== false && this.table.modExists("columnCalcs")){ - if(this.table.modules.columnCalcs.topInitialized){ - rows.unshift(this.table.modules.columnCalcs.topRow); - } - - if(this.table.modules.columnCalcs.botInitialized){ - rows.push(this.table.modules.columnCalcs.botRow); - } - } - - rows = rows.filter((row) => { - switch(row.type){ - case "group": - return this.config.rowGroups !== false; - - case "calc": - return this.config.columnCalcs !== false; - - case "row": - return !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent); - } - - return true; - }); - - rows.forEach((row, i) => { - var rowData = row.getData(this.colVisProp); - var exportCols = []; - var indent = 0; - - switch(row.type){ - case "group": - indent = row.level; - exportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1)); - break; - - case "calc" : - case "row" : - columns.forEach((col) => { - exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1)); - }); - - if(this.table.options.dataTree && this.config.dataTree !== false){ - indent = row.modules.dataTree.index; - } - break; - } - - exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent)); - }); - - return exportRows; - } - - generateTableElement(list){ - var table = document.createElement("table"), - headerEl = document.createElement("thead"), - bodyEl = document.createElement("tbody"), - styles = this.lookupTableStyles(), - rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))], - setup = {}; - - setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter; - - if(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists("columnCalcs")){ - setup.treeElementField = this.table.modules.dataTree.elementField; - } - - //assign group header formatter - setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))]; - - if(setup.groupHeader && !Array.isArray(setup.groupHeader)){ - setup.groupHeader = [setup.groupHeader]; - } - - table.classList.add("tabulator-print-table"); - - this.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - - if(list.length > 1000){ - console.warn("It may take a long time to render an HTML table with more than 1000 rows"); - } - - list.forEach((row, i) => { - let rowEl; - - switch(row.type){ - case "header": - headerEl.appendChild(this.generateHeaderElement(row, setup, styles)); - break; - - case "group": - bodyEl.appendChild(this.generateGroupElement(row, setup, styles)); - break; - - case "calc": - bodyEl.appendChild(this.generateCalcElement(row, setup, styles)); - break; - - case "row": - rowEl = this.generateRowElement(row, setup, styles); - - this.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - bodyEl.appendChild(rowEl); - break; - } - }); - - if(headerEl.innerHTML){ - table.appendChild(headerEl); - } - - table.appendChild(bodyEl); - - - this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]); - return table; - } - - lookupTableStyles(){ - var styles = {}; - - //lookup row styles - if(this.cloneTableStyle && window.getComputedStyle){ - styles.oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); - styles.evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); - styles.calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs"); - styles.firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); - styles.firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; - - if(styles.firstRow){ - styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell"); - styles.firstCell = styles.styleCells[0]; - styles.lastCell = styles.styleCells[styles.styleCells.length - 1]; - } - } - - return styles; - } - - generateHeaderElement(row, setup, styles){ - var rowEl = document.createElement("tr"); - - row.columns.forEach((column) => { - if(column){ - var cellEl = document.createElement("th"); - var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : []; - - cellEl.colSpan = column.width; - cellEl.rowSpan = column.height; - - cellEl.innerHTML = column.value; - - if(this.cloneTableStyle){ - cellEl.style.boxSizing = "border-box"; - } - - classNames.forEach(function(className) { - cellEl.classList.add(className); - }); - - this.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - this.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); - - if(column.component._column.visible){ - this.mapElementStyles(column.component.getElement(), cellEl, ["width"]); - }else{ - if(column.component._column.definition.width){ - cellEl.style.width = column.component._column.definition.width + "px"; - } - } - - if(column.component._column.parent){ - this.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]); - } - - rowEl.appendChild(cellEl); - } - }); - - return rowEl; - } - - generateGroupElement(row, setup, styles){ - - var rowEl = document.createElement("tr"), - cellEl = document.createElement("td"), - group = row.columns[0]; - - rowEl.classList.add("tabulator-print-table-row"); - - if(setup.groupHeader && setup.groupHeader[row.indent]){ - group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - }else{ - if(setup.groupHeader !== false){ - group.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - - cellEl.colSpan = group.width; - cellEl.innerHTML = group.value; - - rowEl.classList.add("tabulator-print-table-group"); - rowEl.classList.add("tabulator-group-level-" + row.indent); - - if(group.component.isVisible()){ - rowEl.classList.add("tabulator-group-visible"); - } - - this.mapElementStyles(styles.firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - this.mapElementStyles(styles.firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); - - rowEl.appendChild(cellEl); - - return rowEl; - } - - generateCalcElement(row, setup, styles){ - var rowEl = this.generateRowElement(row, setup, styles); - - rowEl.classList.add("tabulator-print-table-calcs"); - this.mapElementStyles(styles.calcRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - - return rowEl; - } - - generateRowElement(row, setup, styles){ - var rowEl = document.createElement("tr"); - - rowEl.classList.add("tabulator-print-table-row"); - - row.columns.forEach((col, i) => { - if(col){ - var cellEl = document.createElement("td"), - column = col.component._column, - table = this.table, - index = table.columnManager.findColumnIndex(column), - value = col.value, - cellStyle; - - var cellWrapper = { - modules:{}, - getValue:function(){ - return value; - }, - getField:function(){ - return column.definition.field; - }, - getElement:function(){ - return cellEl; - }, - getType:function(){ - return "cell"; - }, - getColumn:function(){ - return column.getComponent(); - }, - getData:function(){ - return row.component.getData(); - }, - getRow:function(){ - return row.component; - }, - getTable:function(){ - return table; - }, - getComponent:function(){ - return cellWrapper; - }, - column:column, - }; - - var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : []; - - classNames.forEach(function(className) { - cellEl.classList.add(className); - }); - - if(this.table.modExists("format") && this.config.formatCells !== false){ - value = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp); - }else{ - switch(typeof value){ - case "object": - value = value !== null ? JSON.stringify(value) : ""; - break; - - case "undefined": - value = ""; - break; - } - } - - if(value instanceof Node){ - cellEl.appendChild(value); - }else{ - cellEl.innerHTML = value; - } - - cellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell; - - if(cellStyle){ - this.mapElementStyles(cellStyle, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "text-align"]); - - if(column.definition.align){ - cellEl.style.textAlign = column.definition.align; - } - } - - if(this.table.options.dataTree && this.config.dataTree !== false){ - if((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){ - if(row.component._row.modules.dataTree.controlEl){ - cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild); - } - if(row.component._row.modules.dataTree.branchEl){ - cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild); - } - } - } - - rowEl.appendChild(cellEl); - - if(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){ - cellWrapper.modules.format.renderedCallback(); - } - } - }); - - if(setup.rowFormatter && row.type === "row" && this.config.formatCells !== false){ - let formatComponent = Object.assign(row.component); - - formatComponent.getElement = function(){return rowEl;}; - - setup.rowFormatter(row.component); - } - - return rowEl; - } - - generateHTMLTable(list){ - var holder = document.createElement("div"); - - holder.appendChild(this.generateTableElement(list)); - - return holder.innerHTML; - } - - getHtml(visible, style, config, colVisProp){ - var list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput"); - - return this.generateHTMLTable(list); - } - - mapElementStyles(from, to, props){ - if(this.cloneTableStyle && from && to){ - - var lookup = { - "background-color" : "backgroundColor", - "color" : "fontColor", - "width" : "width", - "font-weight" : "fontWeight", - "font-family" : "fontFamily", - "font-size" : "fontSize", - "text-align" : "textAlign", - "border-top" : "borderTop", - "border-left" : "borderLeft", - "border-right" : "borderRight", - "border-bottom" : "borderBottom", - "padding-top" : "paddingTop", - "padding-left" : "paddingLeft", - "padding-right" : "paddingRight", - "padding-bottom" : "paddingBottom", - }; - - if(window.getComputedStyle){ - var fromStyle = window.getComputedStyle(from); - - props.forEach(function(prop){ - if(!to.style[lookup[prop]]){ - to.style[lookup[prop]] = fromStyle.getPropertyValue(prop); - } - }); - } - } - } -} - -Export.moduleName = "export"; - -export default Export; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Export/ExportColumn.js b/tmp/tabulator-5.6.1/src/js/modules/Export/ExportColumn.js deleted file mode 100644 index 1970b46..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Export/ExportColumn.js +++ /dev/null @@ -1,11 +0,0 @@ -class ExportColumn{ - constructor(value, component, width, height, depth){ - this.value = value; - this.component = component || false; - this.width = width; - this.height = height; - this.depth = depth; - } -} - -export default ExportColumn; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Export/ExportRow.js b/tmp/tabulator-5.6.1/src/js/modules/Export/ExportRow.js deleted file mode 100644 index 7aa090d..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Export/ExportRow.js +++ /dev/null @@ -1,10 +0,0 @@ -class ExportRow{ - constructor(type, columns, component, indent){ - this.type = type; - this.columns = columns; - this.component = component || false; - this.indent = indent || 0; - } -} - -export default ExportRow; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Filter/Filter.js b/tmp/tabulator-5.6.1/src/js/modules/Filter/Filter.js deleted file mode 100644 index e1feaec..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Filter/Filter.js +++ /dev/null @@ -1,904 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultFilters from './defaults/filters.js'; - -class Filter extends Module{ - - constructor(table){ - super(table); - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterColumns = []; //hold columns that use header filters - - this.prevHeaderFilterChangeCheck = ""; - this.prevHeaderFilterChangeCheck = "{}"; - - this.changed = false; //has filtering changed since last render - this.tableInitialized = false; - - this.registerTableOption("filterMode", "local"); //local or remote filtering - - this.registerTableOption("initialFilter", false); //initial filtering criteria - this.registerTableOption("initialHeaderFilter", false); //initial header filtering criteria - this.registerTableOption("headerFilterLiveFilterDelay", 300); //delay before updating column after user types in header filter - this.registerTableOption("placeholderHeaderFilter", false); //placeholder when header filter is empty - - this.registerColumnOption("headerFilter"); - this.registerColumnOption("headerFilterPlaceholder"); - this.registerColumnOption("headerFilterParams"); - this.registerColumnOption("headerFilterEmptyCheck"); - this.registerColumnOption("headerFilterFunc"); - this.registerColumnOption("headerFilterFuncParams"); - this.registerColumnOption("headerFilterLiveFilter"); - - this.registerTableFunction("searchRows", this.searchRows.bind(this)); - this.registerTableFunction("searchData", this.searchData.bind(this)); - - this.registerTableFunction("setFilter", this.userSetFilter.bind(this)); - this.registerTableFunction("refreshFilter", this.userRefreshFilter.bind(this)); - this.registerTableFunction("addFilter", this.userAddFilter.bind(this)); - this.registerTableFunction("getFilters", this.getFilters.bind(this)); - this.registerTableFunction("setHeaderFilterFocus", this.userSetHeaderFilterFocus.bind(this)); - this.registerTableFunction("getHeaderFilterValue", this.userGetHeaderFilterValue.bind(this)); - this.registerTableFunction("setHeaderFilterValue", this.userSetHeaderFilterValue.bind(this)); - this.registerTableFunction("getHeaderFilters", this.getHeaderFilters.bind(this)); - this.registerTableFunction("removeFilter", this.userRemoveFilter.bind(this)); - this.registerTableFunction("clearFilter", this.userClearFilter.bind(this)); - this.registerTableFunction("clearHeaderFilter", this.userClearHeaderFilter.bind(this)); - - this.registerComponentFunction("column", "headerFilterFocus", this.setHeaderFilterFocus.bind(this)); - this.registerComponentFunction("column", "reloadHeaderFilter", this.reloadHeaderFilter.bind(this)); - this.registerComponentFunction("column", "getHeaderFilterValue", this.getHeaderFilterValue.bind(this)); - this.registerComponentFunction("column", "setHeaderFilterValue", this.setHeaderFilterValue.bind(this)); - } - - initialize(){ - this.subscribe("column-init", this.initializeColumnHeaderFilter.bind(this)); - this.subscribe("column-width-fit-before", this.hideHeaderFilterElements.bind(this)); - this.subscribe("column-width-fit-after", this.showHeaderFilterElements.bind(this)); - this.subscribe("table-built", this.tableBuilt.bind(this)); - this.subscribe("placeholder", this.generatePlaceholder.bind(this)); - - if(this.table.options.filterMode === "remote"){ - this.subscribe("data-params", this.remoteFilterParams.bind(this)); - } - - this.registerDataHandler(this.filter.bind(this), 10); - } - - tableBuilt(){ - if(this.table.options.initialFilter){ - this.setFilter(this.table.options.initialFilter); - } - - if(this.table.options.initialHeaderFilter){ - this.table.options.initialHeaderFilter.forEach((item) => { - - var column = this.table.columnManager.findColumn(item.field); - - if(column){ - this.setHeaderFilterValue(column, item.value); - }else{ - console.warn("Column Filter Error - No matching column found:", item.field); - return false; - } - }); - } - - this.tableInitialized = true; - } - - remoteFilterParams(data, config, silent, params){ - params.filter = this.getFilters(true, true); - return params; - } - - generatePlaceholder(text){ - if(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){ - return this.table.options.placeholderHeaderFilter; - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - //set standard filters - userSetFilter(field, type, value, params){ - this.setFilter(field, type, value, params); - this.refreshFilter(); - } - - //set standard filters - userRefreshFilter(){ - this.refreshFilter(); - } - - //add filter to array - userAddFilter(field, type, value, params){ - this.addFilter(field, type, value, params); - this.refreshFilter(); - } - - userSetHeaderFilterFocus(field){ - var column = this.table.columnManager.findColumn(field); - - if(column){ - this.setHeaderFilterFocus(column); - }else{ - console.warn("Column Filter Focus Error - No matching column found:", field); - return false; - } - } - - userGetHeaderFilterValue(field) { - var column = this.table.columnManager.findColumn(field); - - if(column){ - return this.getHeaderFilterValue(column); - }else{ - console.warn("Column Filter Error - No matching column found:", field); - } - } - - userSetHeaderFilterValue(field, value){ - var column = this.table.columnManager.findColumn(field); - - if(column){ - this.setHeaderFilterValue(column, value); - }else{ - console.warn("Column Filter Error - No matching column found:", field); - return false; - } - } - - //remove filter from array - userRemoveFilter(field, type, value){ - this.removeFilter(field, type, value); - this.refreshFilter(); - } - - //clear filters - userClearFilter(all){ - this.clearFilter(all); - this.refreshFilter(); - } - - //clear header filters - userClearHeaderFilter(){ - this.clearHeaderFilter(); - this.refreshFilter(); - } - - - //search for specific row components - searchRows(field, type, value){ - return this.search("rows", field, type, value); - } - - //search for specific data - searchData(field, type, value){ - return this.search("data", field, type, value); - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnHeaderFilter(column){ - var def = column.definition; - - if(def.headerFilter){ - this.initializeColumn(column); - } - } - - //initialize column header filter - initializeColumn(column, value){ - var self = this, - field = column.getField(); - - //handle successfully value change - function success(value){ - var filterType = (column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text") || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterChangeCheck = "", - filterFunc; - - if(typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value){ - - column.modules.filter.prevSuccess = value; - - if(!column.modules.filter.emptyFunc(value)){ - column.modules.filter.value = value; - - switch(typeof column.definition.headerFilterFunc){ - case "string": - if(Filter.filters[column.definition.headerFilterFunc]){ - type = column.definition.headerFilterFunc; - filterFunc = function(data){ - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params); - }; - }else{ - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function(data){ - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if(!filterFunc){ - switch(filterType){ - case "partial": - filterFunc = function(data){ - var colVal = column.getFieldValue(data); - - if(typeof colVal !== 'undefined' && colVal !== null){ - return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - }else{ - return false; - } - }; - type = "like"; - break; - - default: - filterFunc = function(data){ - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = {value:value, func:filterFunc, type:type}; - }else{ - delete self.headerFilters[field]; - } - - column.modules.filter.value = value; - - filterChangeCheck = JSON.stringify(self.headerFilters); - - if(self.prevHeaderFilterChangeCheck !== filterChangeCheck){ - self.prevHeaderFilterChangeCheck = filterChangeCheck; - - self.trackChanges(); - self.refreshFilter(); - } - } - - return true; - } - - column.modules.filter = { - success:success, - attrType:false, - tagType:false, - emptyFunc:false, - }; - - this.generateHeaderFilterElement(column); - } - - generateHeaderFilterElement(column, initialValue, reinitialize){ - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback; - - column.modules.filter.value = initialValue; - - //handle aborted edit - function cancel(){} - - function onRendered(callback){ - onRenderedCallback = callback; - } - - if(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){ - column.contentElement.removeChild(column.modules.filter.headerElement.parentNode); - } - - if(field){ - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){ - return !value && value !== 0; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch(typeof column.definition.headerFilter){ - case "string": - if(self.table.modules.edit.editors[column.definition.headerFilter]){ - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else{ - console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor); - } - break; - - case "function": - editor = column.definition.headerFilter; - break; - - case "boolean": - if(column.modules.edit && column.modules.edit.editor){ - editor = column.modules.edit.editor; - }else{ - if(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){ - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else{ - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if(editor){ - - cellWrapper = { - getValue:function(){ - return typeof initialValue !== "undefined" ? initialValue : ""; - }, - getField:function(){ - return column.definition.field; - }, - getElement:function(){ - return filterElement; - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - }, - getType:() => { - return "header"; - }, - getRow:function(){ - return { - normalizeHeight:function(){ - - } - }; - } - }; - - params = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table, cellWrapper) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params); - - if(!editorElement){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if(!(editorElement instanceof Node)){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - self.langBind("headerFilters|columns|" + column.definition.field, function(value){ - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : (column.definition.headerFilterPlaceholder || self.langText("headerFilters|default"))); - }); - - //focus on element on click - editorElement.addEventListener("click", function(e){ - e.stopPropagation(); - editorElement.focus(); - }); - - editorElement.addEventListener("focus", (e) => { - var left = this.table.columnManager.contentsElement.scrollLeft; - - var headerPos = this.table.rowManager.element.scrollLeft; - - if(left !== headerPos){ - this.table.rowManager.scrollHorizontal(left); - this.table.columnManager.scrollHorizontal(left); - } - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function(e){ - if(typingTimer){ - clearTimeout(typingTimer); - } - - typingTimer = setTimeout(function(){ - success(editorElement.value); - },self.table.options.headerFilterLiveFilterDelay); - }; - - column.modules.filter.headerElement = editorElement; - column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "" ; - column.modules.filter.tagType = editorElement.tagName.toLowerCase(); - - if(column.definition.headerFilterLiveFilter !== false){ - - if ( - !( - column.definition.headerFilter === 'autocomplete' || - column.definition.headerFilter === 'tickCross' || - ((column.definition.editor === 'autocomplete' || - column.definition.editor === 'tickCross') && - column.definition.headerFilter === true) - ) - ) { - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - - //update number filtered columns on change - if(column.modules.filter.attrType == "number"){ - editorElement.addEventListener("change", function(e){ - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if(column.modules.filter.attrType == "text" && this.table.browser !== "ie"){ - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - - } - - //prevent input and select elements from propagating click to column sorters etc - if(column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea"){ - editorElement.addEventListener("mousedown",function(e){ - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - if(!reinitialize){ - self.headerFilterColumns.push(column); - } - - if(onRenderedCallback){ - onRenderedCallback(); - } - } - }else{ - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } - } - - //hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) - hideHeaderFilterElements(){ - this.headerFilterColumns.forEach(function(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.style.display = 'none'; - } - }); - } - - //show all header filter elements (used to ensure correct column widths in "fitData" layout mode) - showHeaderFilterElements(){ - this.headerFilterColumns.forEach(function(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.style.display = ''; - } - }); - } - - //programmatically set focus of header filter - setHeaderFilterFocus(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.focus(); - }else{ - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } - } - - //programmatically get value of header filter - getHeaderFilterValue(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - return column.modules.filter.value; - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - - //programmatically set value of header filter - setHeaderFilterValue(column, value){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, value, true); - column.modules.filter.success(value); - }else{ - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - } - - reloadHeaderFilter(column){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, column.modules.filter.value, true); - }else{ - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - } - - refreshFilter(){ - if(this.tableInitialized){ - if(this.table.options.filterMode === "remote"){ - this.reloadData(null, false, false); - }else{ - this.refreshData(true); - } - } - - //TODO - Persist left position of row manager - // left = this.scrollLeft; - // this.scrollHorizontal(left); - } - - //check if the filters has changed since last use - trackChanges(){ - this.changed = true; - this.dispatch("filter-changed"); - } - - //check if the filters has changed since last use - hasChanged(){ - var changed = this.changed; - this.changed = false; - return changed; - } - - //set standard filters - setFilter(field, type, value, params){ - this.filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value, params:params}]; - } - - this.addFilter(field); - } - - //add filter to array - addFilter(field, type, value, params){ - var changed = false; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value, params:params}]; - } - - field.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - this.filterList.push(filter); - changed = true; - } - }); - - if(changed){ - this.trackChanges(); - } - } - - findFilter(filter){ - var column; - - if(Array.isArray(filter)){ - return this.findSubFilters(filter); - } - - var filterFunc = false; - - if(typeof filter.field == "function"){ - filterFunc = function(data){ - return filter.field(data, filter.type || {});// pass params to custom filter function - }; - }else{ - - if(Filter.filters[filter.type]){ - - column = this.table.columnManager.getColumnByField(filter.field); - - if(column){ - filterFunc = function(data){ - return Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {}); - }; - }else{ - filterFunc = function(data){ - return Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {}); - }; - } - - - }else{ - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - filter.func = filterFunc; - - return filter.func ? filter : false; - } - - findSubFilters(filters){ - var output = []; - - filters.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - output.push(filter); - } - }); - - return output.length ? output : false; - } - - //get all filters - getFilters(all, ajax){ - var output = []; - - if(all){ - output = this.getHeaderFilters(); - } - - if(ajax){ - output.forEach(function(item){ - if(typeof item.type == "function"){ - item.type = "function"; - } - }); - } - - output = output.concat(this.filtersToArray(this.filterList, ajax)); - - return output; - } - - //filter to Object - filtersToArray(filterList, ajax){ - var output = []; - - filterList.forEach((filter) => { - var item; - - if(Array.isArray(filter)){ - output.push(this.filtersToArray(filter, ajax)); - }else{ - item = {field:filter.field, type:filter.type, value:filter.value}; - - if(ajax){ - if(typeof item.type == "function"){ - item.type = "function"; - } - } - - output.push(item); - } - }); - - return output; - } - - //get all filters - getHeaderFilters(){ - var output = []; - - for(var key in this.headerFilters){ - output.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value}); - } - - return output; - } - - //remove filter from array - removeFilter(field, type, value){ - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach((filter) => { - var index = -1; - - if(typeof filter.field == "object"){ - index = this.filterList.findIndex((element) => { - return filter === element; - }); - }else{ - index = this.filterList.findIndex((element) => { - return filter.field === element.field && filter.type === element.type && filter.value === element.value; - }); - } - - if(index > -1){ - this.filterList.splice(index, 1); - }else{ - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - }); - - this.trackChanges(); - } - - //clear filters - clearFilter(all){ - this.filterList = []; - - if(all){ - this.clearHeaderFilter(); - } - - this.trackChanges(); - } - - //clear header filters - clearHeaderFilter(){ - this.headerFilters = {}; - this.prevHeaderFilterChangeCheck = "{}"; - - this.headerFilterColumns.forEach((column) => { - if(typeof column.modules.filter.value !== "undefined"){ - delete column.modules.filter.value; - } - column.modules.filter.prevSuccess = undefined; - this.reloadHeaderFilter(column); - }); - - this.trackChanges(); - } - - //search data and return matching rows - search (searchType, field, type, value){ - var activeRows = [], - filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach((filter) => { - filter = this.findFilter(filter); - - if(filter){ - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach((row) => { - var match = true; - - filterList.forEach((filter) => { - if(!this.filterRecurse(filter, row.getData())){ - match = false; - } - }); - - if(match){ - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - - }); - - return activeRows; - } - - //filter row array - filter(rowList, filters){ - var activeRows = [], - activeRowComponents = []; - - if(this.subscribedExternal("dataFiltering")){ - this.dispatchExternal("dataFiltering", this.getFilters(true)); - } - - if(this.table.options.filterMode !== "remote" && (this.filterList.length || Object.keys(this.headerFilters).length)){ - - rowList.forEach((row) => { - if(this.filterRow(row)){ - activeRows.push(row); - } - }); - - }else{ - activeRows = rowList.slice(0); - } - - if(this.subscribedExternal("dataFiltered")){ - - activeRows.forEach((row) => { - activeRowComponents.push(row.getComponent()); - }); - - this.dispatchExternal("dataFiltered", this.getFilters(true), activeRowComponents); - } - - return activeRows; - } - - //filter individual row - filterRow(row, filters){ - var match = true, - data = row.getData(); - - this.filterList.forEach((filter) => { - if(!this.filterRecurse(filter, data)){ - match = false; - } - }); - - - for(var field in this.headerFilters){ - if(!this.headerFilters[field].func(data)){ - match = false; - } - } - - return match; - } - - filterRecurse(filter, data){ - var match = false; - - if(Array.isArray(filter)){ - filter.forEach((subFilter) => { - if(this.filterRecurse(subFilter, data)){ - match = true; - } - }); - }else{ - match = filter.func(data); - } - - return match; - } -} - -Filter.moduleName = "filter"; - -//load defaults -Filter.filters = defaultFilters; - -export default Filter; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Filter/defaults/filters.js b/tmp/tabulator-5.6.1/src/js/modules/Filter/defaults/filters.js deleted file mode 100644 index 4c8bc44..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Filter/defaults/filters.js +++ /dev/null @@ -1,108 +0,0 @@ -export default { - - //equal to - "=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal == filterVal ? true : false; - }, - - //less than - "<":function(filterVal, rowVal, rowData, filterParams){ - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">":function(filterVal, rowVal, rowData, filterParams){ - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=":function(filterVal, rowVal, rowData, filterParams){ - return rowVal != filterVal ? true : false; - }, - - "regex":function(filterVal, rowVal, rowData, filterParams){ - - if(typeof filterVal == "string"){ - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else{ - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1; - } - else{ - return false; - } - } - }, - - //contains the keywords - "keywords":function(filterVal, rowVal, rowData, filterParams){ - var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator), - value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(), - matches = []; - - keywords.forEach((keyword) =>{ - if(value.includes(keyword)){ - matches.push(true); - } - }); - - return filterParams.matchAll ? matches.length === keywords.length : !!matches.length; - }, - - //starts with the string - "starts":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else{ - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase()); - } - else{ - return false; - } - } - }, - - //ends with the string - "ends":function(filterVal, rowVal, rowData, filterParams){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else{ - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase()); - } - else{ - return false; - } - } - }, - - //in array - "in":function(filterVal, rowVal, rowData, filterParams){ - if(Array.isArray(filterVal)){ - return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true; - }else{ - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - }, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/Format.js b/tmp/tabulator-5.6.1/src/js/modules/Format/Format.js deleted file mode 100644 index d95f4f5..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/Format.js +++ /dev/null @@ -1,216 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultFormatters from './defaults/formatters.js'; - -class Format extends Module{ - - constructor(table){ - super(table); - - this.registerColumnOption("formatter"); - this.registerColumnOption("formatterParams"); - - this.registerColumnOption("formatterPrint"); - this.registerColumnOption("formatterPrintParams"); - this.registerColumnOption("formatterClipboard"); - this.registerColumnOption("formatterClipboardParams"); - this.registerColumnOption("formatterHtmlOutput"); - this.registerColumnOption("formatterHtmlOutputParams"); - this.registerColumnOption("titleFormatter"); - this.registerColumnOption("titleFormatterParams"); - } - - initialize(){ - this.subscribe("cell-format", this.formatValue.bind(this)); - this.subscribe("cell-rendered", this.cellRendered.bind(this)); - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("column-format", this.formatHeader.bind(this)); - } - - //initialize column formatter - initializeColumn(column){ - column.modules.format = this.lookupFormatter(column, ""); - - if(typeof column.definition.formatterPrint !== "undefined"){ - column.modules.format.print = this.lookupFormatter(column, "Print"); - } - - if(typeof column.definition.formatterClipboard !== "undefined"){ - column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard"); - } - - if(typeof column.definition.formatterHtmlOutput !== "undefined"){ - column.modules.format.htmlOutput = this.lookupFormatter(column, "HtmlOutput"); - } - } - - lookupFormatter(column, type){ - var config = {params:column.definition["formatter" + type + "Params"] || {}}, - formatter = column.definition["formatter" + type]; - - //set column formatter - switch(typeof formatter){ - case "string": - if(Format.formatters[formatter]){ - config.formatter = Format.formatters[formatter]; - }else{ - console.warn("Formatter Error - No such formatter found: ", formatter); - config.formatter = Format.formatters.plaintext; - } - break; - - case "function": - config.formatter = formatter; - break; - - default: - config.formatter = Format.formatters.plaintext; - break; - } - - return config; - } - - cellRendered(cell){ - if(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){ - cell.modules.format.renderedCallback(); - cell.modules.format.rendered = true; - } - } - - //return a formatted value for a column header - formatHeader(column, title, el){ - var formatter, params, onRendered, mockCell; - - if(column.definition.titleFormatter){ - formatter = this.getFormatter(column.definition.titleFormatter); - - onRendered = (callback) => { - column.titleFormatterRendered = callback; - }; - - mockCell = { - getValue:function(){ - return title; - }, - getElement:function(){ - return el; - }, - getType:function(){ - return "header"; - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - } - }; - - params = column.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - return formatter.call(this, mockCell, params, onRendered); - }else{ - return title; - } - } - - - //return a formatted value for a cell - formatValue(cell){ - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback){ - if(!cell.modules.format){ - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; - } - - return cell.column.modules.format.formatter.call(this, component, params, onRendered); - } - - formatExportValue(cell, type){ - var formatter = cell.column.modules.format[type], - params; - - if(formatter){ - params = typeof formatter.params === "function" ? formatter.params(cell.getComponent()) : formatter.params; - - function onRendered(callback){ - if(!cell.modules.format){ - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; - } - - return formatter.formatter.call(this, cell.getComponent(), params, onRendered); - - }else{ - return this.formatValue(cell); - } - } - - sanitizeHTML(value){ - if(value){ - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=/]/g, function (s) { - return entityMap[s]; - }); - }else{ - return value; - } - } - - emptyToSpace(value){ - return value === null || typeof value === "undefined" || value === "" ? " " : value; - } - - //get formatter for cell - getFormatter(formatter){ - switch(typeof formatter){ - case "string": - if(Format.formatters[formatter]){ - formatter = Format.formatters[formatter]; - }else{ - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = Format.formatters.plaintext; - } - break; - - case "function": - //Custom formatter Function, do nothing - break; - - default: - formatter = Format.formatters.plaintext; - break; - } - - return formatter; - } -} - -Format.moduleName = "format"; - -//load defaults -Format.formatters = defaultFormatters; - -export default Format; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters.js deleted file mode 100644 index c063e08..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters.js +++ /dev/null @@ -1,43 +0,0 @@ -import plaintext from './formatters/plaintext.js'; -import html from './formatters/html.js'; -import textarea from './formatters/textarea.js'; -import money from './formatters/money.js'; -import link from './formatters/link.js'; -import image from './formatters/image.js'; -import tickCross from './formatters/tickCross.js'; -import datetime from './formatters/datetime.js'; -import datetimediff from './formatters/datetimediff.js'; -import lookup from './formatters/lookup.js'; -import star from './formatters/star.js'; -import traffic from './formatters/traffic.js'; -import progress from './formatters/progress.js'; -import color from './formatters/color.js'; -import buttonTick from './formatters/buttonTick.js'; -import buttonCross from './formatters/buttonCross.js'; -import rownum from './formatters/rownum.js'; -import handle from './formatters/handle.js'; -import responsiveCollapse from './formatters/responsiveCollapse.js'; -import rowSelection from './formatters/rowSelection.js'; - -export default { - plaintext:plaintext, - html:html, - textarea:textarea, - money:money, - link:link, - image:image, - tickCross:tickCross, - datetime:datetime, - datetimediff:datetimediff, - lookup:lookup, - star:star, - traffic:traffic, - progress:progress, - color:color, - buttonTick:buttonTick, - buttonCross:buttonCross, - rownum:rownum, - handle:handle, - responsiveCollapse:responsiveCollapse, - rowSelection:rowSelection, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/buttonCross.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/buttonCross.js deleted file mode 100644 index df86e60..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/buttonCross.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - return ''; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/buttonTick.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/buttonTick.js deleted file mode 100644 index d0980d7..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/buttonTick.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - return ''; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/color.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/color.js deleted file mode 100644 index 12d3460..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/color.js +++ /dev/null @@ -1,4 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/datetime.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/datetime.js deleted file mode 100644 index 523f649..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/datetime.js +++ /dev/null @@ -1,37 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var DT = window.DateTime || luxon.DateTime; - var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss"; - var outputFormat = formatterParams.outputFormat || "dd/MM/yyyy HH:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - if(typeof DT != "undefined"){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else{ - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - if(newDatetime.isValid){ - if(formatterParams.timezone){ - newDatetime = newDatetime.setZone(formatterParams.timezone); - } - - return newDatetime.toFormat(outputFormat); - }else{ - if(invalid === true || !value){ - return value; - }else if(typeof invalid === "function"){ - return invalid(value); - }else{ - return invalid; - } - } - }else{ - console.error("Format Error - 'datetime' formatter is dependant on luxon.js"); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/datetimediff.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/datetimediff.js deleted file mode 100644 index aa14a61..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/datetimediff.js +++ /dev/null @@ -1,41 +0,0 @@ -export default function (cell, formatterParams, onRendered) { - var DT = window.DateTime || luxon.DateTime; - var inputFormat = formatterParams.inputFormat || "yyyy-MM-dd HH:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : "days"; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : DT.now(); - var value = cell.getValue(); - - if(typeof DT != "undefined"){ - var newDatetime; - - if(DT.isDateTime(value)){ - newDatetime = value; - }else if(inputFormat === "iso"){ - newDatetime = DT.fromISO(String(value)); - }else{ - newDatetime = DT.fromFormat(String(value), inputFormat); - } - - if (newDatetime.isValid){ - if(humanize){ - return newDatetime.diff(date, unit).toHuman() + (suffix ? " " + suffix : ""); - }else{ - return parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? " " + suffix : ""); - } - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }else{ - console.error("Format Error - 'datetimediff' formatter is dependant on luxon.js"); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/handle.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/handle.js deleted file mode 100644 index 27dbb0b..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/handle.js +++ /dev/null @@ -1,4 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - cell.getElement().classList.add("tabulator-row-handle"); - return "
    "; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/html.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/html.js deleted file mode 100644 index 51a2ba4..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/html.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - return cell.getValue(); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/image.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/image.js deleted file mode 100644 index a6e396d..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/image.js +++ /dev/null @@ -1,40 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var el = document.createElement("img"), - src = cell.getValue(); - - if(formatterParams.urlPrefix){ - src = formatterParams.urlPrefix + cell.getValue(); - } - - if(formatterParams.urlSuffix){ - src = src + formatterParams.urlSuffix; - } - - el.setAttribute("src", src); - - switch(typeof formatterParams.height){ - case "number": - el.style.height = formatterParams.height + "px"; - break; - - case "string": - el.style.height = formatterParams.height; - break; - } - - switch(typeof formatterParams.width){ - case "number": - el.style.width = formatterParams.width + "px"; - break; - - case "string": - el.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function(){ - cell.getRow().normalizeHeight(); - }); - - return el; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/link.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/link.js deleted file mode 100644 index b9f31b1..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/link.js +++ /dev/null @@ -1,82 +0,0 @@ -import Helpers from '../../../../core/tools/Helpers.js'; - - -export default function(cell, formatterParams, onRendered){ - var value = cell.getValue(), - urlPrefix = formatterParams.urlPrefix || "", - download = formatterParams.download, - label = value, - el = document.createElement("a"), - data; - - function labelTraverse(path, data){ - var item = path.shift(), - value = data[item]; - - if(path.length && typeof value === "object"){ - return labelTraverse(path, value); - } - - return value; - } - - if(formatterParams.labelField){ - data = cell.getData(); - label = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data); - } - - if(formatterParams.label){ - switch(typeof formatterParams.label){ - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if(label){ - if(formatterParams.urlField){ - data = cell.getData(); - - value = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data); - } - - if(formatterParams.url){ - switch(typeof formatterParams.url){ - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if(formatterParams.target){ - el.setAttribute("target", formatterParams.target); - } - - if(formatterParams.download){ - - if(typeof download == "function"){ - download = download(cell); - }else{ - download = download === true ? "" : download; - } - - el.setAttribute("download", download); - } - - el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label)); - - return el; - }else{ - return " "; - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/lookup.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/lookup.js deleted file mode 100644 index f7e4894..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/lookup.js +++ /dev/null @@ -1,10 +0,0 @@ -export default function (cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/money.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/money.js deleted file mode 100644 index 79cf765..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/money.js +++ /dev/null @@ -1,44 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var floatVal = parseFloat(cell.getValue()), - sign = "", - number, integer, decimal, rgx, value; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var negativeSign = formatterParams.negativeSign || "-"; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if(isNaN(floatVal)){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - if(floatVal < 0){ - floatVal = Math.abs(floatVal); - sign = negativeSign; - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - if (formatterParams.thousand !== false) { - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)){ - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - } - - value = integer + decimal; - - if(sign === true){ - value = "(" + value + ")"; - return after ? value + symbol : symbol + value; - }else{ - return after ? sign + value + symbol : sign + symbol + value; - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/plaintext.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/plaintext.js deleted file mode 100644 index ade5336..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/plaintext.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/progress.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/progress.js deleted file mode 100644 index 892708c..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/progress.js +++ /dev/null @@ -1,133 +0,0 @@ -import CellComponent from '../../../../core/cell/CellComponent.js'; - -export default function(cell, formatterParams = {}, onRendered){ //progress bar - var value = this.sanitizeHTML(cell.getValue()) || 0, - element = cell.getElement(), - max = formatterParams.max ? formatterParams.max : 100, - min = formatterParams.min ? formatterParams.min : 0, - legendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : "center", - percent, percentValue, color, legend, legendColor; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch(typeof formatterParams.color){ - case "string": - color = formatterParams.color; - break; - case "function": - color = formatterParams.color(value); - break; - case "object": - if(Array.isArray(formatterParams.color)){ - let unit = 100 / formatterParams.color.length; - let index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.color.length - 1); - index = Math.max(index, 0); - color = formatterParams.color[index]; - break; - } - default: - color = "#2DC214"; - } - - //generate legend - switch(typeof formatterParams.legend){ - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - switch(typeof formatterParams.legendColor){ - case "string": - legendColor = formatterParams.legendColor; - break; - case "function": - legendColor = formatterParams.legendColor(value); - break; - case "object": - if(Array.isArray(formatterParams.legendColor)){ - let unit = 100 / formatterParams.legendColor.length; - let index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.legendColor.length - 1); - index = Math.max(index, 0); - legendColor = formatterParams.legendColor[index]; - } - break; - default: - legendColor = "#000"; - } - - element.style.minWidth = "30px"; - element.style.position = "relative"; - - element.setAttribute("aria-label", percentValue); - - var barEl = document.createElement("div"); - barEl.style.display = "inline-block"; - barEl.style.width = percentValue + "%"; - barEl.style.backgroundColor = color; - barEl.style.height = "100%"; - - barEl.setAttribute('data-max', max); - barEl.setAttribute('data-min', min); - - var barContainer = document.createElement("div"); - barContainer.style.position = "relative"; - barContainer.style.width = "100%"; - barContainer.style.height = "100%"; - - if(legend){ - var legendEl = document.createElement("div"); - legendEl.style.position = "absolute"; - legendEl.style.top = 0; - legendEl.style.left = 0; - legendEl.style.textAlign = legendAlign; - legendEl.style.width = "100%"; - legendEl.style.color = legendColor; - legendEl.innerHTML = legend; - } - - onRendered(function(){ - - //handle custom element needed if formatter is to be included in printed/downloaded output - if(!(cell instanceof CellComponent)){ - var holderEl = document.createElement("div"); - holderEl.style.position = "absolute"; - holderEl.style.top = "4px"; - holderEl.style.bottom = "4px"; - holderEl.style.left = "4px"; - holderEl.style.right = "4px"; - - element.appendChild(holderEl); - - element = holderEl; - } - - element.appendChild(barContainer); - barContainer.appendChild(barEl); - - if(legend){ - barContainer.appendChild(legendEl); - } - }); - - return ""; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/responsiveCollapse.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/responsiveCollapse.js deleted file mode 100644 index 6e480a7..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/responsiveCollapse.js +++ /dev/null @@ -1,44 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var el = document.createElement("div"), - config = cell.getRow()._row.modules.responsiveLayout; - - el.classList.add("tabulator-responsive-collapse-toggle"); - - el.innerHTML = ` - - - - - - -`; - - cell.getElement().classList.add("tabulator-row-handle"); - - function toggleList(isOpen){ - var collapseEl = config.element; - - config.open = isOpen; - - if(collapseEl){ - - if(config.open){ - el.classList.add("open"); - collapseEl.style.display = ''; - }else{ - el.classList.remove("open"); - collapseEl.style.display = 'none'; - } - } - } - - el.addEventListener("click", function(e){ - e.stopImmediatePropagation(); - toggleList(!config.open); - cell.getTable().rowManager.adjustTableSize(); - }); - - toggleList(config.open); - - return el; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/rowSelection.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/rowSelection.js deleted file mode 100644 index 91cdfeb..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/rowSelection.js +++ /dev/null @@ -1,60 +0,0 @@ -import RowComponent from '../../../../core/row/RowComponent.js'; - -export default function(cell, formatterParams, onRendered){ - var checkbox = document.createElement("input"); - var blocked = false; - - checkbox.type = 'checkbox'; - - checkbox.setAttribute("aria-label", "Select Row"); - - if(this.table.modExists("selectRow", true)){ - - checkbox.addEventListener("click", (e) => { - e.stopPropagation(); - }); - - if(typeof cell.getRow == 'function'){ - var row = cell.getRow(); - - if(row instanceof RowComponent){ - - checkbox.addEventListener("change", (e) => { - if(this.table.options.selectableRowsRangeMode === "click"){ - if(!blocked){ - row.toggleSelect(); - }else{ - blocked = false; - } - }else{ - row.toggleSelect(); - } - }); - - if(this.table.options.selectableRowsRangeMode === "click"){ - checkbox.addEventListener("click", (e) => { - blocked = true; - this.table.modules.selectRow.handleComplexRowClick(row._row, e); - }); - } - - checkbox.checked = row.isSelected && row.isSelected(); - this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox); - }else{ - checkbox = ""; - } - }else { - checkbox.addEventListener("change", (e) => { - if(this.table.modules.selectRow.selectedRows.length){ - this.table.deselectRow(); - }else { - this.table.selectRow(formatterParams.rowRange); - } - }); - - this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox); - } - } - - return checkbox; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/rownum.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/rownum.js deleted file mode 100644 index 6dfbd79..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/rownum.js +++ /dev/null @@ -1,14 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var content = document.createElement("span"); - var row = cell.getRow(); - var table = cell.getTable(); - - row.watchPosition((position) => { - if (formatterParams.relativeToPage) { - position += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1); - } - content.innerText = position; - }); - - return content; -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/star.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/star.js deleted file mode 100644 index 484fc54..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/star.js +++ /dev/null @@ -1,38 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5, - stars = document.createElement("span"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"), - starActive = '', - starInactive = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - star.setAttribute("width", "14"); - star.setAttribute("height", "14"); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - value = value && !isNaN(value) ? parseInt(value) : 0; - - value = Math.max(0, Math.min(value, maxStars)); - - for(var i=1;i<= maxStars;i++){ - var nextStar = star.cloneNode(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return stars; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/textarea.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/textarea.js deleted file mode 100644 index 1a521b0..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/textarea.js +++ /dev/null @@ -1,4 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/tickCross.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/tickCross.js deleted file mode 100644 index 6b6fc41..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/tickCross.js +++ /dev/null @@ -1,22 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - trueValueSet = Object.keys(formatterParams).includes("trueValue"), - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === "true" || value === "True" || value === 1 || value === "1")))){ - element.setAttribute("aria-checked", true); - return tick || ""; - }else{ - if(empty && (value === "null" || value === "" || value === null || typeof value === "undefined")){ - element.setAttribute("aria-checked", "mixed"); - return ""; - }else{ - element.setAttribute("aria-checked", false); - return cross || ""; - } - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/traffic.js b/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/traffic.js deleted file mode 100644 index 9e52ac6..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Format/defaults/formatters/traffic.js +++ /dev/null @@ -1,47 +0,0 @@ -export default function(cell, formatterParams, onRendered){ - var value = this.sanitizeHTML(cell.getValue()) || 0, - el = document.createElement("span"), - max = formatterParams && formatterParams.max ? formatterParams.max : 100, - min = formatterParams && formatterParams.min ? formatterParams.min : 0, - colors = formatterParams && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"], - color = "#666666", - percent, percentValue; - - if(isNaN(value) || typeof cell.getValue() === "undefined"){ - return; - } - - el.classList.add("tabulator-traffic-light"); - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set color - switch(typeof colors){ - case "string": - color = colors; - break; - case "function": - color = colors(value); - break; - case "object": - if(Array.isArray(colors)){ - var unit = 100 / colors.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, colors.length - 1); - index = Math.max(index, 0); - color = colors[index]; - break; - } - } - - el.style.backgroundColor = color; - - return el; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/FrozenColumns/FrozenColumns.js b/tmp/tabulator-5.6.1/src/js/modules/FrozenColumns/FrozenColumns.js deleted file mode 100644 index 8eb5339..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/FrozenColumns/FrozenColumns.js +++ /dev/null @@ -1,300 +0,0 @@ -import Module from '../../core/Module.js'; - -class FrozenColumns extends Module{ - - constructor(table){ - super(table); - - this.leftColumns = []; - this.rightColumns = []; - this.initializationMode = "left"; - this.active = false; - this.blocked = true; - - this.registerColumnOption("frozen"); - } - - //reset initial state - reset(){ - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.active = false; - } - - initialize(){ - this.subscribe("cell-layout", this.layoutCell.bind(this)); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-width", this.layout.bind(this)); - this.subscribe("row-layout-after", this.layoutRow.bind(this)); - this.subscribe("table-layout", this.layout.bind(this)); - this.subscribe("columns-loading", this.reset.bind(this)); - - this.subscribe("column-add", this.reinitializeColumns.bind(this)); - this.subscribe("column-deleted", this.reinitializeColumns.bind(this)); - this.subscribe("column-hide", this.reinitializeColumns.bind(this)); - this.subscribe("column-show", this.reinitializeColumns.bind(this)); - this.subscribe("columns-loaded", this.reinitializeColumns.bind(this)); - - this.subscribe("table-redraw", this.layout.bind(this)); - this.subscribe("layout-refreshing", this.blockLayout.bind(this)); - this.subscribe("layout-refreshed", this.unblockLayout.bind(this)); - this.subscribe("scrollbar-vertical", this.adjustForScrollbar.bind(this)); - } - - blockLayout(){ - this.blocked = true; - } - - unblockLayout(){ - this.blocked = false; - } - - layoutCell(cell){ - this.layoutElement(cell.element, cell.column); - } - - reinitializeColumns(){ - this.reset(); - - this.table.columnManager.columnsByIndex.forEach((column) => { - this.initializeColumn(column); - }); - - this.layout(); - } - - //initialize specific column - initializeColumn(column){ - var config = {margin:0, edge:false}; - - if(!column.isGroup){ - if(this.frozenCheck(column)){ - config.position = this.initializationMode; - - if(this.initializationMode == "left"){ - this.leftColumns.push(column); - }else{ - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - }else{ - this.initializationMode = "right"; - } - } - } - - frozenCheck(column){ - if(column.parent.isGroup && column.definition.frozen){ - console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"); - } - - if(column.parent.isGroup){ - return this.frozenCheck(column.parent); - }else{ - return column.definition.frozen; - } - } - - //layout calculation rows - layoutCalcRows(){ - if(this.table.modExists("columnCalcs")){ - if(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){ - this.layoutRow(this.table.modules.columnCalcs.topRow); - } - - if(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){ - this.layoutRow(this.table.modules.columnCalcs.botRow); - } - - if(this.table.modExists("groupRows")){ - this.layoutGroupCalcs(this.table.modules.groupRows.getGroups()); - } - } - } - - layoutGroupCalcs(groups){ - groups.forEach((group) => { - if(group.calcs.top){ - this.layoutRow(group.calcs.top); - } - - if(group.calcs.bottom){ - this.layoutRow(group.calcs.bottom); - } - - if(group.groupList && group.groupList.length){ - this.layoutGroupCalcs(group.groupList); - } - }); - } - - //calculate column positions and layout headers - layoutColumnPosition(allCells){ - var leftParents = []; - - var leftMargin = 0; - var rightMargin = 0; - - this.leftColumns.forEach((column, i) => { - column.modules.frozen.marginValue = leftMargin; - column.modules.frozen.margin = column.modules.frozen.marginValue + "px"; - - if(column.visible){ - leftMargin += column.getWidth(); - } - - if(i == this.leftColumns.length - 1){ - column.modules.frozen.edge = true; - }else{ - column.modules.frozen.edge = false; - } - - if(column.parent.isGroup){ - var parentEl = this.getColGroupParentElement(column); - if(!leftParents.includes(parentEl)){ - this.layoutElement(parentEl, column); - leftParents.push(parentEl); - } - - parentEl.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left"); - parentEl.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right"); - }else{ - this.layoutElement(column.getElement(), column); - } - - if(allCells){ - column.cells.forEach((cell) => { - this.layoutElement(cell.getElement(true), column); - }); - } - }); - - this.rightColumns.forEach((column, i) => { - - column.modules.frozen.marginValue = rightMargin; - column.modules.frozen.margin = column.modules.frozen.marginValue + "px"; - - if(column.visible){ - rightMargin += column.getWidth(); - } - - if(i == this.rightColumns.length - 1){ - column.modules.frozen.edge = true; - }else{ - column.modules.frozen.edge = false; - } - - if(column.parent.isGroup){ - this.layoutElement(this.getColGroupParentElement(column), column); - }else{ - this.layoutElement(column.getElement(), column); - } - - if(allCells){ - column.cells.forEach((cell) => { - this.layoutElement(cell.getElement(true), column); - }); - } - }); - } - - getColGroupParentElement(column){ - return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement(); - } - - //layout columns appropriately - layout(){ - if(this.active && !this.blocked){ - //calculate left columns - this.layoutColumnPosition(); - - this.reinitializeRows(); - - this.layoutCalcRows(); - } - } - - reinitializeRows(){ - var visibleRows = this.table.rowManager.getVisibleRows(true); - var otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row)); - - otherRows.forEach((row) =>{ - row.deinitialize(); - }); - - visibleRows.forEach((row) =>{ - if(row.type === "row"){ - this.layoutRow(row); - } - }); - } - - layoutRow(row){ - if(this.table.options.layout === "fitDataFill" && this.rightColumns.length){ - this.table.rowManager.getTableElement().style.minWidth = "calc(100% - " + this.rightMargin + ")"; - } - - this.leftColumns.forEach((column) => { - var cell = row.getCell(column); - - if(cell){ - this.layoutElement(cell.getElement(true), column); - } - }); - - this.rightColumns.forEach((column) => { - var cell = row.getCell(column); - - if(cell){ - this.layoutElement(cell.getElement(true), column); - } - }); - } - - layoutElement(element, column){ - var position; - - if(column.modules.frozen && element){ - element.style.position = "sticky"; - - if(this.table.rtl){ - position = column.modules.frozen.position === "left" ? "right" : "left"; - }else{ - position = column.modules.frozen.position; - } - - element.style[position] = column.modules.frozen.margin; - - element.classList.add("tabulator-frozen"); - - element.classList.toggle("tabulator-frozen-left", column.modules.frozen.edge && column.modules.frozen.position === "left"); - element.classList.toggle("tabulator-frozen-right", column.modules.frozen.edge && column.modules.frozen.position === "right"); - } - } - - adjustForScrollbar(width){ - if(this.rightColumns.length){ - this.table.columnManager.getContentsElement().style.width = "calc(100% - " + width + "px)"; - } - } - - _calcSpace(columns, index){ - var width = 0; - - for (let i = 0; i < index; i++){ - if(columns[i].visible){ - width += columns[i].getWidth(); - } - } - - return width; - } -} - -FrozenColumns.moduleName = "frozenColumns"; - -export default FrozenColumns; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/FrozenRows/FrozenRows.js b/tmp/tabulator-5.6.1/src/js/modules/FrozenRows/FrozenRows.js deleted file mode 100644 index e306590..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/FrozenRows/FrozenRows.js +++ /dev/null @@ -1,175 +0,0 @@ -import Module from '../../core/Module.js'; - -class FrozenRows extends Module{ - - constructor(table){ - super(table); - - this.topElement = document.createElement("div"); - this.rows = []; - - //register component functions - this.registerComponentFunction("row", "freeze", this.freezeRow.bind(this)); - this.registerComponentFunction("row", "unfreeze", this.unfreezeRow.bind(this)); - this.registerComponentFunction("row", "isFrozen", this.isRowFrozen.bind(this)); - - //register table options - this.registerTableOption("frozenRowsField", "id"); //field to choose frozen rows by - this.registerTableOption("frozenRows", false); //holder for frozen row identifiers - } - - initialize(){ - var fragment = document.createDocumentFragment(); - - this.rows = []; - - this.topElement.classList.add("tabulator-frozen-rows-holder"); - - fragment.appendChild(document.createElement("br")); - fragment.appendChild(this.topElement); - - // this.table.columnManager.element.append(this.topElement); - this.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling); - - this.subscribe("row-deleting", this.detachRow.bind(this)); - this.subscribe("rows-visible", this.visibleRows.bind(this)); - - this.registerDisplayHandler(this.getRows.bind(this), 10); - - if(this.table.options.frozenRows){ - this.subscribe("data-processed", this.initializeRows.bind(this)); - this.subscribe("row-added", this.initializeRow.bind(this)); - this.subscribe("table-redrawing", this.resizeHolderWidth.bind(this)); - this.subscribe("column-resized", this.resizeHolderWidth.bind(this)); - this.subscribe("column-show", this.resizeHolderWidth.bind(this)); - this.subscribe("column-hide", this.resizeHolderWidth.bind(this)); - } - - this.resizeHolderWidth(); - } - - resizeHolderWidth(){ - this.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + "px"; - } - - initializeRows(){ - this.table.rowManager.getRows().forEach((row) => { - this.initializeRow(row); - }); - } - - initializeRow(row){ - var frozenRows = this.table.options.frozenRows, - rowType = typeof frozenRows; - - if(rowType === "number"){ - if(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){ - this.freezeRow(row); - } - }else if(rowType === "function"){ - if(frozenRows.call(this.table, row.getComponent())){ - this.freezeRow(row); - } - }else if(Array.isArray(frozenRows)){ - if(frozenRows.includes(row.data[this.options("frozenRowsField")])){ - this.freezeRow(row); - } - } - } - - isRowFrozen(row){ - var index = this.rows.indexOf(row); - return index > -1; - } - - isFrozen(){ - return !!this.rows.length; - } - - visibleRows(viewable, rows){ - this.rows.forEach((row) => { - rows.push(row); - }); - - return rows; - } - - //filter frozen rows out of display data - getRows(rows){ - var output = rows.slice(0); - - this.rows.forEach(function(row){ - var index = output.indexOf(row); - - if(index > -1){ - output.splice(index, 1); - } - }); - - return output; - } - - freezeRow(row){ - if(!row.modules.frozen){ - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - - this.rows.push(row); - - this.refreshData(false, "display"); - - this.table.rowManager.adjustTableSize(); - - this.styleRows(); - - }else{ - console.warn("Freeze Error - Row is already frozen"); - } - } - - unfreezeRow(row){ - if(row.modules.frozen){ - - row.modules.frozen = false; - - this.detachRow(row); - - this.table.rowManager.adjustTableSize(); - - this.refreshData(false, "display"); - - if(this.rows.length){ - this.styleRows(); - } - - }else{ - console.warn("Freeze Error - Row is already unfrozen"); - } - } - - detachRow(row){ - var index = this.rows.indexOf(row); - - if(index > -1){ - var rowEl = row.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - - this.rows.splice(index, 1); - } - } - - styleRows(row){ - this.rows.forEach((row, i) => { - this.table.rowManager.styleRow(row, i); - }); - } -} - -FrozenRows.moduleName = "frozenRows"; - -export default FrozenRows; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/GroupRows/Group.js b/tmp/tabulator-5.6.1/src/js/modules/GroupRows/Group.js deleted file mode 100644 index 301871d..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/GroupRows/Group.js +++ /dev/null @@ -1,615 +0,0 @@ -import Helpers from '../../core/tools/Helpers.js'; -import GroupComponent from './GroupComponent.js'; - -//Group functions -class Group{ - - constructor(groupManager, parent, level, key, field, generator, oldGroup){ - this.groupManager = groupManager; - this.parent = parent; - this.key = key; - this.level = level; - this.field = field; - this.hasSubGroups = level < (groupManager.groupIDLookups.length - 1); - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.element = false; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - this.arrowElement = false; - - this.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]); - - this.component = null; - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); - } - - wipe(elementsOnly){ - if(!elementsOnly){ - if(this.groupList.length){ - this.groupList.forEach(function(group){ - group.wipe(); - }); - }else{ - this.rows.forEach((row) => { - if(row.modules){ - delete row.modules.group; - } - }); - } - } - - this.element = false; - this.arrowElement = false; - this.elementContents = false; - } - - createElements(){ - var arrow = document.createElement("div"); - arrow.classList.add("tabulator-arrow"); - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-group-toggle"); - this.arrowElement.appendChild(arrow); - - //setup movable rows - if(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")){ - this.groupManager.table.modules.moveRow.initializeGroupHeader(this); - } - } - - createValueGroups(){ - var level = this.level + 1; - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - this.groupManager.allowedValues[level].forEach((value) => { - this._createGroup(value, level); - }); - } - } - - addBindings(){ - var toggleElement; - - if(this.groupManager.table.options.groupToggleElement){ - toggleElement = this.groupManager.table.options.groupToggleElement == "arrow" ? this.arrowElement : this.element; - - toggleElement.addEventListener("click", (e) => { - if(this.groupManager.table.options.groupToggleElement === "arrow"){ - e.stopPropagation(); - e.stopImmediatePropagation(); - } - - //allow click event to propagate before toggling visibility - setTimeout(() => { - this.toggleVisibility(); - }); - }); - } - } - - _createGroup(groupID, level){ - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); - } - - _addRowToGroup(row){ - - var level = this.level + 1; - - if(this.hasSubGroups){ - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } - }else{ - if(!this.groups[groupKey]){ - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } - } - - _addRow(row){ - this.rows.push(row); - row.modules.group = this; - } - - insertRow(row, to, after){ - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if(toIndex > -1){ - if(after){ - this.rows.splice(toIndex+1, 0, row); - }else{ - this.rows.splice(toIndex, 0, row); - } - }else{ - if(after){ - this.rows.push(row); - }else{ - this.rows.unshift(row); - } - } - - row.modules.group = this; - - // this.generateGroupHeaderContents(); - - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - - this.groupManager.updateGroupRows(true); - } - - scrollHeader(left){ - if(this.arrowElement){ - this.arrowElement.style.marginLeft = left; - - this.groupList.forEach(function(child){ - child.scrollHeader(left); - }); - } - } - - getRowIndex(row){} - - //update row data to match grouping constraints - conformRowData(data){ - if(this.field){ - data[this.field] = this.key; - }else{ - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if(this.parent){ - data = this.parent.conformRowData(data); - } - - return data; - } - - removeRow(row){ - var index = this.rows.indexOf(row); - var el = row.getElement(); - - if(index > -1){ - this.rows.splice(index, 1); - } - - if(!this.groupManager.table.options.groupValues && !this.rows.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else{ - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - - }else{ - - if(el.parentNode){ - el.parentNode.removeChild(el); - } - - if(!this.groupManager.blockRedraw){ - this.generateGroupHeaderContents(); - - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } - - } - } - - removeGroup(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - - if(!this.groupList.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else{ - this.groupManager.removeGroup(this); - } - } - } - } - - getHeadersAndRows(){ - var output = []; - - output.push(this); - - this._visSet(); - - - if(this.calcs.top){ - this.calcs.top.detachElement(); - this.calcs.top.deleteCells(); - } - - if(this.calcs.bottom){ - this.calcs.bottom.detachElement(); - this.calcs.bottom.deleteCells(); - } - - - - if(this.visible){ - if(this.groupList.length){ - this.groupList.forEach(function(group){ - output = output.concat(group.getHeadersAndRows()); - }); - - }else{ - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - output = output.concat(this.rows); - - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - }else{ - if(!this.groupList.length && this.groupManager.table.options.columnCalcs != "table"){ - - if(this.groupManager.table.modExists("columnCalcs")){ - if(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - if(this.groupManager.table.options.groupClosedShowCalcs){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - } - - if(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - if(this.groupManager.table.options.groupClosedShowCalcs){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - - } - - return output; - } - - getData(visible, transform){ - var output = []; - - this._visSet(); - - if(!visible || (visible && this.visible)){ - this.rows.forEach((row) => { - output.push(row.getData(transform || "data")); - }); - } - - return output; - } - - getRowCount(){ - var count = 0; - - if(this.groupList.length){ - this.groupList.forEach((group) => { - count += group.getRowCount(); - }); - }else{ - count = this.rows.length; - } - return count; - } - - - toggleVisibility(){ - if(this.visible){ - this.hide(); - }else{ - this.show(); - } - } - - hide(){ - this.visible = false; - - if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){ - - this.element.classList.remove("tabulator-group-visible"); - - if(this.groupList.length){ - this.groupList.forEach((group) => { - - var rows = group.getHeadersAndRows(); - - rows.forEach((row) => { - row.detachElement(); - }); - }); - - }else{ - this.rows.forEach((row) => { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - } - - this.groupManager.updateGroupRows(true); - - }else{ - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), false); - } - - show(){ - this.visible = true; - - if(this.groupManager.table.rowManager.getRenderMode() == "basic" && !this.groupManager.table.options.pagination){ - - this.element.classList.add("tabulator-group-visible"); - - var prev = this.generateElement(); - - if(this.groupList.length){ - this.groupList.forEach((group) => { - var rows = group.getHeadersAndRows(); - - rows.forEach((row) => { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - - }else{ - this.rows.forEach((row) => { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - } - - this.groupManager.updateGroupRows(true); - }else{ - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), true); - } - - _visSet(){ - var data = []; - - if(typeof this.visible == "function"){ - - this.rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent()); - } - } - - getRowGroup(row){ - var match = false; - if(this.groupList.length){ - this.groupList.forEach(function(group){ - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - }else{ - if(this.rows.find(function(item){ - return item === row; - })){ - match = this; - } - } - - return match; - } - - getSubGroups(component){ - var output = []; - - this.groupList.forEach(function(child){ - output.push(component ? child.getComponent() : child); - }); - - return output; - } - - getRows(component, includeChildren){ - var output = []; - - if(includeChildren && this.groupList.length){ - this.groupList.forEach((group) => { - output = output.concat(group.getRows(component, includeChildren)); - }); - }else{ - this.rows.forEach(function(row){ - output.push(component ? row.getComponent() : row); - }); - } - - return output; - } - - generateGroupHeaderContents(){ - var data = []; - - var rows = this.getRows(false, true); - - rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(typeof this.elementContents === "string"){ - this.element.innerHTML = this.elementContents; - }else{ - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); - } - - getPath(path = []) { - path.unshift(this.key); - if(this.parent) { - this.parent.getPath(path); - } - return path; - } - - ////////////// Standard Row Functions ////////////// - - getElement(){ - return this.elementContents ? this.element : this.generateElement(); - } - - generateElement(){ - this.addBindings = false; - - this._visSet(); - - if(this.visible){ - this.element.classList.add("tabulator-group-visible"); - }else{ - this.element.classList.remove("tabulator-group-visible"); - } - - for(var i = 0; i < this.element.childNodes.length; ++i){ - this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]); - } - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; - } - - detachElement(){ - if (this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } - } - - //normalize the height of elements in the row - normalizeHeight(){ - this.setHeight(this.element.clientHeight); - } - - initialize(force){ - if(!this.initialized || force){ - this.normalizeHeight(); - this.initialized = true; - } - } - - reinitialize(){ - this.initialized = false; - this.height = 0; - - if(Helpers.elVisible(this.element)){ - this.initialize(true); - } - } - - setHeight(height){ - if(this.height != height){ - this.height = height; - this.outerHeight = this.element.offsetHeight; - } - } - - //return rows outer height - getHeight(){ - return this.outerHeight; - } - - getGroup(){ - return this; - } - - reinitializeHeight(){} - - calcHeight(){} - - setCellHeight(){} - - clearCellHeight(){} - - deinitializeHeight(){} - - rendered(){} - - //////////////// Object Generation ///////////////// - getComponent(){ - if(!this.component){ - this.component = new GroupComponent(this); - } - - return this.component; - } -} - -export default Group; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/GroupRows/GroupComponent.js b/tmp/tabulator-5.6.1/src/js/modules/GroupRows/GroupComponent.js deleted file mode 100644 index 1920aed..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/GroupRows/GroupComponent.js +++ /dev/null @@ -1,71 +0,0 @@ -//public group object -class GroupComponent { - constructor (group){ - this._group = group; - this.type = "GroupComponent"; - - return new Proxy(this, { - get: function(target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - }else{ - return target._group.groupManager.table.componentFunctionBinder.handle("group", target._group, name); - } - } - }); - } - - getKey(){ - return this._group.key; - } - - getField(){ - return this._group.field; - } - - getElement(){ - return this._group.element; - } - - getRows(){ - return this._group.getRows(true); - } - - getSubGroups(){ - return this._group.getSubGroups(true); - } - - getParentGroup(){ - return this._group.parent ? this._group.parent.getComponent() : false; - } - - isVisible(){ - return this._group.visible; - } - - show(){ - this._group.show(); - } - - hide(){ - this._group.hide(); - } - - toggle(){ - this._group.toggleVisibility(); - } - - scrollTo(position, ifVisible){ - return this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible); - } - - _getSelf(){ - return this._group; - } - - getTable(){ - return this._group.groupManager.table; - } -} - -export default GroupComponent; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/GroupRows/GroupRows.js b/tmp/tabulator-5.6.1/src/js/modules/GroupRows/GroupRows.js deleted file mode 100644 index b413cbb..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/GroupRows/GroupRows.js +++ /dev/null @@ -1,640 +0,0 @@ -import Module from '../../core/Module.js'; - -import Group from './Group.js'; - -class GroupRows extends Module{ - - constructor(table){ - super(table); - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function(){return false;}]; //starting state of group - this.headerGenerator = [function(){return "";}]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - - this.displayHandler = this.getRows.bind(this); - - this.blockRedraw = false; - - //register table options - this.registerTableOption("groupBy", false); //enable table grouping and set field to group by - this.registerTableOption("groupStartOpen", true); //starting state of group - this.registerTableOption("groupValues", false); - this.registerTableOption("groupUpdateOnCellEdit", false); - this.registerTableOption("groupHeader", false); //header generation function - this.registerTableOption("groupHeaderPrint", null); - this.registerTableOption("groupHeaderClipboard", null); - this.registerTableOption("groupHeaderHtmlOutput", null); - this.registerTableOption("groupHeaderDownload", null); - this.registerTableOption("groupToggleElement", "arrow"); - this.registerTableOption("groupClosedShowCalcs", false); - - //register table functions - this.registerTableFunction("setGroupBy", this.setGroupBy.bind(this)); - this.registerTableFunction("setGroupValues", this.setGroupValues.bind(this)); - this.registerTableFunction("setGroupStartOpen", this.setGroupStartOpen.bind(this)); - this.registerTableFunction("setGroupHeader", this.setGroupHeader.bind(this)); - this.registerTableFunction("getGroups", this.userGetGroups.bind(this)); - this.registerTableFunction("getGroupedData", this.userGetGroupedData.bind(this)); - - //register component functions - this.registerComponentFunction("row", "getGroup", this.rowGetGroup.bind(this)); - } - - //initialize group configuration - initialize(){ - this.subscribe("table-destroy", this._blockRedrawing.bind(this)); - this.subscribe("rows-wipe", this._blockRedrawing.bind(this)); - this.subscribe("rows-wiped", this._restore_redrawing.bind(this)); - - if(this.table.options.groupBy){ - if(this.table.options.groupUpdateOnCellEdit){ - this.subscribe("cell-value-updated", this.cellUpdated.bind(this)); - this.subscribe("row-data-changed", this.reassignRowToGroup.bind(this), 0); - } - - this.subscribe("table-built", this.configureGroupSetup.bind(this)); - - this.subscribe("row-deleting", this.rowDeleting.bind(this)); - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("scroll-horizontal", this.scrollHeaders.bind(this)); - this.subscribe("rows-wipe", this.wipe.bind(this)); - this.subscribe("rows-added", this.rowsUpdated.bind(this)); - this.subscribe("row-moving", this.rowMoving.bind(this)); - this.subscribe("row-adding-index", this.rowAddingIndex.bind(this)); - - this.subscribe("rows-sample", this.rowSample.bind(this)); - - this.subscribe("render-virtual-fill", this.virtualRenderFill.bind(this)); - - this.registerDisplayHandler(this.displayHandler, 20); - - this.initialized = true; - } - } - - _blockRedrawing(){ - this.blockRedraw = true; - } - - _restore_redrawing(){ - this.blockRedraw = false; - } - - configureGroupSetup(){ - if(this.table.options.groupBy){ - var groupBy = this.table.options.groupBy, - startOpen = this.table.options.groupStartOpen, - groupHeader = this.table.options.groupHeader; - - this.allowedValues = this.table.options.groupValues; - - if(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){ - console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"); - } - - this.headerGenerator = [function(){return "";}]; - this.startOpen = [function(){return false;}]; //starting state of group - - this.langBind("groups|item", (langValue, lang) => { - this.headerGenerator[0] = (value, count, data) => { //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + ((count === 1) ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if(groupBy){ - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both"){ - this.table.modules.columnCalcs.removeCalcs(); - } - }else{ - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group"){ - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach((col) => { - if(col.definition.topCalc){ - this.table.modules.columnCalcs.initializeTopRow(); - } - - if(col.definition.bottomCalc){ - this.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - if(!Array.isArray(groupBy)){ - groupBy = [groupBy]; - } - - groupBy.forEach((group, i) => { - var lookupFunc, column; - - if(typeof group == "function"){ - lookupFunc = group; - }else{ - column = this.table.columnManager.getColumnByField(group); - - if(column){ - lookupFunc = function(data){ - return column.getFieldValue(data); - }; - }else{ - lookupFunc = function(data){ - return data[group]; - }; - } - } - - this.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func:lookupFunc, - values:this.allowedValues ? this.allowedValues[i] : false, - }); - }); - - if(startOpen){ - if(!Array.isArray(startOpen)){ - startOpen = [startOpen]; - } - - startOpen.forEach((level) => { - level = typeof level == "function" ? level : function(){return true;}; - }); - - this.startOpen = startOpen; - } - - if(groupHeader){ - this.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - }else{ - this.groupList = []; - this.groups = {}; - } - } - - rowSample(rows, prevValue){ - if(this.table.options.groupBy){ - var group = this.getGroups(false)[0]; - - prevValue.push(group.getRows(false)[0]); - } - - return prevValue; - } - - virtualRenderFill(){ - var el = this.table.rowManager.tableElement; - var rows = this.table.rowManager.getVisibleRows(); - - if(this.table.options.groupBy){ - rows = rows.filter((row) => { - return row.type !== "group"; - }); - - el.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + "px" : ""; - }else{ - return rows; - } - } - - rowAddingIndex(row, index, top){ - if(this.table.options.groupBy){ - this.assignRowToGroup(row); - - var groupRows = row.modules.group.rows; - - if(groupRows.length > 1){ - if(!index || (index && groupRows.indexOf(index) == -1)){ - if(top){ - if(groupRows[0] !== row){ - index = groupRows[0]; - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - }else{ - if(groupRows[groupRows.length -1] !== row){ - index = groupRows[groupRows.length -1]; - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - } - }else{ - this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); - } - } - - return index; - } - } - - trackChanges(){ - this.dispatch("group-changed"); - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - setGroupBy(groups){ - this.table.options.groupBy = groups; - - if(!this.initialized){ - this.initialize(); - } - - this.configureGroupSetup(); - - if(!groups && this.table.modExists("columnCalcs") && this.table.options.columnCalcs === true){ - this.table.modules.columnCalcs.reinitializeCalcs(); - } - - this.refreshData(); - - this.trackChanges(); - } - - setGroupValues(groupValues){ - this.table.options.groupValues = groupValues; - this.configureGroupSetup(); - this.refreshData(); - - this.trackChanges(); - } - - setGroupStartOpen(values){ - this.table.options.groupStartOpen = values; - this.configureGroupSetup(); - - if(this.table.options.groupBy){ - this.refreshData(); - - this.trackChanges(); - }else{ - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } - - setGroupHeader(values){ - this.table.options.groupHeader = values; - this.configureGroupSetup(); - - if(this.table.options.groupBy){ - this.refreshData(); - - this.trackChanges(); - }else{ - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } - - userGetGroups(values){ - return this.getGroups(true); - } - - // get grouped table data in the same format as getData() - userGetGroupedData(){ - return this.table.options.groupBy ? this.getGroupedData() : this.getData(); - } - - - /////////////////////////////////////// - ///////// Component Functions ///////// - /////////////////////////////////////// - - rowGetGroup(row){ - return row.modules.group ? row.modules.group.getComponent() : false; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - rowMoving(from, to, after){ - if(this.table.options.groupBy){ - if(!after && to instanceof Group){ - to = this.table.rowManager.prevDisplayRow(from) || to; - } - - var toGroup = to instanceof Group ? to : to.modules.group; - var fromGroup = from instanceof Group ? from : from.modules.group; - - if(toGroup === fromGroup){ - this.table.rowManager.moveRowInArray(toGroup.rows, from, to, after); - }else{ - if(fromGroup){ - fromGroup.removeRow(from); - } - - toGroup.insertRow(from, to, after); - } - } - } - - - rowDeleting(row){ - //remove from group - if(this.table.options.groupBy && row.modules.group){ - row.modules.group.removeRow(row); - } - } - - rowsUpdated(row){ - if(this.table.options.groupBy){ - this.updateGroupRows(true); - } - } - - cellUpdated(cell){ - if(this.table.options.groupBy){ - this.reassignRowToGroup(cell.row); - } - } - - //return appropriate rows with group headers - getRows(rows){ - if(this.table.options.groupBy && this.groupIDLookups.length){ - - this.dispatchExternal("dataGrouping"); - - this.generateGroups(rows); - - if(this.subscribedExternal("dataGrouped")){ - this.dispatchExternal("dataGrouped", this.getGroups(true)); - } - - return this.updateGroupRows(); - - }else{ - return rows.slice(0); - } - } - - getGroups(component){ - var groupComponents = []; - - this.groupList.forEach(function(group){ - groupComponents.push(component ? group.getComponent() : group); - }); - - return groupComponents; - } - - getChildGroups(group){ - var groupComponents = []; - - if(!group){ - group = this; - } - - group.groupList.forEach((child) => { - if(child.groupList.length){ - groupComponents = groupComponents.concat(this.getChildGroups(child)); - }else{ - groupComponents.push(child); - } - }); - - return groupComponents; - } - - wipe(){ - if(this.table.options.groupBy){ - this.groupList.forEach(function(group){ - group.wipe(); - }); - - this.groupList = []; - this.groups = {}; - } - } - - pullGroupListData(groupList) { - var groupListData = []; - - groupList.forEach((group) => { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = this.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } - - else { - groupHeader.level = group.level; - groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group); - groupHeader.rowCount = group.getRows().length; - - groupListData.push(groupHeader); - - group.getRows().forEach((row) => { - groupListData.push(row.getData("data")); - }); - } - }); - - return groupListData; - } - - getGroupedData(){ - - return this.pullGroupListData(this.groupList); - } - - getRowGroup(row){ - var match = false; - - if(this.options("dataTree")){ - row = this.table.modules.dataTree.getTreeParentRoot(row); - } - - this.groupList.forEach((group) => { - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - - return match; - } - - countGroups(){ - return this.groupList.length; - } - - generateGroups(rows){ - var oldGroups = this.groups; - - this.groups = {}; - this.groupList = []; - - if(this.allowedValues && this.allowedValues[0]){ - this.allowedValues[0].forEach((value) => { - this.createGroup(value, 0, oldGroups); - }); - - rows.forEach((row) => { - this.assignRowToExistingGroup(row, oldGroups); - }); - }else{ - rows.forEach((row) => { - this.assignRowToGroup(row, oldGroups); - }); - } - - Object.values(oldGroups).forEach((group) => { - group.wipe(true); - }); - } - - - createGroup(groupID, level, oldGroups){ - var groupKey = level + "_" + groupID, - group; - - oldGroups = oldGroups || []; - - group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); - } - - assignRowToExistingGroup(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } - } - - assignRowToGroup(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - newGroupNeeded = !this.groups["0_" + groupID]; - - if(newGroupNeeded){ - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; - } - - reassignRowToGroup(row){ - if(row.type === "row"){ - var oldRowGroup = row.modules.group, - oldGroupPath = oldRowGroup.getPath(), - newGroupPath = this.getExpectedPath(row), - samePath; - - // figure out if new group path is the same as old group path - samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => { - return element === newGroupPath[index]; - }); - - // refresh if they new path and old path aren't the same (aka the row's groupings have changed) - if(!samePath) { - oldRowGroup.removeRow(row); - this.assignRowToGroup(row, this.groups); - this.refreshData(true); - } - } - } - - getExpectedPath(row) { - var groupPath = [], rowData = row.getData(); - - this.groupIDLookups.forEach((groupId) => { - groupPath.push(groupId.func(rowData)); - }); - - return groupPath; - } - - updateGroupRows(force){ - var output = []; - - if(!this.blockRedraw){ - this.groupList.forEach((group) => { - output = output.concat(group.getHeadersAndRows()); - }); - - if(force){ - this.refreshData(true); - } - } - - return output; - } - - scrollHeaders(left){ - if(this.table.options.groupBy){ - if(this.table.options.renderHorizontal === "virtual"){ - left -= this.table.columnManager.renderer.vDomPadLeft; - } - - left = left + "px"; - - this.groupList.forEach((group) => { - group.scrollHeader(left); - }); - } - } - - removeGroup(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - } - } - - checkBasicModeGroupHeaderWidth(){ - var element = this.table.rowManager.tableElement, - onlyGroupHeaders = true; - - this.table.rowManager.getDisplayRows().forEach((row, index) =>{ - this.table.rowManager.styleRow(row, index); - element.appendChild(row.getElement()); - row.initialize(true); - - if(row.type !== "group"){ - onlyGroupHeaders = false; - } - }); - - if(onlyGroupHeaders){ - element.style.minWidth = this.table.columnManager.getWidth() + "px"; - }else{ - element.style.minWidth = ""; - } - } - -} - -GroupRows.moduleName = "groupRows"; - -export default GroupRows; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/History/History.js b/tmp/tabulator-5.6.1/src/js/modules/History/History.js deleted file mode 100644 index f1d0bbb..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/History/History.js +++ /dev/null @@ -1,172 +0,0 @@ -import Module from '../../core/Module.js'; -import Row from '../../core/row/Row.js'; -import Cell from '../../core/cell/Cell.js'; - -import defaultUndoers from './defaults/undoers.js'; -import defaultRedoers from './defaults/redoers.js'; - -class History extends Module{ - - constructor(table){ - super(table); - - this.history = []; - this.index = -1; - - this.registerTableOption("history", false); //enable edit history - } - - initialize(){ - if(this.table.options.history){ - this.subscribe("cell-value-updated", this.cellUpdated.bind(this)); - this.subscribe("cell-delete", this.clearComponentHistory.bind(this)); - this.subscribe("row-delete", this.rowDeleted.bind(this)); - this.subscribe("rows-wipe", this.clear.bind(this)); - this.subscribe("row-added", this.rowAdded.bind(this)); - this.subscribe("row-move", this.rowMoved.bind(this)); - } - - this.registerTableFunction("undo", this.undo.bind(this)); - this.registerTableFunction("redo", this.redo.bind(this)); - this.registerTableFunction("getHistoryUndoSize", this.getHistoryUndoSize.bind(this)); - this.registerTableFunction("getHistoryRedoSize", this.getHistoryRedoSize.bind(this)); - this.registerTableFunction("clearHistory", this.clear.bind(this)); - } - - rowMoved(from, to, after){ - this.action("rowMove", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after}); - } - - rowAdded(row, data, pos, index){ - this.action("rowAdd", row, {data:data, pos:pos, index:index}); - } - - rowDeleted(row){ - var index, rows; - - if(this.table.options.groupBy){ - - rows = row.getComponent().getGroup()._getSelf().rows; - index = rows.indexOf(row); - - if(index){ - index = rows[index-1]; - } - }else{ - index = row.table.rowManager.getRowIndex(row); - - if(index){ - index = row.table.rowManager.rows[index-1]; - } - } - - this.action("rowDelete", row, {data:row.getData(), pos:!index, index:index}); - } - - cellUpdated(cell){ - this.action("cellEdit", cell, {oldValue:cell.oldValue, newValue:cell.value}); - } - - clear(){ - this.history = []; - this.index = -1; - } - - action(type, component, data){ - this.history = this.history.slice(0, this.index + 1); - - this.history.push({ - type:type, - component:component, - data:data, - }); - - this.index ++; - } - - getHistoryUndoSize(){ - return this.index + 1; - } - - getHistoryRedoSize(){ - return this.history.length - (this.index + 1); - } - - clearComponentHistory(component){ - var index = this.history.findIndex(function(item){ - return item.component === component; - }); - - if(index > -1){ - this.history.splice(index, 1); - if(index <= this.index){ - this.index--; - } - - this.clearComponentHistory(component); - } - } - - undo(){ - if(this.index > -1){ - let action = this.history[this.index]; - - History.undoers[action.type].call(this, action); - - this.index--; - - this.dispatchExternal("historyUndo", action.type, action.component.getComponent(), action.data); - - return true; - }else{ - console.warn(this.options("history") ? "History Undo Error - No more history to undo" : "History module not enabled"); - return false; - } - } - - redo(){ - if(this.history.length-1 > this.index){ - - this.index++; - - let action = this.history[this.index]; - - History.redoers[action.type].call(this, action); - - this.dispatchExternal("historyRedo", action.type, action.component.getComponent(), action.data); - - return true; - }else{ - console.warn(this.options("history") ? "History Redo Error - No more history to redo" : "History module not enabled"); - return false; - } - } - - //rebind rows to new element after deletion - _rebindRow(oldRow, newRow){ - this.history.forEach(function(action){ - if(action.component instanceof Row){ - if(action.component === oldRow){ - action.component = newRow; - } - }else if(action.component instanceof Cell){ - if(action.component.row === oldRow){ - var field = action.component.column.getField(); - - if(field){ - action.component = newRow.getCell(field); - } - - } - } - }); - } -} - -History.moduleName = "history"; - -//load defaults -History.undoers = defaultUndoers; -History.redoers = defaultRedoers; - -export default History; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/History/defaults/redoers.js b/tmp/tabulator-5.6.1/src/js/modules/History/defaults/redoers.js deleted file mode 100644 index 54cb4ae..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/History/defaults/redoers.js +++ /dev/null @@ -1,31 +0,0 @@ -export default { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.newValue); - action.component.cellRendered(); - }, - - rowAdd: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - } - - this._rebindRow(action.component, newRow); - - this.table.rowManager.checkPlaceholder(); - }, - - rowDelete:function(action){ - action.component.deleteActual(); - - this.table.rowManager.checkPlaceholder(); - }, - - rowMove: function(action){ - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after); - - this.table.rowManager.regenerateRowPositions(); - this.table.rowManager.reRenderInPosition(); - }, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/History/defaults/undoers.js b/tmp/tabulator-5.6.1/src/js/modules/History/defaults/undoers.js deleted file mode 100644 index ea47456..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/History/defaults/undoers.js +++ /dev/null @@ -1,33 +0,0 @@ -export default { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.oldValue); - action.component.cellRendered(); - }, - - rowAdd: function(action){ - action.component.deleteActual(); - - this.table.rowManager.checkPlaceholder(); - }, - - rowDelete: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - } - - this._rebindRow(action.component, newRow); - - this.table.rowManager.checkPlaceholder(); - }, - - rowMove: function(action){ - var after = (action.data.posFrom - action.data.posTo) > 0; - - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after); - - this.table.rowManager.regenerateRowPositions(); - this.table.rowManager.reRenderInPosition(); - }, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/HtmlTableImport/HtmlTableImport.js b/tmp/tabulator-5.6.1/src/js/modules/HtmlTableImport/HtmlTableImport.js deleted file mode 100644 index 3df939a..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/HtmlTableImport/HtmlTableImport.js +++ /dev/null @@ -1,182 +0,0 @@ -import Module from '../../core/Module.js'; - -class HtmlTableImport extends Module{ - - constructor(table){ - super(table); - - this.fieldIndex = []; - this.hasIndex = false; - } - - initialize(){ - this.tableElementCheck(); - } - - tableElementCheck(){ - if(this.table.originalElement && this.table.originalElement.tagName === "TABLE"){ - if(this.table.originalElement.childNodes.length){ - this.parseTable(); - }else{ - console.warn("Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element."); - } - } - } - - parseTable(){ - var element = this.table.originalElement, - options = this.table.options, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = []; - - this.hasIndex = false; - - this.dispatchExternal("htmlImporting"); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for Tabulator inline options - this._extractOptions(element, options); - - if(headers.length){ - this._extractHeaders(headers, rows); - }else{ - this._generateBlankHeaders(headers, rows); - } - - //iterate through table rows and build data set - for(var index = 0; index < rows.length; index++){ - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the don't exist in table - if(!this.hasIndex){ - item[options.index] = index; - } - - for(var i = 0; i < cells.length; i++){ - var cell = cells[i]; - if(typeof this.fieldIndex[i] !== "undefined"){ - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - options.data = data; - - this.dispatchExternal("htmlImported"); - } - - //extract tabulator attribute options - _extractOptions(element, options, defaultOptions){ - var attributes = element.attributes; - var optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options); - var optionsList = {}; - - optionsArr.forEach((item) => { - optionsList[item.toLowerCase()] = item; - }); - - for(var index in attributes){ - var attrib = attributes[index]; - var name; - - if(attrib && typeof attrib == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0){ - name = attrib.name.replace("tabulator-", ""); - - if(typeof optionsList[name] !== "undefined"){ - options[optionsList[name]] = this._attribValue(attrib.value); - } - } - } - } - - //get value of attribute - _attribValue(value){ - if(value === "true"){ - return true; - } - - if(value === "false"){ - return false; - } - - return value; - } - - //find column if it has already been defined - _findCol(title){ - var match = this.table.options.columns.find((column) => { - return column.title === title; - }); - - return match || false; - } - - //extract column from headers - _extractHeaders(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width; - - if(col){ - exists = true; - }else{ - col = {title:header.textContent.trim()}; - } - - if(!col.field) { - col.field = header.textContent.trim().toLowerCase().replaceAll(" ", "_"); - } - - width = header.getAttribute("width"); - - if(width && !col.width) { - col.width = width; - } - - //check for Tabulator inline options - this._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults); - - this.fieldIndex[index] = col.field; - - if(col.field == this.table.options.index){ - this.hasIndex = true; - } - - if(!exists){ - this.table.options.columns.push(col); - } - - } - } - - //generate blank headers - _generateBlankHeaders(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - col = {title:"", field:"col" + index}; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if(width){ - col.width = width; - } - - this.table.options.columns.push(col); - } - } -} - -HtmlTableImport.moduleName = "htmlTableImport"; - -export default HtmlTableImport; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Import/Import.js b/tmp/tabulator-5.6.1/src/js/modules/Import/Import.js deleted file mode 100644 index 36deceb..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Import/Import.js +++ /dev/null @@ -1,194 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultImporters from './defaults/importers.js'; - -class Import extends Module{ - - constructor(table){ - super(table); - - this.registerTableOption("importFormat"); - this.registerTableOption("importReader", "text"); - } - - initialize(){ - this.registerTableFunction("import", this.importFromFile.bind(this)); - - if(this.table.options.importFormat){ - this.subscribe("data-loading", this.loadDataCheck.bind(this), 10); - this.subscribe("data-load", this.loadData.bind(this), 10); - } - } - - loadDataCheck(data){ - return this.table.options.importFormat && (typeof data === "string" || (Array.isArray(data) && data.length && Array.isArray(data))); - } - - loadData(data, params, config, silent, previousData){ - return this.importData(this.lookupImporter(), data) - .then(this.structureData.bind(this)) - .catch((err) => { - console.error("Import Error:", err || "Unable to import data"); - return Promise.reject(err); - }); - } - - lookupImporter(importFormat){ - var importer; - - if(!importFormat){ - importFormat = this.table.options.importFormat; - } - - if(typeof importFormat === "string"){ - importer = Import.importers[importFormat]; - }else{ - importer = importFormat; - } - - if(!importer){ - console.error("Import Error - Importer not found:", importFormat); - } - - return importer; - } - - importFromFile(importFormat, extension){ - var importer = this.lookupImporter(importFormat); - - if(importer){ - return this.pickFile(extension) - .then(this.importData.bind(this, importer)) - .then(this.structureData.bind(this)) - .then(this.setData.bind(this)) - .catch((err) => { - console.error("Import Error:", err || "Unable to import file"); - return Promise.reject(err); - }); - } - } - - pickFile(extensions){ - return new Promise((resolve, reject) => { - var input = document.createElement("input"); - input.type = "file"; - input.accept = extensions; - - input.addEventListener("change", (e) => { - var file = input.files[0], - reader = new FileReader(); - - switch(this.table.options.importReader){ - case "buffer": - reader.readAsArrayBuffer(file); - break; - - case "binary": - reader.readAsBinaryString(file); - break; - - case "url": - reader.readAsDataURL(file); - break; - - case "text": - default: - reader.readAsText(file); - } - - reader.onload = (e) => { - resolve(reader.result); - }; - - reader.onerror = (e) => { - console.warn("File Load Error - Unable to read file"); - reject(); - }; - }); - - input.click(); - }); - } - - importData(importer, fileContents){ - var data = importer.call(this.table, fileContents); - - if(data instanceof Promise){ - return data; - }else{ - return data ? Promise.resolve(data) : Promise.reject(); - } - } - - structureData(parsedData){ - var data = []; - - if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){ - if(this.table.options.autoColumns){ - data = this.structureArrayToObject(parsedData); - }else{ - data = this.structureArrayToColumns(parsedData); - } - - return data; - }else{ - return parsedData; - } - } - - structureArrayToObject(parsedData){ - var columns = parsedData.shift(); - - var data = parsedData.map((values) => { - var row = {}; - - columns.forEach((key, i) => { - row[key] = values[i]; - }); - - return row; - }); - - return data; - } - - structureArrayToColumns(parsedData){ - var data = [], - columns = this.table.getColumns(); - - //remove first row if it is the column names - if(columns[0] && parsedData[0][0]){ - if(columns[0].getDefinition().title === parsedData[0][0]){ - parsedData.shift(); - } - } - - //convert row arrays to objects - parsedData.forEach((rowData) => { - var row = {}; - - rowData.forEach((value, index) => { - var column = columns[index]; - - if(column){ - row[column.getField()] = value; - } - }); - - data.push(row); - }); - - return data; - } - - setData(data){ - return this.table.setData(data); - } -} - -Import.moduleName = "import"; - -//load defaults -Import.importers = defaultImporters; - -export default Import; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers.js b/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers.js deleted file mode 100644 index b3e7559..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers.js +++ /dev/null @@ -1,9 +0,0 @@ -import csv from './importers/csv.js'; -import json from './importers/json.js'; -import array from './importers/array.js'; - -export default { - csv:csv, - json:json, - array:array, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/array.js b/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/array.js deleted file mode 100644 index 7a458b9..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/array.js +++ /dev/null @@ -1,5 +0,0 @@ -function arrayImporter(input){ - return input; -} - -export default arrayImporter; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/csv.js b/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/csv.js deleted file mode 100644 index bd8ee0a..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/csv.js +++ /dev/null @@ -1,63 +0,0 @@ -function csvImporter(input){ - var data = [], - row = 0, - col = 0, - inQuote = false; - - //Iterate over each character - for (let index = 0; index < input.length; index++) { - let char = input[index], - nextChar = input[index+1]; - - //Initialize empty row - if(!data[row]){ - data[row] = []; - } - - //Initialize empty column - if(!data[row][col]){ - data[row][col] = ""; - } - - //Handle quotation mark inside string - if (char == '"' && inQuote && nextChar == '"') { - data[row][col] += char; - index++; - continue; - } - - //Begin / End Quote - if (char == '"') { - inQuote = !inQuote; - continue; - } - - //Next column (if not in quote) - if (char == ',' && !inQuote) { - col++; - continue; - } - - //New row if new line and not in quote (CRLF) - if (char == '\r' && nextChar == '\n' && !inQuote) { - col = 0; - row++; - index++; - continue; - } - - //New row if new line and not in quote (CR or LF) - if ((char == '\r' || char == '\n') && !inQuote) { - col = 0; - row++; - continue; - } - - //Normal Character, append to column - data[row][col] += char; - } - - return data; -} - -export default csvImporter; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/json.js b/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/json.js deleted file mode 100644 index 8b3d829..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Import/defaults/importers/json.js +++ /dev/null @@ -1,8 +0,0 @@ -export default function(input){ - try { - return JSON.parse(input); - } catch(e) { - console.warn("JSON Import Error - File contents is invalid JSON", e); - return Promise.reject(); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Interaction/Interaction.js b/tmp/tabulator-5.6.1/src/js/modules/Interaction/Interaction.js deleted file mode 100644 index 19333ec..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Interaction/Interaction.js +++ /dev/null @@ -1,337 +0,0 @@ -import Module from '../../core/Module.js'; - -import Cell from '../../core/cell/Cell.js'; -import Column from '../../core/column/Column.js'; - -class Interaction extends Module{ - - constructor(table){ - super(table); - - this.eventMap = { - //row events - rowClick:"row-click", - rowDblClick:"row-dblclick", - rowContext:"row-contextmenu", - rowMouseEnter:"row-mouseenter", - rowMouseLeave:"row-mouseleave", - rowMouseOver:"row-mouseover", - rowMouseOut:"row-mouseout", - rowMouseMove:"row-mousemove", - rowMouseDown:"row-mousedown", - rowMouseUp:"row-mouseup", - rowTap:"row", - rowDblTap:"row", - rowTapHold:"row", - - //cell events - cellClick:"cell-click", - cellDblClick:"cell-dblclick", - cellContext:"cell-contextmenu", - cellMouseEnter:"cell-mouseenter", - cellMouseLeave:"cell-mouseleave", - cellMouseOver:"cell-mouseover", - cellMouseOut:"cell-mouseout", - cellMouseMove:"cell-mousemove", - cellMouseDown:"cell-mousedown", - cellMouseUp:"cell-mouseup", - cellTap:"cell", - cellDblTap:"cell", - cellTapHold:"cell", - - //column header events - headerClick:"column-click", - headerDblClick:"column-dblclick", - headerContext:"column-contextmenu", - headerMouseEnter:"column-mouseenter", - headerMouseLeave:"column-mouseleave", - headerMouseOver:"column-mouseover", - headerMouseOut:"column-mouseout", - headerMouseMove:"column-mousemove", - headerMouseDown:"column-mousedown", - headerMouseUp:"column-mouseup", - headerTap:"column", - headerDblTap:"column", - headerTapHold:"column", - - //group header - groupClick:"group-click", - groupDblClick:"group-dblclick", - groupContext:"group-contextmenu", - groupMouseEnter:"group-mouseenter", - groupMouseLeave:"group-mouseleave", - groupMouseOver:"group-mouseover", - groupMouseOut:"group-mouseout", - groupMouseMove:"group-mousemove", - groupMouseDown:"group-mousedown", - groupMouseUp:"group-mouseup", - groupTap:"group", - groupDblTap:"group", - groupTapHold:"group", - }; - - this.subscribers = {}; - - this.touchSubscribers = {}; - - this.columnSubscribers = {}; - - this.touchWatchers = { - row:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - cell:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - column:{ - tap:null, - tapDbl:null, - tapHold:null, - }, - group:{ - tap:null, - tapDbl:null, - tapHold:null, - } - }; - - this.registerColumnOption("headerClick"); - this.registerColumnOption("headerDblClick"); - this.registerColumnOption("headerContext"); - this.registerColumnOption("headerMouseEnter"); - this.registerColumnOption("headerMouseLeave"); - this.registerColumnOption("headerMouseOver"); - this.registerColumnOption("headerMouseOut"); - this.registerColumnOption("headerMouseMove"); - this.registerColumnOption("headerMouseDown"); - this.registerColumnOption("headerMouseUp"); - this.registerColumnOption("headerTap"); - this.registerColumnOption("headerDblTap"); - this.registerColumnOption("headerTapHold"); - - this.registerColumnOption("cellClick"); - this.registerColumnOption("cellDblClick"); - this.registerColumnOption("cellContext"); - this.registerColumnOption("cellMouseEnter"); - this.registerColumnOption("cellMouseLeave"); - this.registerColumnOption("cellMouseOver"); - this.registerColumnOption("cellMouseOut"); - this.registerColumnOption("cellMouseMove"); - this.registerColumnOption("cellMouseDown"); - this.registerColumnOption("cellMouseUp"); - this.registerColumnOption("cellTap"); - this.registerColumnOption("cellDblTap"); - this.registerColumnOption("cellTapHold"); - - } - - initialize(){ - this.initializeExternalEvents(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("cell-dblclick", this.cellContentsSelectionFixer.bind(this)); - this.subscribe("scroll-horizontal", this.clearTouchWatchers.bind(this)); - this.subscribe("scroll-vertical", this.clearTouchWatchers.bind(this)); - } - - clearTouchWatchers(){ - var types = Object.values(this.touchWatchers); - - types.forEach((type) => { - for(let key in type){ - type[key] = null; - } - }); - } - - cellContentsSelectionFixer(e, cell){ - var range; - - if(this.table.modExists("edit")){ - if (this.table.modules.edit.currentCell === cell){ - return; //prevent instant selection of editor content - } - } - - e.preventDefault(); - - try{ - if (document.selection) { // IE - range = document.body.createTextRange(); - range.moveToElementText(cell.getElement()); - range.select(); - } else if (window.getSelection) { - range = document.createRange(); - range.selectNode(cell.getElement()); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - } - }catch(e){} - } - - initializeExternalEvents(){ - for(let key in this.eventMap){ - this.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key)); - } - } - - subscriptionChanged(key, added){ - if(added){ - if(!this.subscribers[key]){ - if(this.eventMap[key].includes("-")){ - this.subscribers[key] = this.handle.bind(this, key); - this.subscribe(this.eventMap[key], this.subscribers[key]); - }else{ - this.subscribeTouchEvents(key); - } - } - }else{ - if(this.eventMap[key].includes("-")){ - if(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){ - this.unsubscribe(this.eventMap[key], this.subscribers[key]); - delete this.subscribers[key]; - } - }else{ - this.unsubscribeTouchEvents(key); - } - } - } - - - subscribeTouchEvents(key){ - var type = this.eventMap[key]; - - if(!this.touchSubscribers[type + "-touchstart"]){ - this.touchSubscribers[type + "-touchstart"] = this.handleTouch.bind(this, type, "start"); - this.touchSubscribers[type + "-touchend"] = this.handleTouch.bind(this, type, "end"); - - this.subscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); - this.subscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); - } - - this.subscribers[key] = true; - } - - unsubscribeTouchEvents(key){ - var noTouch = true, - type = this.eventMap[key]; - - if(this.subscribers[key] && !this.subscribedExternal(key)){ - delete this.subscribers[key]; - - for(let i in this.eventMap){ - if(this.eventMap[i] === type){ - if(this.subscribers[i]){ - noTouch = false; - } - } - } - - if(noTouch){ - this.unsubscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); - this.unsubscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); - - delete this.touchSubscribers[type + "-touchstart"]; - delete this.touchSubscribers[type + "-touchend"]; - } - } - } - - initializeColumn(column){ - var def = column.definition; - - for(let key in this.eventMap){ - if(def[key]){ - this.subscriptionChanged(key, true); - - if(!this.columnSubscribers[key]){ - this.columnSubscribers[key] = []; - } - - this.columnSubscribers[key].push(column); - } - } - } - - handle(action, e, component){ - this.dispatchEvent(action, e, component); - } - - handleTouch(type, action, e, component){ - var watchers = this.touchWatchers[type]; - - if(type === "column"){ - type = "header"; - } - - switch(action){ - case "start": - watchers.tap = true; - - clearTimeout(watchers.tapHold); - - watchers.tapHold = setTimeout(() => { - clearTimeout(watchers.tapHold); - watchers.tapHold = null; - - watchers.tap = null; - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - - this.dispatchEvent(type + "TapHold", e, component); - }, 1000); - break; - - case "end": - if(watchers.tap){ - - watchers.tap = null; - this.dispatchEvent(type + "Tap", e, component); - } - - if(watchers.tapDbl){ - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - - this.dispatchEvent(type + "DblTap", e, component); - }else{ - watchers.tapDbl = setTimeout(() => { - clearTimeout(watchers.tapDbl); - watchers.tapDbl = null; - }, 300); - } - - clearTimeout(watchers.tapHold); - watchers.tapHold = null; - break; - } - } - - dispatchEvent(action, e, component){ - var componentObj = component.getComponent(), - callback; - - if(this.columnSubscribers[action]){ - - if(component instanceof Cell){ - callback = component.column.definition[action]; - }else if(component instanceof Column){ - callback = component.definition[action]; - } - - if(callback){ - callback(e, componentObj); - } - } - - this.dispatchExternal(action, e, componentObj); - } -} - -Interaction.moduleName = "interaction"; - -export default Interaction; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Keybindings/Keybindings.js b/tmp/tabulator-5.6.1/src/js/modules/Keybindings/Keybindings.js deleted file mode 100644 index 29ce070..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Keybindings/Keybindings.js +++ /dev/null @@ -1,173 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultBindings from './defaults/bindings.js'; -import defaultActions from './defaults/actions.js'; - -class Keybindings extends Module{ - - constructor(table){ - super(table); - - this.watchKeys = null; - this.pressedKeys = null; - this.keyupBinding = false; - this.keydownBinding = false; - - this.registerTableOption("keybindings", {}); //array for keybindings - this.registerTableOption("tabEndNewRow", false); //create new row when tab to end of table - } - - initialize(){ - var bindings = this.table.options.keybindings, - mergedBindings = {}; - - this.watchKeys = {}; - this.pressedKeys = []; - - if(bindings !== false){ - Object.assign(mergedBindings, Keybindings.bindings); - Object.assign(mergedBindings, bindings); - - this.mapBindings(mergedBindings); - this.bindEvents(); - } - - this.subscribe("table-destroy", this.clearBindings.bind(this)); - } - - mapBindings(bindings){ - for(let key in bindings){ - if(Keybindings.actions[key]){ - if(bindings[key]){ - if(typeof bindings[key] !== "object"){ - bindings[key] = [bindings[key]]; - } - - bindings[key].forEach((binding) => { - var bindingList = Array.isArray(binding) ? binding : [binding]; - - bindingList.forEach((item) => { - this.mapBinding(key, item); - }); - }); - } - }else{ - console.warn("Key Binding Error - no such action:", key); - } - } - } - - mapBinding(action, symbolsList){ - var binding = { - action: Keybindings.actions[action], - keys: [], - ctrl: false, - shift: false, - meta: false, - }; - - var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+"); - - symbols.forEach((symbol) => { - switch(symbol){ - case "ctrl": - binding.ctrl = true; - break; - - case "shift": - binding.shift = true; - break; - - case "meta": - binding.meta = true; - break; - - default: - symbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol); - binding.keys.push(symbol); - - if(!this.watchKeys[symbol]){ - this.watchKeys[symbol] = []; - } - - this.watchKeys[symbol].push(binding); - } - }); - } - - bindEvents(){ - var self = this; - - this.keyupBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - self.pressedKeys.push(code); - - bindings.forEach(function(binding){ - self.checkBinding(e, binding); - }); - } - }; - - this.keydownBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - var index = self.pressedKeys.indexOf(code); - - if(index > -1){ - self.pressedKeys.splice(index, 1); - } - } - }; - - this.table.element.addEventListener("keydown", this.keyupBinding); - - this.table.element.addEventListener("keyup", this.keydownBinding); - } - - clearBindings(){ - if(this.keyupBinding){ - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if(this.keydownBinding){ - this.table.element.removeEventListener("keyup", this.keydownBinding); - } - } - - checkBinding(e, binding){ - var match = true; - - if(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){ - binding.keys.forEach((key) => { - var index = this.pressedKeys.indexOf(key); - - if(index == -1){ - match = false; - } - }); - - if(match){ - binding.action.call(this, e); - } - - return true; - } - - return false; - } -} - -Keybindings.moduleName = "keybindings"; - -//load defaults -Keybindings.bindings = defaultBindings; -Keybindings.actions = defaultActions; - -export default Keybindings; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Keybindings/defaults/actions.js b/tmp/tabulator-5.6.1/src/js/modules/Keybindings/defaults/actions.js deleted file mode 100644 index d44dc07..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Keybindings/defaults/actions.js +++ /dev/null @@ -1,156 +0,0 @@ -export default { - keyBlock:function(e){ - e.stopPropagation(); - e.preventDefault(); - }, - scrollPageUp:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop - rowManager.element.clientHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos >= 0){ - rowManager.element.scrollTop = newPos; - }else{ - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - } - - this.table.element.focus(); - }, - scrollPageDown:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop + rowManager.element.clientHeight, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos <= scrollMax){ - rowManager.element.scrollTop = newPos; - }else{ - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - - }, - scrollToStart:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev:function(e){ - this.dispatch("keybinding-nav-prev", e); - }, - - navNext:function(e){ - this.dispatch("keybinding-nav-next", e); - }, - - navLeft:function(e){ - this.dispatch("keybinding-nav-left", e); - }, - - navRight:function(e){ - this.dispatch("keybinding-nav-right", e); - }, - - navUp:function(e){ - this.dispatch("keybinding-nav-up", e); - }, - - navDown:function(e){ - this.dispatch("keybinding-nav-down", e); - }, - - rangeJumpLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", true, false); - }, - rangeJumpRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", true, false); - }, - rangeJumpUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", true, false); - }, - rangeJumpDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", true, false); - }, - rangeExpandLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", false, true); - }, - rangeExpandRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", false, true); - }, - rangeExpandUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", false, true); - }, - rangeExpandDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", false, true); - }, - rangeExpandJumpLeft: function(e){ - this.dispatch("keybinding-nav-range", e, "left", true, true); - }, - rangeExpandJumpRight: function(e){ - this.dispatch("keybinding-nav-range", e, "right", true, true); - }, - rangeExpandJumpUp: function(e){ - this.dispatch("keybinding-nav-range", e, "up", true, true); - }, - rangeExpandJumpDown: function(e){ - this.dispatch("keybinding-nav-range", e, "down", true, true); - }, - - undo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard:function(e){ - if(!this.table.modules.edit.currentCell){ - if(this.table.modExists("clipboard", true)){ - this.table.modules.clipboard.copy(false, true); - } - } - }, -}; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Keybindings/defaults/bindings.js b/tmp/tabulator-5.6.1/src/js/modules/Keybindings/defaults/bindings.js deleted file mode 100644 index 000f73f..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Keybindings/defaults/bindings.js +++ /dev/null @@ -1,28 +0,0 @@ -export default { - navPrev:"shift + 9", - navNext:9, - navUp:38, - navDown:40, - navLeft:37, - navRight:39, - scrollPageUp:33, - scrollPageDown:34, - scrollToStart:36, - scrollToEnd:35, - undo:["ctrl + 90", "meta + 90"], - redo:["ctrl + 89", "meta + 89"], - copyToClipboard:["ctrl + 67", "meta + 67"], - - rangeJumpUp:["ctrl + 38", "meta + 38"], - rangeJumpDown:["ctrl + 40", "meta + 40"], - rangeJumpLeft:["ctrl + 37", "meta + 37"], - rangeJumpRight:["ctrl + 39", "meta + 39"], - rangeExpandUp:"shift + 38", - rangeExpandDown:"shift + 40", - rangeExpandLeft:"shift + 37", - rangeExpandRight:"shift + 39", - rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"], - rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"], - rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"], - rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"], -}; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Layout/Layout.js b/tmp/tabulator-5.6.1/src/js/modules/Layout/Layout.js deleted file mode 100644 index fcebf8f..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Layout/Layout.js +++ /dev/null @@ -1,60 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultModes from './defaults/modes.js'; - -class Layout extends Module{ - - constructor(table){ - super(table, "layout"); - - this.mode = null; - - this.registerTableOption("layout", "fitData"); //layout type - this.registerTableOption("layoutColumnsOnNewData", false); //update column widths on setData - - this.registerColumnOption("widthGrow"); - this.registerColumnOption("widthShrink"); - } - - //initialize layout system - initialize(){ - var layout = this.table.options.layout; - - if(Layout.modes[layout]){ - this.mode = layout; - }else{ - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - initializeColumn(column){ - if(column.definition.widthGrow){ - column.definition.widthGrow = Number(column.definition.widthGrow); - } - if(column.definition.widthShrink){ - column.definition.widthShrink = Number(column.definition.widthShrink); - } - } - - getMode(){ - return this.mode; - } - - //trigger table layout - layout(dataChanged){ - this.dispatch("layout-refreshing"); - Layout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged); - this.dispatch("layout-refreshed"); - } -} - -Layout.moduleName = "layout"; - -//load defaults -Layout.modes = defaultModes; - -export default Layout; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes.js b/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes.js deleted file mode 100644 index ec0b600..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes.js +++ /dev/null @@ -1,12 +0,0 @@ -import fitData from './modes/fitData.js'; -import fitDataGeneral from './modes/fitDataGeneral.js'; -import fitDataStretch from './modes/fitDataStretch.js'; -import fitColumns from './modes/fitColumns.js'; - -export default { - fitData:fitData, - fitDataFill:fitDataGeneral, - fitDataTable:fitDataGeneral, - fitDataStretch:fitDataStretch, - fitColumns:fitColumns , -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitColumns.js b/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitColumns.js deleted file mode 100644 index ea5c6d9..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitColumns.js +++ /dev/null @@ -1,171 +0,0 @@ -//resize columns to fit -export default function(columns, forced){ - var totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width - var fixedWidth = 0; //total width of columns with a defined width - var flexWidth = 0; //total width available to flexible columns - var flexGrowUnits = 0; //total number of widthGrow blocks across all columns - var flexColWidth = 0; //desired width of flexible columns - var flexColumns = []; //array of flexible width columns - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - var flexShrinkUnits = 0; //total number of widthShrink blocks across all columns - var overflowWidth = 0; //horizontal overflow width - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps - - function calcWidth(width){ - var colWidth; - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width); - }else{ - colWidth = parseInt(width); - } - }else{ - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - function scaleColumns(columns, freeSpace, colWidth, shrinkCols){ - var oversizeCols = [], - oversizeSpace = 0, - remainingSpace = 0, - nextColWidth = 0, - remainingFlexGrowUnits = flexGrowUnits, - gap = 0, - changeUnits = 0, - undersizeCols = []; - - function calcGrow(col){ - return (colWidth * (col.column.definition.widthGrow || 1)); - } - - function calcShrink(col){ - return (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0))); - } - - columns.forEach(function(col, i){ - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - if(col.column.minWidth >= width){ - oversizeCols.push(col); - }else{ - if(col.column.maxWidth && col.column.maxWidth < width){ - col.width = col.column.maxWidth; - freeSpace -= col.column.maxWidth; - - remainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1); - - if(remainingFlexGrowUnits){ - colWidth = Math.floor(freeSpace/remainingFlexGrowUnits); - } - }else{ - undersizeCols.push(col); - changeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1); - } - } - }); - - if(oversizeCols.length){ - oversizeCols.forEach(function(col){ - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace; - - gap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - }else{ - gap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace; - - undersizeCols.forEach(function(column){ - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - if(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){ - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - columns.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width; - minWidth = parseInt(column.minWidth); - - if(width){ - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if(column.definition.widthShrink){ - fixedShrinkColumns.push({ - column:column, - width:colWidth > minWidth ? colWidth : minWidth - }); - flexShrinkUnits += column.definition.widthShrink; - } - - }else{ - flexColumns.push({ - column:column, - width:0, - }); - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - //calculate available space - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - flexColWidth = Math.floor(flexWidth / flexGrowUnits); - - //generate column widths - gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - if(flexColumns.length && gapFill > 0){ - flexColumns[flexColumns.length-1].width += gapFill; - } - - //calculate space for columns to be shrunk into - flexColumns.forEach(function(col){ - flexWidth -= col.width; - }); - - overflowWidth = Math.abs(gapFill) + flexWidth; - - //shrink oversize columns if there is no available space - if(overflowWidth > 0 && flexShrinkUnits){ - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - if(gapFill && fixedShrinkColumns.length){ - fixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill; - } - - flexColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); - - fixedShrinkColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); -} diff --git a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitData.js b/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitData.js deleted file mode 100644 index 6d66117..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitData.js +++ /dev/null @@ -1,10 +0,0 @@ -//resize columns to fit data they contain -export default function(columns, forced){ - if(forced){ - this.table.columnManager.renderer.reinitializeColumnWidths(columns); - } - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitDataGeneral.js b/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitDataGeneral.js deleted file mode 100644 index 95bdbf5..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitDataGeneral.js +++ /dev/null @@ -1,10 +0,0 @@ -//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable -export default function(columns, forced){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitDataStretch.js b/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitDataStretch.js deleted file mode 100644 index 6d8a8ed..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Layout/defaults/modes/fitDataStretch.js +++ /dev/null @@ -1,40 +0,0 @@ -//resize columns to fit data the contain and stretch last column to fill table -export default function(columns, forced){ - var colsWidth = 0, - tableWidth = this.table.rowManager.element.clientWidth, - gap = 0, - lastCol = false; - - columns.forEach((column, i) => { - if(!column.widthFixed){ - column.reinitializeWidth(); - } - - if(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){ - lastCol = column; - } - - if(column.visible){ - colsWidth += column.getWidth(); - } - }); - - if(lastCol){ - gap = tableWidth - colsWidth + lastCol.getWidth(); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - lastCol.setWidth(0); - this.table.modules.responsiveLayout.update(); - } - - if(gap > 0){ - lastCol.setWidth(gap); - }else{ - lastCol.reinitializeWidth(); - } - }else{ - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Localize/Localize.js b/tmp/tabulator-5.6.1/src/js/modules/Localize/Localize.js deleted file mode 100644 index 740ee0d..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Localize/Localize.js +++ /dev/null @@ -1,186 +0,0 @@ -import Module from '../../core/Module.js'; - -import Helpers from '../../core/tools/Helpers.js'; - -import defaultLangs from './defaults/langs.js'; - -class Localize extends Module{ - - constructor(table){ - super(table); - - this.locale = "default"; //current locale - this.lang = false; //current language - this.bindings = {}; //update events to call when locale is changed - this.langList = {}; - - this.registerTableOption("locale", false); //current system language - this.registerTableOption("langs", {}); - } - - initialize(){ - this.langList = Helpers.deepClone(Localize.langs); - - if(this.table.options.columnDefaults.headerFilterPlaceholder !== false){ - this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder); - } - - for(let locale in this.table.options.langs){ - this.installLang(locale, this.table.options.langs[locale]); - } - - this.setLocale(this.table.options.locale); - - this.registerTableFunction("setLocale", this.setLocale.bind(this)); - this.registerTableFunction("getLocale", this.getLocale.bind(this)); - this.registerTableFunction("getLang", this.getLang.bind(this)); - } - - //set header placeholder - setHeaderFilterPlaceholder(placeholder){ - this.langList.default.headerFilters.default = placeholder; - } - - //setup a lang description object - installLang(locale, lang){ - if(this.langList[locale]){ - this._setLangProp(this.langList[locale], lang); - }else{ - this.langList[locale] = lang; - } - } - - _setLangProp(lang, values){ - for(let key in values){ - if(lang[key] && typeof lang[key] == "object"){ - this._setLangProp(lang[key], values[key]); - }else{ - lang[key] = values[key]; - } - } - } - - //set current locale - setLocale(desiredLocale){ - desiredLocale = desiredLocale || "default"; - - //fill in any matching language values - function traverseLang(trans, path){ - for(var prop in trans){ - if(typeof trans[prop] == "object"){ - if(!path[prop]){ - path[prop] = {}; - } - traverseLang(trans[prop], path[prop]); - }else{ - path[prop] = trans[prop]; - } - } - } - - //determining correct locale to load - if(desiredLocale === true && navigator.language){ - //get local from system - desiredLocale = navigator.language.toLowerCase(); - } - - if(desiredLocale){ - //if locale is not set, check for matching top level locale else use default - if(!this.langList[desiredLocale]){ - let prefix = desiredLocale.split("-")[0]; - - if(this.langList[prefix]){ - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - desiredLocale = prefix; - }else{ - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - desiredLocale = "default"; - } - } - } - - this.locale = desiredLocale; - - //load default lang template - this.lang = Helpers.deepClone(this.langList.default || {}); - - if(desiredLocale != "default"){ - traverseLang(this.langList[desiredLocale], this.lang); - } - - this.dispatchExternal("localized", this.locale, this.lang); - - this._executeBindings(); - } - - //get current locale - getLocale(locale){ - return this.locale; - } - - //get lang object for given local or current if none provided - getLang(locale){ - return locale ? this.langList[locale] : this.lang; - } - - //get text for current locale - getText(path, value){ - var fillPath = value ? path + "|" + value : path, - pathArray = fillPath.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - // } - - return text || ""; - } - - //traverse langs object and find localized copy - _getLangElement(path, locale){ - var root = this.lang; - - path.forEach(function(level){ - var rootPath; - - if(root){ - rootPath = root[level]; - - if(typeof rootPath != "undefined"){ - root = rootPath; - }else{ - root = false; - } - } - }); - - return root; - } - - //set update binding - bind(path, callback){ - if(!this.bindings[path]){ - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); - } - - //iterate through bindings and trigger updates - _executeBindings(){ - for(let path in this.bindings){ - this.bindings[path].forEach((binding) => { - binding(this.getText(path), this.lang); - }); - } - } -} - -Localize.moduleName = "localize"; - -//load defaults -Localize.langs = defaultLangs; - -export default Localize; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Localize/defaults/langs.js b/tmp/tabulator-5.6.1/src/js/modules/Localize/defaults/langs.js deleted file mode 100644 index 9dca4c4..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Localize/defaults/langs.js +++ /dev/null @@ -1,37 +0,0 @@ -export default { - "default":{ //hold default locale text - "groups":{ - "item":"item", - "items":"items", - }, - "columns":{ - }, - "data":{ - "loading":"Loading", - "error":"Error", - }, - "pagination":{ - "page_size":"Page Size", - "page_title":"Show Page", - "first":"First", - "first_title":"First Page", - "last":"Last", - "last_title":"Last Page", - "prev":"Prev", - "prev_title":"Prev Page", - "next":"Next", - "next_title":"Next Page", - "all":"All", - "counter":{ - "showing": "Showing", - "of": "of", - "rows": "rows", - "pages": "pages", - } - }, - "headerFilters":{ - "default":"filter column...", - "columns":{} - } - }, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Menu/Menu.js b/tmp/tabulator-5.6.1/src/js/modules/Menu/Menu.js deleted file mode 100644 index 8ebfa2f..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Menu/Menu.js +++ /dev/null @@ -1,304 +0,0 @@ -import Module from '../../core/Module.js'; - -class Menu extends Module{ - - constructor(table){ - super(table); - - this.menuContainer = null; - this.nestedMenuBlock = false; - - this.currentComponent = null; - this.rootPopup = null; - - this.columnSubscribers = {}; - - this.registerTableOption("menuContainer", undefined); //deprecated - - this.registerTableOption("rowContextMenu", false); - this.registerTableOption("rowClickMenu", false); - this.registerTableOption("rowDblClickMenu", false); - this.registerTableOption("groupContextMenu", false); - this.registerTableOption("groupClickMenu", false); - this.registerTableOption("groupDblClickMenu", false); - - this.registerColumnOption("headerContextMenu"); - this.registerColumnOption("headerClickMenu"); - this.registerColumnOption("headerDblClickMenu"); - this.registerColumnOption("headerMenu"); - this.registerColumnOption("headerMenuIcon"); - this.registerColumnOption("contextMenu"); - this.registerColumnOption("clickMenu"); - this.registerColumnOption("dblClickMenu"); - - } - - initialize(){ - this.deprecatedOptionsCheck(); - this.initializeRowWatchers(); - this.initializeGroupWatchers(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - deprecatedOptionsCheck(){ - if(!this.deprecationCheck("menuContainer", "popupContainer")){ - this.table.options.popupContainer = this.table.options.menuContainer; - } - } - - initializeRowWatchers(){ - if(this.table.options.rowContextMenu){ - this.subscribe("row-contextmenu", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu)); - this.table.on("rowTapHold", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu)); - } - - if(this.table.options.rowClickMenu){ - this.subscribe("row-click", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu)); - } - - if(this.table.options.rowDblClickMenu){ - this.subscribe("row-dblclick", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu)); - } - } - - initializeGroupWatchers(){ - if(this.table.options.groupContextMenu){ - this.subscribe("group-contextmenu", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu)); - this.table.on("groupTapHold", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu)); - } - - if(this.table.options.groupClickMenu){ - this.subscribe("group-click", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu)); - } - - if(this.table.options.groupDblClickMenu){ - this.subscribe("group-dblclick", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu)); - } - } - - initializeColumn(column){ - var def = column.definition; - - //handle column events - if(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){ - this.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, "headerContextMenu"); - this.subscribe("column-contextmenu", this.columnSubscribers.headerContextMenu); - this.table.on("headerTapHold", this.loadMenuTableColumnEvent.bind(this, "headerContextMenu")); - } - - if(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){ - this.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, "headerClickMenu"); - this.subscribe("column-click", this.columnSubscribers.headerClickMenu); - } - - if(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){ - this.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, "headerDblClickMenu"); - this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickMenu); - } - - if(def.headerMenu){ - this.initializeColumnHeaderMenu(column); - } - - //handle cell events - if(def.contextMenu && !this.columnSubscribers.contextMenu){ - this.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, "contextMenu"); - this.subscribe("cell-contextmenu", this.columnSubscribers.contextMenu); - this.table.on("cellTapHold", this.loadMenuTableCellEvent.bind(this, "contextMenu")); - } - - if(def.clickMenu && !this.columnSubscribers.clickMenu){ - this.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, "clickMenu"); - this.subscribe("cell-click", this.columnSubscribers.clickMenu); - } - - if(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){ - this.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, "dblClickMenu"); - this.subscribe("cell-dblclick", this.columnSubscribers.dblClickMenu); - } - } - - initializeColumnHeaderMenu(column){ - var icon = column.definition.headerMenuIcon, - headerMenuEl; - - headerMenuEl = document.createElement("span"); - headerMenuEl.classList.add("tabulator-header-popup-button"); - - if(icon){ - if(typeof icon === "function"){ - icon = icon(column.getComponent()); - } - - if(icon instanceof HTMLElement){ - headerMenuEl.appendChild(icon); - }else{ - headerMenuEl.innerHTML = icon; - } - }else{ - headerMenuEl.innerHTML = "⋮"; - } - - headerMenuEl.addEventListener("click", (e) => { - e.stopPropagation(); - e.preventDefault(); - - this.loadMenuEvent(column.definition.headerMenu, e, column); - }); - - column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild); - } - - loadMenuTableCellEvent(option, e, cell){ - if(cell._cell){ - cell = cell._cell; - } - - if(cell.column.definition[option]){ - this.loadMenuEvent(cell.column.definition[option], e, cell); - } - } - - loadMenuTableColumnEvent(option, e, column){ - if(column._column){ - column = column._column; - } - - if(column.definition[option]){ - this.loadMenuEvent(column.definition[option], e, column); - } - } - - loadMenuEvent(menu, e, component){ - if(component._group){ - component = component._group; - }else if(component._row){ - component = component._row; - } - - menu = typeof menu == "function" ? menu.call(this.table, e, component.getComponent()) : menu; - - this.loadMenu(e, component, menu); - } - - loadMenu(e, component, menu, parentEl, parentPopup){ - var touch = !(e instanceof MouseEvent), - menuEl = document.createElement("div"), - popup; - - menuEl.classList.add("tabulator-menu"); - - if(!touch){ - e.preventDefault(); - } - - //abort if no menu set - if(!menu || !menu.length){ - return; - } - - if(!parentEl){ - if(this.nestedMenuBlock){ - //abort if child menu already open - if(this.rootPopup){ - return; - } - }else{ - this.nestedMenuBlock = setTimeout(() => { - this.nestedMenuBlock = false; - }, 100); - } - - if(this.rootPopup){ - this.rootPopup.hide(); - } - - this.rootPopup = popup = this.popup(menuEl); - - }else{ - popup = parentPopup.child(menuEl); - } - - menu.forEach((item) => { - var itemEl = document.createElement("div"), - label = item.label, - disabled = item.disabled; - - if(item.separator){ - itemEl.classList.add("tabulator-menu-separator"); - }else{ - itemEl.classList.add("tabulator-menu-item"); - - if(typeof label == "function"){ - label = label.call(this.table, component.getComponent()); - } - - if(label instanceof Node){ - itemEl.appendChild(label); - }else{ - itemEl.innerHTML = label; - } - - if(typeof disabled == "function"){ - disabled = disabled.call(this.table, component.getComponent()); - } - - if(disabled){ - itemEl.classList.add("tabulator-menu-item-disabled"); - itemEl.addEventListener("click", (e) => { - e.stopPropagation(); - }); - }else{ - if(item.menu && item.menu.length){ - itemEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.loadMenu(e, component, item.menu, itemEl, popup); - }); - }else{ - if(item.action){ - itemEl.addEventListener("click", (e) => { - item.action(e, component.getComponent()); - }); - } - } - } - - if(item.menu && item.menu.length){ - itemEl.classList.add("tabulator-menu-item-submenu"); - } - } - - menuEl.appendChild(itemEl); - }); - - menuEl.addEventListener("click", (e) => { - if(this.rootPopup){ - this.rootPopup.hide(); - } - }); - - popup.show(parentEl || e); - - if(popup === this.rootPopup){ - this.rootPopup.hideOnBlur(() => { - this.rootPopup = null; - - if(this.currentComponent){ - this.dispatch("menu-closed", menu, popup); - this.dispatchExternal("menuClosed", this.currentComponent.getComponent()); - this.currentComponent = null; - } - }); - - this.currentComponent = component; - - this.dispatch("menu-opened", menu, popup); - this.dispatchExternal("menuOpened", component.getComponent()); - } - } -} - -Menu.moduleName = "menu"; - -export default Menu; diff --git a/tmp/tabulator-5.6.1/src/js/modules/MoveColumns/MoveColumns.js b/tmp/tabulator-5.6.1/src/js/modules/MoveColumns/MoveColumns.js deleted file mode 100644 index d6304b8..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/MoveColumns/MoveColumns.js +++ /dev/null @@ -1,304 +0,0 @@ -import Module from '../../core/Module.js'; -import Helpers from '../../core/tools/Helpers.js'; - -class MoveColumns extends Module{ - - constructor(table){ - super(table); - - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the destination column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - this.touchMove = false; - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - - this.registerTableOption("movableColumns", false); //enable movable columns - } - - createPlaceholderElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; - } - - initialize(){ - if(this.table.options.movableColumns){ - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("alert-show", this.abortMove.bind(this)); - } - } - - abortMove(){ - clearTimeout(this.checkTimeout); - } - - initializeColumn(column){ - var self = this, - config = {}, - colEl; - - if(!column.modules.frozen && !column.isGroup){ - colEl = column.getElement(); - - config.mousemove = function(e){ - if(column.parent === self.moving.parent){ - if((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){ - if(self.toCol !== column || !self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - }else{ - if(self.toCol !== column || self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function(e){ - self.touchMove = false; - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - self.bindTouchEvents(column); - } - - column.modules.moveColumn = config; - } - - bindTouchEvents(column){ - var colEl = column.getElement(), - startXMove = false, //shifting center position of the cell - nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast; - - colEl.addEventListener("touchstart", (e) => { - this.checkTimeout = setTimeout(() => { - this.touchMove = true; - nextCol = column.nextColumn(); - nextColWidth = nextCol ? nextCol.getWidth()/2 : 0; - prevCol = column.prevColumn(); - prevColWidth = prevCol ? prevCol.getWidth()/2 : 0; - nextColWidthLast = 0; - prevColWidthLast = 0; - startXMove = false; - - this.startMove(e, column); - }, this.checkPeriod); - }, {passive: true}); - - colEl.addEventListener("touchmove", (e) => { - var diff, moveToCol; - - if(this.moving){ - this.moveHover(e); - - if(!startXMove){ - startXMove = e.touches[0].pageX; - } - - diff = e.touches[0].pageX - startXMove; - - if(diff > 0){ - if(nextCol && diff - nextColWidthLast > nextColWidth){ - moveToCol = nextCol; - - if(moveToCol !== column){ - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling); - this.moveColumn(moveToCol, true); - } - } - }else{ - if(prevCol && -diff - prevColWidthLast > prevColWidth){ - moveToCol = prevCol; - - if(moveToCol !== column){ - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement()); - this.moveColumn(moveToCol, false); - } - } - } - - if(moveToCol){ - nextCol = moveToCol.nextColumn(); - nextColWidthLast = nextColWidth; - nextColWidth = nextCol ? nextCol.getWidth() / 2 : 0; - prevCol = moveToCol.prevColumn(); - prevColWidthLast = prevColWidth; - prevColWidth = prevCol ? prevCol.getWidth() / 2 : 0; - } - } - }, {passive: true}); - - colEl.addEventListener("touchend", (e) => { - if(this.checkTimeout){ - clearTimeout(this.checkTimeout); - } - if(this.moving){ - this.endMove(e); - } - }); - } - - startMove(e, column){ - var element = column.getElement(), - headerElement = this.table.columnManager.getContentsElement(), - headersElement = this.table.columnManager.getHeadersElement(); - - this.moving = column; - this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - headerElement.appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + "px"; - - if(!this.touchMove){ - this._bindMouseMove(); - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - } - - this.moveHover(e); - } - - _bindMouseMove(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - } - - _unbindMouseMove(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - } - - moveColumn(column, after){ - var movingCells = this.moving.getCells(); - - this.toCol = column; - this.toColAfter = after; - - if(after){ - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(true); - - if(cellEl.parentNode && movingCells[i]){ - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - } - }); - }else{ - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(true); - - if(cellEl.parentNode && movingCells[i]){ - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - } - }); - } - } - - endMove(e){ - if(e.which === 1 || this.touchMove){ - this._unbindMouseMove(); - - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toCol){ - this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - if(!this.touchMove){ - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - } - } - } - - moveHover(e){ - var columnHolder = this.table.columnManager.getContentsElement(), - scrollLeft = columnHolder.scrollLeft, - xPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft, - scrollPos; - - this.hoverElement.style.left = (xPos - this.startX) + "px"; - - if(xPos - scrollLeft < this.autoScrollMargin){ - if(!this.autoScrollTimeout){ - this.autoScrollTimeout = setTimeout(() => { - scrollPos = Math.max(0,scrollLeft-5); - this.table.rowManager.getElement().scrollLeft = scrollPos; - this.autoScrollTimeout = false; - }, 1); - } - } - - if(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){ - if(!this.autoScrollTimeout){ - this.autoScrollTimeout = setTimeout(() => { - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5); - this.table.rowManager.getElement().scrollLeft = scrollPos; - this.autoScrollTimeout = false; - }, 1); - } - } - } -} - -MoveColumns.moduleName = "moveColumn"; - -export default MoveColumns; diff --git a/tmp/tabulator-5.6.1/src/js/modules/MoveRows/MoveRows.js b/tmp/tabulator-5.6.1/src/js/modules/MoveRows/MoveRows.js deleted file mode 100644 index f266909..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/MoveRows/MoveRows.js +++ /dev/null @@ -1,636 +0,0 @@ -import Module from '../../core/Module.js'; -import Helpers from '../../core/tools/Helpers.js'; - -class MoveRows extends Module{ - - constructor(table){ - super(table); - - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating row header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving row - this.toRow = false; //destination row - this.toRowAfter = false; //position of moving row relative to the destination row - this.hasHandle = false; //row has handle instead of fully movable row - this.startY = 0; //starting Y position within header element - this.startX = 0; //starting X position within header element - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - this.tableRowDropEvent = false; - - this.touchMove = false; - - this.connection = false; - this.connectionSelectorsTables = false; - this.connectionSelectorsElements = false; - this.connectionElements = []; - this.connections = []; - - this.connectedTable = false; - this.connectedRow = false; - - this.registerTableOption("movableRows", false); //enable movable rows - this.registerTableOption("movableRowsConnectedTables", false); //tables for movable rows to be connected to - this.registerTableOption("movableRowsConnectedElements", false); //other elements for movable rows to be connected to - this.registerTableOption("movableRowsSender", false); - this.registerTableOption("movableRowsReceiver", "insert"); - - this.registerColumnOption("rowHandle"); - } - - createPlaceholderElement(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.classList.add("tabulator-row-placeholder"); - - return el; - } - - initialize(){ - if(this.table.options.movableRows){ - this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables; - this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements; - - this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements; - - this.subscribe("cell-init", this.initializeCell.bind(this)); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("row-init", this.initializeRow.bind(this)); - } - } - - initializeGroupHeader(group){ - var self = this, - config = {}; - - //inter table drag drop - config.mouseup = function(e){ - self.tableRowDrop(e, group); - }.bind(self); - - //same table drag drop - config.mousemove = function(e){ - var rowEl; - - if(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){ - if(self.toRow !== group || !self.toRowAfter){ - rowEl = group.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(group, true); - } - }else{ - if(self.toRow !== group || self.toRowAfter){ - rowEl = group.getElement(); - if(rowEl.previousSibling){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(group, false); - } - } - } - }.bind(self); - - group.modules.moveRow = config; - } - - initializeRow(row){ - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function(e){ - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function(e){ - var rowEl = row.getElement(); - - if(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){ - if(self.toRow !== row || !self.toRowAfter){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - }else{ - if(self.toRow !== row || self.toRowAfter){ - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - - if(!this.hasHandle){ - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(row, row.getElement()); - } - - row.modules.moveRow = config; - } - - initializeColumn(column){ - if(column.definition.rowHandle && this.table.options.movableRows !== false){ - this.hasHandle = true; - } - } - - initializeCell(cell){ - if(cell.column.definition.rowHandle && this.table.options.movableRows !== false){ - var self = this, - cellEl = cell.getElement(true); - - cellEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(cell.row, cellEl); - } - } - - bindTouchEvents(row, element){ - var startYMove = false, //shifting center position of the cell - nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast; - - element.addEventListener("touchstart", (e) => { - this.checkTimeout = setTimeout(() => { - this.touchMove = true; - nextRow = row.nextRow(); - nextRowHeight = nextRow ? nextRow.getHeight()/2 : 0; - prevRow = row.prevRow(); - prevRowHeight = prevRow ? prevRow.getHeight()/2 : 0; - nextRowHeightLast = 0; - prevRowHeightLast = 0; - startYMove = false; - - this.startMove(e, row); - }, this.checkPeriod); - }, {passive: true}); - this.moving, this.toRow, this.toRowAfter; - element.addEventListener("touchmove", (e) => { - - var diff, moveToRow; - - if(this.moving){ - e.preventDefault(); - - this.moveHover(e); - - if(!startYMove){ - startYMove = e.touches[0].pageY; - } - - diff = e.touches[0].pageY - startYMove; - - if(diff > 0){ - if(nextRow && diff - nextRowHeightLast > nextRowHeight){ - moveToRow = nextRow; - - if(moveToRow !== row){ - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling); - this.moveRow(moveToRow, true); - } - } - }else{ - if(prevRow && -diff - prevRowHeightLast > prevRowHeight){ - moveToRow = prevRow; - - if(moveToRow !== row){ - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement()); - this.moveRow(moveToRow, false); - } - } - } - - if(moveToRow){ - nextRow = moveToRow.nextRow(); - nextRowHeightLast = nextRowHeight; - nextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0; - prevRow = moveToRow.prevRow(); - prevRowHeightLast = prevRowHeight; - prevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0; - } - } - }); - - element.addEventListener("touchend", (e) => { - if(this.checkTimeout){ - clearTimeout(this.checkTimeout); - } - if(this.moving){ - this.endMove(e); - this.touchMove = false; - } - }); - } - - _bindMouseMove(){ - this.table.rowManager.getDisplayRows().forEach((row) => { - if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){ - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - } - - _unbindMouseMove(){ - this.table.rowManager.getDisplayRows().forEach((row) => { - if((row.type === "row" || row.type === "group") && row.modules.moveRow && row.modules.moveRow.mousemove){ - row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - } - - startMove(e, row){ - var element = row.getElement(); - - this.setStartPosition(e, row); - - this.moving = row; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if(!this.connection){ - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - }else{ - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if(this.connection){ - document.body.appendChild(this.hoverElement); - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - this.hoverElement.style.width = this.table.element.clientWidth + "px"; - this.hoverElement.style.whiteSpace = "nowrap"; - this.hoverElement.style.overflow = "hidden"; - this.hoverElement.style.pointerEvents = "none"; - }else{ - this.table.rowManager.getTableElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - - this._bindMouseMove(); - } - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.dispatchExternal("rowMoving", row.getComponent()); - - this.moveHover(e); - } - - setStartPosition(e, row){ - var pageX = this.touchMove ? e.touches[0].pageX : e.pageX, - pageY = this.touchMove ? e.touches[0].pageY : e.pageY, - element, position; - - element = row.getElement(); - if(this.connection){ - position = element.getBoundingClientRect(); - - this.startX = position.left - pageX + window.pageXOffset; - this.startY = position.top - pageY + window.pageYOffset; - }else{ - this.startY = (pageY - element.getBoundingClientRect().top); - } - } - - endMove(e){ - if(!e || e.which === 1 || this.touchMove){ - this._unbindMouseMove(); - - if(!this.connection){ - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - } - - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toRow){ - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - }else{ - this.dispatchExternal("rowMoveCancelled", this.moving.getComponent()); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if(this.connection){ - this.table.element.classList.remove("tabulator-movingrow-sending"); - this.disconnectFromTables(); - } - } - } - - moveRow(row, after){ - this.toRow = row; - this.toRowAfter = after; - } - - moveHover(e){ - if(this.connection){ - this.moveHoverConnections.call(this, e); - }else{ - this.moveHoverTable.call(this, e); - } - } - - moveHoverTable(e){ - var rowHolder = this.table.rowManager.getElement(), - scrollTop = rowHolder.scrollTop, - yPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop; - - this.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + "px"; - } - - moveHoverConnections(e){ - this.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + "px"; - this.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + "px"; - } - - elementRowDrop(e, element, row){ - this.dispatchExternal("movableRowsElementDrop", e, element, row ? row.getComponent() : false); - } - - //establish connection with other tables - connectToTables(row){ - var connectionTables; - - if(this.connectionSelectorsTables){ - connectionTables = this.commsConnections(this.connectionSelectorsTables); - - this.dispatchExternal("movableRowsSendingStart", connectionTables); - - this.commsSend(this.connectionSelectorsTables, "moveRow", "connect", { - row:row, - }); - } - - if(this.connectionSelectorsElements){ - - this.connectionElements = []; - - if(!Array.isArray(this.connectionSelectorsElements)){ - this.connectionSelectorsElements = [this.connectionSelectorsElements]; - } - - this.connectionSelectorsElements.forEach((query) => { - if(typeof query === "string"){ - this.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))); - }else{ - this.connectionElements.push(query); - } - }); - - this.connectionElements.forEach((element) => { - var dropEvent = (e) => { - this.elementRowDrop(e, element, this.moving); - }; - - element.addEventListener("mouseup", dropEvent); - element.tabulatorElementDropEvent = dropEvent; - - element.classList.add("tabulator-movingrow-receiving"); - }); - } - } - - //disconnect from other tables - disconnectFromTables(){ - var connectionTables; - - if(this.connectionSelectorsTables){ - connectionTables = this.commsConnections(this.connectionSelectorsTables); - - this.dispatchExternal("movableRowsSendingStop", connectionTables); - - this.commsSend(this.connectionSelectorsTables, "moveRow", "disconnect"); - } - - this.connectionElements.forEach((element) => { - element.classList.remove("tabulator-movingrow-receiving"); - element.removeEventListener("mouseup", element.tabulatorElementDropEvent); - delete element.tabulatorElementDropEvent; - }); - } - - //accept incomming connection - connect(table, row){ - if(!this.connectedTable){ - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - this.table.rowManager.getDisplayRows().forEach((row) => { - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - this.tableRowDropEvent = this.tableRowDrop.bind(this); - - this.table.element.addEventListener("mouseup", this.tableRowDropEvent); - - this.dispatchExternal("movableRowsReceivingStart", row, table); - - return true; - }else{ - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } - } - - //close incoming connection - disconnect(table){ - if(table === this.connectedTable){ - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - this.table.rowManager.getDisplayRows().forEach((row) =>{ - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - this.table.element.removeEventListener("mouseup", this.tableRowDropEvent); - - this.dispatchExternal("movableRowsReceivingStop", table); - }else{ - console.warn("Move Row Error - trying to disconnect from non connected table"); - } - } - - dropComplete(table, row, success){ - var sender = false; - - if(success){ - - switch(typeof this.table.options.movableRowsSender){ - case "string": - sender = this.senders[this.table.options.movableRowsSender]; - break; - - case "function": - sender = this.table.options.movableRowsSender; - break; - } - - if(sender){ - sender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table); - }else{ - if(this.table.options.movableRowsSender){ - console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender); - } - } - - this.dispatchExternal("movableRowsSent", this.moving.getComponent(), row ? row.getComponent() : undefined, table); - }else{ - this.dispatchExternal("movableRowsSentFailed", this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); - } - - tableRowDrop(e, row){ - var receiver = false, - success = false; - - e.stopImmediatePropagation(); - - switch(typeof this.table.options.movableRowsReceiver){ - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if(receiver){ - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - }else{ - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver); - } - - if(success){ - this.dispatchExternal("movableRowsReceived", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - }else{ - this.dispatchExternal("movableRowsReceivedFailed", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.commsSend(this.connectedTable, "moveRow", "dropcomplete", { - row:row, - success:success, - }); - } - - commsReceived(table, action, data){ - switch(action){ - case "connect": - return this.connect(table, data.row); - - case "disconnect": - return this.disconnect(table); - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - } - } -} - -MoveRows.prototype.receivers = { - insert:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData()); - return true; - }, - - update:function(fromRow, toRow, fromTable){ - if(toRow){ - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace:function(fromRow, toRow, fromTable){ - if(toRow){ - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - }, -}; - -MoveRows.prototype.senders = { - delete:function(fromRow, toRow, toTable){ - fromRow.delete(); - } -}; - -MoveRows.moduleName = "moveRow"; - -export default MoveRows; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Mutator/Mutator.js b/tmp/tabulator-5.6.1/src/js/modules/Mutator/Mutator.js deleted file mode 100644 index 520a7f4..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Mutator/Mutator.js +++ /dev/null @@ -1,162 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultMutators from './defaults/mutators.js'; - -class Mutator extends Module{ - - constructor(table){ - super(table); - - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of mutation types - this.enabled = true; - - this.registerColumnOption("mutator"); - this.registerColumnOption("mutatorParams"); - this.registerColumnOption("mutatorData"); - this.registerColumnOption("mutatorDataParams"); - this.registerColumnOption("mutatorEdit"); - this.registerColumnOption("mutatorEditParams"); - this.registerColumnOption("mutatorClipboard"); - this.registerColumnOption("mutatorClipboardParams"); - this.registerColumnOption("mutateLink"); - } - - initialize(){ - this.subscribe("cell-value-changing", this.transformCell.bind(this)); - this.subscribe("cell-value-changed", this.mutateLink.bind(this)); - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("row-data-init-before", this.rowDataChanged.bind(this)); - this.subscribe("row-data-changing", this.rowDataChanged.bind(this)); - } - - rowDataChanged(row, tempData, updatedData){ - return this.transformRow(tempData, "data", updatedData); - } - - //initialize column mutator - initializeColumn(column){ - var match = false, - config = {}; - - this.allowedTypes.forEach((type) => { - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if(column.definition[key]){ - mutator = this.lookupMutator(column.definition[key]); - - if(mutator){ - match = true; - - config[key] = { - mutator:mutator, - params: column.definition[key + "Params"] || {}, - }; - } - } - }); - - if(match){ - column.modules.mutate = config; - } - } - - lookupMutator(value){ - var mutator = false; - - //set column mutator - switch(typeof value){ - case "string": - if(Mutator.mutators[value]){ - mutator = Mutator.mutators[value]; - }else{ - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; - } - - //apply mutator to row - transformRow(data, type, updatedData){ - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if(this.enabled){ - - this.table.columnManager.traverse((column) => { - var mutator, params, component; - - if(column.modules.mutate){ - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if(mutator){ - value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data); - - if((type == "data" && !updatedData)|| typeof value !== "undefined"){ - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; - } - - //apply mutator to new cell value - transformCell(cell, value){ - if(cell.column.modules.mutate){ - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, - tempData = {}; - - if(mutator){ - tempData = Object.assign(tempData, cell.row.getData()); - cell.column.setFieldValue(tempData, value); - return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); - } - } - - return value; - } - - mutateLink(cell){ - var links = cell.column.definition.mutateLink; - - if(links){ - if(!Array.isArray(links)){ - links = [links]; - } - - links.forEach((link) => { - var linkCell = cell.row.getCell(link); - - if(linkCell){ - linkCell.setValue(linkCell.getValue(), true, true); - } - }); - } - } - - enable(){ - this.enabled = true; - } - - disable(){ - this.enabled = false; - } -} - -Mutator.moduleName = "mutator"; - -//load defaults -Mutator.mutators = defaultMutators; - -export default Mutator; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Mutator/defaults/mutators.js b/tmp/tabulator-5.6.1/src/js/modules/Mutator/defaults/mutators.js deleted file mode 100644 index 7c645e4..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Mutator/defaults/mutators.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Page/Page.js b/tmp/tabulator-5.6.1/src/js/modules/Page/Page.js deleted file mode 100644 index eef8e6b..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Page/Page.js +++ /dev/null @@ -1,881 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultPageCounters from './defaults/pageCounters.js'; - -class Page extends Module{ - - constructor(table){ - super(table); - - this.mode = "local"; - this.progressiveLoad = false; - - this.element = null; - this.pageCounterElement = null; - this.pageCounter = null; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.remoteRowCountEstimate = null; - - this.initialLoad = true; - this.dataChanging = false; //flag to check if data is being changed by this module - - this.pageSizes = []; - - this.registerTableOption("pagination", false); //set pagination type - this.registerTableOption("paginationMode", "local"); //local or remote pagination - this.registerTableOption("paginationSize", false); //set number of rows to a page - this.registerTableOption("paginationInitialPage", 1); //initial page to show on load - this.registerTableOption("paginationCounter", false); // set pagination counter - this.registerTableOption("paginationCounterElement", false); // set pagination counter - this.registerTableOption("paginationButtonCount", 5); // set count of page button - this.registerTableOption("paginationSizeSelector", false); //add pagination size selector element - this.registerTableOption("paginationElement", false); //element to hold pagination numbers - // this.registerTableOption("paginationDataSent", {}); //pagination data sent to the server - // this.registerTableOption("paginationDataReceived", {}); //pagination data received from the server - this.registerTableOption("paginationAddRow", "page"); //add rows on table or page - - this.registerTableOption("progressiveLoad", false); //progressive loading - this.registerTableOption("progressiveLoadDelay", 0); //delay between requests - this.registerTableOption("progressiveLoadScrollMargin", 0); //margin before scroll begins - - this.registerTableFunction("setMaxPage", this.setMaxPage.bind(this)); - this.registerTableFunction("setPage", this.setPage.bind(this)); - this.registerTableFunction("setPageToRow", this.userSetPageToRow.bind(this)); - this.registerTableFunction("setPageSize", this.userSetPageSize.bind(this)); - this.registerTableFunction("getPageSize", this.getPageSize.bind(this)); - this.registerTableFunction("previousPage", this.previousPage.bind(this)); - this.registerTableFunction("nextPage", this.nextPage.bind(this)); - this.registerTableFunction("getPage", this.getPage.bind(this)); - this.registerTableFunction("getPageMax", this.getPageMax.bind(this)); - - //register component functions - this.registerComponentFunction("row", "pageTo", this.setPageToRow.bind(this)); - } - - initialize(){ - if(this.table.options.pagination){ - this.subscribe("row-deleted", this.rowsUpdated.bind(this)); - this.subscribe("row-added", this.rowsUpdated.bind(this)); - this.subscribe("data-processed", this.initialLoadComplete.bind(this)); - this.subscribe("table-built", this.calculatePageSizes.bind(this)); - this.subscribe("footer-redraw", this.footerRedraw.bind(this)); - - if(this.table.options.paginationAddRow == "page"){ - this.subscribe("row-adding-position", this.rowAddingPosition.bind(this)); - } - - if(this.table.options.paginationMode === "remote"){ - this.subscribe("data-params", this.remotePageParams.bind(this)); - this.subscribe("data-loaded", this._parseRemoteData.bind(this)); - } - - if(this.table.options.progressiveLoad){ - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } - - this.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40); - this.registerDisplayHandler(this.getRows.bind(this), 50); - - this.createElements(); - this.initializePageCounter(); - this.initializePaginator(); - }else if(this.table.options.progressiveLoad){ - this.subscribe("data-params", this.remotePageParams.bind(this)); - this.subscribe("data-loaded", this._parseRemoteData.bind(this)); - this.subscribe("table-built", this.calculatePageSizes.bind(this)); - this.subscribe("data-processed", this.initialLoadComplete.bind(this)); - - this.initializeProgressive(this.table.options.progressiveLoad); - - if(this.table.options.progressiveLoad === "scroll"){ - this.subscribe("scroll-vertical", this.scrollVertical.bind(this)); - } - } - } - - rowAddingPosition(row, top){ - var rowManager = this.table.rowManager, - displayRows = rowManager.getDisplayRows(), - index; - - if(top){ - if(displayRows.length){ - index = displayRows[0]; - }else{ - if(rowManager.activeRows.length){ - index = rowManager.activeRows[rowManager.activeRows.length-1]; - top = false; - } - } - }else{ - if(displayRows.length){ - index = displayRows[displayRows.length - 1]; - top = displayRows.length < this.size ? false : true; - } - } - - return {index, top}; - } - - calculatePageSizes(){ - var testElRow, testElCell; - - if(this.table.options.paginationSize){ - this.size = this.table.options.paginationSize; - }else{ - testElRow = document.createElement("div"); - testElRow.classList.add("tabulator-row"); - testElRow.style.visibility = "hidden"; - - testElCell = document.createElement("div"); - testElCell.classList.add("tabulator-cell"); - testElCell.innerHTML = "Page Row Test"; - - testElRow.appendChild(testElCell); - - this.table.rowManager.getTableElement().appendChild(testElRow); - - this.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight); - - this.table.rowManager.getTableElement().removeChild(testElRow); - } - - this.dispatchExternal("pageSizeChanged", this.size); - - this.generatePageSizeSelectList(); - } - - initialLoadComplete(){ - this.initialLoad = false; - } - - remotePageParams(data, config, silent, params){ - if(!this.initialLoad){ - if((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){ - this.reset(true); - } - } - - //configure request params - params.page = this.page; - - //set page size if defined - if(this.size){ - params.size = this.size; - } - - return params; - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - userSetPageToRow(row){ - if(this.table.options.pagination){ - row = this.table.rowManager.findRow(row); - - if(row){ - return this.setPageToRow(row); - } - } - - return Promise.reject(); - } - - userSetPageSize(size){ - if(this.table.options.pagination){ - this.setPageSize(size); - return this.setPage(1); - }else{ - return false; - } - } - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - scrollVertical(top, dir){ - var element, diff, margin; - if(!dir && !this.table.dataLoader.loading){ - element = this.table.rowManager.getElement(); - diff = element.scrollHeight - element.clientHeight - top; - margin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2); - - if(diff < margin){ - this.nextPage() - .catch(() => {}); //consume the exception thrown when on the last page - } - } - } - - restOnRenderBefore(rows, renderInPosition){ - if(!renderInPosition){ - if(this.mode === "local"){ - this.reset(); - } - } - - return rows; - } - - rowsUpdated(){ - this.refreshData(true, "all"); - } - - createElements(){ - var button; - - this.element = document.createElement("span"); - this.element.classList.add("tabulator-paginator"); - - this.pagesElement = document.createElement("span"); - this.pagesElement.classList.add("tabulator-pages"); - - button = document.createElement("button"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); - - if(this.table.options.paginationSizeSelector){ - this.pageSizeSelect = document.createElement("select"); - this.pageSizeSelect.classList.add("tabulator-page-size"); - } - } - - generatePageSizeSelectList(){ - var pageSizes = []; - - if(this.pageSizeSelect){ - - if(Array.isArray(this.table.options.paginationSizeSelector)){ - pageSizes = this.table.options.paginationSizeSelector; - this.pageSizes = pageSizes; - - if(this.pageSizes.indexOf(this.size) == -1){ - pageSizes.unshift(this.size); - } - }else{ - - if(this.pageSizes.indexOf(this.size) == -1){ - pageSizes = []; - - for (let i = 1; i < 5; i++){ - pageSizes.push(this.size * i); - } - - this.pageSizes = pageSizes; - }else{ - pageSizes = this.pageSizes; - } - } - - while(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild); - - pageSizes.forEach((item) => { - var itemEl = document.createElement("option"); - itemEl.value = item; - - if(item === true){ - this.langBind("pagination|all", function(value){ - itemEl.innerHTML = value; - }); - }else{ - itemEl.innerHTML = item; - } - - - - this.pageSizeSelect.appendChild(itemEl); - }); - - this.pageSizeSelect.value = this.size; - } - } - - initializePageCounter(){ - var counter = this.table.options.paginationCounter, - pageCounter = null; - - if(counter){ - if(typeof counter === "function"){ - pageCounter = counter; - }else{ - pageCounter = Page.pageCounters[counter]; - } - - if(pageCounter){ - this.pageCounter = pageCounter; - - this.pageCounterElement = document.createElement("span"); - this.pageCounterElement.classList.add("tabulator-page-counter"); - }else{ - console.warn("Pagination Error - No such page counter found: ", counter); - } - } - } - - //setup pagination - initializePaginator(hidden){ - var pageSelectLabel, paginationCounterHolder; - - if(!hidden){ - //build pagination element - - //bind localizations - this.langBind("pagination|first", (value) => { - this.firstBut.innerHTML = value; - }); - - this.langBind("pagination|first_title", (value) => { - this.firstBut.setAttribute("aria-label", value); - this.firstBut.setAttribute("title", value); - }); - - this.langBind("pagination|prev", (value) => { - this.prevBut.innerHTML = value; - }); - - this.langBind("pagination|prev_title", (value) => { - this.prevBut.setAttribute("aria-label", value); - this.prevBut.setAttribute("title", value); - }); - - this.langBind("pagination|next", (value) => { - this.nextBut.innerHTML = value; - }); - - this.langBind("pagination|next_title", (value) => { - this.nextBut.setAttribute("aria-label", value); - this.nextBut.setAttribute("title", value); - }); - - this.langBind("pagination|last", (value) => { - this.lastBut.innerHTML = value; - }); - - this.langBind("pagination|last_title", (value) => { - this.lastBut.setAttribute("aria-label", value); - this.lastBut.setAttribute("title", value); - }); - - //click bindings - this.firstBut.addEventListener("click", () => { - this.setPage(1); - }); - - this.prevBut.addEventListener("click", () => { - this.previousPage(); - }); - - this.nextBut.addEventListener("click", () => { - this.nextPage(); - }); - - this.lastBut.addEventListener("click", () => { - this.setPage(this.max); - }); - - if(this.table.options.paginationElement){ - this.element = this.table.options.paginationElement; - } - - if(this.pageSizeSelect){ - pageSelectLabel = document.createElement("label"); - - this.langBind("pagination|page_size", (value) => { - this.pageSizeSelect.setAttribute("aria-label", value); - this.pageSizeSelect.setAttribute("title", value); - pageSelectLabel.innerHTML = value; - }); - - this.element.appendChild(pageSelectLabel); - this.element.appendChild(this.pageSizeSelect); - - this.pageSizeSelect.addEventListener("change", (e) => { - this.setPageSize(this.pageSizeSelect.value == "true" ? true : this.pageSizeSelect.value); - this.setPage(1); - }); - } - - //append to DOM - this.element.appendChild(this.firstBut); - this.element.appendChild(this.prevBut); - this.element.appendChild(this.pagesElement); - this.element.appendChild(this.nextBut); - this.element.appendChild(this.lastBut); - - if(!this.table.options.paginationElement){ - if(this.table.options.paginationCounter){ - - paginationCounterHolder; - - if(this.table.options.paginationCounterElement){ - if(this.table.options.paginationCounterElement instanceof HTMLElement){ - this.table.options.paginationCounterElement.appendChild(this.pageCounterElement); - }else if(typeof this.table.options.paginationCounterElement === "string"){ - paginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement); - - if(paginationCounterHolder){ - paginationCounterHolder.appendChild(this.pageCounterElement); - }else{ - console.warn("Pagination Error - Unable to find element matching paginationCounterElement selector:", this.table.options.paginationCounterElement); - } - } - }else{ - this.footerAppend(this.pageCounterElement); - } - - } - - this.footerAppend(this.element); - } - - this.page = this.table.options.paginationInitialPage; - this.count = this.table.options.paginationButtonCount; - } - - //set default values - this.mode = this.table.options.paginationMode; - } - - initializeProgressive(mode){ - this.initializePaginator(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; - } - - trackChanges(){ - this.dispatch("page-changed"); - } - - //calculate maximum page from number of rows - setMaxRows(rowCount){ - if(!rowCount){ - this.max = 1; - }else{ - this.max = this.size === true ? 1 : Math.ceil(rowCount/this.size); - } - - if(this.page > this.max){ - this.page = this.max; - } - } - - //reset to first page without triggering action - reset(force){ - if(!this.initialLoad){ - if(this.mode == "local" || force){ - this.page = 1; - this.trackChanges(); - } - } - } - - //set the maximum page - setMaxPage(max){ - - max = parseInt(max); - - this.max = max || 1; - - if(this.page > this.max){ - this.page = this.max; - this.trigger(); - } - } - - //set current page number - setPage(page){ - switch(page){ - case "first": - return this.setPage(1); - - case "prev": - return this.previousPage(); - - case "next": - return this.nextPage(); - - case "last": - return this.setPage(this.max); - } - - page = parseInt(page); - - if((page > 0 && page <= this.max) || this.mode !== "local"){ - this.page = page; - - this.trackChanges(); - - return this.trigger(); - }else{ - console.warn("Pagination Error - Requested page is out of range of 1 - " + this.max + ":", page); - return Promise.reject(); - } - } - - setPageToRow(row){ - var rows = this.displayRows(-1); - var index = rows.indexOf(row); - - if(index > -1){ - var page = this.size === true ? 1 : Math.ceil((index + 1) / this.size); - - return this.setPage(page); - }else{ - console.warn("Pagination Error - Requested row is not visible"); - return Promise.reject(); - } - } - - setPageSize(size){ - if(size !== true){ - size = parseInt(size); - } - - if(size > 0){ - this.size = size; - this.dispatchExternal("pageSizeChanged", size); - } - - if(this.pageSizeSelect){ - // this.pageSizeSelect.value = size; - this.generatePageSizeSelectList(); - } - - this.trackChanges(); - } - - _setPageCounter(totalRows, size, currentRow){ - var content; - - if(this.pageCounter){ - - if(this.mode === "remote"){ - size = this.size; - currentRow = ((this.page - 1) * this.size) + 1; - totalRows = this.remoteRowCountEstimate; - } - - content = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max); - - switch(typeof content){ - case "object": - if(content instanceof Node){ - - //clear previous cell contents - while(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild); - - this.pageCounterElement.appendChild(content); - }else{ - this.pageCounterElement.innerHTML = ""; - - if(content != null){ - console.warn("Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:", content); - } - } - break; - case "undefined": - this.pageCounterElement.innerHTML = ""; - break; - default: - this.pageCounterElement.innerHTML = content; - } - } - } - - //setup the pagination buttons - _setPageButtons(){ - let leftSize = Math.floor((this.count-1) / 2); - let rightSize = Math.ceil((this.count-1) / 2); - let min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1); - let max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max); - - while(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild); - - if(this.page == 1){ - this.firstBut.disabled = true; - this.prevBut.disabled = true; - }else{ - this.firstBut.disabled = false; - this.prevBut.disabled = false; - } - - if(this.page == this.max){ - this.lastBut.disabled = true; - this.nextBut.disabled = true; - }else{ - this.lastBut.disabled = false; - this.nextBut.disabled = false; - } - - for(let i = min; i <= max; i++){ - if(i>0 && i <= this.max){ - this.pagesElement.appendChild(this._generatePageButton(i)); - } - } - - this.footerRedraw(); - } - - _generatePageButton(page){ - var button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if(page == this.page){ - button.classList.add("active"); - } - - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - - this.langBind("pagination|page_title", (value) => { - button.setAttribute("aria-label", value + " " + page); - button.setAttribute("title", value + " " + page); - }); - - button.setAttribute("data-page", page); - button.textContent = page; - - button.addEventListener("click", (e) => { - this.setPage(page); - }); - - return button; - } - - //previous page - previousPage(){ - if(this.page > 1){ - this.page--; - - this.trackChanges(); - - return this.trigger(); - - }else{ - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - return Promise.reject(); - } - } - - //next page - nextPage(){ - if(this.page < this.max){ - this.page++; - - this.trackChanges(); - - return this.trigger(); - - }else{ - if(!this.progressiveLoad){ - console.warn("Pagination Error - Next page would be greater than maximum page of " + this.max + ":", this.max + 1); - } - return Promise.reject(); - } - } - - //return current page number - getPage(){ - return this.page; - } - - //return max page number - getPageMax(){ - return this.max; - } - - getPageSize(size){ - return this.size; - } - - getMode(){ - return this.mode; - } - - //return appropriate rows for current page - getRows(data){ - var actualRowPageSize = 0, - output, start, end, actualStartRow; - - var actualRows = data.filter((row) => { - return row.type === "row"; - }); - - if(this.mode == "local"){ - output = []; - - this.setMaxRows(data.length); - - if(this.size === true){ - start = 0; - end = data.length; - }else{ - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - } - - this._setPageButtons(); - - for(let i = start; i < end; i++){ - let row = data[i]; - - if(row){ - output.push(row); - - if(row.type === "row"){ - if(!actualStartRow){ - actualStartRow = row; - } - - actualRowPageSize++; - } - } - } - - this._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0); - - return output; - }else{ - this._setPageButtons(); - this._setPageCounter(actualRows.length); - - return data.slice(0); - } - } - - trigger(){ - var left; - - switch(this.mode){ - case "local": - left = this.table.rowManager.scrollLeft; - - this.refreshData(); - this.table.rowManager.scrollHorizontal(left); - - this.dispatchExternal("pageLoaded", this.getPage()); - - return Promise.resolve(); - - case "remote": - this.dataChanging = true; - return this.reloadData(null) - .finally(() => { - this.dataChanging = false; - }); - - case "progressive_load": - case "progressive_scroll": - return this.reloadData(null, true); - - default: - console.warn("Pagination Error - no such pagination mode:", this.mode); - return Promise.reject(); - } - } - - _parseRemoteData(data){ - var margin; - - if(typeof data.last_page === "undefined"){ - console.warn("Remote Pagination Error - Server response missing '" + (this.options("dataReceiveParams").last_page || "last_page") + "' property"); - } - - if(data.data){ - this.max = parseInt(data.last_page) || 1; - - this.remoteRowCountEstimate = typeof data.last_row !== "undefined" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0)); - - if(this.progressiveLoad){ - switch(this.mode){ - case "progressive_load": - - if(this.page == 1){ - this.table.rowManager.setData(data.data, false, this.page == 1); - }else{ - this.table.rowManager.addRows(data.data); - } - - if(this.page < this.max){ - setTimeout(() => { - this.nextPage(); - }, this.table.options.progressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data); - - this.table.rowManager.setData(data, this.page !== 1, this.page == 1); - - margin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2); - - if(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){ - if(this.page < this.max){ - setTimeout(() => { - this.nextPage(); - }); - } - } - break; - } - - return false; - }else{ - // left = this.table.rowManager.scrollLeft; - this.dispatchExternal("pageLoaded", this.getPage()); - // this.table.rowManager.scrollHorizontal(left); - // this.table.columnManager.scrollHorizontal(left); - } - - }else{ - console.warn("Remote Pagination Error - Server response missing '" + (this.options("dataReceiveParams").data || "data") + "' property"); - } - - return data.data; - } - - //handle the footer element being redrawn - footerRedraw(){ - var footer = this.table.footerManager.containerElement; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - }else{ - this.pagesElement.style.display = ''; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - } - } - } -} - -Page.moduleName = "page"; - -//load defaults -Page.pageCounters = defaultPageCounters; - -export default Page; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters.js b/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters.js deleted file mode 100644 index e2e8d1f..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters.js +++ /dev/null @@ -1,8 +0,0 @@ -import rows from './pageCounters/rows.js'; -import pages from './pageCounters/pages.js'; - - -export default { - rows:rows, - pages:pages, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters/pages.js b/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters/pages.js deleted file mode 100644 index 144e377..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters/pages.js +++ /dev/null @@ -1,33 +0,0 @@ -export default function(pageSize, currentRow, currentPage, totalRows, totalPages){ - - var el = document.createElement("span"), - showingEl = document.createElement("span"), - valueEl = document.createElement("span"), - ofEl = document.createElement("span"), - totalEl = document.createElement("span"), - rowsEl = document.createElement("span"); - - this.table.modules.localize.langBind("pagination|counter|showing", (value) => { - showingEl.innerHTML = value; - }); - - valueEl.innerHTML = " " + currentPage + " "; - - this.table.modules.localize.langBind("pagination|counter|of", (value) => { - ofEl.innerHTML = value; - }); - - totalEl.innerHTML = " " + totalPages + " "; - - this.table.modules.localize.langBind("pagination|counter|pages", (value) => { - rowsEl.innerHTML = value; - }); - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(ofEl); - el.appendChild(totalEl); - el.appendChild(rowsEl); - - return el; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters/rows.js b/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters/rows.js deleted file mode 100644 index 40d9c2b..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Page/defaults/pageCounters/rows.js +++ /dev/null @@ -1,40 +0,0 @@ -export default function(pageSize, currentRow, currentPage, totalRows, totalPages){ - var el = document.createElement("span"), - showingEl = document.createElement("span"), - valueEl = document.createElement("span"), - ofEl = document.createElement("span"), - totalEl = document.createElement("span"), - rowsEl = document.createElement("span"); - - this.table.modules.localize.langBind("pagination|counter|showing", (value) => { - showingEl.innerHTML = value; - }); - - this.table.modules.localize.langBind("pagination|counter|of", (value) => { - ofEl.innerHTML = value; - }); - - this.table.modules.localize.langBind("pagination|counter|rows", (value) => { - rowsEl.innerHTML = value; - }); - - if(totalRows){ - valueEl.innerHTML = " " + currentRow + "-" + Math.min((currentRow + pageSize - 1), totalRows) + " "; - - totalEl.innerHTML = " " + totalRows + " "; - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(ofEl); - el.appendChild(totalEl); - el.appendChild(rowsEl); - }else{ - valueEl.innerHTML = " 0 "; - - el.appendChild(showingEl); - el.appendChild(valueEl); - el.appendChild(rowsEl); - } - - return el; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Persistence/Persistence.js b/tmp/tabulator-5.6.1/src/js/modules/Persistence/Persistence.js deleted file mode 100644 index fc8a4c2..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Persistence/Persistence.js +++ /dev/null @@ -1,475 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultReaders from './defaults/readers.js'; -import defaultWriters from './defaults/writers.js'; - -class Persistence extends Module{ - - constructor(table){ - super(table); - - this.mode = ""; - this.id = ""; - // this.persistProps = ["field", "width", "visible"]; - this.defWatcherBlock = false; - this.config = {}; - this.readFunc = false; - this.writeFunc = false; - - this.registerTableOption("persistence", false); - this.registerTableOption("persistenceID", ""); //key for persistent storage - this.registerTableOption("persistenceMode", true); //mode for storing persistence information - this.registerTableOption("persistenceReaderFunc", false); //function for handling persistence data reading - this.registerTableOption("persistenceWriterFunc", false); //function for handling persistence data writing - } - - // Test for whether localStorage is available for use. - localStorageTest() { - var testKey = "_tabulator_test"; - - try { - window.localStorage.setItem( testKey, testKey); - window.localStorage.removeItem( testKey ); - return true; - } catch(e) { - return false; - } - } - - //setup parameters - initialize(){ - if(this.table.options.persistence){ - //determine persistent layout storage type - var mode = this.table.options.persistenceMode, - id = this.table.options.persistenceID, - retrievedData; - - this.mode = mode !== true ? mode : (this.localStorageTest() ? "local" : "cookie"); - - if(this.table.options.persistenceReaderFunc){ - if(typeof this.table.options.persistenceReaderFunc === "function"){ - this.readFunc = this.table.options.persistenceReaderFunc; - }else{ - if(Persistence.readers[this.table.options.persistenceReaderFunc]){ - this.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc]; - }else{ - console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc); - } - } - }else{ - if(Persistence.readers[this.mode]){ - this.readFunc = Persistence.readers[this.mode]; - }else{ - console.warn("Persistence Read Error - invalid reader set", this.mode); - } - } - - if(this.table.options.persistenceWriterFunc){ - if(typeof this.table.options.persistenceWriterFunc === "function"){ - this.writeFunc = this.table.options.persistenceWriterFunc; - }else{ - if(Persistence.writers[this.table.options.persistenceWriterFunc]){ - this.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc]; - }else{ - console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc); - } - } - }else{ - if(Persistence.writers[this.mode]){ - this.writeFunc = Persistence.writers[this.mode]; - }else{ - console.warn("Persistence Write Error - invalid writer set", this.mode); - } - } - - //set storage tag - this.id = "tabulator-" + (id || (this.table.element.getAttribute("id") || "")); - - this.config = { - sort:this.table.options.persistence === true || this.table.options.persistence.sort, - filter:this.table.options.persistence === true || this.table.options.persistence.filter, - headerFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter, - group:this.table.options.persistence === true || this.table.options.persistence.group, - page:this.table.options.persistence === true || this.table.options.persistence.page, - columns:this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns, - }; - - //load pagination data if needed - if(this.config.page){ - retrievedData = this.retrieveData("page"); - - if(retrievedData){ - if(typeof retrievedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)){ - this.table.options.paginationSize = retrievedData.paginationSize; - } - - if(typeof retrievedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)){ - this.table.options.paginationInitialPage = retrievedData.paginationInitialPage; - } - } - } - - //load group data if needed - if(this.config.group){ - retrievedData = this.retrieveData("group"); - - if(retrievedData){ - if(typeof retrievedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)){ - this.table.options.groupBy = retrievedData.groupBy; - } - if(typeof retrievedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)){ - this.table.options.groupStartOpen = retrievedData.groupStartOpen; - } - if(typeof retrievedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)){ - this.table.options.groupHeader = retrievedData.groupHeader; - } - } - } - - if(this.config.columns){ - this.table.options.columns = this.load("columns", this.table.options.columns); - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-show", this.save.bind(this, "columns")); - this.subscribe("column-hide", this.save.bind(this, "columns")); - this.subscribe("column-moved", this.save.bind(this, "columns")); - } - - this.subscribe("table-built", this.tableBuilt.bind(this), 0); - - this.subscribe("table-redraw", this.tableRedraw.bind(this)); - - this.subscribe("filter-changed", this.eventSave.bind(this, "filter")); - this.subscribe("filter-changed", this.eventSave.bind(this, "headerFilter")); - this.subscribe("sort-changed", this.eventSave.bind(this, "sort")); - this.subscribe("group-changed", this.eventSave.bind(this, "group")); - this.subscribe("page-changed", this.eventSave.bind(this, "page")); - this.subscribe("column-resized", this.eventSave.bind(this, "columns")); - this.subscribe("column-width", this.eventSave.bind(this, "columns")); - this.subscribe("layout-refreshed", this.eventSave.bind(this, "columns")); - } - - this.registerTableFunction("getColumnLayout", this.getColumnLayout.bind(this)); - this.registerTableFunction("setColumnLayout", this.setColumnLayout.bind(this)); - } - - eventSave(type){ - if(this.config[type]){ - this.save(type); - } - } - - tableBuilt(){ - var sorters, filters, headerFilters; - - if(this.config.sort){ - sorters = this.load("sort"); - - if(!sorters === false){ - this.table.options.initialSort = sorters; - } - } - - if(this.config.filter){ - filters = this.load("filter"); - - if(!filters === false){ - this.table.options.initialFilter = filters; - } - } - if(this.config.headerFilter){ - headerFilters = this.load("headerFilter"); - - if(!headerFilters === false){ - this.table.options.initialHeaderFilter = headerFilters; - } - } - - } - - tableRedraw(force){ - if(force && this.config.columns){ - this.save("columns"); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - getColumnLayout(){ - return this.parseColumns(this.table.columnManager.getColumns()); - } - - setColumnLayout(layout){ - this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true)); - return true; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumn(column){ - var def, keys; - - if(this.config.columns){ - this.defWatcherBlock = true; - - def = column.getDefinition(); - - keys = this.config.columns === true ? Object.keys(def) : this.config.columns; - - keys.forEach((key)=>{ - var props = Object.getOwnPropertyDescriptor(def, key); - var value = def[key]; - - if(props){ - Object.defineProperty(def, key, { - set: (newValue) => { - value = newValue; - - if(!this.defWatcherBlock){ - this.save("columns"); - } - - if(props.set){ - props.set(newValue); - } - }, - get:() => { - if(props.get){ - props.get(); - } - return value; - } - }); - } - }); - - this.defWatcherBlock = false; - } - } - - //load saved definitions - load(type, current){ - var data = this.retrieveData(type); - - if(current){ - data = data ? this.mergeDefinition(current, data) : current; - } - - return data; - } - - //retrieve data from memory - retrieveData(type){ - return this.readFunc ? this.readFunc(this.id, type) : false; - } - - //merge old and new column definitions - mergeDefinition(oldCols, newCols, mergeAllNew){ - var output = []; - - newCols = newCols || []; - - newCols.forEach((column, to) => { - var from = this._findColumn(oldCols, column), - keys; - - if(from){ - if(mergeAllNew){ - keys = Object.keys(column); - }else if(this.config.columns === true || this.config.columns == undefined){ - keys = Object.keys(from); - keys.push("width"); - }else{ - keys = this.config.columns; - } - - keys.forEach((key)=>{ - if(key !== "columns" && typeof column[key] !== "undefined"){ - from[key] = column[key]; - } - }); - - if(from.columns){ - from.columns = this.mergeDefinition(from.columns, column.columns); - } - - output.push(from); - } - }); - - oldCols.forEach((column, i) => { - var from = this._findColumn(newCols, column); - - if (!from) { - if(output.length>i){ - output.splice(i, 0, column); - }else{ - output.push(column); - } - } - }); - - return output; - } - - //find matching columns - _findColumn(columns, subject){ - var type = subject.columns ? "group" : (subject.field ? "field" : "object"); - - return columns.find(function(col){ - switch(type){ - case "group": - return col.title === subject.title && col.columns.length === subject.columns.length; - - case "field": - return col.field === subject.field; - - case "object": - return col === subject; - } - }); - } - - //save data - save(type){ - var data = {}; - - switch(type){ - case "columns": - data = this.parseColumns(this.table.columnManager.getColumns()); - break; - - case "filter": - data = this.table.modules.filter.getFilters(); - break; - - case "headerFilter": - data = this.table.modules.filter.getHeaderFilters(); - break; - - case "sort": - data = this.validateSorters(this.table.modules.sort.getSort()); - break; - - case "group": - data = this.getGroupConfig(); - break; - - case "page": - data = this.getPageConfig(); - break; - } - - if(this.writeFunc){ - this.writeFunc(this.id, type, data); - } - - } - - //ensure sorters contain no function data - validateSorters(data){ - data.forEach(function(item){ - item.column = item.field; - delete item.field; - }); - - return data; - } - - getGroupConfig(){ - var data = {}; - - if(this.config.group){ - if(this.config.group === true || this.config.group.groupBy){ - data.groupBy = this.table.options.groupBy; - } - - if(this.config.group === true || this.config.group.groupStartOpen){ - data.groupStartOpen = this.table.options.groupStartOpen; - } - - if(this.config.group === true || this.config.group.groupHeader){ - data.groupHeader = this.table.options.groupHeader; - } - } - - return data; - } - - getPageConfig(){ - var data = {}; - - if(this.config.page){ - if(this.config.page === true || this.config.page.size){ - data.paginationSize = this.table.modules.page.getPageSize(); - } - - if(this.config.page === true || this.config.page.page){ - data.paginationInitialPage = this.table.modules.page.getPage(); - } - } - - return data; - } - - - //parse columns for data to store - parseColumns(columns){ - var definitions = [], - excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"]; - - columns.forEach((column) => { - var defStore = {}, - colDef = column.getDefinition(), - keys; - - if(column.isGroup){ - defStore.title = colDef.title; - defStore.columns = this.parseColumns(column.getColumns()); - }else{ - defStore.field = column.getField(); - - if(this.config.columns === true || this.config.columns == undefined){ - keys = Object.keys(colDef); - keys.push("width"); - keys.push("visible"); - }else{ - keys = this.config.columns; - } - - keys.forEach((key)=>{ - switch(key){ - case "width": - defStore.width = column.getWidth(); - break; - case "visible": - defStore.visible = column.visible; - break; - - default: - if(typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1){ - defStore[key] = colDef[key]; - } - } - }); - } - - definitions.push(defStore); - }); - - return definitions; - } -} - -Persistence.moduleName = "persistence"; - -Persistence.moduleInitOrder = -10; - -//load defaults -Persistence.readers = defaultReaders; -Persistence.writers = defaultWriters; - -export default Persistence; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Persistence/defaults/readers.js b/tmp/tabulator-5.6.1/src/js/modules/Persistence/defaults/readers.js deleted file mode 100644 index 0e32df5..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Persistence/defaults/readers.js +++ /dev/null @@ -1,29 +0,0 @@ -// read persistance information from storage -export default { - local:function(id, type){ - var data = localStorage.getItem(id + "-" + type); - - return data ? JSON.parse(data) : false; - }, - cookie:function(id, type){ - var cookie = document.cookie, - key = id + "-" + type, - cookiePos = cookie.indexOf(key + "="), - end, data; - - //if cookie exists, decode and load column data into tabulator - if(cookiePos > -1){ - cookie = cookie.slice(cookiePos); - - end = cookie.indexOf(";"); - - if(end > -1){ - cookie = cookie.slice(0, end); - } - - data = cookie.replace(key + "=", ""); - } - - return data ? JSON.parse(data) : false; - } -}; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Persistence/defaults/writers.js b/tmp/tabulator-5.6.1/src/js/modules/Persistence/defaults/writers.js deleted file mode 100644 index 3a47629..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Persistence/defaults/writers.js +++ /dev/null @@ -1,13 +0,0 @@ -//write persistence information to storage -export default { - local:function(id, type, data){ - localStorage.setItem(id + "-" + type, JSON.stringify(data)); - }, - cookie:function(id, type, data){ - var expireDate = new Date(); - - expireDate.setDate(expireDate.getDate() + 10000); - - document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString(); - } -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Popup/Popup.js b/tmp/tabulator-5.6.1/src/js/modules/Popup/Popup.js deleted file mode 100644 index 8dbbebb..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Popup/Popup.js +++ /dev/null @@ -1,231 +0,0 @@ -import Module from '../../core/Module.js'; - -class Popup extends Module{ - - constructor(table){ - super(table); - - this.columnSubscribers = {}; - - this.registerTableOption("rowContextPopup", false); - this.registerTableOption("rowClickPopup", false); - this.registerTableOption("rowDblClickPopup", false); - this.registerTableOption("groupContextPopup", false); - this.registerTableOption("groupClickPopup", false); - this.registerTableOption("groupDblClickPopup", false); - - this.registerColumnOption("headerContextPopup"); - this.registerColumnOption("headerClickPopup"); - this.registerColumnOption("headerDblClickPopup"); - this.registerColumnOption("headerPopup"); - this.registerColumnOption("headerPopupIcon"); - this.registerColumnOption("contextPopup"); - this.registerColumnOption("clickPopup"); - this.registerColumnOption("dblClickPopup"); - - this.registerComponentFunction("cell", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("column", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("row", "popup", this._componentPopupCall.bind(this)); - this.registerComponentFunction("group", "popup", this._componentPopupCall.bind(this)); - - } - - initialize(){ - this.initializeRowWatchers(); - this.initializeGroupWatchers(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - _componentPopupCall(component, contents, position){ - this.loadPopupEvent(contents, null, component, position); - } - - initializeRowWatchers(){ - if(this.table.options.rowContextPopup){ - this.subscribe("row-contextmenu", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup)); - this.table.on("rowTapHold", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup)); - } - - if(this.table.options.rowClickPopup){ - this.subscribe("row-click", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup)); - } - - if(this.table.options.rowDblClickPopup){ - this.subscribe("row-dblclick", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup)); - } - } - - initializeGroupWatchers(){ - if(this.table.options.groupContextPopup){ - this.subscribe("group-contextmenu", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup)); - this.table.on("groupTapHold", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup)); - } - - if(this.table.options.groupClickPopup){ - this.subscribe("group-click", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup)); - } - - if(this.table.options.groupDblClickPopup){ - this.subscribe("group-dblclick", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup)); - } - } - - initializeColumn(column){ - var def = column.definition; - - //handle column events - if(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){ - this.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, "headerContextPopup"); - this.subscribe("column-contextmenu", this.columnSubscribers.headerContextPopup); - this.table.on("headerTapHold", this.loadPopupTableColumnEvent.bind(this, "headerContextPopup")); - } - - if(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){ - this.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerClickPopup"); - this.subscribe("column-click", this.columnSubscribers.headerClickPopup); - - - }if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){ - this.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, "headerDblClickPopup"); - this.subscribe("column-dblclick", this.columnSubscribers.headerDblClickPopup); - } - - if(def.headerPopup){ - this.initializeColumnHeaderPopup(column); - } - - //handle cell events - if(def.contextPopup && !this.columnSubscribers.contextPopup){ - this.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, "contextPopup"); - this.subscribe("cell-contextmenu", this.columnSubscribers.contextPopup); - this.table.on("cellTapHold", this.loadPopupTableCellEvent.bind(this, "contextPopup")); - } - - if(def.clickPopup && !this.columnSubscribers.clickPopup){ - this.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, "clickPopup"); - this.subscribe("cell-click", this.columnSubscribers.clickPopup); - } - - if(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){ - this.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, "dblClickPopup"); - this.subscribe("cell-click", this.columnSubscribers.dblClickPopup); - } - } - - initializeColumnHeaderPopup(column){ - var icon = column.definition.headerPopupIcon, - headerPopupEl; - - headerPopupEl = document.createElement("span"); - headerPopupEl.classList.add("tabulator-header-popup-button"); - - if(icon){ - if(typeof icon === "function"){ - icon = icon(column.getComponent()); - } - - if(icon instanceof HTMLElement){ - headerPopupEl.appendChild(icon); - }else{ - headerPopupEl.innerHTML = icon; - } - }else{ - headerPopupEl.innerHTML = "⋮"; - } - - headerPopupEl.addEventListener("click", (e) => { - e.stopPropagation(); - e.preventDefault(); - - this.loadPopupEvent(column.definition.headerPopup, e, column); - }); - - column.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild); - } - - loadPopupTableCellEvent(option, e, cell){ - if(cell._cell){ - cell = cell._cell; - } - - if(cell.column.definition[option]){ - this.loadPopupEvent(cell.column.definition[option], e, cell); - } - } - - loadPopupTableColumnEvent(option, e, column){ - if(column._column){ - column = column._column; - } - - if(column.definition[option]){ - this.loadPopupEvent(column.definition[option], e, column); - } - } - - loadPopupEvent(contents, e, component, position){ - var renderedCallback; - - function onRendered(callback){ - renderedCallback = callback; - } - - if(component._group){ - component = component._group; - }else if(component._row){ - component = component._row; - } - - contents = typeof contents == "function" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents; - - this.loadPopup(e, component, contents, renderedCallback, position); - } - - loadPopup(e, component, contents, renderedCallback, position){ - var touch = !(e instanceof MouseEvent), - contentsEl, popup; - - if(contents instanceof HTMLElement){ - contentsEl = contents; - }else{ - contentsEl = document.createElement("div"); - contentsEl.innerHTML = contents; - } - - contentsEl.classList.add("tabulator-popup"); - - contentsEl.addEventListener("click", (e) =>{ - e.stopPropagation(); - }); - - if(!touch){ - e.preventDefault(); - } - - popup = this.popup(contentsEl); - - if(typeof renderedCallback === "function"){ - popup.renderCallback(renderedCallback); - } - - if(e){ - popup.show(e); - }else{ - popup.show(component.getElement(), position || "center"); - } - - - popup.hideOnBlur(() => { - this.dispatchExternal("popupClosed", component.getComponent()); - }); - - - - this.dispatchExternal("popupOpened", component.getComponent()); - } -} - -Popup.moduleName = "popup"; - -export default Popup; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Print/Print.js b/tmp/tabulator-5.6.1/src/js/modules/Print/Print.js deleted file mode 100644 index a9793f6..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Print/Print.js +++ /dev/null @@ -1,138 +0,0 @@ -import Module from '../../core/Module.js'; - -class Print extends Module{ - - constructor(table){ - super(table); - - this.element = false; - this.manualBlock = false; - this.beforeprintEventHandler = null; - this.afterprintEventHandler = null; - - this.registerTableOption("printAsHtml", false); //enable print as html - this.registerTableOption("printFormatter", false); //printing page formatter - this.registerTableOption("printHeader", false); //page header contents - this.registerTableOption("printFooter", false); //page footer contents - this.registerTableOption("printStyled", true); //enable print as html styling - this.registerTableOption("printRowRange", "visible"); //restrict print to visible rows only - this.registerTableOption("printConfig", {}); //print config options - - this.registerColumnOption("print"); - this.registerColumnOption("titlePrint"); - } - - initialize(){ - if(this.table.options.printAsHtml){ - this.beforeprintEventHandler = this.replaceTable.bind(this); - this.afterprintEventHandler = this.cleanup.bind(this); - - window.addEventListener("beforeprint", this.beforeprintEventHandler ); - window.addEventListener("afterprint", this.afterprintEventHandler); - this.subscribe("table-destroy", this.destroy.bind(this)); - } - - this.registerTableFunction("print", this.printFullscreen.bind(this)); - } - - destroy(){ - if(this.table.options.printAsHtml){ - window.removeEventListener( "beforeprint", this.beforeprintEventHandler ); - window.removeEventListener( "afterprint", this.afterprintEventHandler ); - } - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - replaceTable(){ - if(!this.manualBlock){ - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-table"); - - this.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, "print")); - - this.table.element.style.display = "none"; - - this.table.element.parentNode.insertBefore(this.element, this.table.element); - } - } - - cleanup(){ - document.body.classList.remove("tabulator-print-fullscreen-hide"); - - if(this.element && this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - this.table.element.style.display = ""; - } - } - - printFullscreen(visible, style, config){ - var scrollX = window.scrollX, - scrollY = window.scrollY, - headerEl = document.createElement("div"), - footerEl = document.createElement("div"), - tableEl = this.table.modules.export.generateTable(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, "print"), - headerContent, footerContent; - - this.manualBlock = true; - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-fullscreen"); - - if(this.table.options.printHeader){ - headerEl.classList.add("tabulator-print-header"); - - headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader; - - if(typeof headerContent == "string"){ - headerEl.innerHTML = headerContent; - }else{ - headerEl.appendChild(headerContent); - } - - this.element.appendChild(headerEl); - } - - this.element.appendChild(tableEl); - - if(this.table.options.printFooter){ - footerEl.classList.add("tabulator-print-footer"); - - footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter; - - - if(typeof footerContent == "string"){ - footerEl.innerHTML = footerContent; - }else{ - footerEl.appendChild(footerContent); - } - - this.element.appendChild(footerEl); - } - - document.body.classList.add("tabulator-print-fullscreen-hide"); - document.body.appendChild(this.element); - - if(this.table.options.printFormatter){ - this.table.options.printFormatter(this.element, tableEl); - } - - window.print(); - - this.cleanup(); - - window.scrollTo(scrollX, scrollY); - - this.manualBlock = false; - } -} - -Print.moduleName = "print"; - -export default Print; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/ReactiveData/ReactiveData.js b/tmp/tabulator-5.6.1/src/js/modules/ReactiveData/ReactiveData.js deleted file mode 100644 index c91a69e..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ReactiveData/ReactiveData.js +++ /dev/null @@ -1,408 +0,0 @@ -import Module from '../../core/Module.js'; - -class ReactiveData extends Module{ - - constructor(table){ - super(table); - - this.data = false; - this.blocked = false; //block reactivity while performing update - this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with - this.currentVersion = 0; - - this.registerTableOption("reactiveData", false); //enable data reactivity - } - - initialize(){ - if(this.table.options.reactiveData){ - this.subscribe("cell-value-save-before", this.block.bind(this, "cellsave")); - this.subscribe("cell-value-save-after", this.unblock.bind(this, "cellsave")); - this.subscribe("row-data-save-before", this.block.bind(this, "rowsave")); - this.subscribe("row-data-save-after", this.unblock.bind(this, "rowsave")); - this.subscribe("row-data-init-after", this.watchRow.bind(this)); - this.subscribe("data-processing", this.watchData.bind(this)); - this.subscribe("table-destroy", this.unwatchData.bind(this)); - } - } - - watchData(data){ - var self = this, - version; - - this.currentVersion ++; - - version = this.currentVersion; - - this.unwatchData(); - - this.data = data; - - //override array push function - this.origFuncs.push = data.push; - - Object.defineProperty(this.data, "push", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-push"); - - args.forEach((arg) => { - self.table.rowManager.addRowActual(arg, false); - }); - - result = self.origFuncs.push.apply(data, arguments); - - self.unblock("data-push"); - } - - return result; - } - }); - - //override array unshift function - this.origFuncs.unshift = data.unshift; - - Object.defineProperty(this.data, "unshift", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-unshift"); - - args.forEach((arg) => { - self.table.rowManager.addRowActual(arg, true); - }); - - result = self.origFuncs.unshift.apply(data, arguments); - - self.unblock("data-unshift"); - } - - return result; - } - }); - - - //override array shift function - this.origFuncs.shift = data.shift; - - Object.defineProperty(this.data, "shift", { - enumerable: false, - configurable: true, - value: function(){ - var row, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-shift"); - - if(self.data.length){ - row = self.table.rowManager.getRowFromDataObject(self.data[0]); - - if(row){ - row.deleteActual(); - } - } - - result = self.origFuncs.shift.call(data); - - self.unblock("data-shift"); - } - - return result; - } - }); - - //override array pop function - this.origFuncs.pop = data.pop; - - Object.defineProperty(this.data, "pop", { - enumerable: false, - configurable: true, - value: function(){ - var row, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-pop"); - - if(self.data.length){ - row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]); - - if(row){ - row.deleteActual(); - } - } - - result = self.origFuncs.pop.call(data); - - self.unblock("data-pop"); - } - - return result; - } - }); - - - //override array splice function - this.origFuncs.splice = data.splice; - - Object.defineProperty(this.data, "splice", { - enumerable: false, - configurable: true, - value: function(){ - var args = Array.from(arguments), - start = args[0] < 0 ? data.length + args[0] : args[0], - end = args[1], - newRows = args[2] ? args.slice(2) : false, - startRow, result; - - if(!self.blocked && version === self.currentVersion){ - self.block("data-splice"); - //add new rows - if(newRows){ - startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false; - - if(startRow){ - newRows.forEach((rowData) => { - self.table.rowManager.addRowActual(rowData, true, startRow, true); - }); - }else{ - newRows = newRows.slice().reverse(); - - newRows.forEach((rowData) => { - self.table.rowManager.addRowActual(rowData, true, false, true); - }); - } - } - - //delete removed rows - if(end !== 0){ - var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end); - - oldRows.forEach((rowData, i) => { - var row = self.table.rowManager.getRowFromDataObject(rowData); - - if(row){ - row.deleteActual(i !== oldRows.length - 1); - } - }); - } - - if(newRows || end !== 0){ - self.table.rowManager.reRenderInPosition(); - } - - result = self.origFuncs.splice.apply(data, arguments); - - self.unblock("data-splice"); - } - - return result ; - } - }); - } - - unwatchData(){ - if(this.data !== false){ - for(var key in this.origFuncs){ - Object.defineProperty(this.data, key, { - enumerable: true, - configurable:true, - writable:true, - value: this.origFuncs.key, - }); - } - } - } - - watchRow(row){ - var data = row.getData(); - - for(var key in data){ - this.watchKey(row, data, key); - } - - if(this.table.options.dataTree){ - this.watchTreeChildren(row); - } - } - - watchTreeChildren (row){ - var self = this, - childField = row.getData()[this.table.options.dataTreeChildField], - origFuncs = {}; - - if(childField){ - - origFuncs.push = childField.push; - - Object.defineProperty(childField, "push", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-push"); - - var result = origFuncs.push.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-push"); - } - - return result; - } - }); - - origFuncs.unshift = childField.unshift; - - Object.defineProperty(childField, "unshift", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-unshift"); - - var result = origFuncs.unshift.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-unshift"); - } - - return result; - } - }); - - origFuncs.shift = childField.shift; - - Object.defineProperty(childField, "shift", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-shift"); - - var result = origFuncs.shift.call(childField); - this.rebuildTree(row); - - self.unblock("tree-shift"); - } - - return result; - } - }); - - origFuncs.pop = childField.pop; - - Object.defineProperty(childField, "pop", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-pop"); - - var result = origFuncs.pop.call(childField); - this.rebuildTree(row); - - self.unblock("tree-pop"); - } - - return result; - } - }); - - origFuncs.splice = childField.splice; - - Object.defineProperty(childField, "splice", { - enumerable: false, - configurable: true, - value: () => { - if(!self.blocked){ - self.block("tree-splice"); - - var result = origFuncs.splice.apply(childField, arguments); - this.rebuildTree(row); - - self.unblock("tree-splice"); - } - - return result; - } - }); - } - } - - rebuildTree(row){ - this.table.modules.dataTree.initializeRow(row); - this.table.modules.dataTree.layoutRow(row); - this.table.rowManager.refreshActiveData("tree", false, true); - } - - watchKey(row, data, key){ - var self = this, - props = Object.getOwnPropertyDescriptor(data, key), - value = data[key], - version = this.currentVersion; - - Object.defineProperty(data, key, { - set: (newValue) => { - value = newValue; - if(!self.blocked && version === self.currentVersion){ - self.block("key"); - - var update = {}; - update[key] = newValue; - row.updateData(update); - - self.unblock("key"); - } - - if(props.set){ - props.set(newValue); - } - }, - get:() => { - - if(props.get){ - props.get(); - } - - return value; - } - }); - } - - unwatchRow(row){ - var data = row.getData(); - - for(var key in data){ - Object.defineProperty(data, key, { - value:data[key], - }); - } - } - - block(key){ - if(!this.blocked){ - this.blocked = key; - } - } - - unblock(key){ - if(this.blocked === key){ - this.blocked = false; - } - } -} - -ReactiveData.moduleName = "reactiveData"; - -export default ReactiveData; - - - diff --git a/tmp/tabulator-5.6.1/src/js/modules/ResizeColumns/ResizeColumns.js b/tmp/tabulator-5.6.1/src/js/modules/ResizeColumns/ResizeColumns.js deleted file mode 100644 index b105e60..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ResizeColumns/ResizeColumns.js +++ /dev/null @@ -1,311 +0,0 @@ -import Module from '../../core/Module.js'; - -class ResizeColumns extends Module{ - - constructor(table){ - super(table); - - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.latestX = false; - this.handle = null; - this.initialNextColumn = null; - this.nextColumn = null; - - this.initialized = false; - this.registerColumnOption("resizable", true); - this.registerTableOption("resizableColumnFit", false); - } - - initialize(){ - this.subscribe("column-rendered", this.layoutColumnHeader.bind(this)); - } - - initializeEventWatchers(){ - if(!this.initialized){ - - this.subscribe("cell-rendered", this.layoutCellHandles.bind(this)); - this.subscribe("cell-delete", this.deInitializeComponent.bind(this)); - - this.subscribe("cell-height", this.resizeHandle.bind(this)); - this.subscribe("column-moved", this.columnLayoutUpdated.bind(this)); - - this.subscribe("column-hide", this.deInitializeColumn.bind(this)); - this.subscribe("column-show", this.columnLayoutUpdated.bind(this)); - this.subscribe("column-width", this.columnWidthUpdated.bind(this)); - - this.subscribe("column-delete", this.deInitializeComponent.bind(this)); - this.subscribe("column-height", this.resizeHandle.bind(this)); - - this.initialized = true; - } - } - - - layoutCellHandles(cell){ - if(cell.row.type === "row"){ - this.deInitializeComponent(cell); - this.initializeColumn("cell", cell, cell.column, cell.element); - } - } - - layoutColumnHeader(column){ - if(column.definition.resizable){ - this.initializeEventWatchers(); - this.deInitializeComponent(column); - this.initializeColumn("header", column, column, column.element); - } - } - - columnLayoutUpdated(column){ - var prev = column.prevColumn(); - - this.reinitializeColumn(column); - - if(prev){ - this.reinitializeColumn(prev); - } - } - - columnWidthUpdated(column){ - if(column.modules.frozen){ - if(this.table.modules.frozenColumns.leftColumns.includes(column)){ - this.table.modules.frozenColumns.leftColumns.forEach((col) => { - this.reinitializeColumn(col); - }); - }else if(this.table.modules.frozenColumns.rightColumns.includes(column)){ - this.table.modules.frozenColumns.rightColumns.forEach((col) => { - this.reinitializeColumn(col); - }); - } - } - } - - frozenColumnOffset(column){ - var offset = false; - - if(column.modules.frozen){ - offset = column.modules.frozen.marginValue; - - if(column.modules.frozen.position === "left"){ - offset += column.getWidth() - 3; - }else{ - if(offset){ - offset -= 3; - } - } - } - - return offset !== false ? offset + "px" : false; - } - - reinitializeColumn(column){ - var frozenOffset = this.frozenColumnOffset(column); - - column.cells.forEach((cell) => { - if(cell.modules.resize && cell.modules.resize.handleEl){ - if(frozenOffset){ - cell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset; - cell.modules.resize.handleEl.style["z-index"] = 11; - } - - cell.element.after(cell.modules.resize.handleEl); - } - }); - - if(column.modules.resize && column.modules.resize.handleEl){ - if(frozenOffset){ - column.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset; - } - - column.element.after(column.modules.resize.handleEl); - } - } - - initializeColumn(type, component, column, element){ - var self = this, - variableHeight = false, - mode = column.definition.resizable, - config = {}, - nearestColumn = column.getLastColumn(); - - //set column resize mode - if(type === "header"){ - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - config = {variableHeight:variableHeight}; - } - - if((mode === true || mode == type) && this._checkResizability(nearestColumn)){ - - var handle = document.createElement('span'); - handle.className = "tabulator-col-resize-handle"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var handleDown = function(e){ - self.startColumn = column; - self.initialNextColumn = self.nextColumn = nearestColumn.nextColumn(); - self._mouseDown(e, nearestColumn, handle); - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, {passive: true}); - - //resize column on double click - handle.addEventListener("dblclick", (e) => { - var oldWidth = nearestColumn.getWidth(); - - e.stopPropagation(); - nearestColumn.reinitializeWidth(true); - - if(oldWidth !== nearestColumn.getWidth()){ - self.dispatch("column-resized", nearestColumn); - self.table.externalEvents.dispatch("columnResized", nearestColumn.getComponent()); - } - }); - - if(column.modules.frozen){ - handle.style.position = "sticky"; - handle.style[column.modules.frozen.position] = this.frozenColumnOffset(column); - } - - config.handleEl = handle; - - if(element.parentNode && column.visible){ - element.after(handle); - } - } - - component.modules.resize = config; - } - - deInitializeColumn(column){ - this.deInitializeComponent(column); - - column.cells.forEach((cell) => { - this.deInitializeComponent(cell); - }); - } - - deInitializeComponent(component){ - var handleEl; - - if(component.modules.resize){ - handleEl = component.modules.resize.handleEl; - - if(handleEl && handleEl.parentElement){ - handleEl.parentElement.removeChild(handleEl); - } - } - } - - resizeHandle(component, height){ - if(component.modules.resize && component.modules.resize.handleEl){ - component.modules.resize.handleEl.style.height = height; - } - } - - _checkResizability(column){ - return column.definition.resizable; - } - - _mouseDown(e, column, handle){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - var x = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX, - startDiff = x - self.startX, - moveDiff = x - self.latestX, - blockedBefore, blockedAfter; - - self.latestX = x; - - if(self.table.rtl){ - startDiff = -startDiff; - moveDiff = -moveDiff; - } - - blockedBefore = column.width == column.minWidth || column.width == column.maxWidth; - - column.setWidth(self.startWidth + startDiff); - - blockedAfter = column.width == column.minWidth || column.width == column.maxWidth; - - if(moveDiff < 0){ - self.nextColumn = self.initialNextColumn; - } - - if(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){ - let colWidth = self.nextColumn.getWidth(); - - if(moveDiff > 0){ - if(colWidth <= self.nextColumn.minWidth){ - self.nextColumn = self.nextColumn.nextColumn(); - } - } - - if(self.nextColumn){ - self.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff); - } - } - - self.table.columnManager.rerenderColumns(true); - - if(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - } - - function mouseUp(e){ - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = false; - } - - if(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - - document.body.removeEventListener("mouseup", mouseUp); - document.body.removeEventListener("mousemove", mouseMove); - - handle.removeEventListener("touchmove", mouseMove); - handle.removeEventListener("touchend", mouseUp); - - self.table.element.classList.remove("tabulator-block-select"); - - if(self.startWidth !== column.getWidth()){ - self.table.columnManager.verticalAlignHeaders(); - - self.dispatch("column-resized", column); - self.table.externalEvents.dispatch("columnResized", column.getComponent()); - } - } - - e.stopPropagation(); //prevent resize from interfering with movable columns - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = true; - } - - self.startX = typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX; - self.latestX = self.startX; - self.startWidth = column.getWidth(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); - handle.addEventListener("touchmove", mouseMove, {passive: true}); - handle.addEventListener("touchend", mouseUp); - } -} - -ResizeColumns.moduleName = "resizeColumns"; - -export default ResizeColumns; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/ResizeRows/ResizeRows.js b/tmp/tabulator-5.6.1/src/js/modules/ResizeRows/ResizeRows.js deleted file mode 100644 index f1b95b7..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ResizeRows/ResizeRows.js +++ /dev/null @@ -1,112 +0,0 @@ -import Module from '../../core/Module.js'; - -class ResizeRows extends Module{ - - constructor(table){ - super(table); - - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; - - this.registerTableOption("resizableRows", false); //resizable rows - } - - initialize(){ - if(this.table.options.resizableRows){ - this.subscribe("row-layout-after", this.initializeRow.bind(this)); - } - } - - initializeRow(row){ - var self = this, - rowEl = row.getElement(); - - var handle = document.createElement('div'); - handle.className = "tabulator-row-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-row-resize-handle prev"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var handleDown = function(e){ - self.startRow = row; - self._mouseDown(e, row, handle); - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, {passive: true}); - - prevHandle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - var prevHandleDown = function(e){ - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if(prevRow){ - self.startRow = prevRow; - self._mouseDown(e, prevRow, prevHandle); - } - }; - - prevHandle.addEventListener("mousedown",prevHandleDown); - prevHandle.addEventListener("touchstart",prevHandleDown, {passive: true}); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); - } - - _mouseDown(e, row, handle){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY)); - } - - function mouseUp(e){ - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - document.body.removeEventListener("mouseup", mouseMove); - document.body.removeEventListener("mousemove", mouseMove); - - handle.removeEventListener("touchmove", mouseMove); - handle.removeEventListener("touchend", mouseUp); - - self.table.element.classList.remove("tabulator-block-select"); - - self.dispatchExternal("rowResized", row.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfering with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY; - self.startHeight = row.getHeight(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); - - handle.addEventListener("touchmove", mouseMove, {passive: true}); - handle.addEventListener("touchend", mouseUp); - } -} - -ResizeRows.moduleName = "resizeRows"; - -export default ResizeRows; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/ResizeTable/ResizeTable.js b/tmp/tabulator-5.6.1/src/js/modules/ResizeTable/ResizeTable.js deleted file mode 100644 index b8c5564..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ResizeTable/ResizeTable.js +++ /dev/null @@ -1,160 +0,0 @@ -import Module from '../../core/Module.js'; - -class ResizeTable extends Module{ - - constructor(table){ - super(table); - - this.binding = false; - this.visibilityObserver = false; - this.resizeObserver = false; - this.containerObserver = false; - - this.tableHeight = 0; - this.tableWidth = 0; - this.containerHeight = 0; - this.containerWidth = 0; - - this.autoResize = false; - - this.visible = false; - - this.initialized = false; - this.initialRedraw = false; - - this.registerTableOption("autoResize", true); //auto resize table - } - - initialize(){ - if(this.table.options.autoResize){ - var table = this.table, - tableStyle; - - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - - if(table.element.parentNode){ - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - if(typeof IntersectionObserver !== "undefined" && typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual"){ - - this.initializeVisibilityObserver(); - - this.autoResize = true; - - this.resizeObserver = new ResizeObserver((entry) => { - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){ - this.tableHeight = nodeHeight; - this.tableWidth = nodeWidth; - - if(table.element.parentNode){ - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - this.redrawTable(); - } - } - }); - - this.resizeObserver.observe(table.element); - - tableStyle = window.getComputedStyle(table.element); - - if(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))){ - - this.containerObserver = new ResizeObserver((entry) => { - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){ - this.containerHeight = nodeHeight; - this.containerWidth = nodeWidth; - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - } - - this.redrawTable(); - } - }); - - this.containerObserver.observe(this.table.element.parentNode); - } - - this.subscribe("table-resize", this.tableResized.bind(this)); - - }else{ - this.binding = function(){ - if(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){ - table.columnManager.rerenderColumns(true); - table.redraw(); - } - }; - - window.addEventListener("resize", this.binding); - } - - this.subscribe("table-destroy", this.clearBindings.bind(this)); - } - } - - initializeVisibilityObserver(){ - this.visibilityObserver = new IntersectionObserver((entries) => { - this.visible = entries[0].isIntersecting; - - if(!this.initialized){ - this.initialized = true; - this.initialRedraw = !this.visible; - }else{ - if(this.visible){ - this.redrawTable(this.initialRedraw); - this.initialRedraw = false; - } - } - }); - - this.visibilityObserver.observe(this.table.element); - } - - redrawTable(force){ - if(this.initialized && this.visible){ - this.table.columnManager.rerenderColumns(true); - this.table.redraw(force); - } - } - - tableResized(){ - this.table.rowManager.redraw(); - } - - clearBindings(){ - if(this.binding){ - window.removeEventListener("resize", this.binding); - } - - if(this.resizeObserver){ - this.resizeObserver.unobserve(this.table.element); - } - - if(this.visibilityObserver){ - this.visibilityObserver.unobserve(this.table.element); - } - - if(this.containerObserver){ - this.containerObserver.unobserve(this.table.element.parentNode); - } - } -} - -ResizeTable.moduleName = "resizeTable"; - -export default ResizeTable; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/ResponsiveLayout/ResponsiveLayout.js b/tmp/tabulator-5.6.1/src/js/modules/ResponsiveLayout/ResponsiveLayout.js deleted file mode 100644 index 694d384..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/ResponsiveLayout/ResponsiveLayout.js +++ /dev/null @@ -1,348 +0,0 @@ -import Module from '../../core/Module.js'; - -class ResponsiveLayout extends Module{ - - constructor(table){ - super(table); - - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; - this.collapseHandleColumn = false; - - this.registerTableOption("responsiveLayout", false); //responsive layout flags - this.registerTableOption("responsiveLayoutCollapseStartOpen", true); //start showing collapsed data - this.registerTableOption("responsiveLayoutCollapseUseFormatters", true); //responsive layout collapse formatter - this.registerTableOption("responsiveLayoutCollapseFormatter", false); //responsive layout collapse formatter - - this.registerColumnOption("responsive"); - } - - //generate responsive columns list - initialize(){ - if(this.table.options.responsiveLayout){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("column-show", this.updateColumnVisibility.bind(this)); - this.subscribe("column-hide", this.updateColumnVisibility.bind(this)); - this.subscribe("columns-loaded", this.initializeResponsivity.bind(this)); - this.subscribe("column-moved", this.initializeResponsivity.bind(this)); - this.subscribe("column-add", this.initializeResponsivity.bind(this)); - this.subscribe("column-delete", this.initializeResponsivity.bind(this)); - - this.subscribe("table-redrawing", this.tableRedraw.bind(this)); - - if(this.table.options.responsiveLayout === "collapse"){ - this.subscribe("row-data-changed", this.generateCollapsedRowContent.bind(this)); - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-layout", this.layoutRow.bind(this)); - } - } - } - - tableRedraw(force){ - if(["fitColumns", "fitDataStretch"].indexOf(this.layoutMode()) === -1){ - if(!force){ - this.update(); - } - } - } - - initializeResponsivity(){ - var columns = []; - - this.mode = this.table.options.responsiveLayout; - this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData; - this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen; - this.hiddenColumns = []; - - //determine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach((column, i) => { - if(column.modules.responsive){ - if(column.modules.responsive.order && column.modules.responsive.visible){ - column.modules.responsive.index = i; - columns.push(column); - - if(!column.visible && this.mode === "collapse"){ - this.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort((a, b) => { - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || (b.modules.responsive.index - a.modules.responsive.index); - }); - - this.columns = columns; - - if(this.mode === "collapse"){ - this.generateCollapsedContent(); - } - - //assign collapse column - for (let col of this.table.columnManager.columnsByIndex){ - if(col.definition.formatter == "responsiveCollapse"){ - this.collapseHandleColumn = col; - break; - } - } - - if(this.collapseHandleColumn){ - if(this.hiddenColumns.length){ - this.collapseHandleColumn.show(); - }else{ - this.collapseHandleColumn.hide(); - } - } - } - - //define layout information - initializeColumn(column){ - var def = column.getDefinition(); - - column.modules.responsive = {order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible:def.visible === false ? false : true}; - } - - initializeRow(row){ - var el; - - if(row.type !== "calc"){ - el = document.createElement("div"); - el.classList.add("tabulator-responsive-collapse"); - - row.modules.responsiveLayout = { - element:el, - open:this.collapseStartOpen, - }; - - if(!this.collapseStartOpen){ - el.style.display = 'none'; - } - } - } - - layoutRow(row){ - var rowEl = row.getElement(); - - if(row.modules.responsiveLayout){ - rowEl.appendChild(row.modules.responsiveLayout.element); - this.generateCollapsedRowContent(row); - } - } - - //update column visibility - updateColumnVisibility(column, responsiveToggle){ - if(!responsiveToggle && column.modules.responsive){ - column.modules.responsive.visible = column.visible; - this.initializeResponsivity(); - } - } - - hideColumn(column){ - var colCount = this.hiddenColumns.length; - - column.hide(false, true); - - if(this.mode === "collapse"){ - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - - if(this.collapseHandleColumn && !colCount){ - this.collapseHandleColumn.show(); - } - } - } - - showColumn(column){ - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if(this.mode === "collapse"){ - index = this.hiddenColumns.indexOf(column); - - if(index > -1){ - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - - if(this.collapseHandleColumn && !this.hiddenColumns.length){ - this.collapseHandleColumn.hide(); - } - } - } - - //redraw columns to fit space - update(){ - var working = true; - - while(working){ - - let width = this.table.modules.layout.getMode() == "fitColumns" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth(); - - let diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width; - - if(diff < 0){ - //table is too wide - let column = this.columns[this.index]; - - if(column){ - this.hideColumn(column); - this.index ++; - }else{ - working = false; - } - - }else{ - - //table has spare space - let column = this.columns[this.index -1]; - - if(column){ - if(diff > 0){ - if(diff >= column.getWidth()){ - this.showColumn(column); - this.index --; - }else{ - working = false; - } - }else{ - working = false; - } - }else{ - working = false; - } - } - - if(!this.table.rowManager.activeRowsCount){ - this.table.rowManager.renderEmptyScroll(); - } - } - } - - generateCollapsedContent(){ - var rows = this.table.rowManager.getDisplayRows(); - - rows.forEach((row) => { - this.generateCollapsedRowContent(row); - }); - } - - generateCollapsedRowContent(row){ - var el, contents; - - if(row.modules.responsiveLayout){ - el = row.modules.responsiveLayout.element; - - while(el.firstChild) el.removeChild(el.firstChild); - - contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - if(contents){ - el.appendChild(contents); - } - } - } - - generateCollapsedRowData(row){ - var data = row.getData(), - output = [], - mockCellComponent; - - this.hiddenColumns.forEach((column) => { - var value = column.getFieldValue(data); - - if(column.definition.title && column.field){ - if(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){ - - mockCellComponent = { - value:false, - data:{}, - getValue:function(){ - return value; - }, - getData:function(){ - return data; - }, - getType:function(){ - return "cell"; - }, - getElement:function(){ - return document.createElement("div"); - }, - getRow:function(){ - return row.getComponent(); - }, - getColumn:function(){ - return column.getComponent(); - }, - getTable:() => { - return this.table; - }, - }; - - function onRendered(callback){ - callback(); - } - - output.push({ - field: column.field, - title: column.definition.title, - value: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered) - }); - }else{ - output.push({ - field: column.field, - title: column.definition.title, - value: value - }); - } - } - }); - - return output; - } - - formatCollapsedData(data){ - var list = document.createElement("table"); - - data.forEach(function(item){ - var row = document.createElement("tr"); - var titleData = document.createElement("td"); - var valueData = document.createElement("td"); - var node_content; - - var titleHighlight = document.createElement("strong"); - titleData.appendChild(titleHighlight); - this.langBind("columns|" + item.field, function(text){ - titleHighlight.innerHTML = text || item.title; - }); - - if(item.value instanceof Node){ - node_content = document.createElement("div"); - node_content.appendChild(item.value); - valueData.appendChild(node_content); - }else{ - valueData.innerHTML = item.value; - } - - row.appendChild(titleData); - row.appendChild(valueData); - list.appendChild(row); - }, this); - - return Object.keys(data).length ? list : ""; - } -} - -ResponsiveLayout.moduleName = "responsiveLayout"; - -export default ResponsiveLayout; diff --git a/tmp/tabulator-5.6.1/src/js/modules/SelectRange/Range.js b/tmp/tabulator-5.6.1/src/js/modules/SelectRange/Range.js deleted file mode 100644 index b5a82a9..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/SelectRange/Range.js +++ /dev/null @@ -1,354 +0,0 @@ -import CoreFeature from '../../core/CoreFeature.js'; -import RangeComponent from "./RangeComponent"; - -class Range extends CoreFeature{ - constructor(table, rangeManager, start, end) { - super(table); - - this.rangeManager = rangeManager; - this.element = null; - this.initialized = false; - this.initializing = { - start:false, - end:false, - }; - this.destroyed = false; - - this.top = 0; - this.bottom = 0; - this.left = 0; - this.right = 0; - - this.table = table; - this.start = {row:0, col:0}; - this.end = {row:0, col:0}; - - if(this.rangeManager.rowHeader){ - this.left = 1; - this.right = 1; - this.start.col = 1; - this.end.col = 1; - } - - this.initElement(); - - setTimeout(() => { - this.initBounds(start, end); - }); - } - - initElement(){ - this.element = document.createElement("div"); - this.element.classList.add("tabulator-range"); - } - - initBounds(start, end){ - this._updateMinMax(); - - if(start){ - this.setBounds(start, end || start); - } - } - - /////////////////////////////////// - /////// Boundary Setup /////// - /////////////////////////////////// - - setStart(row, col) { - if(this.start.row !== row || this.start.col !== col){ - this.start.row = row; - this.start.col = col; - - this.initializing.start = true; - this._updateMinMax(); - } - } - - setEnd(row, col) { - if(this.end.row !== row || this.end.col !== col){ - this.end.row = row; - this.end.col = col; - - this.initializing.end = true; - this._updateMinMax(); - } - } - - setBounds(start, end, visibleRows){ - if(start){ - this.setStartBound(start); - } - - this.setEndBound(end || start); - this.rangeManager.layoutElement(visibleRows); - } - - setStartBound(element){ - var row, col; - - if (element.type === "column") { - if(this.rangeManager.columnSelection){ - this.setStart(0, element.getPosition() - 1); - } - }else{ - row = element.row.position - 1; - col = element.column.getPosition() - 1; - - if (element.column === this.rangeManager.rowHeader) { - this.setStart(row, 1); - } else { - this.setStart(row, col); - } - } - } - - setEndBound(element){ - var rowsCount = this._getTableRows().length, - row, col, isRowHeader; - - if (element.type === "column") { - if(this.rangeManager.columnSelection){ - if (this.rangeManager.selecting === "column") { - this.setEnd(rowsCount - 1, element.getPosition() - 1); - } else if (this.rangeManager.selecting === "cell") { - this.setEnd(0, element.getPosition() - 1); - } - } - }else{ - row = element.row.position - 1; - col = element.column.getPosition() - 1; - isRowHeader = element.column === this.rangeManager.rowHeader; - - if (this.rangeManager.selecting === "row") { - this.setEnd(row, this._getTableColumns().length - 1); - } else if (this.rangeManager.selecting !== "row" && isRowHeader) { - this.setEnd(row, 0); - } else if (this.rangeManager.selecting === "column") { - this.setEnd(rowsCount - 1, col); - } else { - this.setEnd(row, col); - } - } - } - - _updateMinMax() { - this.top = Math.min(this.start.row, this.end.row); - this.bottom = Math.max(this.start.row, this.end.row); - this.left = Math.min(this.start.col, this.end.col); - this.right = Math.max(this.start.col, this.end.col); - - if(this.initialized){ - this.dispatchExternal("rangeChanged", this.getComponent()); - }else{ - if(this.initializing.start && this.initializing.end){ - this.initialized = true; - this.dispatchExternal("rangeAdded", this.getComponent()); - } - } - } - - _getTableColumns() { - return this.table.columnManager.getVisibleColumnsByIndex(); - } - - _getTableRows() { - return this.table.rowManager.getDisplayRows(); - } - - /////////////////////////////////// - /////// Rendering /////// - /////////////////////////////////// - - layout() { - var _vDomTop = this.table.rowManager.renderer.vDomTop, - _vDomBottom = this.table.rowManager.renderer.vDomBottom, - _vDomLeft = this.table.columnManager.renderer.leftCol, - _vDomRight = this.table.columnManager.renderer.rightCol, - top, bottom, left, right, topLeftCell, bottomRightCell; - - if (_vDomTop == null) { - _vDomTop = 0; - } - - if (_vDomBottom == null) { - _vDomBottom = Infinity; - } - - if (_vDomLeft == null) { - _vDomLeft = 0; - } - - if (_vDomRight == null) { - _vDomRight = Infinity; - } - - if (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) { - top = Math.max(this.top, _vDomTop); - bottom = Math.min(this.bottom, _vDomBottom); - left = Math.max(this.left, _vDomLeft); - right = Math.min(this.right, _vDomRight); - - topLeftCell = this.rangeManager.getCell(top, left); - bottomRightCell = this.rangeManager.getCell(bottom, right); - - this.element.classList.add("tabulator-range-active"); - // this.element.classList.toggle("tabulator-range-active", this === this.rangeManager.activeRange); - - this.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + "px"; - this.element.style.top = topLeftCell.row.getElement().offsetTop + "px"; - this.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + "px"; - this.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + "px"; - } - } - - atTopLeft(cell) { - return cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left; - } - - atBottomRight(cell) { - return cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right; - } - - occupies(cell) { - return this.occupiesRow(cell.row) && this.occupiesColumn(cell.column); - } - - occupiesRow(row) { - return this.top <= row.position - 1 && row.position - 1 <= this.bottom; - } - - occupiesColumn(col) { - return this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right; - } - - overlaps(left, top, right, bottom) { - if ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){ - return false; - } - - return true; - } - - getData() { - var data = [], - rows = this.getRows(), - columns = this.getColumns(); - - rows.forEach((row) => { - var rowData = row.getData(), - result = {}; - - columns.forEach((column) => { - result[column.field] = rowData[column.field]; - }); - - data.push(result); - }); - - return data; - } - - getCells(structured, component) { - var cells = [], - rows = this.getRows(), - columns = this.getColumns(); - - if (structured) { - cells = rows.map((row) => { - var arr = []; - - row.getCells().forEach((cell) => { - if (columns.includes(cell.column)) { - arr.push(component ? cell.getComponent() : cell); - } - }); - - return arr; - }); - } else { - rows.forEach((row) => { - row.getCells().forEach((cell) => { - if (columns.includes(cell.column)) { - cells.push(component ? cell.getComponent() : cell); - } - }); - }); - } - - return cells; - } - - getStructuredCells() { - return this.getCells(true, true); - } - - getRows() { - return this._getTableRows().slice(this.top, this.bottom + 1); - } - - getColumns() { - return this._getTableColumns().slice(this.left, this.right + 1); - } - - clearValues(){ - var cells = this.getCells(); - var clearValue = this.table.options.selectableRangeClearCellsValue; - - this.table.blockRedraw(); - - cells.forEach((cell) => { - cell.setValue(clearValue); - }); - - this.table.restoreRedraw(); - - } - - getBounds(component){ - var cells = this.getCells(false, component), - output = { - start:null, - end:null, - }; - - if(cells.length){ - output.start = cells[0]; - output.end = cells[cells.length - 1]; - }else{ - console.warn("No bounds defined on range"); - } - - return output; - } - - getComponent() { - if (!this.component) { - this.component = new RangeComponent(this); - } - return this.component; - } - - destroy(notify) { - this.destroyed = true; - - this.element.remove(); - - if(notify){ - this.rangeManager.rangeRemoved(this); - } - - if(this.initialized){ - this.dispatchExternal("rangeRemoved", this.getComponent()); - } - } - - destroyedGuard(func){ - if(this.destroyed){ - console.warn("You cannot call the " + func + " function on a destroyed range"); - } - - return !this.destroyed; - } -} - -export default Range; diff --git a/tmp/tabulator-5.6.1/src/js/modules/SelectRange/RangeComponent.js b/tmp/tabulator-5.6.1/src/js/modules/SelectRange/RangeComponent.js deleted file mode 100644 index fd2f480..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/SelectRange/RangeComponent.js +++ /dev/null @@ -1,93 +0,0 @@ -class RangeComponent { - constructor(range) { - this._range = range; - - return new Proxy(this, { - get: function (target, name, receiver) { - if (typeof target[name] !== "undefined") { - return target[name]; - } else { - return target._range.table.componentFunctionBinder.handle("range", target._range, name); - } - }, - }); - } - - getElement() { - return this._range.element; - } - - getData() { - return this._range.getData(); - } - - getCells() { - return this._range.getCells(true); - } - - getStructuredCells() { - return this._range.getStructuredCells(); - } - - getRows() { - return this._range.getRows().map((row) => row.getComponent()); - } - - getColumns() { - return this._range.getColumns().map((column) => column.getComponent()); - } - - getBounds() { - return this._range.getBounds(); - } - - getTopEdge() { - return this._range.top; - } - - getBottomEdge() { - return this._range.bottom; - } - - getLeftEdge() { - return this._range.left; - } - - getRightEdge() { - return this._range.right; - } - - setBounds(start, end){ - if(this._range.destroyedGuard("setBounds")){ - this._range.setBounds(start ? start._cell : start, end ? end._cell : end); - } - } - - setStartBound(start){ - if(this._range.destroyedGuard("setStartBound")){ - this._range.setEndBound(start ? start._cell : start); - this._range.rangeManager.layoutElement(); - } - } - - setEndBound(end){ - if(this._range.destroyedGuard("setEndBound")){ - this._range.setEndBound(end ? end._cell : end); - this._range.rangeManager.layoutElement(); - } - } - - clearValues(){ - if(this._range.destroyedGuard("clearValues")){ - this._range.clearValues(); - } - } - - remove(){ - if(this._range.destroyedGuard("remove")){ - this._range.destroy(true); - } - } -} - -export default RangeComponent; diff --git a/tmp/tabulator-5.6.1/src/js/modules/SelectRange/SelectRange.js b/tmp/tabulator-5.6.1/src/js/modules/SelectRange/SelectRange.js deleted file mode 100644 index 9c447cb..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/SelectRange/SelectRange.js +++ /dev/null @@ -1,870 +0,0 @@ -import Module from "../../core/Module.js"; -import Range from "./Range.js"; - -class SelectRange extends Module { - constructor(table) { - super(table); - - this.selecting = "cell"; - this.mousedown = false; - this.ranges = []; - this.overlay = null; - this.rowHeader = null; - this.layoutChangeTimeout = null; - this.columnSelection = false; - this.rowSelection = false; - this.maxRanges = 0; - this.activeRange = false; - this.blockKeydown = false; - - this.keyDownEvent = this._handleKeyDown.bind(this); - this.mouseUpEvent = this._handleMouseUp.bind(this); - - this.registerTableOption("selectableRange", false); //enable selectable range - this.registerTableOption("selectableRangeColumns", false); //enable selectable range - this.registerTableOption("selectableRangeRows", false); //enable selectable range - this.registerTableOption("selectableRangeClearCells", false); //allow clearing of active range - this.registerTableOption("selectableRangeClearCellsValue", undefined); //value for cleared active range - - this.registerTableFunction("getRangesData", this.getRangesData.bind(this)); - this.registerTableFunction("getRanges", this.getRanges.bind(this)); - this.registerTableFunction("addRange", this.addRangeFromComponent.bind(this)); - - this.registerComponentFunction("cell", "getRanges", this.cellGetRanges.bind(this)); - this.registerComponentFunction("row", "getRanges", this.rowGetRanges.bind(this)); - this.registerComponentFunction("column", "getRanges", this.colGetRanges.bind(this)); - } - - /////////////////////////////////// - /////// Initialization /////// - /////////////////////////////////// - - initialize() { - if (this.options("selectableRange")) { - if(!this.options("selectableRows")){ - - this.maxRanges = this.options("selectableRange"); - - this.initializeTable(); - this.initializeWatchers(); - }else{ - console.warn("SelectRange functionality cannot be used in conjunction with row selection"); - } - } - } - - - initializeTable() { - this.overlay = document.createElement("div"); - this.overlay.classList.add("tabulator-range-overlay"); - - this.rangeContainer = document.createElement("div"); - this.rangeContainer.classList.add("tabulator-range-container"); - - this.activeRangeCellElement = document.createElement("div"); - this.activeRangeCellElement.classList.add("tabulator-range-cell-active"); - - this.overlay.appendChild(this.rangeContainer); - this.overlay.appendChild(this.activeRangeCellElement); - - this.table.rowManager.element.addEventListener("keydown", this.keyDownEvent); - - this.resetRanges(); - - this.table.rowManager.element.appendChild(this.overlay); - this.table.columnManager.element.setAttribute("tabindex", 0); - this.table.element.classList.add("tabulator-ranges"); - } - - initializeWatchers() { - this.columnSelection = this.options("selectableRangeColumns"); - this.rowSelection = this.options("selectableRangeRows"); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - this.subscribe("column-mousedown", this.handleColumnMouseDown.bind(this)); - this.subscribe("column-mousemove", this.handleColumnMouseMove.bind(this)); - this.subscribe("column-resized", this.handleColumnResized.bind(this)); - this.subscribe("column-width", this.layoutChange.bind(this)); - this.subscribe("column-height", this.layoutChange.bind(this)); - this.subscribe("column-resized", this.layoutChange.bind(this)); - this.subscribe("columns-loaded", this.updateHeaderColumn.bind(this)); - - this.subscribe("cell-height", this.layoutChange.bind(this)); - this.subscribe("cell-rendered", this.renderCell.bind(this)); - this.subscribe("cell-mousedown", this.handleCellMouseDown.bind(this)); - this.subscribe("cell-mousemove", this.handleCellMouseMove.bind(this)); - this.subscribe("cell-click", this.handleCellClick.bind(this)); - this.subscribe("cell-editing", this.handleEditingCell.bind(this)); - - this.subscribe("page-changed", this.redraw.bind(this)); - - this.subscribe("scroll-vertical", this.layoutChange.bind(this)); - this.subscribe("scroll-horizontal", this.layoutChange.bind(this)); - - this.subscribe("data-destroy", this.tableDestroyed.bind(this)); - this.subscribe("data-processed", this.resetRanges.bind(this)); - - this.subscribe("table-layout", this.layoutElement.bind(this)); - this.subscribe("table-redraw", this.redraw.bind(this)); - this.subscribe("table-destroy", this.tableDestroyed.bind(this)); - - this.subscribe("edit-editor-clear", this.finishEditingCell.bind(this)); - this.subscribe("edit-blur", this.restoreFocus.bind(this)); - - this.subscribe("keybinding-nav-prev", this.keyNavigate.bind(this, "left")); - this.subscribe("keybinding-nav-next", this.keyNavigate.bind(this, "right")); - this.subscribe("keybinding-nav-left", this.keyNavigate.bind(this, "left")); - this.subscribe("keybinding-nav-right", this.keyNavigate.bind(this, "right")); - this.subscribe("keybinding-nav-up", this.keyNavigate.bind(this, "up")); - this.subscribe("keybinding-nav-down", this.keyNavigate.bind(this, "down")); - this.subscribe("keybinding-nav-range", this.keyNavigateRange.bind(this)); - } - - - initializeColumn(column) { - if(this.columnSelection && column.definition.headerSort && this.options("headerSortClickElement") !== "icon"){ - console.warn("Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'."); - } - - if (column.modules.edit) { - // Block editor from taking action so we can trigger edit by - // double clicking. - // column.modules.edit.blocked = true; - } - } - - updateHeaderColumn(){ - if(this.rowSelection){ - this.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0]; - - if(this.rowHeader){ - this.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + " tabulator-range-row-header"; - - if(this.rowHeader.definition.headerSort){ - console.warn("Using column headerSort with selectableRangeRows option may result in unpredictable behavior"); - } - - if(this.rowHeader.definition.editor){ - console.warn("Using column editor with selectableRangeRows option may result in unpredictable behavior"); - } - } - } - } - - /////////////////////////////////// - /////// Table Functions /////// - /////////////////////////////////// - - getRanges(){ - return this.ranges.map((range) => range.getComponent()); - } - - getRangesData() { - return this.ranges.map((range) => range.getData()); - } - - addRangeFromComponent(start, end){ - start = start ? start._cell : null; - end = end ? end._cell : null; - - return this.addRange(start, end); - } - - /////////////////////////////////// - /////// Component Functions /////// - /////////////////////////////////// - - cellGetRanges(cell){ - var ranges = []; - - if (cell.column === this.rowHeader) { - ranges = this.ranges.filter((range) => range.occupiesRow(cell.row)); - } else { - ranges = this.ranges.filter((range) => range.occupies(cell)); - } - - return ranges.map((range) => range.getComponent()); - } - - rowGetRanges(row){ - var ranges = this.ranges.filter((range) => range.occupiesRow(row)); - - return ranges.map((range) => range.getComponent()); - } - - colGetRanges(col){ - var ranges = this.ranges.filter((range) => range.occupiesColumn(col)); - - return ranges.map((range) => range.getComponent()); - } - - /////////////////////////////////// - ////////// Event Handlers ///////// - /////////////////////////////////// - - _handleMouseUp(e){ - this.mousedown = false; - document.removeEventListener("mouseup", this.mouseUpEvent); - } - - _handleKeyDown(e) { - if (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) { - if (e.key === "Enter") { - // is editing a cell? - if (this.table.modules.edit && this.table.modules.edit.currentCell) { - return; - } - - this.table.modules.edit.editCell(this.getActiveCell()); - - e.preventDefault(); - } - - if ((e.key === "Backspace" || e.key === "Delete") && this.options("selectableRangeClearCells")) { - if(this.activeRange){ - this.activeRange.clearValues(); - } - } - } - } - - initializeFocus(cell){ - var range; - - try{ - if (document.selection) { // IE - range = document.body.createTextRange(); - range.moveToElementText(cell.getElement()); - range.select(); - } else if (window.getSelection) { - range = document.createRange(); - range.selectNode(cell.getElement()); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - } - }catch(e){} - } - - restoreFocus(element){ - this.table.rowManager.element.focus(); - - return true; - } - - /////////////////////////////////// - ////// Column Functionality /////// - /////////////////////////////////// - - handleColumnResized(column) { - var selected; - - if (this.selecting !== "column" && this.selecting !== "all") { - return; - } - - selected = this.ranges.some((range) => range.occupiesColumn(column)); - - if (!selected) { - return; - } - - this.ranges.forEach((range) => { - var selectedColumns = range.getColumns(true); - - selectedColumns.forEach((selectedColumn) => { - if (selectedColumn !== column) { - selectedColumn.setWidth(column.width); - } - }); - }); - } - - handleColumnMouseDown(event, column) { - if (event.button === 2 && (this.selecting === "column" || this.selecting === "all") && this.activeRange.occupiesColumn(column)) { - return; - } - - this.mousedown = true; - - document.addEventListener("mouseup", this.mouseUpEvent); - - this.newSelection(event, column); - } - - handleColumnMouseMove(e, column) { - if (column === this.rowHeader || !this.mousedown || this.selecting === 'all') { - return; - } - - this.activeRange.setBounds(false, column, true); - } - - /////////////////////////////////// - //////// Cell Functionality /////// - /////////////////////////////////// - - renderCell(cell) { - var el = cell.getElement(), - rangeIdx = this.ranges.findIndex((range) => range.occupies(cell)); - - el.classList.toggle("tabulator-range-selected", rangeIdx !== -1); - el.classList.toggle("tabulator-range-only-cell-selected", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) && this.ranges[0].atBottomRight(cell)); - - el.dataset.range = rangeIdx; - } - - handleCellMouseDown(event, cell) { - if (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === "row" || this.selecting === "all") && this.activeRange.occupiesRow(cell.row)))) { - return; - } - - this.mousedown = true; - - document.addEventListener("mouseup", this.mouseUpEvent); - - this.newSelection(event, cell); - } - - handleCellMouseMove(e, cell) { - if (!this.mousedown || this.selecting === "all") { - return; - } - - this.activeRange.setBounds(false, cell, true); - } - - handleCellClick(e, cell){ - this.initializeFocus(cell); - } - - handleEditingCell(cell) { - if(this.activeRange){ - this.activeRange.setBounds(cell); - } - } - - finishEditingCell() { - this.blockKeydown = true; - this.table.rowManager.element.focus(); - - setTimeout(() => { - this.blockKeydown = false; - }, 10); - } - - /////////////////////////////////// - /////// Navigation /////// - /////////////////////////////////// - - keyNavigate(dir, e){ - if(this.navigate(false, false, dir)){ - e.preventDefault(); - } - } - - keyNavigateRange(e, dir, jump, expand){ - if(this.navigate(jump, expand, dir)){ - e.preventDefault(); - } - } - - navigate(jump, expand, dir) { - var moved = false, - range, rangeEdge, nextRow, nextCol, row, column; - - // Don't navigate while editing - if (this.table.modules.edit && this.table.modules.edit.currentCell) { - return false; - } - - // If there are more than 1 range, use the active range and destroy the others - if (this.ranges.length > 1) { - this.ranges = this.ranges.filter((range) => { - if (range === this.activeRange) { - range.setEnd(range.start.row, range.start.col); - return true; - } - range.destroy(); - return false; - }); - } - - range = this.activeRange; - - rangeEdge = expand ? range.end : range.start; - nextRow = rangeEdge.row; - nextCol = rangeEdge.col; - - if(jump){ - switch(dir){ - case "left": - nextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col); - break; - case "right": - nextCol = this.findJumpCellRight(range.start.row, rangeEdge.col); - break; - case "up": - nextRow = this.findJumpCellUp(rangeEdge.row, range.start.col); - break; - case "down": - nextRow = this.findJumpCellDown(rangeEdge.row, range.start.col); - break; - } - }else{ - if(expand){ - if ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) { - return; - } - } - - switch(dir){ - case "left": - nextCol = Math.max(nextCol - 1, 0); - break; - case "right": - nextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1); - break; - case "up": - nextRow = Math.max(nextRow - 1, 0); - break; - case "down": - nextRow = Math.min(nextRow + 1, this.getTableRows().length - 1); - break; - } - } - - moved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row; - - if(!expand){ - range.setStart(nextRow, nextCol); - } - - range.setEnd(nextRow, nextCol); - - if(!expand){ - this.selecting = "cell"; - } - - if (moved) { - row = this.getRowByRangePos(range.end.row); - column = this.getColumnByRangePos(range.end.col); - - if ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) { - column.getComponent().scrollTo(undefined, false); - } else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) { - row.getComponent().scrollTo(undefined, false); - } else { - // Use faster autoScroll when the elements are on the DOM - this.autoScroll(range, row.getElement(), column.getElement()); - } - - this.layoutElement(); - - return true; - } - } - - rangeRemoved(removed){ - this.ranges = this.ranges.filter((range) => range !== removed); - - if(this.activeRange === removed){ - if(this.ranges.length){ - this.activeRange = this.ranges[this.ranges.length - 1]; - }else{ - this.addRange(); - } - } - - this.layoutElement(); - } - - findJumpCell(cells, reverse, emptyStart, emptySide){ - var nextCell; - - if(reverse){ - cells = cells.reverse(); - } - - for(let currentCell of cells){ - let currentValue = currentCell.getValue(); - - if(emptyStart){ - nextCell = currentCell; - if(currentValue){ - break; - } - }else{ - if(emptySide){ - nextCell = currentCell; - - if(currentValue){ - break; - } - }else{ - if(currentValue){ - nextCell = currentCell; - }else{ - break; - } - } - } - } - - return nextCell; - } - - findJumpCellLeft(rowPos, colPos){ - var row = this.getRowByRangePos(rowPos), - cells = row.cells.filter((cell) => cell.column.visible), - isStartingCellEmpty = !cells[colPos].getValue(), - isLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false, - jumpCol = colPos, - targetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos), - nextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty); - - if(nextCell){ - jumpCol = nextCell.column.getPosition() - 1; - } - - return jumpCol; - } - - findJumpCellRight(rowPos, colPos){ - var row = this.getRowByRangePos(rowPos), - cells = row.cells.filter((cell) => cell.column.visible), - isStartingCellEmpty = !cells[colPos].getValue(), - isRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false, - jumpCol = colPos, - nextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty); - - if(nextCell){ - jumpCol = nextCell.column.getPosition() - 1; - } - - return jumpCol; - } - - findJumpCellUp(rowPos, colPos) { - var column = this.getColumnByRangePos(colPos), - cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)), - isStartingCellEmpty = !cells[rowPos].getValue(), - isTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false, - jumpRow = rowPos, - nextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty); - - if(nextCell){ - jumpRow = nextCell.row.position - 1; - } - - return jumpRow; - } - - findJumpCellDown(rowPos, colPos) { - var column = this.getColumnByRangePos(colPos), - cells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)), - isStartingCellEmpty = !cells[rowPos].getValue(), - isBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false, - jumpRow = rowPos, - nextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty); - - if(nextCell){ - jumpRow = nextCell.row.position - 1; - } - - return jumpRow; - } - - /////////////////////////////////// - /////// Selection /////// - /////////////////////////////////// - newSelection(event, element) { - var range; - - if (element.type === "column") { - if(!this.columnSelection){ - return; - } - - if (element === this.rowHeader) { - range = this.resetRanges(); - this.selecting = "all"; - - var topLeftCell, bottomRightCell = this.getCell(-1, -1); - - if(this.rowHeader){ - topLeftCell = this.getCell(0, 1); - }else{ - topLeftCell = this.getCell(0, 0); - } - - range.setBounds(topLeftCell, bottomRightCell); - return; - } else { - this.selecting = "column"; - } - } else if (element.column === this.rowHeader) { - this.selecting = "row"; - } else { - this.selecting = "cell"; - } - - if (event.shiftKey) { - this.activeRange.setBounds(false, element); - } else if (event.ctrlKey) { - this.addRange().setBounds(element); - } else { - this.resetRanges().setBounds(element); - } - } - - autoScroll(range, row, column) { - var tableHolder = this.table.rowManager.element, - rowHeader, rect, view, withinHorizontalView, withinVerticalView; - - if (typeof row === 'undefined') { - row = this.getRowByRangePos(range.end.row).getElement(); - } - - if (typeof column === 'undefined') { - column = this.getColumnByRangePos(range.end.col).getElement(); - } - - if (this.rowHeader) { - rowHeader = this.rowHeader.getElement(); - } - - rect = { - left: column.offsetLeft, - right: column.offsetLeft + column.offsetWidth, - top: row.offsetTop, - bottom: row.offsetTop + row.offsetHeight, - }; - - view = { - left: tableHolder.scrollLeft, - right: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth), - top: tableHolder.scrollTop, - bottom: tableHolder.scrollTop + tableHolder.offsetHeight - this.table.rowManager.scrollbarWidth, - }; - - if (rowHeader) { - view.left += rowHeader.offsetWidth; - } - - withinHorizontalView = view.left < rect.left && rect.left < view.right && view.left < rect.right && rect.right < view.right; - - withinVerticalView = view.top < rect.top && rect.top < view.bottom && view.top < rect.bottom && rect.bottom < view.bottom; - - if (!withinHorizontalView) { - if (rect.left < view.left) { - tableHolder.scrollLeft = rect.left; - if (rowHeader) { - tableHolder.scrollLeft -= rowHeader.offsetWidth; - } - } else if (rect.right > view.right) { - tableHolder.scrollLeft = rect.right - tableHolder.clientWidth; - } - } - - if (!withinVerticalView) { - if (rect.top < view.top) { - tableHolder.scrollTop = rect.top; - } else if (rect.bottom > view.bottom) { - tableHolder.scrollTop = rect.bottom - tableHolder.clientHeight; - } - } - } - - - /////////////////////////////////// - /////// Layout /////// - /////////////////////////////////// - - layoutChange(){ - this.overlay.style.visibility = "hidden"; - clearTimeout(this.layoutChangeTimeout); - this.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200); - } - - redraw(force) { - if (force) { - this.selecting = 'cell'; - this.resetRanges(); - this.layoutElement(); - } - } - - layoutElement(visibleRows) { - var rows; - - if (visibleRows) { - rows = this.table.rowManager.getVisibleRows(true); - } else { - rows = this.table.rowManager.getRows(); - } - - rows.forEach((row) => { - if (row.type === "row") { - this.layoutRow(row); - row.cells.forEach((cell) => this.renderCell(cell)); - } - }); - - this.getTableColumns().forEach((column) => { - this.layoutColumn(column); - }); - - this.layoutRanges(); - } - - layoutRow(row) { - var el = row.getElement(), - selected = false, - occupied = this.ranges.some((range) => range.occupiesRow(row)); - - if (this.selecting === "row") { - selected = occupied; - } else if (this.selecting === "all") { - selected = true; - } - - el.classList.toggle("tabulator-range-selected", selected); - el.classList.toggle("tabulator-range-highlight", occupied); - } - - layoutColumn(column) { - var el = column.getElement(), - selected = false, - occupied = this.ranges.some((range) => range.occupiesColumn(column)); - - if (this.selecting === "column") { - selected = occupied; - } else if (this.selecting === "all") { - selected = true; - } - - el.classList.toggle("tabulator-range-selected", selected); - el.classList.toggle("tabulator-range-highlight", occupied); - } - - layoutRanges() { - var activeCell; - - if (!this.table.initialized) { - return; - } - - activeCell = this.getActiveCell(); - - if (!activeCell) { - return; - } - - this.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + "px"; - this.activeRangeCellElement.style.top = activeCell.row.getElement().offsetTop + "px"; - this.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + "px"; - this.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + "px"; - - this.ranges.forEach((range) => range.layout()); - - this.overlay.style.visibility = "visible"; - } - - - /////////////////////////////////// - /////// Helper Functions /////// - /////////////////////////////////// - - getCell(rowIdx, colIdx) { - var row; - - if (colIdx < 0) { - colIdx = this.getTableColumns().length + colIdx; - if (colIdx < 0) { - return null; - } - } - - if (rowIdx < 0) { - rowIdx = this.getTableRows().length + rowIdx; - } - - row = this.table.rowManager.getRowFromPosition(rowIdx + 1); - - return row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null; - } - - - getActiveCell() { - return this.getCell(this.activeRange.start.row, this.activeRange.start.col); - } - - getRowByRangePos(pos) { - return this.getTableRows()[pos]; - } - - getColumnByRangePos(pos) { - return this.getTableColumns()[pos]; - } - - getTableRows() { - return this.table.rowManager.getDisplayRows(); - } - - getTableColumns() { - return this.table.columnManager.getVisibleColumnsByIndex(); - } - - addRange(start, end) { - var range; - - if(this.maxRanges !== true && this.ranges.length >= this.maxRanges){ - this.ranges.shift().destroy(); - } - - range = new Range(this.table, this, start, end); - - this.activeRange = range; - this.ranges.push(range); - this.rangeContainer.appendChild(range.element); - - return range; - } - - resetRanges() { - var range, cell; - - this.ranges.forEach((range) => range.destroy()); - this.ranges = []; - - range = this.addRange(); - - if(this.table.rowManager.activeRows.length){ - cell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0]; - - if(cell){ - range.setBounds(cell); - this.initializeFocus(cell); - } - } - - return range; - } - - tableDestroyed(){ - document.removeEventListener("mouseup", this.mouseUpEvent); - this.table.rowManager.element.removeEventListener("keydown", this.keyDownEvent); - } - - selectedRows(component) { - return component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows(); - } - - selectedColumns(component) { - return component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns(); - } -} - -SelectRange.moduleName = "selectRange"; - -export default SelectRange; diff --git a/tmp/tabulator-5.6.1/src/js/modules/SelectRow/SelectRow.js b/tmp/tabulator-5.6.1/src/js/modules/SelectRow/SelectRow.js deleted file mode 100644 index afc2659..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/SelectRow/SelectRow.js +++ /dev/null @@ -1,495 +0,0 @@ -import Module from '../../core/Module.js'; - -class SelectRow extends Module{ - - constructor(table){ - super(table); - - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows - this.headerCheckboxElement = null; // hold header select element - - this.registerTableOption("selectableRows", "highlight"); //highlight rows on hover - this.registerTableOption("selectableRowsRangeMode", "drag"); //highlight rows on hover - this.registerTableOption("selectableRowsRollingSelection", true); //roll selection once maximum number of selectable rows is reached - this.registerTableOption("selectableRowsPersistence", true); // maintain selection when table view is updated - this.registerTableOption("selectableRowsCheck", function(data, row){return true;}); //check whether row is selectable - - this.registerTableFunction("selectRow", this.selectRows.bind(this)); - this.registerTableFunction("deselectRow", this.deselectRows.bind(this)); - this.registerTableFunction("toggleSelectRow", this.toggleRow.bind(this)); - this.registerTableFunction("getSelectedRows", this.getSelectedRows.bind(this)); - this.registerTableFunction("getSelectedData", this.getSelectedData.bind(this)); - - //register component functions - this.registerComponentFunction("row", "select", this.selectRows.bind(this)); - this.registerComponentFunction("row", "deselect", this.deselectRows.bind(this)); - this.registerComponentFunction("row", "toggleSelect", this.toggleRow.bind(this)); - this.registerComponentFunction("row", "isSelected", this.isRowSelected.bind(this)); - } - - initialize(){ - - this.deprecatedOptionsCheck(); - - if(this.table.options.selectableRows === "highlight" && this.table.options.selectableRange){ - this.table.options.selectableRows = false; - } - - if(this.table.options.selectableRows !== false){ - this.subscribe("row-init", this.initializeRow.bind(this)); - this.subscribe("row-deleting", this.rowDeleted.bind(this)); - this.subscribe("rows-wipe", this.clearSelectionData.bind(this)); - this.subscribe("rows-retrieve", this.rowRetrieve.bind(this)); - - if(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){ - this.subscribe("data-refreshing", this.deselectRows.bind(this)); - } - } - } - - deprecatedOptionsCheck(){ - this.deprecationCheck("selectable", "selectableRows", true); - this.deprecationCheck("selectableRollingSelection", "selectableRowsRollingSelection", true); - this.deprecationCheck("selectableRangeMode", "selectableRowsRangeMode", true); - this.deprecationCheck("selectablePersistence", "selectableRowsPersistence", true); - this.deprecationCheck("selectableCheck", "selectableRowsCheck", true); - } - - rowRetrieve(type, prevValue){ - return type === "selected" ? this.selectedRows : prevValue; - } - - rowDeleted(row){ - this._deselectRow(row, true); - } - - clearSelectionData(silent){ - var prevSelected = this.selectedRows.length; - - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if(prevSelected && silent !== true){ - this._rowSelectionChanged(); - } - } - - initializeRow(row){ - var self = this, - selectable = self.checkRowSelectability(row), - element = row.getElement(); - - // trigger end of row selection - var endSelect = function(){ - - setTimeout(function(){ - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - row.modules.select = {selected:false}; - - element.classList.toggle("tabulator-selectable", selectable); - element.classList.toggle("tabulator-unselectable", !selectable); - - //set row selection class - if(self.checkRowSelectability(row)){ - if(self.table.options.selectableRows && self.table.options.selectableRows != "highlight"){ - if(self.table.options.selectableRowsRangeMode === "click"){ - element.addEventListener("click", this.handleComplexRowClick.bind(this, row)); - }else{ - element.addEventListener("click", function(e){ - if(!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()){ - self.table._clearSelection(); - } - - if(!self.selecting){ - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function(e){ - if(e.shiftKey){ - self.table._clearSelection(); - - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function(e){ - if(self.selecting){ - self.table._clearSelection(); - self.toggleRow(row); - - if(self.selectPrev[1] == row){ - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function(e){ - if(self.selecting){ - self.table._clearSelection(); - self.selectPrev.unshift(row); - } - }); - } - } - } - } - - handleComplexRowClick(row, e){ - if(e.shiftKey){ - this.table._clearSelection(); - this.lastClickedRow = this.lastClickedRow || row; - - var lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow); - var rowIdx = this.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = this.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if(e.ctrlKey || e.metaKey){ - toggledRows.forEach((toggledRow)=>{ - if(toggledRow !== this.lastClickedRow){ - - if(this.table.options.selectableRows !== true && !this.isRowSelected(row)){ - if(this.selectedRows.length < this.table.options.selectableRows){ - this.toggleRow(toggledRow); - } - }else{ - this.toggleRow(toggledRow); - } - } - }); - this.lastClickedRow = row; - }else{ - this.deselectRows(undefined, true); - - if(this.table.options.selectableRows !== true){ - if(toggledRows.length > this.table.options.selectableRows){ - toggledRows = toggledRows.slice(0, this.table.options.selectableRows); - } - } - - this.selectRows(toggledRows); - } - this.table._clearSelection(); - } - else if(e.ctrlKey || e.metaKey){ - this.toggleRow(row); - this.lastClickedRow = row; - }else{ - this.deselectRows(undefined, true); - this.selectRows(row); - this.lastClickedRow = row; - } - } - - checkRowSelectability(row){ - if(row && row.type === "row"){ - return this.table.options.selectableRowsCheck.call(this.table, row.getComponent()); - } - - return false; - } - - //toggle row selection - toggleRow(row){ - if(this.checkRowSelectability(row)){ - if(row.modules.select && row.modules.select.selected){ - this._deselectRow(row); - }else{ - this._selectRow(row); - } - } - } - - //select a number of rows - selectRows(rows){ - var changes = [], - rowMatch, change; - - switch(typeof rows){ - case "undefined": - rowMatch = this.table.rowManager.rows; - break; - - case "number": - rowMatch = this.table.rowManager.findRow(rows); - break; - - case "string": - rowMatch = this.table.rowManager.findRow(rows); - - if(!rowMatch){ - rowMatch = this.table.rowManager.getRows(rows); - } - break; - - default: - rowMatch = rows; - break; - } - - if(Array.isArray(rowMatch)){ - if(rowMatch.length){ - rowMatch.forEach((row) => { - change = this._selectRow(row, true, true); - - if(change){ - changes.push(change); - } - }); - - this._rowSelectionChanged(false, changes); - } - }else{ - if(rowMatch){ - this._selectRow(rowMatch, false, true); - } - } - } - - //select an individual row - _selectRow(rowInfo, silent, force){ - //handle max row count - if(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){ - if(this.selectedRows.length >= this.table.options.selectableRows){ - if(this.table.options.selectableRowsRollingSelection){ - this._deselectRow(this.selectedRows[0]); - }else{ - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if(row){ - if(this.selectedRows.indexOf(row) == -1){ - row.getElement().classList.add("tabulator-selected"); - if(!row.modules.select){ - row.modules.select = {}; - } - - row.modules.select.selected = true; - if(row.modules.select.checkboxEl){ - row.modules.select.checkboxEl.checked = true; - } - - this.selectedRows.push(row); - - if(this.table.options.dataTreeSelectPropagate){ - this.childRowSelection(row, true); - } - - this.dispatchExternal("rowSelected", row.getComponent()); - - this._rowSelectionChanged(silent, row); - - return row; - } - }else{ - if(!silent){ - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } - } - - isRowSelected(row){ - return this.selectedRows.indexOf(row) !== -1; - } - - //deselect a number of rows - deselectRows(rows, silent){ - var changes = [], - rowMatch, change; - - switch(typeof rows){ - case "undefined": - rowMatch = Object.assign([], this.selectedRows); - break; - - case "number": - rowMatch = this.table.rowManager.findRow(rows); - break; - - case "string": - rowMatch = this.table.rowManager.findRow(rows); - - if(!rowMatch){ - rowMatch = this.table.rowManager.getRows(rows); - } - break; - - default: - rowMatch = rows; - break; - } - - if(Array.isArray(rowMatch)){ - if(rowMatch.length){ - rowMatch.forEach((row) => { - change = this._deselectRow(row, true, true); - - if(change){ - changes.push(change); - } - }); - - this._rowSelectionChanged(silent, [], changes); - } - }else{ - if(rowMatch){ - this._deselectRow(rowMatch, silent, true); - } - } - } - - //deselect an individual row - _deselectRow(rowInfo, silent){ - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index, element; - - if(row){ - index = self.selectedRows.findIndex(function(selectedRow){ - return selectedRow == row; - }); - - if(index > -1){ - - element = row.getElement(); - - if(element){ - element.classList.remove("tabulator-selected"); - } - - if(!row.modules.select){ - row.modules.select = {}; - } - - row.modules.select.selected = false; - if(row.modules.select.checkboxEl){ - row.modules.select.checkboxEl.checked = false; - } - self.selectedRows.splice(index, 1); - - if(this.table.options.dataTreeSelectPropagate){ - this.childRowSelection(row, false); - } - - this.dispatchExternal("rowDeselected", row.getComponent()); - - self._rowSelectionChanged(silent, undefined, row); - - return row; - } - }else{ - if(!silent){ - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } - } - - getSelectedData(){ - var data = []; - - this.selectedRows.forEach(function(row){ - data.push(row.getData()); - }); - - return data; - } - - getSelectedRows(){ - var rows = []; - - this.selectedRows.forEach(function(row){ - rows.push(row.getComponent()); - }); - - return rows; - } - - _rowSelectionChanged(silent, selected = [], deselected = []){ - if(this.headerCheckboxElement){ - if(this.selectedRows.length === 0){ - this.headerCheckboxElement.checked = false; - this.headerCheckboxElement.indeterminate = false; - } else if(this.table.rowManager.rows.length === this.selectedRows.length){ - this.headerCheckboxElement.checked = true; - this.headerCheckboxElement.indeterminate = false; - } else { - this.headerCheckboxElement.indeterminate = true; - this.headerCheckboxElement.checked = false; - } - } - - if(!silent){ - if(!Array.isArray(selected)){ - selected = [selected]; - } - - selected = selected.map(row => row.getComponent()); - - if(!Array.isArray(deselected)){ - deselected = [deselected]; - } - - deselected = deselected.map(row => row.getComponent()); - - this.dispatchExternal("rowSelectionChanged", this.getSelectedData(), this.getSelectedRows(), selected, deselected); - } - } - - registerRowSelectCheckbox (row, element) { - if(!row._row.modules.select){ - row._row.modules.select = {}; - } - - row._row.modules.select.checkboxEl = element; - } - - registerHeaderSelectCheckbox (element) { - this.headerCheckboxElement = element; - } - - childRowSelection(row, select){ - var children = this.table.modules.dataTree.getChildren(row, true); - - if(select){ - for(let child of children){ - this._selectRow(child, true); - } - }else{ - for(let child of children){ - this._deselectRow(child, true); - } - } - } -} - -SelectRow.moduleName = "selectRow"; - -export default SelectRow; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/Sort.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/Sort.js deleted file mode 100644 index 991f708..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/Sort.js +++ /dev/null @@ -1,477 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultSorters from './defaults/sorters.js'; - -class Sort extends Module{ - - constructor(table){ - super(table); - - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render - - this.registerTableOption("sortMode", "local"); //local or remote sorting - - this.registerTableOption("initialSort", false); //initial sorting criteria - this.registerTableOption("columnHeaderSortMulti", true); //multiple or single column sorting - this.registerTableOption("sortOrderReverse", false); //reverse internal sort ordering - this.registerTableOption("headerSortElement", "
    "); //header sort element - this.registerTableOption("headerSortClickElement", "header"); //element which triggers sort when clicked - - this.registerColumnOption("sorter"); - this.registerColumnOption("sorterParams"); - - this.registerColumnOption("headerSort", true); - this.registerColumnOption("headerSortStartingDir"); - this.registerColumnOption("headerSortTristate"); - - } - - initialize(){ - this.subscribe("column-layout", this.initializeColumn.bind(this)); - this.subscribe("table-built", this.tableBuilt.bind(this)); - this.registerDataHandler(this.sort.bind(this), 20); - - this.registerTableFunction("setSort", this.userSetSort.bind(this)); - this.registerTableFunction("getSorters", this.getSort.bind(this)); - this.registerTableFunction("clearSort", this.clearSort.bind(this)); - - if(this.table.options.sortMode === "remote"){ - this.subscribe("data-params", this.remoteSortParams.bind(this)); - } - } - - tableBuilt(){ - if(this.table.options.initialSort){ - this.setSort(this.table.options.initialSort); - } - } - - remoteSortParams(data, config, silent, params){ - var sorters = this.getSort(); - - sorters.forEach((item) => { - delete item.column; - }); - - params.sort = sorters; - - return params; - } - - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - userSetSort(sortList, dir){ - this.setSort(sortList, dir); - // this.table.rowManager.sorterRefresh(); - this.refreshSort(); - } - - clearSort(){ - this.clear(); - // this.table.rowManager.sorterRefresh(); - this.refreshSort(); - } - - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - //initialize column header for sorting - initializeColumn(column){ - var sorter = false, - colEl, - arrowEl; - - switch(typeof column.definition.sorter){ - case "string": - if(Sort.sorters[column.definition.sorter]){ - sorter = Sort.sorters[column.definition.sorter]; - }else{ - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter:sorter, dir:"none", - params:column.definition.sorterParams || {}, - startingDir:column.definition.headerSortStartingDir || "asc", - tristate: column.definition.headerSortTristate, - }; - - if(column.definition.headerSort !== false){ - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-col-sorter"); - - switch(this.table.options.headerSortClickElement){ - case "icon": - arrowEl.classList.add("tabulator-col-sorter-element"); - break; - case "header": - colEl.classList.add("tabulator-col-sorter-element"); - break; - default: - colEl.classList.add("tabulator-col-sorter-element"); - break; - } - - switch(this.table.options.headerSortElement){ - case "function": - //do nothing - break; - - case "object": - arrowEl.appendChild(this.table.options.headerSortElement); - break; - - default: - arrowEl.innerHTML = this.table.options.headerSortElement; - } - - //create sorter arrow - column.titleHolderElement.appendChild(arrowEl); - - column.modules.sort.element = arrowEl; - - this.setColumnHeaderSortIcon(column, "none"); - - if(this.table.options.headerSortClickElement === "icon"){ - arrowEl.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - } - - //sort on click - (this.table.options.headerSortClickElement === "icon" ? arrowEl : colEl).addEventListener("click", (e) => { - var dir = "", - sorters=[], - match = false; - - if(column.modules.sort){ - if(column.modules.sort.tristate){ - if(column.modules.sort.dir == "none"){ - dir = column.modules.sort.startingDir; - }else{ - if(column.modules.sort.dir == column.modules.sort.startingDir){ - dir = column.modules.sort.dir == "asc" ? "desc" : "asc"; - }else{ - dir = "none"; - } - } - }else{ - switch(column.modules.sort.dir){ - case "asc": - dir = "desc"; - break; - - case "desc": - dir = "asc"; - break; - - default: - dir = column.modules.sort.startingDir; - } - } - - if (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = this.getSort(); - - match = sorters.findIndex((sorter) => { - return sorter.field === column.getField(); - }); - - if(match > -1){ - sorters[match].dir = dir; - - match = sorters.splice(match, 1)[0]; - if(dir != "none"){ - sorters.push(match); - } - }else{ - if(dir != "none"){ - sorters.push({column:column, dir:dir}); - } - } - - //add to existing sort - this.setSort(sorters); - }else{ - if(dir == "none"){ - this.clear(); - }else{ - //sort by column only - this.setSort(column, dir); - } - - } - - // this.table.rowManager.sorterRefresh(!this.sortList.length); - this.refreshSort(); - } - }); - } - } - - refreshSort(){ - if(this.table.options.sortMode === "remote"){ - this.reloadData(null, false, false); - }else{ - this.refreshData(true); - } - - //TODO - Persist left position of row manager - // left = this.scrollLeft; - // this.scrollHorizontal(left); - } - - //check if the sorters have changed since last use - hasChanged(){ - var changed = this.changed; - this.changed = false; - return changed; - } - - //return current sorters - getSort(){ - var self = this, - sorters = []; - - self.sortList.forEach(function(item){ - if(item.column){ - sorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir}); - } - }); - - return sorters; - } - - //change sort list and trigger sort - setSort(sortList, dir){ - var self = this, - newSortList = []; - - if(!Array.isArray(sortList)){ - sortList = [{column: sortList, dir:dir}]; - } - - sortList.forEach(function(item){ - var column; - - column = self.table.columnManager.findColumn(item.column); - - if(column){ - item.column = column; - newSortList.push(item); - self.changed = true; - }else{ - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - - }); - - self.sortList = newSortList; - - this.dispatch("sort-changed"); - } - - //clear sorters - clear(){ - this.setSort([]); - } - - //find appropriate sorter for column - findSorter(column){ - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, value; - - if(row){ - row = row.getData(); - field = column.getField(); - - if(field){ - - value = column.getFieldValue(row); - - switch(typeof value){ - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if(!isNaN(value) && value !== ""){ - sorter = "number"; - }else{ - if(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){ - sorter = "alphanum"; - } - } - break; - } - } - } - - return Sort.sorters[sorter]; - } - - //work through sort list sorting data - sort(data){ - var self = this, - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList, - sortListActual = [], - rowComponents = []; - - if(this.subscribedExternal("dataSorting")){ - this.dispatchExternal("dataSorting", self.getSort()); - } - - self.clearColumnHeaders(); - - if(this.table.options.sortMode !== "remote"){ - - //build list of valid sorters and trigger column specific callbacks before sort begins - sortList.forEach(function(item, i){ - var sortObj; - - if(item.column){ - sortObj = item.column.modules.sort; - - if(sortObj){ - - //if no sorter has been defined, take a guess - if(!sortObj.sorter){ - sortObj.sorter = self.findSorter(item.column); - } - - item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params; - - sortListActual.push(item); - } - - self.setColumnHeader(item.column, item.dir); - } - }); - - //sort data - if (sortListActual.length) { - self._sortItems(data, sortListActual); - } - - }else{ - sortList.forEach(function(item, i){ - self.setColumnHeader(item.column, item.dir); - }); - } - - if(this.subscribedExternal("dataSorted")){ - data.forEach((row) => { - rowComponents.push(row.getComponent()); - }); - - this.dispatchExternal("dataSorted", self.getSort(), rowComponents); - } - - return data; - } - - //clear sort arrows on columns - clearColumnHeaders(){ - this.table.columnManager.getRealColumns().forEach((column) => { - if(column.modules.sort){ - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - this.setColumnHeaderSortIcon(column, "none"); - } - }); - } - - //set the column header sort direction - setColumnHeader(column, dir){ - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir === "asc" ? "ascending" : "descending"); - this.setColumnHeaderSortIcon(column, dir); - } - - setColumnHeaderSortIcon(column, dir){ - var sortEl = column.modules.sort.element, - arrowEl; - - if(column.definition.headerSort && typeof this.table.options.headerSortElement === "function"){ - while(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild); - - arrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir); - - if(typeof arrowEl === "object"){ - sortEl.appendChild(arrowEl); - }else{ - sortEl.innerHTML = arrowEl; - } - } - } - - //sort each item in sort list - _sortItems(data, sortList){ - var sorterCount = sortList.length - 1; - - data.sort((a, b) => { - var result; - - for(var i = sorterCount; i>= 0; i--){ - let sortItem = sortList[i]; - - result = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); - - if(result !== 0){ - break; - } - } - - return result; - }); - } - - //process individual rows for a sort function on active data - _sortRow(a, b, column, dir, params){ - var el1Comp, el2Comp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); - } -} - -Sort.moduleName = "sort"; - -//load defaults -Sort.sorters = defaultSorters; - -export default Sort; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters.js deleted file mode 100644 index 5d17769..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters.js +++ /dev/null @@ -1,21 +0,0 @@ -import number from './sorters/number.js'; -import string from './sorters/string.js'; -import date from './sorters/date.js'; -import time from './sorters/time.js'; -import datetime from './sorters/datetime.js'; -import boolean from './sorters/boolean.js'; -import array from './sorters/array.js'; -import exists from './sorters/exists.js'; -import alphanum from './sorters/alphanum.js'; - -export default { - number:number, - string:string, - date:date, - time:time, - datetime:datetime, - boolean:boolean, - array:array, - exists:exists, - alphanum:alphanum -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/alphanum.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/alphanum.js deleted file mode 100644 index 5efd9f0..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/alphanum.js +++ /dev/null @@ -1,44 +0,0 @@ -//sort alpha numeric strings -export default function(as, bs, aRow, bRow, column, dir, params){ - var a, b, a1, b1, i= 0, L, rx = /(\d+)|(\D+)/g, rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if(!as && as!== 0){ - emptyAlign = !bs && bs!== 0 ? 0 : -1; - }else if(!bs && bs!== 0){ - emptyAlign = 1; - }else{ - - if(isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if(a === b) return 0; - if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while(i < L){ - a1= a[i]; - b1= b[i++]; - if(a1 !== b1){ - if(isFinite(a1) && isFinite(b1)){ - if(a1.charAt(0) === "0") a1 = "." + a1; - if(b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } - else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/array.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/array.js deleted file mode 100644 index ad3ee19..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/array.js +++ /dev/null @@ -1,54 +0,0 @@ -//sort if element contains any data -export default function(a, b, aRow, bRow, column, dir, params){ - var type = params.type || "length", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - function calc(value){ - var result; - - switch(type){ - case "length": - result = value.length; - break; - - case "sum": - result = value.reduce(function(c, d){ - return c + d; - }); - break; - - case "max": - result = Math.max.apply(null, value) ; - break; - - case "min": - result = Math.min.apply(null, value) ; - break; - - case "avg": - result = value.reduce(function(c, d){ - return c + d; - }) / value.length; - break; - } - - return result; - } - - //handle non array values - if(!Array.isArray(a)){ - emptyAlign = !Array.isArray(b) ? 0 : -1; - }else if(!Array.isArray(b)){ - emptyAlign = 1; - }else{ - return calc(b) - calc(a); - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/boolean.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/boolean.js deleted file mode 100644 index 3919859..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/boolean.js +++ /dev/null @@ -1,7 +0,0 @@ -//sort booleans -export default function(a, b, aRow, bRow, column, dir, params){ - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/date.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/date.js deleted file mode 100644 index fa45c42..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/date.js +++ /dev/null @@ -1,10 +0,0 @@ -import datetime from './datetime.js'; - -//sort date -export default function(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "dd/MM/yyyy"; - } - - return datetime.call(this, a, b, aRow, bRow, column, dir, params); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/datetime.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/datetime.js deleted file mode 100644 index f2e63ef..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/datetime.js +++ /dev/null @@ -1,44 +0,0 @@ -//sort datetime -export default function(a, b, aRow, bRow, column, dir, params){ - var DT = window.DateTime || luxon.DateTime; - var format = params.format || "dd/MM/yyyy HH:mm:ss", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - if(typeof DT != "undefined"){ - if(!DT.isDateTime(a)){ - if(format === "iso"){ - a = DT.fromISO(String(a)); - }else{ - a = DT.fromFormat(String(a), format); - } - } - - if(!DT.isDateTime(b)){ - if(format === "iso"){ - b = DT.fromISO(String(b)); - }else{ - b = DT.fromFormat(String(b), format); - } - } - - if(!a.isValid){ - emptyAlign = !b.isValid ? 0 : -1; - }else if(!b.isValid){ - emptyAlign = 1; - }else{ - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - - }else{ - console.error("Sort Error - 'datetime' sorter is dependant on luxon.js"); - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/exists.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/exists.js deleted file mode 100644 index 46f0c5b..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/exists.js +++ /dev/null @@ -1,7 +0,0 @@ -//sort if element contains any data -export default function(a, b, aRow, bRow, column, dir, params){ - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/number.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/number.js deleted file mode 100644 index d96dcd3..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/number.js +++ /dev/null @@ -1,40 +0,0 @@ -//sort numbers -export default function(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var decimal = params.decimalSeparator; - var thousand = params.thousandSeparator; - var emptyAlign = 0; - - a = String(a); - b = String(b); - - if(thousand){ - a = a.split(thousand).join(""); - b = b.split(thousand).join(""); - } - - if(decimal){ - a = a.split(decimal).join("."); - b = b.split(decimal).join("."); - } - - a = parseFloat(a); - b = parseFloat(b); - - //handle non numeric values - if(isNaN(a)){ - emptyAlign = isNaN(b) ? 0 : -1; - }else if(isNaN(b)){ - emptyAlign = 1; - }else{ - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/string.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/string.js deleted file mode 100644 index 422278c..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/string.js +++ /dev/null @@ -1,34 +0,0 @@ -//sort strings -export default function(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if(!a){ - emptyAlign = !b ? 0 : -1; - }else if(!b){ - emptyAlign = 1; - }else{ - //compare valid values - switch(typeof params.locale){ - case "boolean": - if(params.locale){ - locale = this.langLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/time.js b/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/time.js deleted file mode 100644 index 9bfa7c9..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Sort/defaults/sorters/time.js +++ /dev/null @@ -1,10 +0,0 @@ -import datetime from './datetime.js'; - -//sort times -export default function(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "HH:mm"; - } - - return datetime.call(this, a, b, aRow, bRow, column, dir, params); -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/js/modules/Tooltip/Tooltip.js b/tmp/tabulator-5.6.1/src/js/modules/Tooltip/Tooltip.js deleted file mode 100644 index a43a1ca..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Tooltip/Tooltip.js +++ /dev/null @@ -1,130 +0,0 @@ -import Module from '../../core/Module.js'; -import Cell from '../../core/cell/Cell.js'; - -class Tooltip extends Module{ - - constructor(table){ - super(table); - - this.tooltipSubscriber = null, - this.headerSubscriber = null, - - this.timeout = null; - this.popupInstance = null; - - this.registerTableOption("tooltipGenerationMode", undefined); //deprecated - this.registerTableOption("tooltipDelay", 300); - - this.registerColumnOption("tooltip"); - this.registerColumnOption("headerTooltip"); - } - - initialize(){ - this.deprecatedOptionsCheck(); - - this.subscribe("column-init", this.initializeColumn.bind(this)); - } - - deprecatedOptionsCheck(){ - this.deprecationCheckMsg("tooltipGenerationMode", "This option is no longer needed as tooltips are always generated on hover now"); - } - - initializeColumn(column){ - if(column.definition.headerTooltip && !this.headerSubscriber){ - this.headerSubscriber = true; - - this.subscribe("column-mousemove", this.mousemoveCheck.bind(this, "headerTooltip")); - this.subscribe("column-mouseout", this.mouseoutCheck.bind(this, "headerTooltip")); - } - - if(column.definition.tooltip && !this.tooltipSubscriber){ - this.tooltipSubscriber = true; - - this.subscribe("cell-mousemove", this.mousemoveCheck.bind(this, "tooltip")); - this.subscribe("cell-mouseout", this.mouseoutCheck.bind(this, "tooltip")); - } - } - - mousemoveCheck(action, e, component){ - var tooltip = action === "tooltip" ? component.column.definition.tooltip : component.definition.headerTooltip; - - if(tooltip){ - this.clearPopup(); - this.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay); - } - } - - mouseoutCheck(action, e, component){ - if(!this.popupInstance){ - this.clearPopup(); - } - } - - clearPopup(action, e, component){ - clearTimeout(this.timeout); - this.timeout = null; - - if(this.popupInstance){ - this.popupInstance.hide(); - } - } - - loadTooltip(e, component, tooltip){ - var contentsEl, renderedCallback, coords; - - function onRendered(callback){ - renderedCallback = callback; - } - - if(typeof tooltip === "function"){ - tooltip = tooltip(e, component.getComponent(), onRendered); - } - - if(tooltip instanceof HTMLElement){ - contentsEl = tooltip; - }else{ - contentsEl = document.createElement("div"); - - if(tooltip === true){ - if(component instanceof Cell){ - tooltip = component.value; - }else{ - if(component.definition.field){ - this.langBind("columns|" + component.definition.field, (value) => { - contentsEl.innerHTML = tooltip = value || component.definition.title; - }); - }else{ - tooltip = component.definition.title; - } - } - } - - contentsEl.innerHTML = tooltip; - } - - if(tooltip || tooltip === 0 || tooltip === false){ - contentsEl.classList.add("tabulator-tooltip"); - - contentsEl.addEventListener("mousemove", e => e.preventDefault()); - - this.popupInstance = this.popup(contentsEl); - - if(typeof renderedCallback === "function"){ - this.popupInstance.renderCallback(renderedCallback); - } - - coords = this.popupInstance.containerEventCoords(e); - - this.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => { - this.dispatchExternal("TooltipClosed", component.getComponent()); - this.popupInstance = null; - }); - - this.dispatchExternal("TooltipOpened", component.getComponent()); - } - } -} - -Tooltip.moduleName = "tooltip"; - -export default Tooltip; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Validate/Validate.js b/tmp/tabulator-5.6.1/src/js/modules/Validate/Validate.js deleted file mode 100644 index 8378e2b..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Validate/Validate.js +++ /dev/null @@ -1,305 +0,0 @@ -import Module from '../../core/Module.js'; - -import defaultValidators from './defaults/validators.js'; - -class Validate extends Module{ - - constructor(table){ - super(table); - - this.invalidCells = []; - - this.registerTableOption("validationMode", "blocking"); - - this.registerColumnOption("validator"); - - this.registerTableFunction("getInvalidCells", this.getInvalidCells.bind(this)); - this.registerTableFunction("clearCellValidation", this.userClearCellValidation.bind(this)); - this.registerTableFunction("validate", this.userValidate.bind(this)); - - this.registerComponentFunction("cell", "isValid", this.cellIsValid.bind(this)); - this.registerComponentFunction("cell", "clearValidation", this.clearValidation.bind(this)); - this.registerComponentFunction("cell", "validate", this.cellValidate.bind(this)); - - this.registerComponentFunction("column", "validate", this.columnValidate.bind(this)); - this.registerComponentFunction("row", "validate", this.rowValidate.bind(this)); - } - - - initialize(){ - this.subscribe("cell-delete", this.clearValidation.bind(this)); - this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); - - this.subscribe("edit-success", this.editValidate.bind(this)); - this.subscribe("edit-editor-clear", this.editorClear.bind(this)); - this.subscribe("edit-edited-clear", this.editedClear.bind(this)); - } - - /////////////////////////////////// - ///////// Event Handling ////////// - /////////////////////////////////// - - editValidate(cell, value, previousValue){ - var valid = this.table.options.validationMode !== "manual" ? this.validate(cell.column.modules.validate, cell, value) : true; - - // allow time for editor to make render changes then style cell - if(valid !== true){ - setTimeout(() => { - cell.getElement().classList.add("tabulator-validation-fail"); - this.dispatchExternal("validationFailed", cell.getComponent(), value, valid); - }); - } - - return valid; - } - - editorClear(cell, cancelled){ - if(cancelled){ - if(cell.column.modules.validate){ - this.cellValidate(cell); - } - } - - cell.getElement().classList.remove("tabulator-validation-fail"); - } - - editedClear(cell){ - if(cell.modules.validate){ - cell.modules.validate.invalid = false; - } - } - - /////////////////////////////////// - ////////// Cell Functions ///////// - /////////////////////////////////// - - cellIsValid(cell){ - return cell.modules.validate ? (cell.modules.validate.invalid || true) : true; - } - - cellValidate(cell){ - return this.validate(cell.column.modules.validate, cell, cell.getValue()); - } - - /////////////////////////////////// - ///////// Column Functions //////// - /////////////////////////////////// - - columnValidate(column){ - var invalid = []; - - column.cells.forEach((cell) => { - if(this.cellValidate(cell) !== true){ - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - } - - /////////////////////////////////// - ////////// Row Functions ////////// - /////////////////////////////////// - - rowValidate(row){ - var invalid = []; - - row.cells.forEach((cell) => { - if(this.cellValidate(cell) !== true){ - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - } - - /////////////////////////////////// - ///////// Table Functions ///////// - /////////////////////////////////// - - - userClearCellValidation(cells){ - if(!cells){ - cells = this.getInvalidCells(); - } - - if(!Array.isArray(cells)){ - cells = [cells]; - } - - cells.forEach((cell) => { - this.clearValidation(cell._getSelf()); - }); - } - - userValidate(cells){ - var output = []; - - //clear row data - this.table.rowManager.rows.forEach((row) => { - row = row.getComponent(); - - var valid = row.validate(); - - if(valid !== true){ - output = output.concat(valid); - } - }); - - return output.length ? output : true; - } - - /////////////////////////////////// - ///////// Internal Logic ////////// - /////////////////////////////////// - - initializeColumnCheck(column){ - if(typeof column.definition.validator !== "undefined"){ - this.initializeColumn(column); - } - } - - //validate - initializeColumn(column){ - var self = this, - config = [], - validator; - - if(column.definition.validator){ - - if(Array.isArray(column.definition.validator)){ - column.definition.validator.forEach((item) => { - validator = self._extractValidator(item); - - if(validator){ - config.push(validator); - } - }); - - }else{ - validator = this._extractValidator(column.definition.validator); - - if(validator){ - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } - } - - _extractValidator(value){ - var type, params, pos; - - switch(typeof value){ - case "string": - pos = value.indexOf(':'); - - if(pos > -1){ - type = value.substring(0,pos); - params = value.substring(pos+1); - }else{ - type = value; - } - - return this._buildValidator(type, params); - - case "function": - return this._buildValidator(value); - - case "object": - return this._buildValidator(value.type, value.parameters); - } - } - - _buildValidator(type, params){ - - var func = typeof type == "function" ? type : Validate.validators[type]; - - if(!func){ - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - }else{ - return { - type:typeof type == "function" ? "function" : type, - func:func, - params:params, - }; - } - } - - validate(validators, cell, value){ - var self = this, - failedValidators = [], - invalidIndex = this.invalidCells.indexOf(cell); - - if(validators){ - validators.forEach((item) => { - if(!item.func.call(self, cell.getComponent(), value, item.params)){ - failedValidators.push({ - type:item.type, - parameters:item.params - }); - } - }); - } - - if(!cell.modules.validate){ - cell.modules.validate = {}; - } - - if(!failedValidators.length){ - cell.modules.validate.invalid = false; - cell.getElement().classList.remove("tabulator-validation-fail"); - - if(invalidIndex > -1){ - this.invalidCells.splice(invalidIndex, 1); - } - }else{ - cell.modules.validate.invalid = failedValidators; - - if(this.table.options.validationMode !== "manual"){ - cell.getElement().classList.add("tabulator-validation-fail"); - } - - if(invalidIndex == -1){ - this.invalidCells.push(cell); - } - } - - return failedValidators.length ? failedValidators : true; - } - - getInvalidCells(){ - var output = []; - - this.invalidCells.forEach((cell) => { - output.push(cell.getComponent()); - }); - - return output; - } - - clearValidation(cell){ - var invalidIndex; - - if(cell.modules.validate && cell.modules.validate.invalid){ - - cell.getElement().classList.remove("tabulator-validation-fail"); - cell.modules.validate.invalid = false; - - invalidIndex = this.invalidCells.indexOf(cell); - - if(invalidIndex > -1){ - this.invalidCells.splice(invalidIndex, 1); - } - } - } -} - -Validate.moduleName = "validate"; - -//load defaults -Validate.validators = defaultValidators; - -export default Validate; diff --git a/tmp/tabulator-5.6.1/src/js/modules/Validate/defaults/validators.js b/tmp/tabulator-5.6.1/src/js/modules/Validate/defaults/validators.js deleted file mode 100644 index ae43ccc..0000000 --- a/tmp/tabulator-5.6.1/src/js/modules/Validate/defaults/validators.js +++ /dev/null @@ -1,150 +0,0 @@ -export default { - //is integer - integer: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - value = Number(value); - - return !isNaN(value) && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - value = Number(value); - - return !isNaN(value) && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return isNaN(value); - }, - - //must be alphanumeric - alphanumeric: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - var reg = new RegExp(/^[a-z0-9]+$/i); - - return reg.test(value); - }, - - //maximum value - max: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) >= parameters; - }, - - //starts with value - starts: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).toLowerCase().startsWith(String(parameters).toLowerCase()); - }, - - //ends with value - ends: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).toLowerCase().endsWith(String(parameters).toLowerCase()); - }, - - - //minimum string length - minLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - - if(typeof parameters == "string"){ - parameters = parameters.split("|"); - } - - return parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function(row){ - var data = row.getData(); - - if(data !== cellData){ - if(value == column.getFieldValue(data)){ - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required:function(cell, value, parameters){ - return value !== "" && value !== null && typeof value !== "undefined"; - }, -}; \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/scss/tabulator.scss b/tmp/tabulator-5.6.1/src/scss/tabulator.scss deleted file mode 100644 index 44b8464..0000000 --- a/tmp/tabulator-5.6.1/src/scss/tabulator.scss +++ /dev/null @@ -1,1583 +0,0 @@ - -//Main Theme Variables -$backgroundColor: #888 !default; //background color of tabulator -$borderColor:#999 !default; //border to tabulator -$textSize:14px !default; //table text size - -//header theming -$headerBackgroundColor:#e6e6e6 !default; //border to tabulator -$headerTextColor:#555 !default; //header text color -$headerBorderColor:#aaa !default; //header border color -$headerSeparatorColor:#999 !default; //header bottom separator color -$headerMargin:4px !default; //padding round header - -//column header arrows -$sortArrowHover: #555 !default; -$sortArrowActive: #666 !default; -$sortArrowInactive: #bbb !default; - -//row theming -$rowBackgroundColor:#fff !default; //table row background color -$rowAltBackgroundColor:#EFEFEF !default; //table row background color -$rowBorderColor:#aaa !default; //table border color -$rowTextColor:#333 !default; //table text color -$rowHoverBackground:#bbb !default; //row background color on hover - -$rowSelectedBackground: #9ABCEA !default; //row background color when selected -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered - -$editBoxColor:#1D68CD !default; //border color for edit boxes -$errorColor:#dd0000 !default; //error indication - -//footer theming -$footerBackgroundColor:#e6e6e6 !default; //border to tabulator -$footerTextColor:#555 !default; //footer text color -$footerBorderColor:#aaa !default; //footer border color -$footerSeparatorColor:#999 !default; //footer bottom separator color -$footerActiveColor:#d00 !default; //footer bottom active text color - - -//range selection -$rangeBorderColor: #2975DD !default; //range border color -$rangeHandleColor: $rangeBorderColor !default; //range handle color -$rangeHeaderSelectedBackground: #3876ca !default; //header background color when selected -$rangeHeaderSelectedTextColor: #FFFFFF !default; //header text color when selected -$rangeHeaderHighlightBackground: #D6D6D6 !default; //header background color when highlighted -$rangeHeaderTextHighlightBackground: #000000 !default; //header text color when highlighted - -//Tabulator Containing Element -.tabulator{ - position: relative; - - border: 1px solid $borderColor; - - background-color: $backgroundColor; - - font-size:$textSize; - text-align: left; - overflow:hidden; - - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); - - &[tabulator-layout="fitDataFill"]{ - .tabulator-tableholder{ - .tabulator-table{ - min-width:100%; - } - } - } - - &[tabulator-layout="fitDataTable"]{ - display: inline-block; - } - - &.tabulator-block-select{ - user-select: none; - } - - &.tabulator-ranges{ - .tabulator-cell:not(.tabulator-editing){ - user-select: none; - } - } - - - //column header containing element - .tabulator-header{ - position:relative; - box-sizing: border-box; - - width:100%; - - border-bottom:1px solid $headerSeparatorColor; - background-color: $headerBackgroundColor; - color: $headerTextColor; - font-weight:bold; - - white-space: nowrap; - overflow:hidden; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - outline: none; - - &.tabulator-header-hidden{ - display:none; - } - - .tabulator-header-contents{ - position: relative; - overflow: hidden; - - .tabulator-headers{ - display: inline-block; - } - } - - //individual column header element - .tabulator-col{ - display:inline-flex; - position:relative; - box-sizing:border-box; - - flex-direction: column; - justify-content: flex-start; - - border-right:1px solid $headerBorderColor; - background:$headerBackgroundColor; - - text-align:left; - vertical-align: bottom; - overflow: hidden; - - &.tabulator-moving{ - position: absolute; - border:1px solid $headerSeparatorColor; - background:darken($headerBackgroundColor, 10%); - pointer-events: none; - } - - &.tabulator-range-highlight{ - background-color: $rangeHeaderHighlightBackground; - color: $rangeHeaderTextHighlightBackground; - } - - &.tabulator-range-selected{ - background-color: $rangeHeaderSelectedBackground; - color: $rangeHeaderSelectedTextColor; - } - - //hold content of column header - .tabulator-col-content{ - box-sizing:border-box; - position: relative; - padding:4px; - - //header menu button - .tabulator-header-popup-button{ - padding: 0 8px; - - &:hover{ - cursor: pointer; - opacity: .6; - } - } - - //hold title and sort arrow - .tabulator-col-title-holder{ - position: relative; - } - - //hold title of column header - .tabulator-col-title{ - box-sizing:border-box; - width: 100%; - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align:bottom; - - &.tabulator-col-title-wrap{ - white-space: normal; - text-overflow: initial; - } - - //element to hold title editor - .tabulator-title-editor{ - box-sizing: border-box; - width: 100%; - - border:1px solid #999; - - padding:1px; - - background: #fff; - } - - .tabulator-header-popup-button + .tabulator-title-editor{ - width:calc(100% - 22px); - } - } - - //column sorter arrow - .tabulator-col-sorter{ - display: flex; - align-items: center; - - position: absolute; - top:0; - bottom:0; - right:4px; - - .tabulator-arrow{ - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid $sortArrowInactive; - } - } - - } - - //complex header column group - &.tabulator-col-group{ - - //gelement to hold sub columns in column group - .tabulator-col-group-cols{ - position:relative; - display: flex; - - border-top:1px solid $headerBorderColor; - overflow: hidden; - - margin-right:-1px; - } - } - - //header filter containing element - .tabulator-header-filter{ - position: relative; - box-sizing: border-box; - margin-top:2px; - width:100%; - text-align: center; - - //styling adjustment for inbuilt editors - textarea{ - height:auto !important; - } - - svg{ - margin-top: 3px; - } - - input{ - &::-ms-clear { - width : 0; - height: 0; - } - } - } - - //styling child elements for sortable columns - &.tabulator-sortable{ - .tabulator-col-title{ - padding-right:25px; - } - - @media (hover:hover) and (pointer:fine){ - &.tabulator-col-sorter-element:hover{ - cursor:pointer; - background-color:darken($headerBackgroundColor, 10%); - } - } - - &[aria-sort="none"]{ - .tabulator-col-content .tabulator-col-sorter{ - color: $sortArrowInactive; - - @media (hover:hover) and (pointer:fine){ - &.tabulator-col-sorter-element .tabulator-arrow:hover{ - cursor:pointer; - border-bottom: 6px solid $sortArrowHover; - } - } - - .tabulator-arrow{ - border-top: none; - border-bottom: 6px solid $sortArrowInactive; - } - } - } - - &[aria-sort="ascending"]{ - .tabulator-col-content .tabulator-col-sorter{ - color: $sortArrowActive; - - @media (hover:hover) and (pointer:fine){ - &.tabulator-col-sorter-element .tabulator-arrow:hover{ - cursor:pointer; - border-bottom: 6px solid $sortArrowHover; - } - } - - .tabulator-arrow{ - border-top: none; - border-bottom: 6px solid $sortArrowActive; - - } - } - } - - &[aria-sort="descending"]{ - .tabulator-col-content .tabulator-col-sorter{ - color: $sortArrowActive; - - @media (hover:hover) and (pointer:fine){ - &.tabulator-col-sorter-element .tabulator-arrow:hover{ - cursor:pointer; - border-top: 6px solid $sortArrowHover; - } - } - - .tabulator-arrow{ - border-bottom: none; - border-top: 6px solid $sortArrowActive; - color: $sortArrowActive; - } - } - } - } - - - &.tabulator-col-vertical{ - .tabulator-col-content{ - .tabulator-col-title{ - writing-mode: vertical-rl; - text-orientation: mixed; - - display:flex; - align-items:center; - justify-content:center; - } - } - - &.tabulator-col-vertical-flip{ - .tabulator-col-title{ - transform: rotate(180deg); - } - } - - &.tabulator-sortable{ - .tabulator-col-title{ - padding-right:0; - padding-top:20px; - } - - &.tabulator-col-vertical-flip{ - .tabulator-col-title{ - padding-right:0; - padding-bottom:20px; - } - - } - - .tabulator-col-sorter{ - justify-content: center; - left:0; - right:0; - top:4px; - bottom:auto; - } - } - } - } - - .tabulator-frozen{ - position: sticky; - left:0; - - // background-color: inherit; - - z-index: 11; - - &.tabulator-frozen-left{ - border-right:2px solid $rowBorderColor; - } - - &.tabulator-frozen-right{ - border-left:2px solid $rowBorderColor; - } - } - - - .tabulator-calcs-holder{ - box-sizing:border-box; - display: inline-block; - - background:lighten($headerBackgroundColor, 5%) !important; - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $headerBorderColor; - - // overflow: hidden; - - .tabulator-row{ - background:lighten($headerBackgroundColor, 5%) !important; - - .tabulator-col-resize-handle{ - display: none; - } - } - } - - .tabulator-frozen-rows-holder{ - display: inline-block; - &:empty{ - display: none; - } - } - } - - //scrolling element to hold table - .tabulator-tableholder{ - position:relative; - width:100%; - white-space: nowrap; - overflow:auto; - -webkit-overflow-scrolling: touch; - - &:focus{ - outline: none; - } - - //default placeholder element - .tabulator-placeholder{ - box-sizing:border-box; - display: flex; - align-items:center; - justify-content: center; - - min-width:100%; - width:100%; - - &[tabulator-render-mode="virtual"]{ - min-height:100%; - } - - .tabulator-placeholder-contents { - display: inline-block; - text-align: center; - - padding:10px; - - color:#ccc; - font-weight: bold; - font-size: 20px; - - white-space: normal; - } - } - - //element to hold table rows - .tabulator-table{ - position:relative; - display:inline-block; - background-color:$rowBackgroundColor; - white-space: nowrap; - overflow:visible; - color:$rowTextColor; - - //row element - .tabulator-row{ - &.tabulator-calcs{ - font-weight: bold; - background:darken($rowAltBackgroundColor, 5%) !important; - - &.tabulator-calcs-top{ - border-bottom:2px solid $rowBorderColor; - } - - &.tabulator-calcs-bottom{ - border-top:2px solid $rowBorderColor; - } - } - } - - } - - .tabulator-range-overlay { - position: absolute; - inset: 0; - z-index: 10; - pointer-events: none; - - & .tabulator-range { - position: absolute; - box-sizing: border-box; - border: 1px solid $rangeBorderColor; - - &.tabulator-range-active::after { - content: ''; - position: absolute; - right: -3px; - bottom: -3px; - width: 6px; - height: 6px; - background-color: $rangeHandleColor; - border-radius: 999px; - } - } - - & .tabulator-range-cell-active { - position: absolute; - box-sizing: border-box; - border: 2px solid $rangeBorderColor; - } - } - } - - //footer element - .tabulator-footer{ - border-top:1px solid $footerSeparatorColor; - background-color: $footerBackgroundColor; - - color: $footerTextColor; - font-weight:bold; - white-space:nowrap; - user-select:none; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - .tabulator-footer-contents { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - - padding:5px 10px; - - &:empty{ - display: none; - } - } - - .tabulator-calcs-holder{ - box-sizing:border-box; - width:100%; - - text-align: left; - - background:lighten($footerBackgroundColor, 5%) !important; - border-bottom:1px solid $rowBorderColor; - border-top:1px solid $rowBorderColor; - - overflow: hidden; - - .tabulator-row{ - display: inline-block; - background:lighten($footerBackgroundColor, 5%) !important; - - .tabulator-col-resize-handle{ - display: none; - } - } - - - &:only-child{ - margin-bottom:-5px; - border-bottom:none; - } - } - - &>*+.tabulator-page-counter{ - margin-left:10px; - } - - .tabulator-page-counter { - font-weight: normal; - } - - .tabulator-paginator{ - flex:1; - - text-align: right; - - color: $footerTextColor; - font-family:inherit; - font-weight:inherit; - font-size:inherit; - } - - //pagination container element - .tabulator-page-size{ - display:inline-block; - - margin:0 5px; - padding:2px 5px; - - border:1px solid $footerBorderColor; - border-radius:3px; - } - - .tabulator-pages{ - margin:0 7px; - } - - //pagination button - .tabulator-page{ - display:inline-block; - - margin:0 2px; - padding:2px 5px; - - border:1px solid $footerBorderColor; - border-radius:3px; - - background:rgba(255,255,255,.2); - - &.active{ - color:$footerActiveColor; - } - - &:disabled{ - opacity:.5; - } - - &:not(disabled){ - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:pointer; - background:rgba(0,0,0,.2); - color:#fff; - } - } - } - } - } - - //column resize handles - .tabulator-col-resize-handle{ - position: relative; - display: inline-block; - width: 6px; - - margin-left: -3px; - margin-right: -3px; - - z-index: 11; - vertical-align: middle; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:ew-resize; - } - } - - &:last-of-type{ - width:3px; - margin-right:0; - } - } - - - //holding div that contains loader and covers tabulator element to prevent interaction - .tabulator-alert{ - position:absolute; - display: flex; - align-items:center; - - top:0; - left:0; - z-index:100; - - height:100%; - width:100%; - background:rgba(0,0,0,.4); - text-align:center; - - //loading message element - .tabulator-alert-msg { - display:inline-block; - - margin:0 auto; - padding:10px 20px; - - border-radius:10px; - - background:#fff; - font-weight:bold; - font-size:16px; - - //loading message - &.tabulator-alert-state-msg { - border:4px solid #333; - color:#000; - } - - //error message - &.tabulator-alert-state-error { - border:4px solid #D00; - color:#590000; - } - } - } -} - -//row element -.tabulator-row{ - position: relative; - box-sizing: border-box; - min-height:$textSize + ($headerMargin * 2); - background-color: $rowBackgroundColor; - - - &.tabulator-row-even{ - background-color: $rowAltBackgroundColor; - } - - @media (hover:hover) and (pointer:fine){ - &.tabulator-selectable:hover{ - background-color:$rowHoverBackground; - cursor: pointer; - } - } - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - - @media (hover:hover) and (pointer:fine){ - &.tabulator-selected:hover{ - background-color:$rowSelectedBackgroundHover; - cursor: pointer; - } - } - - &.tabulator-row-moving{ - border:1px solid #000; - background:#fff; - } - - &.tabulator-moving{ - position: absolute; - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $rowBorderColor; - - pointer-events: none; - z-index:15; - } - - &.tabulator-range-highlight{ - .tabulator-cell.tabulator-range-row-header{ - background-color: $rangeHeaderHighlightBackground; - color: $rangeHeaderTextHighlightBackground; - } - - &.tabulator-range-selected{ - .tabulator-cell.tabulator-range-row-header{ - background-color: $rangeHeaderSelectedBackground; - color: $rangeHeaderSelectedTextColor; - } - } - } - - - &.tabulator-range-selected{ - .tabulator-cell.tabulator-range-row-header{ - background-color: $rangeHeaderSelectedBackground; - color: $rangeHeaderSelectedTextColor; - } - } - - //row resize handles - .tabulator-row-resize-handle{ - position:absolute; - right:0; - bottom:0; - left:0; - height:5px; - - &.prev{ - top:0; - bottom:auto; - } - - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:ns-resize; - } - } - } - - .tabulator-responsive-collapse{ - box-sizing:border-box; - - padding:5px; - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $rowBorderColor; - - &:empty{ - display:none; - } - - table{ - font-size:$textSize; - - tr{ - td{ - position: relative; - - &:first-of-type{ - padding-right:10px; - } - } - } - } - } - - //cell element - .tabulator-cell{ - display:inline-block; - position: relative; - box-sizing:border-box; - padding:4px; - border-right:1px solid $rowBorderColor; - vertical-align:middle; - white-space:nowrap; - overflow:hidden; - text-overflow:ellipsis; - outline:none; - - &.tabulator-frozen{ - display: inline-block; - position: sticky; - - left:0; - - background-color: inherit; - - z-index: 11; - - &.tabulator-frozen-left{ - border-right:2px solid $rowBorderColor; - } - - &.tabulator-frozen-right{ - border-left:2px solid $rowBorderColor; - } - } - - &.tabulator-editing{ - border:1px solid $editBoxColor; - outline:none; - - padding: 0; - - input, select{ - border:1px; - background:transparent; - outline:none; - } - } - - &.tabulator-validation-fail{ - border:1px solid $errorColor; - - input, select{ - border:1px; - background:transparent; - - color: $errorColor; - } - } - - //movable row handle - &.tabulator-row-handle{ - display: inline-flex; - align-items:center; - justify-content:center; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - //handle holder - .tabulator-row-handle-box{ - width:80%; - - //Hamburger element - .tabulator-row-handle-bar{ - width:100%; - height:3px; - margin-top:2px; - background:#666; - } - } - } - - &.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){ - background-color: $rowSelectedBackground; - } - - .tabulator-data-tree-branch-empty{ - display:inline-block; - width:7px; - } - - .tabulator-data-tree-branch{ - display:inline-block; - vertical-align:middle; - - height:9px; - width:7px; - - margin-top:-9px; - margin-right:5px; - - border-bottom-left-radius:1px; - - border-left:2px solid $rowBorderColor; - border-bottom:2px solid $rowBorderColor; - } - - .tabulator-data-tree-control{ - - display:inline-flex; - justify-content:center; - align-items:center; - vertical-align:middle; - - height:11px; - width:11px; - - margin-right:5px; - - border:1px solid $rowTextColor; - border-radius:2px; - background:rgba(0, 0, 0, .1); - - overflow:hidden; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:pointer; - background:rgba(0, 0, 0, .2); - } - } - - .tabulator-data-tree-control-collapse{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: transparent; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: $rowTextColor; - } - } - - .tabulator-data-tree-control-expand{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: $rowTextColor; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: $rowTextColor; - } - } - - } - - .tabulator-responsive-collapse-toggle{ - display: inline-flex; - align-items:center; - justify-content:center; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - height:15px; - width:15px; - - border-radius:20px; - background:#666; - - color:$rowBackgroundColor; - font-weight:bold; - font-size:1.1em; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - opacity:.7; - cursor: pointer; - } - } - - &.open{ - .tabulator-responsive-collapse-toggle-close{ - display:initial; - } - - .tabulator-responsive-collapse-toggle-open{ - display:none; - } - } - - svg{ - stroke:$rowBackgroundColor; - } - - .tabulator-responsive-collapse-toggle-close{ - display:none; - } - } - - .tabulator-traffic-light{ - display: inline-block; - height:14px; - width:14px; - - border-radius:14px; - } - } - - //row grouping element - &.tabulator-group{ - box-sizing:border-box; - border-bottom:1px solid #999; - border-right:1px solid $rowBorderColor; - border-top:1px solid #999; - padding:5px; - padding-left:10px; - background:#ccc; - font-weight:bold; - - min-width: 100%; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:pointer; - background-color:rgba(0,0,0,.1); - } - } - - &.tabulator-group-visible{ - - .tabulator-arrow{ - margin-right:10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid $sortArrowActive; - border-bottom: 0; - } - - } - - &.tabulator-group-level-1{ - padding-left:30px; - } - - &.tabulator-group-level-2{ - padding-left:50px; - } - - &.tabulator-group-level-3{ - padding-left:70px; - } - - &.tabulator-group-level-4{ - padding-left:90px; - } - - &.tabulator-group-level-5{ - padding-left:110px; - } - - .tabulator-group-toggle{ - display: inline-block; - } - - //sorting arrow - .tabulator-arrow{ - display: inline-block; - width: 0; - height: 0; - margin-right:16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid $sortArrowActive; - vertical-align:middle; - } - - span{ - margin-left:10px; - color:#d00; - } - } - -} - -.tabulator-popup-container{ - position: absolute; - display:inline-block; - box-sizing:border-box; - - background:$rowBackgroundColor; - border:1px solid $rowBorderColor; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, .2); - - font-size:$textSize; - - overflow-y:auto; - -webkit-overflow-scrolling: touch; - - z-index: 10000; -} - -.tabulator-popup{ - padding:5px; - - border-radius: 3px; -} - -.tabulator-tooltip{ - max-width: Min(500px, 100%); - - padding:3px 5px; - - border-radius: 2px; - box-shadow:none; - - font-size:12px; - - pointer-events: none; -} - -.tabulator-menu{ - .tabulator-menu-item{ - position:relative; - box-sizing:border-box; - - padding:5px 10px; - - user-select: none; - - &.tabulator-menu-item-disabled{ - opacity: .5; - } - - @media (hover:hover) and (pointer:fine){ - &:not(.tabulator-menu-item-disabled):hover{ - cursor: pointer; - background: $rowAltBackgroundColor; - } - } - - &.tabulator-menu-item-submenu{ - padding-right:25px; - - &::after { - display: inline-block; - position: absolute; - - top: calc(5px + .4em); - right: 10px; - height: 7px; - width: 7px; - - content: ''; - - border-width: 1px 1px 0 0; - border-style: solid; - border-color: $rowBorderColor; - vertical-align: top; - - transform: rotate(45deg); - } - } - } - - .tabulator-menu-separator{ - border-top:1px solid $rowBorderColor; - } -} - -.tabulator-edit-list{ - max-height:200px; - - font-size:$textSize; - - overflow-y:auto; - -webkit-overflow-scrolling: touch; - - .tabulator-edit-list-item{ - padding:4px; - - color:$rowTextColor; - outline:none; - - &.active{ - color:$rowBackgroundColor; - background:$editBoxColor; - - &.focused{ - outline:1px solid rgba($rowBackgroundColor, .5); - } - } - - &.focused{ - outline:1px solid $editBoxColor; - } - - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:pointer; - - color:$rowBackgroundColor; - background:$editBoxColor; - } - } - } - - .tabulator-edit-list-placeholder{ - padding:4px; - - color:$rowTextColor; - text-align: center; - } - - .tabulator-edit-list-group{ - border-bottom:1px solid $rowBorderColor; - - padding:4px; - padding-top:6px; - - color:$rowTextColor; - font-weight:bold; - - } - - .tabulator-edit-list-item, .tabulator-edit-list-group{ - &.tabulator-edit-list-group-level-2{ - padding-left:12px; - } - - &.tabulator-edit-list-group-level-3{ - padding-left:20px; - } - - &.tabulator-edit-list-group-level-4{ - padding-left:28px; - } - - &.tabulator-edit-list-group-level-5{ - padding-left:36px; - } - } -} - - -//RTL Styling - -.tabulator.tabulator-ltr{ - direction: ltr; -} - -.tabulator.tabulator-rtl{ - text-align: initial; - direction: rtl; - - .tabulator-header { - .tabulator-col{ - text-align: initial; - border-left:1px solid $headerBorderColor; - border-right:initial; - - &.tabulator-col-group{ - .tabulator-col-group-cols{ - margin-right:initial; - margin-left:-1px; - } - } - - &.tabulator-sortable{ - .tabulator-col-title{ - padding-right:0; - padding-left:25px; - } - } - - .tabulator-col-content{ - .tabulator-col-sorter{ - left:8px; - right:initial; - } - } - } - } - - .tabulator-row{ - .tabulator-cell{ - border-right:initial; - border-left:1px solid $rowBorderColor; - - .tabulator-data-tree-branch{ - margin-right:initial; - margin-left:5px; - - border-bottom-left-radius:initial; - border-bottom-right-radius:1px; - - border-left:initial; - border-right:2px solid $rowBorderColor; - } - - .tabulator-data-tree-control{ - margin-right:initial; - margin-left:5px; - } - - &.tabulator-frozen{ - - &.tabulator-frozen-left{ - border-left:2px solid $rowBorderColor; - } - - &.tabulator-frozen-right{ - border-right:2px solid $rowBorderColor; - } - } - } - - .tabulator-col-resize-handle{ - &:last-of-type{ - width:3px; - margin-left:0; - margin-right:-3px; - } - } - - } - - .tabulator-footer { - .tabulator-calcs-holder{ - text-align: initial; - } - - } - -} - - -// Table print styling - -.tabulator-print-fullscreen{ - position: absolute; - top:0; - bottom:0; - left:0; - right:0; - - z-index: 10000; -} - -body.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){ - display:none !important; -} - -.tabulator-print-table{ - border-collapse: collapse; - - .tabulator-data-tree-branch{ - display:inline-block; - vertical-align:middle; - - height:9px; - width:7px; - - margin-top:-9px; - margin-right:5px; - - border-bottom-left-radius:1px; - - border-left:2px solid $rowBorderColor; - border-bottom:2px solid $rowBorderColor; - } - - //row grouping element - .tabulator-print-table-group{ - box-sizing:border-box; - border-bottom:1px solid #999; - border-right:1px solid $rowBorderColor; - border-top:1px solid #999; - padding:5px; - padding-left:10px; - background:#ccc; - font-weight:bold; - - min-width: 100%; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:pointer; - background-color:rgba(0,0,0,.1); - } - } - - &.tabulator-group-visible{ - - .tabulator-arrow{ - margin-right:10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid $sortArrowActive; - border-bottom: 0; - } - - } - - &.tabulator-group-level-1{ - td{ - padding-left:30px !important; - } - } - - &.tabulator-group-level-2{ - td{ - padding-left:50px !important; - } - } - - &.tabulator-group-level-3{ - td{ - padding-left:70px !important; - } - } - - &.tabulator-group-level-4{ - td{ - padding-left:90px !important; - } - } - - &.tabulator-group-level-5{ - td{ - padding-left:110px !important; - } - } - - .tabulator-group-toggle{ - display: inline-block; - } - - //sorting arrow - .tabulator-arrow{ - display: inline-block; - width: 0; - height: 0; - margin-right:16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid $sortArrowActive; - vertical-align:middle; - } - - span{ - margin-left:10px; - color:#d00; - } - } - - .tabulator-data-tree-control{ - - display:inline-flex; - justify-content:center; - align-items:center; - vertical-align:middle; - - height:11px; - width:11px; - - margin-right:5px; - - border:1px solid $rowTextColor; - border-radius:2px; - background:rgba(0, 0, 0, .1); - - overflow:hidden; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - cursor:pointer; - background:rgba(0, 0, 0, .2); - } - } - - .tabulator-data-tree-control-collapse{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: transparent; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: $rowTextColor; - } - } - - .tabulator-data-tree-control-expand{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: $rowTextColor; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: $rowTextColor; - } - } - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/functions4.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/functions4.scss deleted file mode 100644 index 9c6a252..0000000 --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/functions4.scss +++ /dev/null @@ -1,118 +0,0 @@ -// Bootstrap functions -// -// Utility mixins and functions for evaluating source code across our variables, maps, and mixins. - -// Ascending -// Used to evaluate Sass maps like our grid breakpoints. -@mixin _assert-ascending($map, $map-name) { - $prev-key: null; - $prev-num: null; - @each $key, $num in $map { - @if $prev-num == null { - // Do nothing - } @else if not comparable($prev-num, $num) { - @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } @else if $prev-num >= $num { - @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } - $prev-key: $key; - $prev-num: $num; - } -} - -// Starts at zero -// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0. -@mixin _assert-starts-at-zero($map) { - $values: map-values($map); - $first-value: nth($values, 1); - @if $first-value != 0 { - @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; - } -} - -// Replace `$search` with `$replace` in `$string` -// Used on our SVG icon backgrounds for custom forms. -// -// @author Hugo Giraudel -// @param {String} $string - Initial string -// @param {String} $search - Substring to replace -// @param {String} $replace ('') - New value -// @return {String} - Updated string -@function str-replace($string, $search, $replace: "") { - $index: str-index($string, $search); - - @if $index { - @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); - } - - @return $string; -} - -// Color contrast -@function color-yiq($color) { - $r: red($color); - $g: green($color); - $b: blue($color); - - $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000; - - @if ($yiq >= $yiq-contrasted-threshold) { - @return $yiq-text-dark; - } @else { - @return $yiq-text-light; - } -} - -// Retrieve color Sass maps -@function color($key: "blue") { - @return map-get($colors, $key); -} - -@function theme-color($key: "primary") { - @return map-get($theme-colors, $key); -} - -@function gray($key: "100") { - @return map-get($grays, $key); -} - -// Request a theme color level -@function theme-color-level($color-name: "primary", $level: 0) { - $color: theme-color($color-name); - $color-base: if($level > 0, $black, $white); - $level: abs($level); - - @return mix($color-base, $color, $level * $theme-color-interval); -} - - -// Tables - -@mixin table-row-variant($state, $background) { - // Exact selectors below required to override `.table-striped` and prevent - // inheritance to nested tables. - .table-#{$state} { - &, - > th, - > td { - background-color: $background; - } - } - - // Hover states for `.table-hover` - // Note: this is not available for cells or rows within `thead` or `tfoot`. - .table-hover { - $hover-background: darken($background, 5%); - - .table-#{$state} { - @include hover { - background-color: $hover-background; - - > td, - > th { - background-color: $hover-background; - } - } - } - } -} diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/functions5.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/functions5.scss deleted file mode 100644 index 30539b3..0000000 --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/functions5.scss +++ /dev/null @@ -1,302 +0,0 @@ -// Bootstrap functions -// -// Utility mixins and functions for evaluating source code across our variables, maps, and mixins. - -// Ascending -// Used to evaluate Sass maps like our grid breakpoints. -@mixin _assert-ascending($map, $map-name) { - $prev-key: null; - $prev-num: null; - @each $key, $num in $map { - @if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" { - // Do nothing - } @else if not comparable($prev-num, $num) { - @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } @else if $prev-num >= $num { - @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } - $prev-key: $key; - $prev-num: $num; - } -} - -// Starts at zero -// Used to ensure the min-width of the lowest breakpoint starts at 0. -@mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") { - @if length($map) > 0 { - $values: map-values($map); - $first-value: nth($values, 1); - @if $first-value != 0 { - @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}."; - } - } -} - -// Colors -@function to-rgb($value) { - @return red($value), green($value), blue($value); -} - -// stylelint-disable scss/dollar-variable-pattern -@function rgba-css-var($identifier, $target) { - @if $identifier == "body" and $target == "bg" { - @return rgba(var(--#{$variable-prefix}#{$identifier}-bg-rgb), var(--#{$variable-prefix}#{$target}-opacity)); - } @if $identifier == "body" and $target == "text" { - @return rgba(var(--#{$variable-prefix}#{$identifier}-color-rgb), var(--#{$variable-prefix}#{$target}-opacity)); - } @else { - @return rgba(var(--#{$variable-prefix}#{$identifier}-rgb), var(--#{$variable-prefix}#{$target}-opacity)); - } -} - -@function map-loop($map, $func, $args...) { - $_map: (); - - @each $key, $value in $map { - // allow to pass the $key and $value of the map as an function argument - $_args: (); - @each $arg in $args { - $_args: append($_args, if($arg == "$key", $key, if($arg == "$value", $value, $arg))); - } - - $_map: map-merge($_map, ($key: call(get-function($func), $_args...))); - } - - @return $_map; -} -// stylelint-enable scss/dollar-variable-pattern - -@function varify($list) { - $result: null; - @each $entry in $list { - $result: append($result, var(--#{$variable-prefix}#{$entry}), space); - } - @return $result; -} - -// Internal Bootstrap function to turn maps into its negative variant. -// It prefixes the keys with `n` and makes the value negative. -@function negativify-map($map) { - $result: (); - @each $key, $value in $map { - @if $key != 0 { - $result: map-merge($result, ("n" + $key: (-$value))); - } - } - @return $result; -} - -// Get multiple keys from a sass map -@function map-get-multiple($map, $values) { - $result: (); - @each $key, $value in $map { - @if (index($values, $key) != null) { - $result: map-merge($result, ($key: $value)); - } - } - @return $result; -} - -// Merge multiple maps -@function map-merge-multiple($maps...) { - $merged-maps: (); - - @each $map in $maps { - $merged-maps: map-merge($merged-maps, $map); - } - @return $merged-maps; -} - -// Replace `$search` with `$replace` in `$string` -// Used on our SVG icon backgrounds for custom forms. -// -// @author Hugo Giraudel -// @param {String} $string - Initial string -// @param {String} $search - Substring to replace -// @param {String} $replace ('') - New value -// @return {String} - Updated string -@function str-replace($string, $search, $replace: "") { - $index: str-index($string, $search); - - @if $index { - @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); - } - - @return $string; -} - -// See https://codepen.io/kevinweber/pen/dXWoRw -// -// Requires the use of quotes around data URIs. - -@function escape-svg($string) { - @if str-index($string, "data:image/svg+xml") { - @each $char, $encoded in $escaped-characters { - // Do not escape the url brackets - @if str-index($string, "url(") == 1 { - $string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}"); - } @else { - $string: str-replace($string, $char, $encoded); - } - } - } - - @return $string; -} - -// Color contrast -// See https://github.com/twbs/bootstrap/pull/30168 - -// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255) -// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern -$_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .0044 .0048 .0052 .0056 .006 .0065 .007 .0075 .008 .0086 .0091 .0097 .0103 .011 .0116 .0123 .013 .0137 .0144 .0152 .016 .0168 .0176 .0185 .0194 .0203 .0212 .0222 .0232 .0242 .0252 .0262 .0273 .0284 .0296 .0307 .0319 .0331 .0343 .0356 .0369 .0382 .0395 .0409 .0423 .0437 .0452 .0467 .0482 .0497 .0513 .0529 .0545 .0561 .0578 .0595 .0612 .063 .0648 .0666 .0685 .0704 .0723 .0742 .0762 .0782 .0802 .0823 .0844 .0865 .0887 .0908 .0931 .0953 .0976 .0999 .1022 .1046 .107 .1095 .1119 .1144 .117 .1195 .1221 .1248 .1274 .1301 .1329 .1356 .1384 .1413 .1441 .147 .15 .1529 .1559 .159 .162 .1651 .1683 .1714 .1746 .1779 .1812 .1845 .1878 .1912 .1946 .1981 .2016 .2051 .2086 .2122 .2159 .2195 .2232 .227 .2307 .2346 .2384 .2423 .2462 .2502 .2542 .2582 .2623 .2664 .2705 .2747 .2789 .2831 .2874 .2918 .2961 .3005 .305 .3095 .314 .3185 .3231 .3278 .3325 .3372 .3419 .3467 .3515 .3564 .3613 .3663 .3712 .3763 .3813 .3864 .3916 .3968 .402 .4072 .4125 .4179 .4233 .4287 .4342 .4397 .4452 .4508 .4564 .4621 .4678 .4735 .4793 .4851 .491 .4969 .5029 .5089 .5149 .521 .5271 .5333 .5395 .5457 .552 .5583 .5647 .5711 .5776 .5841 .5906 .5972 .6038 .6105 .6172 .624 .6308 .6376 .6445 .6514 .6584 .6654 .6724 .6795 .6867 .6939 .7011 .7084 .7157 .7231 .7305 .7379 .7454 .7529 .7605 .7682 .7758 .7835 .7913 .7991 .807 .8148 .8228 .8308 .8388 .8469 .855 .8632 .8714 .8796 .8879 .8963 .9047 .9131 .9216 .9301 .9387 .9473 .956 .9647 .9734 .9823 .9911 1; - -@function color-contrast($background, $color-contrast-dark: $color-contrast-dark, $color-contrast-light: $color-contrast-light, $min-contrast-ratio: $min-contrast-ratio) { - $foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black; - $max-ratio: 0; - $max-ratio-color: null; - - @each $color in $foregrounds { - $contrast-ratio: contrast-ratio($background, $color); - @if $contrast-ratio > $min-contrast-ratio { - @return $color; - } @else if $contrast-ratio > $max-ratio { - $max-ratio: $contrast-ratio; - $max-ratio-color: $color; - } - } - - @warn "Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}..."; - - @return $max-ratio-color; -} - -@function contrast-ratio($background, $foreground: $color-contrast-light) { - $l1: luminance($background); - $l2: luminance(opaque($background, $foreground)); - - @return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05)); -} - -// Return WCAG2.0 relative luminance -// See https://www.w3.org/WAI/GL/wiki/Relative_luminance -// See https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests -@function luminance($color) { - $rgb: ( - "r": red($color), - "g": green($color), - "b": blue($color) - ); - - @each $name, $value in $rgb { - $value: if(divide($value, 255) < .03928, divide(divide($value, 255), 12.92), nth($_luminance-list, $value + 1)); - $rgb: map-merge($rgb, ($name: $value)); - } - - @return (map-get($rgb, "r") * .2126) + (map-get($rgb, "g") * .7152) + (map-get($rgb, "b") * .0722); -} - -// Return opaque color -// opaque(#fff, rgba(0, 0, 0, .5)) => #808080 -@function opaque($background, $foreground) { - @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100); -} - -// scss-docs-start color-functions -// Tint a color: mix a color with white -@function tint-color($color, $weight) { - @return mix(white, $color, $weight); -} - -// Shade a color: mix a color with black -@function shade-color($color, $weight) { - @return mix(black, $color, $weight); -} - -// Shade the color if the weight is positive, else tint it -@function shift-color($color, $weight) { - @return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight)); -} -// scss-docs-end color-functions - -// Return valid calc -@function add($value1, $value2, $return-calc: true) { - @if $value1 == null { - @return $value2; - } - - @if $value2 == null { - @return $value1; - } - - @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { - @return $value1 + $value2; - } - - @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2); -} - -@function subtract($value1, $value2, $return-calc: true) { - @if $value1 == null and $value2 == null { - @return null; - } - - @if $value1 == null { - @return -$value2; - } - - @if $value2 == null { - @return $value1; - } - - @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { - @return $value1 - $value2; - } - - @if type-of($value2) != number { - $value2: unquote("(") + $value2 + unquote(")"); - } - - @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2); -} - -@function divide($dividend, $divisor, $precision: 10) { - $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1); - $dividend: abs($dividend); - $divisor: abs($divisor); - @if $dividend == 0 { - @return 0; - } - @if $divisor == 0 { - @error "Cannot divide by 0"; - } - $remainder: $dividend; - $result: 0; - $factor: 10; - @while ($remainder > 0 and $precision >= 0) { - $quotient: 0; - @while ($remainder >= $divisor) { - $remainder: $remainder - $divisor; - $quotient: $quotient + 1; - } - $result: $result * 10 + $quotient; - $factor: $factor * .1; - $remainder: $remainder * 10; - $precision: $precision - 1; - @if ($precision < 0 and $remainder >= $divisor * 5) { - $result: $result + 1; - } - } - $result: $result * $factor * $sign; - $dividend-unit: unit($dividend); - $divisor-unit: unit($divisor); - $unit-map: ( - "px": 1px, - "rem": 1rem, - "em": 1em, - "%": 1% - ); - @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) { - $result: $result * map-get($unit-map, $dividend-unit); - } - @return $result; -} diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap3.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap3.scss deleted file mode 100644 index 8bcc219..0000000 --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap3.scss +++ /dev/null @@ -1,288 +0,0 @@ -@import "variables3.scss"; - -// Style conversion file, bootstrap to tabulator - -//Main Theme Variables -$backgroundColor: $table-bg !default; //background color of tabulator -$borderColor:$table-border-color !default; //border to tabulator -$textSize:$font-size-base !default; //table text size - -//header theming -$headerBackgroundColor:#fff !default; //border to tabulator -$headerSeparatorColor:$table-border-color !default; //header bottom separator color - -$cellPadding:$table-cell-padding !default; //padding round header -$cellPaddingCondensed:$table-condensed-cell-padding !default; //padding round header - -//column header arrows -$sortArrowActive: #666 !default; -$sortArrowInactive: #bbb !default; - -//row theming -$rowBackgroundColor:$backgroundColor !default; //table row background color -$rowAltBackgroundColor:$table-bg-accent !default; //table row background color -$rowBorderColor:$table-border-color !default; //table border color -$rowHoverBackground:$table-bg-hover !default; //row background color on hover - -$rowSelectedBackground: #9ABCEA !default; //row background color when selected -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered - - -$editBoxColor:#1D68CD !default; //border color for edit boxes -$errorColor:#dd0000 !default; //error indication - -//footer theming -$footerBorderColor:$table-border-color !default; //footer border color -$footerSeparatorColor:$table-border-color !default; //footer bottom separator color -$footerActiveColor:#d00 !default; //footer bottom active text color - -@import "../../tabulator.scss"; - -.tabulator{ - background-color: $backgroundColor; - margin-bottom: $line-height-computed; - border:none; - - .tabulator-header{ - border-bottom:2px solid $headerSeparatorColor; - background-color: $headerBackgroundColor; - color:inherit; - - .tabulator-col{ - background-color: $headerBackgroundColor; - border-right:none; - - .tabulator-col-content{ - padding:$cellPadding; - } - - &.tabulator-col-group{ - .tabulator-col-group-cols{ - border-top:1px solid $borderColor; - } - } - } - - .tabulator-calcs-holder{ - width:100%; - border-bottom:1px solid $headerSeparatorColor; - } - } - - .tabulator-tableholder{ - .tabulator-placeholder{ - span{ - color:#000; - } - } - - .tabulator-table{ - color:inherit; - } - } - - .tabulator-footer{ - border-top:2px solid $footerSeparatorColor; - background: inherit; - - .tabulator-calcs-holder{ - border-bottom:1px solid $rowBorderColor; - border-top:1px solid $rowBorderColor; - } - - .tabulator-paginator{ - color:inherit; - } - } - - //Bootstrap theming classes - - &.table-striped{ - .tabulator-row{ - &.tabulator-row-even{ - background-color: $rowAltBackgroundColor; - } - } - } - - &.table-bordered{ - border:1px solid $borderColor; - - .tabulator-header{ - .tabulator-col{ - border-right:1px solid $borderColor; - } - } - - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - .tabulator-cell{ - border-right:1px solid $borderColor; - } - } - } - } - } - - &.table-condensed{ - .tabulator-header{ - .tabulator-col{ - .tabulator-col-content{ - padding:$cellPaddingCondensed; - } - } - } - - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - min-height:$textSize + ($cellPaddingCondensed * 2); - - .tabulator-cell{ - padding:$cellPaddingCondensed; - } - } - } - } - } - - - //row colors - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - &.active{ - background:$table-bg-active!important; - } - &.success{ - background:$state-success-bg!important; - } - &.info{ - background: $state-info-bg!important; - } - &.warning{ - background:$state-warning-bg!important; - } - &.danger{ - background:$state-danger-bg!important; - } - } - } - } -} - -//row element -.tabulator-row{ - min-height:$textSize + ($cellPadding * 2); - border-bottom:1px solid $rowBorderColor; - - &.tabulator-row-even{ - background-color: transparent; - } - - @media (hover:hover) and (pointer:fine){ - &.tabulator-selectable:hover{ - background-color:$rowHoverBackground !important; - } - } - - &.tabulator-selected{ - background-color:$rowSelectedBackground !important; - } - - @media (hover:hover) and (pointer:fine){ - &.tabulator-selected:hover{ - background-color:$rowSelectedBackgroundHover !important; - cursor: pointer; - } - } - - .tabulator-cell{ - padding:$cellPadding; - border-right:none; - - &:last-of-type{ - border-right: none; - } - - .tabulator-data-tree-control{ - border:1px solid #333; - - .tabulator-data-tree-control-collapse{ - &:after { - background: #333; - } - } - - .tabulator-data-tree-control-expand{ - background: #333; - - &:after { - background: #333; - } - } - } - } - - &.tabulator-group{ - background:#fafafa; - - span{ - color:#666; - } - } -} - -.tabulator-edit-select-list{ - .tabulator-edit-select-list-item{ - color:inherit; - } - - .tabulator-edit-select-list-notice{ - color:inherit; - } - - .tabulator-edit-select-list-group{ - color:inherit; - } -} - -.tabulator.tabulator-rtl{ - .tabulator-header { - .tabulator-col{ - border:none; - } - } -} - -.tabulator-print-table{ - border-collapse: collapse; - - .tabulator-print-table-group{ - background:#fafafa; - - span{ - color:#666; - } - } - - .tabulator-data-tree-control{ - border:1px solid #333; - - .tabulator-data-tree-control-collapse{ - &:after { - background: #333; - } - } - - .tabulator-data-tree-control-expand{ - background: #333; - - &:after { - background: #333; - } - } - } -} - diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap4.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap4.scss deleted file mode 100644 index c914b9c..0000000 --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap4.scss +++ /dev/null @@ -1,553 +0,0 @@ -@import "functions4.scss"; -@import "variables4.scss"; - -// Style conversion file, bootstrap to tabulator - -//Main Theme Variables -$backgroundColor: $table-bg !default; //background color of tabulator -$borderColor:$table-border-color !default; //border to tabulator -$textSize:16px !default; //table text size - -//header theming -$headerBackgroundColor:#fff !default; //border to tabulator -$headerSeparatorColor:$table-border-color !default; //header bottom separator color - -$cellPadding:12px !default; //padding round header - -//column header arrows -$sortArrowActive: #666 !default; -$sortArrowInactive: #bbb !default; - -//row theming -$rowBackgroundColor:$backgroundColor !default; //table row background color -$rowAltBackgroundColor: $table-accent-bg !default; //table row background color -$rowBorderColor:$table-border-color !default; //table border color -$rowHoverBackground:$table-hover-bg !default; //row background color on hover - -$rowSelectedBackground: #9ABCEA !default; //row background color when selected -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered - - -$editBoxColor:#1D68CD !default; //border color for edit boxes -$errorColor:#dd0000 !default; //error indication - -//footer theming -$footerBorderColor:$pagination-border-color !default; //footer border color -$footerSeparatorColor:$table-border-color !default; //footer bottom separator color -$footerActiveColor:$pagination-active-color !default; //footer bottom active text color - -$table-cell-padding-sm: 5px; - -@import "../../tabulator.scss"; - -.tabulator{ - background-color: $backgroundColor; - border:none; - - .tabulator-header{ - border-top:1px solid $headerSeparatorColor; - border-bottom:2px solid $headerSeparatorColor; - color:inherit; - - .tabulator-col{ - border-right:none; - background-color: $headerBackgroundColor; - - .tabulator-col-content{ - padding:$cellPadding; - - .tabulator-col-sorter{ - right:0; - } - } - - &.tabulator-col-group{ - .tabulator-col-group-cols{ - border-top:1px solid $borderColor; - } - } - - .tabulator-header-filter{ - input{ - padding: .375rem .75rem; - - background-color: #fff; - background-clip: padding-box; - - border: 1px solid #ced4da; - border-radius: .25rem; - - transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; - - font-size: 1rem; - line-height: 1.5; - color: #495057; - - &:focus { - color: #495057; - background-color: #fff; - border:1px solid $editBoxColor; - outline: 0; - // box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25); - } - } - } - } - - .tabulator-calcs-holder{ - width:100%; - border-bottom:1px solid $headerSeparatorColor; - } - } - - .tabulator-tableholder{ - .tabulator-placeholder{ - span{ - color:#000; - } - } - - .tabulator-table{ - color:inherit; - } - } - - .tabulator-footer{ - color:inherit; - - .tabulator-paginator{ - color:inherit; - } - - .tabulator-pages{ - margin:0; - } - - .tabulator-page{ - margin:0; - margin-top:5px; - padding:8px 12px; - - &[data-page="first"]{ - border-top-left-radius:4px; - border-bottom-left-radius:4px; - } - - &[data-page="last"]{ - border:1px solid $footerBorderColor; - border-top-right-radius:4px; - border-bottom-right-radius:4px; - } - - &.active{ - border-color:$pagination-active-border-color; - background-color:$pagination-active-bg; - color:$footerActiveColor; - } - - &:disabled{ - border-color:$pagination-disabled-border-color; - background:$pagination-disabled-bg; - color:$pagination-disabled-color; - } - - &:not(.disabled){ - @media (hover:hover) and (pointer:fine){ - &:hover{ - border-color:$pagination-hover-border-color; - background:$pagination-hover-bg; - color:$pagination-hover-color; - } - } - } - } - } - - //Bootstrap theming classes - - &.thead-dark{ - .tabulator-header{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - - .tabulator-col{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - } - } - } - - &.table-dark{ - background-color: $table-dark-bg; - - &:not(.thead-light) .tabulator-header{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - - .tabulator-col{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - } - } - - .tabulator-tableholder{ - color: $table-dark-color; - } - - - .tabulator-row{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - background-color: $table-dark-border-color; - - .tabulator-cell{ - background-color: $table-dark-hover-bg; - } - } - } - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - } - - .tabulator-footer{ - border-color: $table-dark-border-color !important; - - .tabulator-calcs-holder{ - border-color: $table-dark-border-color !important; - background:$table-dark-bg !important; - - .tabulator-row{ - border-color: $table-dark-border-color !important; - background-color: $table-dark-bg !important; - color: $table-dark-color !important; - } - } - } - } - - &.table-striped{ - &:not(.table-dark){ - .tabulator-row{ - &.tabulator-row-even{ - background-color: $rowAltBackgroundColor; - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - - @media (hover:hover) and (pointer:fine){ - &.tabulator-selectable:hover{ - background-color:$rowHoverBackground; - cursor: pointer; - } - - &.tabulator-selected:hover{ - background-color:$rowSelectedBackgroundHover; - cursor: pointer; - } - } - } - } - } - - &.table-dark{ - .tabulator-row{ - &:nth-child(even){ - .tabulator-cell{ - background-color: $table-dark-accent-bg; - } - } - } - } - } - - &.table-bordered{ - border:1px solid $borderColor; - - .tabulator-header{ - .tabulator-col{ - border-right:1px solid $borderColor; - } - } - - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - .tabulator-cell{ - border-right:1px solid $borderColor; - } - } - } - } - } - - - &.table-borderless{ - .tabulator-header{ - border:none; - } - - .tabulator-row{ - border:none; - } - } - - &.table-sm{ - .tabulator-header{ - .tabulator-col{ - .tabulator-col-content{ - padding:$table-cell-padding-sm !important; - } - } - } - - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - min-height:$textSize + ($table-cell-padding-sm * 2); - - .tabulator-cell{ - padding:$table-cell-padding-sm !important; - } - } - } - } - } - - - //row colors - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - &.table-primary{ - background:theme-color-level("primary", -9) !important; - } - &.table-secondary{ - background:theme-color-level("secondary", -9) !important; - } - &.table-success{ - background:theme-color-level("success", -9) !important; - } - &.table-info{ - background:theme-color-level("info", -9) !important; - } - &.table-warning{ - background:theme-color-level("warning", -9) !important; - } - &.table-danger{ - background:theme-color-level("danger", -9) !important; - } - &.table-light{ - background:theme-color-level("light", -9) !important; - } - &.table-dark{ - background:theme-color-level("dark", -9) !important; - } - &.table-active{ - background:$table-active-bg !important; - } - - &.bg-primary{ - background:theme-color-level("primary", 0) !important; - } - &.bg-secondary{ - background:theme-color-level("secondary", 0) !important; - } - &.bg-success{ - background:theme-color-level("success", 0) !important; - } - &.bg-info{ - background:theme-color-level("info", 0) !important; - } - &.bg-warning{ - background:theme-color-level("warning", 0) !important; - } - &.bg-danger{ - background:theme-color-level("danger", 0) !important; - } - &.bg-light{ - background:theme-color-level("light", 0) !important; - } - &.bg-dark{ - background:theme-color-level("dark", 0) !important; - } - &.bg-active{ - background:$table-active-bg !important; - } - - .tabulator-cell{ - &.table-primary{ - background:theme-color-level("primary", -9) !important; - } - &.table-secondary{ - background:theme-color-level("secondary", -9) !important; - } - &.table-success{ - background:theme-color-level("success", -9) !important; - } - &.table-info{ - background:theme-color-level("info", -9) !important; - } - &.table-warning{ - background:theme-color-level("warning", -9) !important; - } - &.table-danger{ - background:theme-color-level("danger", -9) !important; - } - &.table-light{ - background:theme-color-level("light", -9) !important; - } - &.table-dark{ - background:theme-color-level("dark", -9) !important; - } - &.table-active{ - background:$table-active-bg !important; - } - - &.bg-primary{ - background:theme-color-level("primary", 0) !important; - } - &.bg-secondary{ - background:theme-color-level("secondary", 0) !important; - } - &.bg-success{ - background:theme-color-level("success", 0) !important; - } - &.bg-info{ - background:theme-color-level("info", 0) !important; - } - &.bg-warning{ - background:theme-color-level("warning", 0) !important; - } - &.bg-danger{ - background:theme-color-level("danger", 0) !important; - } - &.bg-light{ - background:theme-color-level("light", 0) !important; - } - &.bg-dark{ - background:theme-color-level("dark", 0) !important; - } - &.bg-active{ - background:$table-active-bg !important; - } - } - } - } - } -} - -.tabulator-row{ - min-height:$textSize + ($cellPadding * 2); - border-bottom:1px solid $rowBorderColor; - - .tabulator-cell{ - padding:$cellPadding; - border-right:none; - - &:last-of-type{ - border-right: none; - } - - .tabulator-data-tree-control{ - border:1px solid #ccc; - - .tabulator-data-tree-control-collapse{ - &:after { - background: #ccc; - } - } - - .tabulator-data-tree-control-expand{ - background: #ccc; - - &:after { - background: #ccc; - } - } - } - } - - &.tabulator-group{ - background:#fafafa; - - span{ - color:#666; - } - } -} - -.tabulator-edit-select-list{ - background:$headerBackgroundColor; - - .tabulator-edit-select-list-item{ - &.active{ - color:$headerBackgroundColor; - - &.focused{ - outline:1px solid rgba($headerBackgroundColor, .5); - } - } - - @media (hover:hover) and (pointer:fine){ - &:hover{ - color:$headerBackgroundColor; - } - } - } - - .tabulator-edit-select-list-notice{ - color:inherit; - } - - .tabulator-edit-select-list-group{ - color:inherit; - } -} - -.tabulator.tabulator-rtl{ - .tabulator-header { - .tabulator-col{ - text-align: initial; - border-left:initial; - } - } -} - -.tabulator-print-table{ - .tabulator-print-table-group{ - background:#fafafa; - - span{ - color:#666; - } - } - - .tabulator-data-tree-control{ - color:inherit; - - .tabulator-data-tree-control-collapse{ - &:after { - background: #ccc; - } - } - - .tabulator-data-tree-control-expand{ - background: #ccc; - - &:after { - background: #ccc; - } - } - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap5.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap5.scss deleted file mode 100644 index 2c9b6c5..0000000 --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/tabulator_bootstrap5.scss +++ /dev/null @@ -1,585 +0,0 @@ -@import "functions5.scss"; -@import "variables5.scss"; - -// Style conversion file, bootstrap to tabulator - -//Main Theme Variables -$backgroundColor: $table-bg !default; //background color of tabulator -$borderColor:$table-border-color !default; //border to tabulator -$textSize:16px !default; //table text size - -//header theming -$headerBackgroundColor:$table-bg !default; //border to tabulator -$headerForegroundColor:inherit !default; //border to tabulator -$headerSeparatorColor:$table-border-color !default; //header bottom separator color - -$cellPadding:12px !default; //padding round header - -//column header arrows -$sortArrowActive: #666 !default; -$sortArrowInactive: #bbb !default; - -//row theming -$rowBackgroundColor:$backgroundColor !default; //table row background color -$rowAltBackgroundColor: $table-striped-bg !default; //table row background color -$rowBorderColor:$table-border-color !default; //table border color -$rowHoverBackground:$table-hover-bg !default; //row background color on hover - -$rowSelectedBackground: #9ABCEA !default; //row background color when selected -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered - - -$editBoxColor:#1D68CD !default; //border color for edit boxes -$errorColor:#dd0000 !default; //error indication - -//footer theming -$footerBorderColor:$pagination-border-color !default; //footer border color -$footerSeparatorColor:$table-border-color !default; //footer bottom separator color -$footerActiveColor:$pagination-active-color !default; //footer bottom active text color - -$table-cell-padding-sm: 5px; - -@import "../../tabulator.scss"; - -.tabulator{ - background-color: $backgroundColor; - border:none; - - .tabulator-header{ - border-top:1px solid $headerSeparatorColor; - border-bottom:2px solid $headerSeparatorColor; - color:$headerForegroundColor; - - .tabulator-col{ - border-right:none; - background-color: $headerBackgroundColor; - - .tabulator-col-content{ - padding:$cellPadding; - - .tabulator-col-sorter{ - right:0; - } - } - - &.tabulator-col-group{ - .tabulator-col-group-cols{ - border-top:1px solid $borderColor; - } - } - - .tabulator-header-filter{ - input{ - padding: .375rem .75rem; - - background-color: #fff; - background-clip: padding-box; - - border: 1px solid #ced4da; - border-radius: .25rem; - - transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; - - font-size: 1rem; - line-height: 1.5; - color: #495057; - - &:focus { - color: #495057; - background-color: #fff; - border:1px solid $editBoxColor; - outline: 0; - // box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25); - } - } - } - } - - .tabulator-calcs-holder{ - width:100%; - border-bottom:1px solid $headerSeparatorColor; - } - } - - .tabulator-tableholder{ - .tabulator-placeholder{ - span{ - color:#000; - } - } - - .tabulator-table{ - color:inherit; - } - } - - .tabulator-footer{ - color:inherit; - - .tabulator-paginator{ - color:inherit; - } - - .tabulator-pages{ - margin:0; - } - - .tabulator-page{ - margin:0; - margin-top:5px; - padding:8px 12px; - - &[data-page="first"]{ - border-top-left-radius:4px; - border-bottom-left-radius:4px; - } - - &[data-page="last"]{ - border:1px solid $footerBorderColor; - border-top-right-radius:4px; - border-bottom-right-radius:4px; - } - - &.active{ - border-color:$pagination-active-border-color; - background-color:$pagination-active-bg; - color:$footerActiveColor; - } - - &:disabled{ - border-color:$pagination-disabled-border-color; - background:$pagination-disabled-bg; - color:$pagination-disabled-color; - } - - &:not(.disabled){ - @media (hover:hover) and (pointer:fine){ - &:hover{ - border-color:$pagination-hover-border-color; - background:$pagination-hover-bg; - color:$pagination-hover-color; - } - } - } - } - } - - //Bootstrap theming classes - - &.thead-dark{ - .tabulator-header{ - border-color: $borderColor; - background-color: $backgroundColor; - color: $table-color; - - .tabulator-col{ - border-color: $borderColor; - background-color: $backgroundColor; - color: $table-color; - } - } - } - - &.table{ - background-color: $backgroundColor; - - &:not(.thead-light) .tabulator-header{ - border-color: $borderColor; - background-color: $backgroundColor; - color: $table-color; - - .tabulator-col{ - border-color: $borderColor; - background-color: $backgroundColor; - color: $table-color; - } - } - - .tabulator-tableholder{ - color: $table-color; - } - - - .tabulator-row{ - border-color: $borderColor; - background-color: $backgroundColor; - color: $table-color; - - @media (hover:hover) and (pointer:fine){ - &:hover{ - background-color: $borderColor; - - .tabulator-cell{ - background-color: $table-hover-bg; - } - } - } - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - } - - .tabulator-footer{ - border-color: $borderColor !important; - - .tabulator-calcs-holder{ - border-color: $borderColor !important; - background:$backgroundColor !important; - - .tabulator-row{ - border-color: $borderColor !important; - background-color: $backgroundColor !important; - color: $table-color !important; - } - } - } - } - - &.table-striped{ - &:not(.table){ - .tabulator-row{ - &.tabulator-row-even{ - background-color: $rowAltBackgroundColor; - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - - @media (hover:hover) and (pointer:fine){ - &.tabulator-selectable:hover{ - background-color:$rowHoverBackground; - cursor: pointer; - } - - &.tabulator-selected:hover{ - background-color:$rowSelectedBackgroundHover; - cursor: pointer; - } - } - } - } - } - - &.table{ - .tabulator-row{ - &:nth-child(even){ - .tabulator-cell{ - background-color: $table-accent-bg; - } - } - } - } - } - - &.table-bordered{ - border:1px solid $borderColor; - - .tabulator-header{ - .tabulator-col{ - border-right:1px solid $borderColor; - } - } - - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - .tabulator-cell{ - border-right:1px solid $borderColor; - } - } - } - } - } - - - &.table-borderless{ - .tabulator-header{ - border:none; - } - - .tabulator-row{ - border:none; - } - } - - &.table-sm{ - .tabulator-header{ - .tabulator-col{ - .tabulator-col-content{ - padding:$table-cell-padding-sm !important; - } - } - } - - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - min-height:$textSize + ($table-cell-padding-sm * 2); - - .tabulator-cell{ - padding:$table-cell-padding-sm !important; - } - } - } - } - - .tabulator-row{ - padding-top: 0; - padding-bottom: 0; - } - - .tabulator-col-resize-handle{ - padding:0; - } - } - - - //row colors - .tabulator-tableholder{ - .tabulator-table{ - .tabulator-row{ - &.table-primary{ - background:map-get($table-variants, "primary") !important; - } - &.table-secondary{ - background:map-get($table-variants, "secondary") !important; - } - &.table-success{ - background:map-get($table-variants, "success") !important; - } - &.table-info{ - background:map-get($table-variants, "info") !important; - } - &.table-warning{ - background:map-get($table-variants, "warning") !important; - } - &.table-danger{ - background:map-get($table-variants, "danger") !important; - } - &.table-light{ - background:map-get($table-variants, "light") !important; - } - &.table{ - background:map-get($table-variants, "dark") !important; - } - &.table-active{ - background:$table-active-bg !important; - } - - &.bg-primary{ - background:map-get($table-variants, "primary") !important; - } - &.bg-secondary{ - background:map-get($table-variants, "secondary") !important; - } - &.bg-success{ - background:map-get($table-variants, "success") !important; - } - &.bg-info{ - background:map-get($table-variants, "info") !important; - } - &.bg-warning{ - background:map-get($table-variants, "warning") !important; - } - &.bg-danger{ - background:map-get($table-variants, "danger") !important; - } - &.bg-light{ - background:map-get($table-variants, "light") !important; - } - &.bg-dark{ - background:map-get($table-variants, "dark") !important; - } - &.bg-active{ - background:$table-active-bg !important; - } - - .tabulator-cell{ - &.table-primary{ - background:map-get($table-variants, "primary") !important; - } - &.table-secondary{ - background:map-get($table-variants, "secondary") !important; - } - &.table-success{ - background:map-get($table-variants, "success") !important; - } - &.table-info{ - background:map-get($table-variants, "info") !important; - } - &.table-warning{ - background:map-get($table-variants, "warning") !important; - } - &.table-danger{ - background:map-get($table-variants, "danger") !important; - } - &.table-light{ - background:map-get($table-variants, "light") !important; - } - &.table{ - background:map-get($table-variants, "dark") !important; - } - &.table-active{ - background:$table-active-bg !important; - } - - &.bg-primary{ - background:map-get($table-variants, "primary") !important; - } - &.bg-secondary{ - background:map-get($table-variants, "secondary") !important; - } - &.bg-success{ - background:map-get($table-variants, "success") !important; - } - &.bg-info{ - background:map-get($table-variants, "info") !important; - } - &.bg-warning{ - background:map-get($table-variants, "warning") !important; - } - &.bg-danger{ - background:map-get($table-variants, "danger") !important; - } - &.bg-light{ - background:map-get($table-variants, "light") !important; - } - &.bg-dark{ - background:map-get($table-variants, "dark") !important; - } - &.bg-active{ - background:$table-active-bg !important; - } - } - } - } - } -} - -.tabulator-row{ - min-height:$textSize + ($cellPadding * 2); - border-bottom:1px solid $rowBorderColor; - - .tabulator-cell{ - padding:$cellPadding; - border-right:none; - - &:last-of-type{ - border-right: none; - } - - .tabulator-data-tree-control{ - border:1px solid #ccc; - - .tabulator-data-tree-control-collapse{ - &:after { - background: #ccc; - } - } - - .tabulator-data-tree-control-expand{ - background: #ccc; - - &:after { - background: #ccc; - } - } - } - } - - &.tabulator-group{ - background:#fafafa; - - span{ - color:#666; - } - } -} - -.tabulator-edit-select-list{ - background:$headerBackgroundColor; - - .tabulator-edit-select-list-item{ - &.active{ - color:$headerBackgroundColor; - - &.focused{ - outline:1px solid rgba($headerBackgroundColor, .5); - } - } - - @media (hover:hover) and (pointer:fine){ - &:hover{ - color:$headerBackgroundColor; - } - } - } - - .tabulator-edit-select-list-notice{ - color:inherit; - } - - .tabulator-edit-select-list-group{ - color:inherit; - } -} - -.tabulator.tabulator-rtl{ - .tabulator-header { - .tabulator-col{ - text-align: initial; - border-left:initial; - } - } -} - -.tabulator-print-table{ - .tabulator-print-table-group{ - background:#fafafa; - - span{ - color:#666; - } - } - - .tabulator-data-tree-control{ - color:inherit; - - .tabulator-data-tree-control-collapse{ - &:after { - background: #ccc; - } - } - - .tabulator-data-tree-control-expand{ - background: #ccc; - - &:after { - background: #ccc; - } - } - } -} - -.tabulator-popup-container{ - background:#fff; -} - -.tabulator-edit-list{ - .tabulator-edit-list-item{ - &.active{ - color:#fff; - - &.focused{ - outline:1px solid rgba(#fff, .5); - } - } - - @media (hover:hover) and (pointer:fine){ - &:hover{ - color:#fff; - } - } - } -} \ No newline at end of file diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables3.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables3.scss deleted file mode 100644 index 572c983..0000000 --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables3.scss +++ /dev/null @@ -1,870 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -$gray-base: #000 !default; -$gray-darker: lighten($gray-base, 13.5%) !default; // #222 -$gray-dark: lighten($gray-base, 20%) !default; // #333 -$gray: lighten($gray-base, 33.5%) !default; // #555 -$gray-light: lighten($gray-base, 46.7%) !default; // #777 -$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee - -$brand-primary: darken(#428bca, 6.5%) !default; // #337ab7 -$brand-success: #5cb85c !default; -$brand-info: #5bc0de !default; -$brand-warning: #f0ad4e !default; -$brand-danger: #d9534f !default; - - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -$body-bg: #fff !default; -//** Global text color on ``. -$text-color: $gray-dark !default; - -//** Global textual link color. -$link-color: $brand-primary !default; -//** Link hover color set via `darken()` function. -$link-hover-color: darken($link-color, 15%) !default; -//** Link hover decoration. -$link-hover-decoration: underline !default; - - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif !default; -$font-family-serif: Georgia, "Times New Roman", Times, serif !default; -//** Default monospace fonts for ``, ``, and `
    `.
    -$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
    -$font-family-base:        $font-family-sans-serif !default;
    -
    -$font-size-base:          14px !default;
    -$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
    -$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
    -
    -$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px
    -$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px
    -$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px
    -$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px
    -$font-size-h5:            $font-size-base !default;
    -$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px
    -
    -//** Unit-less `line-height` for use in components like buttons.
    -$line-height-base:        1.428571429 !default; // 20/14
    -//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
    -$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
    -
    -//** By default, this inherits from the ``.
    -$headings-font-family:    inherit !default;
    -$headings-font-weight:    500 !default;
    -$headings-line-height:    1.1 !default;
    -$headings-color:          inherit !default;
    -
    -
    -//== Iconography
    -//
    -//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
    -
    -//** Load fonts from this directory.
    -$icon-font-path:          "../fonts/" !default;
    -//** File name for all font files.
    -$icon-font-name:          "glyphicons-halflings-regular" !default;
    -//** Element ID within SVG icon file.
    -$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
    -
    -
    -//== Components
    -//
    -//## Define common padding and border radius sizes and more. Values based on 14px text and 1@mixin 428 line-height (~20px to start).
    -
    -$padding-base-vertical:     6px !default;
    -$padding-base-horizontal:   12px !default;
    -
    -$padding-large-vertical:    10px !default;
    -$padding-large-horizontal:  16px !default;
    -
    -$padding-small-vertical:    5px !default;
    -$padding-small-horizontal:  10px !default;
    -
    -$padding-xs-vertical:       1px !default;
    -$padding-xs-horizontal:     5px !default;
    -
    -$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
    -$line-height-small:         1.5 !default;
    -
    -$border-radius-base:        4px !default;
    -$border-radius-large:       6px !default;
    -$border-radius-small:       3px !default;
    -
    -//** Global color for active items (e.g., navs or dropdowns).
    -$component-active-color:    #fff !default;
    -//** Global background color for active items (e.g., navs or dropdowns).
    -$component-active-bg:       $brand-primary !default;
    -
    -//** Width of the `border` for generating carets that indicator dropdowns.
    -$caret-width-base:          4px !default;
    -//** Carets increase slightly in size for larger components.
    -$caret-width-large:         5px !default;
    -
    -
    -//== Tables
    -//
    -//## Customizes the `.table` component with basic values, each used across all table variations.
    -
    -//** Padding for ``s and ``s.
    -$table-cell-padding:            8px !default;
    -//** Padding for cells in `.table-condensed`.
    -$table-condensed-cell-padding:  5px !default;
    -
    -//** Default background color used for all tables.
    -// $table-bg:                      transparent !default;
    -$table-bg:                      #fff !default;
    -//** Background color used for `.table-striped`.
    -$table-bg-accent:               #f9f9f9 !default;
    -//** Background color used for `.table-hover`.
    -$table-bg-hover:                #f5f5f5 !default;
    -$table-bg-active:               $table-bg-hover !default;
    -
    -//** Border color for table and cell borders.
    -$table-border-color:            #ddd !default;
    -
    -
    -//== Buttons
    -//
    -//## For each of Bootstrap's buttons, define text, background and border color.
    -
    -$btn-font-weight:                normal !default;
    -
    -$btn-default-color:              #333 !default;
    -$btn-default-bg:                 #fff !default;
    -$btn-default-border:             #ccc !default;
    -
    -$btn-primary-color:              #fff !default;
    -$btn-primary-bg:                 $brand-primary !default;
    -$btn-primary-border:             darken($btn-primary-bg, 5%) !default;
    -
    -$btn-success-color:              #fff !default;
    -$btn-success-bg:                 $brand-success !default;
    -$btn-success-border:             darken($btn-success-bg, 5%) !default;
    -
    -$btn-info-color:                 #fff !default;
    -$btn-info-bg:                    $brand-info !default;
    -$btn-info-border:                darken($btn-info-bg, 5%) !default;
    -
    -$btn-warning-color:              #fff !default;
    -$btn-warning-bg:                 $brand-warning !default;
    -$btn-warning-border:             darken($btn-warning-bg, 5%) !default;
    -
    -$btn-danger-color:               #fff !default;
    -$btn-danger-bg:                  $brand-danger !default;
    -$btn-danger-border:              darken($btn-danger-bg, 5%) !default;
    -
    -$btn-link-disabled-color:        $gray-light !default;
    -
    -// Allows for customizing button radius independently from global border radius
    -$btn-border-radius-base:         $border-radius-base !default;
    -$btn-border-radius-large:        $border-radius-large !default;
    -$btn-border-radius-small:        $border-radius-small !default;
    -
    -
    -//== Forms
    -//
    -//##
    -
    -//** `` background color
    -$input-bg:                       #fff !default;
    -//** `` background color
    -$input-bg-disabled:              $gray-lighter !default;
    -
    -//** Text color for ``s
    -$input-color:                    $gray !default;
    -//** `` border color
    -$input-border:                   #ccc !default;
    -
    -// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
    -//** Default `.form-control` border radius
    -// This has no effect on ``s in CSS.
    -$input-border-radius:            $border-radius-base !default;
    -//** Large `.form-control` border radius
    -$input-border-radius-large:      $border-radius-large !default;
    -//** Small `.form-control` border radius
    -$input-border-radius-small:      $border-radius-small !default;
    -
    -//** Border color for inputs on focus
    -$input-border-focus:             #66afe9 !default;
    -
    -//** Placeholder text color
    -$input-color-placeholder:        #999 !default;
    -
    -//** Default `.form-control` height
    -$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
    -//** Large `.form-control` height
    -$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
    -//** Small `.form-control` height
    -$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
    -
    -//** `.form-group` margin
    -$form-group-margin-bottom:       15px !default;
    -
    -$legend-color:                   $gray-dark !default;
    -$legend-border-color:            #e5e5e5 !default;
    -
    -//** Background color for textual input addons
    -$input-group-addon-bg:           $gray-lighter !default;
    -//** Border color for textual input addons
    -$input-group-addon-border-color: $input-border !default;
    -
    -//** Disabled cursor for form controls and buttons.
    -$cursor-disabled:                not-allowed !default;
    -
    -
    -//== Dropdowns
    -//
    -//## Dropdown menu container and contents.
    -
    -//** Background for the dropdown menu.
    -$dropdown-bg:                    #fff !default;
    -//** Dropdown menu `border-color`.
    -$dropdown-border:                rgba(0,0,0,.15) !default;
    -//** Dropdown menu `border-color` **for IE8**.
    -$dropdown-fallback-border:       #ccc !default;
    -//** Divider color for between dropdown items.
    -$dropdown-divider-bg:            #e5e5e5 !default;
    -
    -//** Dropdown link text color.
    -$dropdown-link-color:            $gray-dark !default;
    -//** Hover color for dropdown links.
    -$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
    -//** Hover background for dropdown links.
    -$dropdown-link-hover-bg:         #f5f5f5 !default;
    -
    -//** Active dropdown menu item text color.
    -$dropdown-link-active-color:     $component-active-color !default;
    -//** Active dropdown menu item background color.
    -$dropdown-link-active-bg:        $component-active-bg !default;
    -
    -//** Disabled dropdown menu item background color.
    -$dropdown-link-disabled-color:   $gray-light !default;
    -
    -//** Text color for headers within dropdown menus.
    -$dropdown-header-color:          $gray-light !default;
    -
    -//** Deprecated `$dropdown-caret-color` as of v3.1.0
    -$dropdown-caret-color:           #000 !default;
    -
    -
    -//-- Z-index master list
    -//
    -// Warning: Avoid customizing these values. They're used for a bird's eye view
    -// of components dependent on the z-axis and are designed to all work together.
    -//
    -// Note: These variables are not generated into the Customizer.
    -
    -$zindex-navbar:            1000 !default;
    -$zindex-dropdown:          1000 !default;
    -$zindex-popover:           1060 !default;
    -$zindex-tooltip:           1070 !default;
    -$zindex-navbar-fixed:      1030 !default;
    -$zindex-modal-background:  1040 !default;
    -$zindex-modal:             1050 !default;
    -
    -
    -//== Media queries breakpoints
    -//
    -//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
    -
    -// Extra small screen / phone
    -//** Deprecated `$screen-xs` as of v3.0.1
    -$screen-xs:                  480px !default;
    -//** Deprecated `$screen-xs-min` as of v3.2.0
    -$screen-xs-min:              $screen-xs !default;
    -//** Deprecated `$screen-phone` as of v3.0.1
    -$screen-phone:               $screen-xs-min !default;
    -
    -// Small screen / tablet
    -//** Deprecated `$screen-sm` as of v3.0.1
    -$screen-sm:                  768px !default;
    -$screen-sm-min:              $screen-sm !default;
    -//** Deprecated `$screen-tablet` as of v3.0.1
    -$screen-tablet:              $screen-sm-min !default;
    -
    -// Medium screen / desktop
    -//** Deprecated `$screen-md` as of v3.0.1
    -$screen-md:                  992px !default;
    -$screen-md-min:              $screen-md !default;
    -//** Deprecated `$screen-desktop` as of v3.0.1
    -$screen-desktop:             $screen-md-min !default;
    -
    -// Large screen / wide desktop
    -//** Deprecated `$screen-lg` as of v3.0.1
    -$screen-lg:                  1200px !default;
    -$screen-lg-min:              $screen-lg !default;
    -//** Deprecated `$screen-lg-desktop` as of v3.0.1
    -$screen-lg-desktop:          $screen-lg-min !default;
    -
    -// So media queries don't overlap when required, provide a maximum
    -$screen-xs-max:              ($screen-sm-min - 1) !default;
    -$screen-sm-max:              ($screen-md-min - 1) !default;
    -$screen-md-max:              ($screen-lg-min - 1) !default;
    -
    -
    -//== Grid system
    -//
    -//## Define your custom responsive grid.
    -
    -//** Number of columns in the grid.
    -$grid-columns:              12 !default;
    -//** Padding between columns. Gets divided in half for the left and right.
    -$grid-gutter-width:         30px !default;
    -// Navbar collapse
    -//** Point at which the navbar becomes uncollapsed.
    -$grid-float-breakpoint:     $screen-sm-min !default;
    -//** Point at which the navbar begins collapsing.
    -$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
    -
    -
    -//== Container sizes
    -//
    -//## Define the maximum width of `.container` for different screen sizes.
    -
    -// Small screen / tablet
    -$container-tablet:             (720px + $grid-gutter-width) !default;
    -//** For `$screen-sm-min` and up.
    -$container-sm:                 $container-tablet !default;
    -
    -// Medium screen / desktop
    -$container-desktop:            (940px + $grid-gutter-width) !default;
    -//** For `$screen-md-min` and up.
    -$container-md:                 $container-desktop !default;
    -
    -// Large screen / wide desktop
    -$container-large-desktop:      (1140px + $grid-gutter-width) !default;
    -//** For `$screen-lg-min` and up.
    -$container-lg:                 $container-large-desktop !default;
    -
    -
    -//== Navbar
    -//
    -//##
    -
    -// Basics of a navbar
    -$navbar-height:                    50px !default;
    -$navbar-margin-bottom:             $line-height-computed !default;
    -$navbar-border-radius:             $border-radius-base !default;
    -$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
    -$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
    -$navbar-collapse-max-height:       340px !default;
    -
    -$navbar-default-color:             #777 !default;
    -$navbar-default-bg:                #f8f8f8 !default;
    -$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
    -
    -// Navbar links
    -$navbar-default-link-color:                #777 !default;
    -$navbar-default-link-hover-color:          #333 !default;
    -$navbar-default-link-hover-bg:             transparent !default;
    -$navbar-default-link-active-color:         #555 !default;
    -$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
    -$navbar-default-link-disabled-color:       #ccc !default;
    -$navbar-default-link-disabled-bg:          transparent !default;
    -
    -// Navbar brand label
    -$navbar-default-brand-color:               $navbar-default-link-color !default;
    -$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
    -$navbar-default-brand-hover-bg:            transparent !default;
    -
    -// Navbar toggle
    -$navbar-default-toggle-hover-bg:           #ddd !default;
    -$navbar-default-toggle-icon-bar-bg:        #888 !default;
    -$navbar-default-toggle-border-color:       #ddd !default;
    -
    -
    -//=== Inverted navbar
    -// Reset inverted navbar basics
    -$navbar-inverse-color:                      lighten($gray-light, 15%) !default;
    -$navbar-inverse-bg:                         #222 !default;
    -$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
    -
    -// Inverted navbar links
    -$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
    -$navbar-inverse-link-hover-color:           #fff !default;
    -$navbar-inverse-link-hover-bg:              transparent !default;
    -$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
    -$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
    -$navbar-inverse-link-disabled-color:        #444 !default;
    -$navbar-inverse-link-disabled-bg:           transparent !default;
    -
    -// Inverted navbar brand label
    -$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
    -$navbar-inverse-brand-hover-color:          #fff !default;
    -$navbar-inverse-brand-hover-bg:             transparent !default;
    -
    -// Inverted navbar toggle
    -$navbar-inverse-toggle-hover-bg:            #333 !default;
    -$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
    -$navbar-inverse-toggle-border-color:        #333 !default;
    -
    -
    -//== Navs
    -//
    -//##
    -
    -//=== Shared nav styles
    -$nav-link-padding:                          10px 15px !default;
    -$nav-link-hover-bg:                         $gray-lighter !default;
    -
    -$nav-disabled-link-color:                   $gray-light !default;
    -$nav-disabled-link-hover-color:             $gray-light !default;
    -
    -//== Tabs
    -$nav-tabs-border-color:                     #ddd !default;
    -
    -$nav-tabs-link-hover-border-color:          $gray-lighter !default;
    -
    -$nav-tabs-active-link-hover-bg:             $body-bg !default;
    -$nav-tabs-active-link-hover-color:          $gray !default;
    -$nav-tabs-active-link-hover-border-color:   #ddd !default;
    -
    -$nav-tabs-justified-link-border-color:            #ddd !default;
    -$nav-tabs-justified-active-link-border-color:     $body-bg !default;
    -
    -//== Pills
    -$nav-pills-border-radius:                   $border-radius-base !default;
    -$nav-pills-active-link-hover-bg:            $component-active-bg !default;
    -$nav-pills-active-link-hover-color:         $component-active-color !default;
    -
    -
    -//== Pagination
    -//
    -//##
    -
    -$pagination-color:                     $link-color !default;
    -$pagination-bg:                        #fff !default;
    -$pagination-border:                    #ddd !default;
    -
    -$pagination-hover-color:               $link-hover-color !default;
    -$pagination-hover-bg:                  $gray-lighter !default;
    -$pagination-hover-border:              #ddd !default;
    -
    -$pagination-active-color:              #fff !default;
    -$pagination-active-bg:                 $brand-primary !default;
    -$pagination-active-border:             $brand-primary !default;
    -
    -$pagination-disabled-color:            $gray-light !default;
    -$pagination-disabled-bg:               #fff !default;
    -$pagination-disabled-border:           #ddd !default;
    -
    -
    -//== Pager
    -//
    -//##
    -
    -$pager-bg:                             $pagination-bg !default;
    -$pager-border:                         $pagination-border !default;
    -$pager-border-radius:                  15px !default;
    -
    -$pager-hover-bg:                       $pagination-hover-bg !default;
    -
    -$pager-active-bg:                      $pagination-active-bg !default;
    -$pager-active-color:                   $pagination-active-color !default;
    -
    -$pager-disabled-color:                 $pagination-disabled-color !default;
    -
    -
    -//== Jumbotron
    -//
    -//##
    -
    -$jumbotron-padding:              30px !default;
    -$jumbotron-color:                inherit !default;
    -$jumbotron-bg:                   $gray-lighter !default;
    -$jumbotron-heading-color:        inherit !default;
    -$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
    -$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;
    -
    -
    -//== Form states and alerts
    -//
    -//## Define colors for form feedback states and, by default, alerts.
    -
    -$state-success-text:             #3c763d !default;
    -$state-success-bg:               #dff0d8 !default;
    -$state-success-border:           darken(adjust-hue($state-success-bg, -10%), 5%) !default;
    -
    -$state-info-text:                #31708f !default;
    -$state-info-bg:                  #d9edf7 !default;
    -$state-info-border:              darken(adjust-hue($state-info-bg, -10%), 7%) !default;
    -
    -$state-warning-text:             #8a6d3b !default;
    -$state-warning-bg:               #fcf8e3 !default;
    -$state-warning-border:           darken(adjust-hue($state-warning-bg, -10%), 5%) !default;
    -
    -$state-danger-text:              #a94442 !default;
    -$state-danger-bg:                #f2dede !default;
    -$state-danger-border:            darken(adjust-hue($state-danger-bg, -10%), 5%) !default;
    -
    -
    -//== Tooltips
    -//
    -//##
    -
    -//** Tooltip max width
    -$tooltip-max-width:           200px !default;
    -//** Tooltip text color
    -$tooltip-color:               #fff !default;
    -//** Tooltip background color
    -$tooltip-bg:                  #000 !default;
    -$tooltip-opacity:             .9 !default;
    -
    -//** Tooltip arrow width
    -$tooltip-arrow-width:         5px !default;
    -//** Tooltip arrow color
    -$tooltip-arrow-color:         $tooltip-bg !default;
    -
    -
    -//== Popovers
    -//
    -//##
    -
    -//** Popover body background color
    -$popover-bg:                          #fff !default;
    -//** Popover maximum width
    -$popover-max-width:                   276px !default;
    -//** Popover border color
    -$popover-border-color:                rgba(0,0,0,.2) !default;
    -//** Popover fallback border color
    -$popover-fallback-border-color:       #ccc !default;
    -
    -//** Popover title background color
    -$popover-title-bg:                    darken($popover-bg, 3%) !default;
    -
    -//** Popover arrow width
    -$popover-arrow-width:                 10px !default;
    -//** Popover arrow color
    -$popover-arrow-color:                 $popover-bg !default;
    -
    -//** Popover outer arrow width
    -$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
    -//** Popover outer arrow color
    -$popover-arrow-outer-color:           fadein($popover-border-color, 5%) !default;
    -//** Popover outer arrow fallback color
    -$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
    -
    -
    -//== Labels
    -//
    -//##
    -
    -//** Default label background color
    -$label-default-bg:            $gray-light !default;
    -//** Primary label background color
    -$label-primary-bg:            $brand-primary !default;
    -//** Success label background color
    -$label-success-bg:            $brand-success !default;
    -//** Info label background color
    -$label-info-bg:               $brand-info !default;
    -//** Warning label background color
    -$label-warning-bg:            $brand-warning !default;
    -//** Danger label background color
    -$label-danger-bg:             $brand-danger !default;
    -
    -//** Default label text color
    -$label-color:                 #fff !default;
    -//** Default text color of a linked label
    -$label-link-hover-color:      #fff !default;
    -
    -
    -//== Modals
    -//
    -//##
    -
    -//** Padding applied to the modal body
    -$modal-inner-padding:         15px !default;
    -
    -//** Padding applied to the modal title
    -$modal-title-padding:         15px !default;
    -//** Modal title line-height
    -$modal-title-line-height:     $line-height-base !default;
    -
    -//** Background color of modal content area
    -$modal-content-bg:                             #fff !default;
    -//** Modal content border color
    -$modal-content-border-color:                   rgba(0,0,0,.2) !default;
    -//** Modal content border color **for IE8**
    -$modal-content-fallback-border-color:          #999 !default;
    -
    -//** Modal backdrop background color
    -$modal-backdrop-bg:           #000 !default;
    -//** Modal backdrop opacity
    -$modal-backdrop-opacity:      .5 !default;
    -//** Modal header border color
    -$modal-header-border-color:   #e5e5e5 !default;
    -//** Modal footer border color
    -$modal-footer-border-color:   $modal-header-border-color !default;
    -
    -$modal-lg:                    900px !default;
    -$modal-md:                    600px !default;
    -$modal-sm:                    300px !default;
    -
    -
    -//== Alerts
    -//
    -//## Define alert colors, border radius, and padding.
    -
    -$alert-padding:               15px !default;
    -$alert-border-radius:         $border-radius-base !default;
    -$alert-link-font-weight:      bold !default;
    -
    -$alert-success-bg:            $state-success-bg !default;
    -$alert-success-text:          $state-success-text !default;
    -$alert-success-border:        $state-success-border !default;
    -
    -$alert-info-bg:               $state-info-bg !default;
    -$alert-info-text:             $state-info-text !default;
    -$alert-info-border:           $state-info-border !default;
    -
    -$alert-warning-bg:            $state-warning-bg !default;
    -$alert-warning-text:          $state-warning-text !default;
    -$alert-warning-border:        $state-warning-border !default;
    -
    -$alert-danger-bg:             $state-danger-bg !default;
    -$alert-danger-text:           $state-danger-text !default;
    -$alert-danger-border:         $state-danger-border !default;
    -
    -
    -//== Progress bars
    -//
    -//##
    -
    -//** Background color of the whole progress component
    -$progress-bg:                 #f5f5f5 !default;
    -//** Progress bar text color
    -$progress-bar-color:          #fff !default;
    -//** Variable for setting rounded corners on progress bar.
    -$progress-border-radius:      $border-radius-base !default;
    -
    -//** Default progress bar color
    -$progress-bar-bg:             $brand-primary !default;
    -//** Success progress bar color
    -$progress-bar-success-bg:     $brand-success !default;
    -//** Warning progress bar color
    -$progress-bar-warning-bg:     $brand-warning !default;
    -//** Danger progress bar color
    -$progress-bar-danger-bg:      $brand-danger !default;
    -//** Info progress bar color
    -$progress-bar-info-bg:        $brand-info !default;
    -
    -
    -//== List group
    -//
    -//##
    -
    -//** Background color on `.list-group-item`
    -$list-group-bg:                 #fff !default;
    -//** `.list-group-item` border color
    -$list-group-border:             #ddd !default;
    -//** List group border radius
    -$list-group-border-radius:      $border-radius-base !default;
    -
    -//** Background color of single list items on hover
    -$list-group-hover-bg:           #f5f5f5 !default;
    -//** Text color of active list items
    -$list-group-active-color:       $component-active-color !default;
    -//** Background color of active list items
    -$list-group-active-bg:          $component-active-bg !default;
    -//** Border color of active list elements
    -$list-group-active-border:      $list-group-active-bg !default;
    -//** Text color for content within active list items
    -$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
    -
    -//** Text color of disabled list items
    -$list-group-disabled-color:      $gray-light !default;
    -//** Background color of disabled list items
    -$list-group-disabled-bg:         $gray-lighter !default;
    -//** Text color for content within disabled list items
    -$list-group-disabled-text-color: $list-group-disabled-color !default;
    -
    -$list-group-link-color:         #555 !default;
    -$list-group-link-hover-color:   $list-group-link-color !default;
    -$list-group-link-heading-color: #333 !default;
    -
    -
    -//== Panels
    -//
    -//##
    -
    -$panel-bg:                    #fff !default;
    -$panel-body-padding:          15px !default;
    -$panel-heading-padding:       10px 15px !default;
    -$panel-footer-padding:        $panel-heading-padding !default;
    -$panel-border-radius:         $border-radius-base !default;
    -
    -//** Border color for elements within panels
    -$panel-inner-border:          #ddd !default;
    -$panel-footer-bg:             #f5f5f5 !default;
    -
    -$panel-default-text:          $gray-dark !default;
    -$panel-default-border:        #ddd !default;
    -$panel-default-heading-bg:    #f5f5f5 !default;
    -
    -$panel-primary-text:          #fff !default;
    -$panel-primary-border:        $brand-primary !default;
    -$panel-primary-heading-bg:    $brand-primary !default;
    -
    -$panel-success-text:          $state-success-text !default;
    -$panel-success-border:        $state-success-border !default;
    -$panel-success-heading-bg:    $state-success-bg !default;
    -
    -$panel-info-text:             $state-info-text !default;
    -$panel-info-border:           $state-info-border !default;
    -$panel-info-heading-bg:       $state-info-bg !default;
    -
    -$panel-warning-text:          $state-warning-text !default;
    -$panel-warning-border:        $state-warning-border !default;
    -$panel-warning-heading-bg:    $state-warning-bg !default;
    -
    -$panel-danger-text:           $state-danger-text !default;
    -$panel-danger-border:         $state-danger-border !default;
    -$panel-danger-heading-bg:     $state-danger-bg !default;
    -
    -
    -//== Thumbnails
    -//
    -//##
    -
    -//** Padding around the thumbnail image
    -$thumbnail-padding:           4px !default;
    -//** Thumbnail background color
    -$thumbnail-bg:                $body-bg !default;
    -//** Thumbnail border color
    -$thumbnail-border:            #ddd !default;
    -//** Thumbnail border radius
    -$thumbnail-border-radius:     $border-radius-base !default;
    -
    -//** Custom text color for thumbnail captions
    -$thumbnail-caption-color:     $text-color !default;
    -//** Padding around the thumbnail caption
    -$thumbnail-caption-padding:   9px !default;
    -
    -
    -//== Wells
    -//
    -//##
    -
    -$well-bg:                     #f5f5f5 !default;
    -$well-border:                 darken($well-bg, 7%) !default;
    -
    -
    -//== Badges
    -//
    -//##
    -
    -$badge-color:                 #fff !default;
    -//** Linked badge text color on hover
    -$badge-link-hover-color:      #fff !default;
    -$badge-bg:                    $gray-light !default;
    -
    -//** Badge text color in active nav link
    -$badge-active-color:          $link-color !default;
    -//** Badge background color in active nav link
    -$badge-active-bg:             #fff !default;
    -
    -$badge-font-weight:           bold !default;
    -$badge-line-height:           1 !default;
    -$badge-border-radius:         10px !default;
    -
    -
    -//== Breadcrumbs
    -//
    -//##
    -
    -$breadcrumb-padding-vertical:   8px !default;
    -$breadcrumb-padding-horizontal: 15px !default;
    -//** Breadcrumb background color
    -$breadcrumb-bg:                 #f5f5f5 !default;
    -//** Breadcrumb text color
    -$breadcrumb-color:              #ccc !default;
    -//** Text color of current page in the breadcrumb
    -$breadcrumb-active-color:       $gray-light !default;
    -//** Textual separator for between breadcrumb elements
    -$breadcrumb-separator:          "/" !default;
    -
    -
    -//== Carousel
    -//
    -//##
    -
    -$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
    -
    -$carousel-control-color:                      #fff !default;
    -$carousel-control-width:                      15% !default;
    -$carousel-control-opacity:                    .5 !default;
    -$carousel-control-font-size:                  20px !default;
    -
    -$carousel-indicator-active-bg:                #fff !default;
    -$carousel-indicator-border-color:             #fff !default;
    -
    -$carousel-caption-color:                      #fff !default;
    -
    -
    -//== Close
    -//
    -//##
    -
    -$close-font-weight:           bold !default;
    -$close-color:                 #000 !default;
    -$close-text-shadow:           0 1px 0 #fff !default;
    -
    -
    -//== Code
    -//
    -//##
    -
    -$code-color:                  #c7254e !default;
    -$code-bg:                     #f9f2f4 !default;
    -
    -$kbd-color:                   #fff !default;
    -$kbd-bg:                      #333 !default;
    -
    -$pre-bg:                      #f5f5f5 !default;
    -$pre-color:                   $gray-dark !default;
    -$pre-border-color:            #ccc !default;
    -$pre-scrollable-max-height:   340px !default;
    -
    -
    -//== Type
    -//
    -//##
    -
    -//** Horizontal offset for forms and lists.
    -$component-offset-horizontal: 180px !default;
    -//** Text muted color
    -$text-muted:                  $gray-light !default;
    -//** Abbreviations and acronyms border color
    -$abbr-border-color:           $gray-light !default;
    -//** Headings small color
    -$headings-small-color:        $gray-light !default;
    -//** Blockquote small color
    -$blockquote-small-color:      $gray-light !default;
    -//** Blockquote font size
    -$blockquote-font-size:        ($font-size-base * 1.25) !default;
    -//** Blockquote border color
    -$blockquote-border-color:     $gray-lighter !default;
    -//** Page header border color
    -$page-header-border-color:    $gray-lighter !default;
    -//** Width of horizontal description list titles
    -$dl-horizontal-offset:        $component-offset-horizontal !default;
    -//** Point at which .dl-horizontal becomes horizontal
    -$dl-horizontal-breakpoint:    $grid-float-breakpoint !default;
    -//** Horizontal line color.
    -$hr-border:                   $gray-lighter !default;
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables4.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables4.scss
    deleted file mode 100644
    index e1718b5..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables4.scss
    +++ /dev/null
    @@ -1,930 +0,0 @@
    -
    -
    -// Variables
    -//
    -// Variables should follow the `$component-state-property-size` formula for
    -// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
    -
    -
    -//
    -// Color system
    -//
    -
    -// stylelint-disable
    -$white:    #fff !default;
    -$gray-100: #f8f9fa !default;
    -$gray-200: #e9ecef !default;
    -$gray-300: #dee2e6 !default;
    -$gray-400: #ced4da !default;
    -$gray-500: #adb5bd !default;
    -$gray-600: #6c757d !default;
    -$gray-700: #495057 !default;
    -$gray-800: #343a40 !default;
    -$gray-900: #212529 !default;
    -$black:    #000 !default;
    -
    -$grays: () !default;
    -$grays: map-merge((
    -  "100": $gray-100,
    -  "200": $gray-200,
    -  "300": $gray-300,
    -  "400": $gray-400,
    -  "500": $gray-500,
    -  "600": $gray-600,
    -  "700": $gray-700,
    -  "800": $gray-800,
    -  "900": $gray-900
    -), $grays);
    -
    -$blue:    #007bff !default;
    -$indigo:  #6610f2 !default;
    -$purple:  #6f42c1 !default;
    -$pink:    #e83e8c !default;
    -$red:     #dc3545 !default;
    -$orange:  #fd7e14 !default;
    -$yellow:  #ffc107 !default;
    -$green:   #28a745 !default;
    -$teal:    #20c997 !default;
    -$cyan:    #17a2b8 !default;
    -
    -$colors: () !default;
    -$colors: map-merge((
    -  "blue":       $blue,
    -  "indigo":     $indigo,
    -  "purple":     $purple,
    -  "pink":       $pink,
    -  "red":        $red,
    -  "orange":     $orange,
    -  "yellow":     $yellow,
    -  "green":      $green,
    -  "teal":       $teal,
    -  "cyan":       $cyan,
    -  "white":      $white,
    -  "gray":       $gray-600,
    -  "gray-dark":  $gray-800
    -), $colors);
    -
    -$primary:       $blue !default;
    -$secondary:     $gray-600 !default;
    -$success:       $green !default;
    -$info:          $cyan !default;
    -$warning:       $yellow !default;
    -$danger:        $red !default;
    -$light:         $gray-100 !default;
    -$dark:          $gray-800 !default;
    -
    -$theme-colors: () !default;
    -$theme-colors: map-merge((
    -  "primary":    $primary,
    -  "secondary":  $secondary,
    -  "success":    $success,
    -  "info":       $info,
    -  "warning":    $warning,
    -  "danger":     $danger,
    -  "light":      $light,
    -  "dark":       $dark
    -), $theme-colors);
    -// stylelint-enable
    -
    -// Set a specific jump point for requesting color jumps
    -$theme-color-interval:      8% !default;
    -
    -// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.
    -$yiq-contrasted-threshold:  150 !default;
    -
    -// Customize the light and dark text colors for use in our YIQ color contrast function.
    -$yiq-text-dark:             $gray-900 !default;
    -$yiq-text-light:            $white !default;
    -
    -// Options
    -//
    -// Quickly modify global styling by enabling or disabling optional features.
    -
    -$enable-caret:              true !default;
    -$enable-rounded:            true !default;
    -$enable-shadows:            false !default;
    -$enable-gradients:          false !default;
    -$enable-transitions:        true !default;
    -$enable-hover-media-query:  false !default; // Deprecated, no longer affects any compiled CSS
    -$enable-grid-classes:       true !default;
    -$enable-print-styles:       true !default;
    -
    -
    -// Spacing
    -//
    -// Control the default styling of most Bootstrap elements by modifying these
    -// variables. Mostly focused on spacing.
    -// You can add more entries to the $spacers map, should you need more variation.
    -
    -// stylelint-disable
    -$spacer: 1rem !default;
    -$spacers: () !default;
    -$spacers: map-merge((
    -  0: 0,
    -  1: ($spacer * .25),
    -  2: ($spacer * .5),
    -  3: $spacer,
    -  4: ($spacer * 1.5),
    -  5: ($spacer * 3)
    -), $spacers);
    -
    -// This variable affects the `.h-*` and `.w-*` classes.
    -$sizes: () !default;
    -$sizes: map-merge((
    -  25: 25%,
    -  50: 50%,
    -  75: 75%,
    -  100: 100%,
    -  auto: auto
    -), $sizes);
    -// stylelint-enable
    -
    -// Body
    -//
    -// Settings for the `` element.
    -
    -$body-bg:                   $white !default;
    -$body-color:                $gray-900 !default;
    -
    -// Links
    -//
    -// Style anchor elements.
    -
    -$link-color:                theme-color("primary") !default;
    -$link-decoration:           none !default;
    -$link-hover-color:          darken($link-color, 15%) !default;
    -$link-hover-decoration:     underline !default;
    -
    -// Paragraphs
    -//
    -// Style p element.
    -
    -$paragraph-margin-bottom:   1rem !default;
    -
    -
    -// Grid breakpoints
    -//
    -// Define the minimum dimensions at which your layout will change,
    -// adapting to different screen sizes, for use in media queries.
    -
    -$grid-breakpoints: (
    -  xs: 0,
    -  sm: 576px,
    -  md: 768px,
    -  lg: 992px,
    -  xl: 1200px
    -) !default;
    -
    -@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
    -@include _assert-starts-at-zero($grid-breakpoints);
    -
    -
    -// Grid containers
    -//
    -// Define the maximum width of `.container` for different screen sizes.
    -
    -$container-max-widths: (
    -  sm: 540px,
    -  md: 720px,
    -  lg: 960px,
    -  xl: 1140px
    -) !default;
    -
    -@include _assert-ascending($container-max-widths, "$container-max-widths");
    -
    -
    -// Grid columns
    -//
    -// Set the number of columns and specify the width of the gutters.
    -
    -$grid-columns:                12 !default;
    -$grid-gutter-width:           30px !default;
    -
    -// Components
    -//
    -// Define common padding and border radius sizes and more.
    -
    -$line-height-lg:              1.5 !default;
    -$line-height-sm:              1.5 !default;
    -
    -$border-width:                1px !default;
    -$border-color:                $gray-300 !default;
    -
    -$border-radius:               .25rem !default;
    -$border-radius-lg:            .3rem !default;
    -$border-radius-sm:            .2rem !default;
    -
    -$box-shadow-sm:               0 .125rem .25rem rgba($black, .075) !default;
    -$box-shadow:                  0 .5rem 1rem rgba($black, .15) !default;
    -$box-shadow-lg:               0 1rem 3rem rgba($black, .175) !default;
    -
    -$component-active-color:      $white !default;
    -$component-active-bg:         theme-color("primary") !default;
    -
    -$caret-width:                 .3em !default;
    -
    -$transition-base:             all .2s ease-in-out !default;
    -$transition-fade:             opacity .15s linear !default;
    -$transition-collapse:         height .35s ease !default;
    -
    -
    -// Fonts
    -//
    -// Font, line-height, and color for body text, headings, and more.
    -
    -// stylelint-disable value-keyword-case
    -$font-family-sans-serif:      -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
    -$font-family-monospace:       SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
    -$font-family-base:            $font-family-sans-serif !default;
    -// stylelint-enable value-keyword-case
    -
    -$font-size-base:              1rem !default; // Assumes the browser default, typically `16px`
    -$font-size-lg:                ($font-size-base * 1.25) !default;
    -$font-size-sm:                ($font-size-base * .875) !default;
    -
    -$font-weight-light:           300 !default;
    -$font-weight-normal:          400 !default;
    -$font-weight-bold:            700 !default;
    -
    -$font-weight-base:            $font-weight-normal !default;
    -$line-height-base:            1.5 !default;
    -
    -$h1-font-size:                $font-size-base * 2.5 !default;
    -$h2-font-size:                $font-size-base * 2 !default;
    -$h3-font-size:                $font-size-base * 1.75 !default;
    -$h4-font-size:                $font-size-base * 1.5 !default;
    -$h5-font-size:                $font-size-base * 1.25 !default;
    -$h6-font-size:                $font-size-base !default;
    -
    -$headings-margin-bottom:      ($spacer / 2) !default;
    -$headings-font-family:        inherit !default;
    -$headings-font-weight:        500 !default;
    -$headings-line-height:        1.2 !default;
    -$headings-color:              inherit !default;
    -
    -$display1-size:               6rem !default;
    -$display2-size:               5.5rem !default;
    -$display3-size:               4.5rem !default;
    -$display4-size:               3.5rem !default;
    -
    -$display1-weight:             300 !default;
    -$display2-weight:             300 !default;
    -$display3-weight:             300 !default;
    -$display4-weight:             300 !default;
    -$display-line-height:         $headings-line-height !default;
    -
    -$lead-font-size:              ($font-size-base * 1.25) !default;
    -$lead-font-weight:            300 !default;
    -
    -$small-font-size:             80% !default;
    -
    -$text-muted:                  $gray-600 !default;
    -
    -$blockquote-small-color:      $gray-600 !default;
    -$blockquote-font-size:        ($font-size-base * 1.25) !default;
    -
    -$hr-border-color:             rgba($black, .1) !default;
    -$hr-border-width:             $border-width !default;
    -
    -$mark-padding:                .2em !default;
    -
    -$dt-font-weight:              $font-weight-bold !default;
    -
    -$kbd-box-shadow:              inset 0 -.1rem 0 rgba($black, .25) !default;
    -$nested-kbd-font-weight:      $font-weight-bold !default;
    -
    -$list-inline-padding:         .5rem !default;
    -
    -$mark-bg:                     #fcf8e3 !default;
    -
    -$hr-margin-y:                 $spacer !default;
    -
    -
    -// Tables
    -//
    -// Customizes the `.table` component with basic values, each used across all table variations.
    -
    -$table-cell-padding:          .75rem !default;
    -$table-cell-padding-sm:       .3rem !default;
    -
    -$table-bg:                    #fff !default;
    -$table-accent-bg:             #f9f9f9 !default;
    -$table-hover-bg:              #f5f5f5 !default;
    -$table-active-bg:             $table-hover-bg !default;
    -
    -$table-border-width:          $border-width !default;
    -$table-border-color:          $gray-300 !default;
    -
    -$table-head-bg:               $gray-200 !default;
    -$table-head-color:            $gray-700 !default;
    -
    -$table-dark-bg:               $gray-900 !default;
    -$table-dark-accent-bg:        rgba($white, .05) !default;
    -$table-dark-hover-bg:         rgba($white, .075) !default;
    -$table-dark-border-color:     lighten($gray-900, 7.5%) !default;
    -$table-dark-color:            $body-bg !default;
    -
    -$table-striped-order:         odd !default;
    -
    -$table-caption-color:         $text-muted !default;
    -
    -// Buttons + Forms
    -//
    -// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
    -
    -$input-btn-padding-y:         .375rem !default;
    -$input-btn-padding-x:         .75rem !default;
    -$input-btn-line-height:       $line-height-base !default;
    -
    -$input-btn-focus-width:       .2rem !default;
    -$input-btn-focus-color:       rgba($component-active-bg, .25) !default;
    -$input-btn-focus-box-shadow:  0 0 0 $input-btn-focus-width $input-btn-focus-color !default;
    -
    -$input-btn-padding-y-sm:      .25rem !default;
    -$input-btn-padding-x-sm:      .5rem !default;
    -$input-btn-line-height-sm:    $line-height-sm !default;
    -
    -$input-btn-padding-y-lg:      .5rem !default;
    -$input-btn-padding-x-lg:      1rem !default;
    -$input-btn-line-height-lg:    $line-height-lg !default;
    -
    -$input-btn-border-width:      $border-width !default;
    -
    -
    -// Buttons
    -//
    -// For each of Bootstrap's buttons, define text, background, and border color.
    -
    -$btn-padding-y:               $input-btn-padding-y !default;
    -$btn-padding-x:               $input-btn-padding-x !default;
    -$btn-line-height:             $input-btn-line-height !default;
    -
    -$btn-padding-y-sm:            $input-btn-padding-y-sm !default;
    -$btn-padding-x-sm:            $input-btn-padding-x-sm !default;
    -$btn-line-height-sm:          $input-btn-line-height-sm !default;
    -
    -$btn-padding-y-lg:            $input-btn-padding-y-lg !default;
    -$btn-padding-x-lg:            $input-btn-padding-x-lg !default;
    -$btn-line-height-lg:          $input-btn-line-height-lg !default;
    -
    -$btn-border-width:            $input-btn-border-width !default;
    -
    -$btn-font-weight:             $font-weight-normal !default;
    -$btn-box-shadow:              inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;
    -$btn-focus-width:             $input-btn-focus-width !default;
    -$btn-focus-box-shadow:        $input-btn-focus-box-shadow !default;
    -$btn-disabled-opacity:        .65 !default;
    -$btn-active-box-shadow:       inset 0 3px 5px rgba($black, .125) !default;
    -
    -$btn-link-disabled-color:     $gray-600 !default;
    -
    -$btn-block-spacing-y:         .5rem !default;
    -
    -// Allows for customizing button radius independently from global border radius
    -$btn-border-radius:           $border-radius !default;
    -$btn-border-radius-lg:        $border-radius-lg !default;
    -$btn-border-radius-sm:        $border-radius-sm !default;
    -
    -$btn-transition:              color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
    -
    -
    -// Forms
    -
    -$label-margin-bottom:                   .5rem !default;
    -
    -$input-padding-y:                       $input-btn-padding-y !default;
    -$input-padding-x:                       $input-btn-padding-x !default;
    -$input-line-height:                     $input-btn-line-height !default;
    -
    -$input-padding-y-sm:                    $input-btn-padding-y-sm !default;
    -$input-padding-x-sm:                    $input-btn-padding-x-sm !default;
    -$input-line-height-sm:                  $input-btn-line-height-sm !default;
    -
    -$input-padding-y-lg:                    $input-btn-padding-y-lg !default;
    -$input-padding-x-lg:                    $input-btn-padding-x-lg !default;
    -$input-line-height-lg:                  $input-btn-line-height-lg !default;
    -
    -$input-bg:                              $white !default;
    -$input-disabled-bg:                     $gray-200 !default;
    -
    -$input-color:                           $gray-700 !default;
    -$input-border-color:                    $gray-400 !default;
    -$input-border-width:                    $input-btn-border-width !default;
    -$input-box-shadow:                      inset 0 1px 1px rgba($black, .075) !default;
    -
    -$input-border-radius:                   $border-radius !default;
    -$input-border-radius-lg:                $border-radius-lg !default;
    -$input-border-radius-sm:                $border-radius-sm !default;
    -
    -$input-focus-bg:                        $input-bg !default;
    -$input-focus-border-color:              lighten($component-active-bg, 25%) !default;
    -$input-focus-color:                     $input-color !default;
    -$input-focus-width:                     $input-btn-focus-width !default;
    -$input-focus-box-shadow:                $input-btn-focus-box-shadow !default;
    -
    -$input-placeholder-color:               $gray-600 !default;
    -$input-plaintext-color:                 $body-color !default;
    -
    -$input-height-border:                   $input-border-width * 2 !default;
    -
    -$input-height-inner:                    ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;
    -$input-height:                          calc(#{$input-height-inner} + #{$input-height-border}) !default;
    -
    -$input-height-inner-sm:                 ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;
    -$input-height-sm:                       calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;
    -
    -$input-height-inner-lg:                 ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;
    -$input-height-lg:                       calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;
    -
    -$input-transition:                      border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
    -
    -$form-text-margin-top:                  .25rem !default;
    -
    -$form-check-input-gutter:               1.25rem !default;
    -$form-check-input-margin-y:             .3rem !default;
    -$form-check-input-margin-x:             .25rem !default;
    -
    -$form-check-inline-margin-x:            .75rem !default;
    -$form-check-inline-input-margin-x:      .3125rem !default;
    -
    -$form-group-margin-bottom:              1rem !default;
    -
    -$input-group-addon-color:               $input-color !default;
    -$input-group-addon-bg:                  $gray-200 !default;
    -$input-group-addon-border-color:        $input-border-color !default;
    -
    -$custom-control-gutter:                 1.5rem !default;
    -$custom-control-spacer-x:               1rem !default;
    -
    -$custom-control-indicator-size:         1rem !default;
    -$custom-control-indicator-bg:           $gray-300 !default;
    -$custom-control-indicator-bg-size:      50% 50% !default;
    -$custom-control-indicator-box-shadow:   inset 0 .25rem .25rem rgba($black, .1) !default;
    -
    -$custom-control-indicator-disabled-bg:          $gray-200 !default;
    -$custom-control-label-disabled-color:           $gray-600 !default;
    -
    -$custom-control-indicator-checked-color:        $component-active-color !default;
    -$custom-control-indicator-checked-bg:           $component-active-bg !default;
    -$custom-control-indicator-checked-disabled-bg:  rgba(theme-color("primary"), .5) !default;
    -$custom-control-indicator-checked-box-shadow:   none !default;
    -
    -$custom-control-indicator-focus-box-shadow:     0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
    -
    -$custom-control-indicator-active-color:         $component-active-color !default;
    -$custom-control-indicator-active-bg:            lighten($component-active-bg, 35%) !default;
    -$custom-control-indicator-active-box-shadow:    none !default;
    -
    -$custom-checkbox-indicator-border-radius:       $border-radius !default;
    -$custom-checkbox-indicator-icon-checked:        str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default;
    -
    -$custom-checkbox-indicator-indeterminate-bg:          $component-active-bg !default;
    -$custom-checkbox-indicator-indeterminate-color:       $custom-control-indicator-checked-color !default;
    -$custom-checkbox-indicator-icon-indeterminate:        str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E"), "#", "%23") !default;
    -$custom-checkbox-indicator-indeterminate-box-shadow:  none !default;
    -
    -$custom-radio-indicator-border-radius:          50% !default;
    -$custom-radio-indicator-icon-checked:           str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), "#", "%23") !default;
    -
    -$custom-select-padding-y:           .375rem !default;
    -$custom-select-padding-x:           .75rem !default;
    -$custom-select-height:              $input-height !default;
    -$custom-select-indicator-padding:   1rem !default; // Extra padding to account for the presence of the background-image based indicator
    -$custom-select-line-height:         $input-btn-line-height !default;
    -$custom-select-color:               $input-color !default;
    -$custom-select-disabled-color:      $gray-600 !default;
    -$custom-select-bg:                  $input-bg !default;
    -$custom-select-disabled-bg:         $gray-200 !default;
    -$custom-select-bg-size:             8px 10px !default; // In pixels because image dimensions
    -$custom-select-indicator-color:     $gray-800 !default;
    -$custom-select-indicator:           str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E"), "#", "%23") !default;
    -$custom-select-border-width:        $input-btn-border-width !default;
    -$custom-select-border-color:        $input-border-color !default;
    -$custom-select-border-radius:       $border-radius !default;
    -
    -$custom-select-focus-border-color:  $input-focus-border-color !default;
    -$custom-select-focus-box-shadow:    inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;
    -
    -$custom-select-font-size-sm:        75% !default;
    -$custom-select-height-sm:           $input-height-sm !default;
    -
    -$custom-select-font-size-lg:        125% !default;
    -$custom-select-height-lg:           $input-height-lg !default;
    -
    -$custom-range-track-width:          100% !default;
    -$custom-range-track-height:         .5rem !default;
    -$custom-range-track-cursor:         pointer !default;
    -$custom-range-track-bg:             $gray-300 !default;
    -$custom-range-track-border-radius:  1rem !default;
    -$custom-range-track-box-shadow:     inset 0 .25rem .25rem rgba($black, .1) !default;
    -
    -$custom-range-thumb-width:            1rem !default;
    -$custom-range-thumb-height:           $custom-range-thumb-width !default;
    -$custom-range-thumb-bg:               $component-active-bg !default;
    -$custom-range-thumb-border:           0 !default;
    -$custom-range-thumb-border-radius:    1rem !default;
    -$custom-range-thumb-box-shadow:       0 .1rem .25rem rgba($black, .1) !default;
    -$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
    -$custom-range-thumb-active-bg:        lighten($component-active-bg, 35%) !default;
    -
    -$custom-file-height:                $input-height !default;
    -$custom-file-focus-border-color:    $input-focus-border-color !default;
    -$custom-file-focus-box-shadow:      $input-btn-focus-box-shadow !default;
    -
    -$custom-file-padding-y:             $input-btn-padding-y !default;
    -$custom-file-padding-x:             $input-btn-padding-x !default;
    -$custom-file-line-height:           $input-btn-line-height !default;
    -$custom-file-color:                 $input-color !default;
    -$custom-file-bg:                    $input-bg !default;
    -$custom-file-border-width:          $input-btn-border-width !default;
    -$custom-file-border-color:          $input-border-color !default;
    -$custom-file-border-radius:         $input-border-radius !default;
    -$custom-file-box-shadow:            $input-box-shadow !default;
    -$custom-file-button-color:          $custom-file-color !default;
    -$custom-file-button-bg:             $input-group-addon-bg !default;
    -$custom-file-text: (
    -  en: "Browse"
    -) !default;
    -
    -
    -// Form validation
    -$form-feedback-margin-top:          $form-text-margin-top !default;
    -$form-feedback-font-size:           $small-font-size !default;
    -$form-feedback-valid-color:         theme-color("success") !default;
    -$form-feedback-invalid-color:       theme-color("danger") !default;
    -
    -
    -// Dropdowns
    -//
    -// Dropdown menu container and contents.
    -
    -$dropdown-min-width:                10rem !default;
    -$dropdown-padding-y:                .5rem !default;
    -$dropdown-spacer:                   .125rem !default;
    -$dropdown-bg:                       $white !default;
    -$dropdown-border-color:             rgba($black, .15) !default;
    -$dropdown-border-radius:            $border-radius !default;
    -$dropdown-border-width:             $border-width !default;
    -$dropdown-divider-bg:               $gray-200 !default;
    -$dropdown-box-shadow:               0 .5rem 1rem rgba($black, .175) !default;
    -
    -$dropdown-link-color:               $gray-900 !default;
    -$dropdown-link-hover-color:         darken($gray-900, 5%) !default;
    -$dropdown-link-hover-bg:            $gray-100 !default;
    -
    -$dropdown-link-active-color:        $component-active-color !default;
    -$dropdown-link-active-bg:           $component-active-bg !default;
    -
    -$dropdown-link-disabled-color:      $gray-600 !default;
    -
    -$dropdown-item-padding-y:           .25rem !default;
    -$dropdown-item-padding-x:           1.5rem !default;
    -
    -$dropdown-header-color:             $gray-600 !default;
    -
    -
    -// Z-index master list
    -//
    -// Warning: Avoid customizing these values. They're used for a bird's eye view
    -// of components dependent on the z-axis and are designed to all work together.
    -
    -$zindex-dropdown:                   1000 !default;
    -$zindex-sticky:                     1020 !default;
    -$zindex-fixed:                      1030 !default;
    -$zindex-modal-backdrop:             1040 !default;
    -$zindex-modal:                      1050 !default;
    -$zindex-popover:                    1060 !default;
    -$zindex-tooltip:                    1070 !default;
    -
    -// Navs
    -
    -$nav-link-padding-y:                .5rem !default;
    -$nav-link-padding-x:                1rem !default;
    -$nav-link-disabled-color:           $gray-600 !default;
    -
    -$nav-tabs-border-color:             $gray-300 !default;
    -$nav-tabs-border-width:             $border-width !default;
    -$nav-tabs-border-radius:            $border-radius !default;
    -$nav-tabs-link-hover-border-color:  $gray-200 $gray-200 $nav-tabs-border-color !default;
    -$nav-tabs-link-active-color:        $gray-700 !default;
    -$nav-tabs-link-active-bg:           $body-bg !default;
    -$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;
    -
    -$nav-pills-border-radius:           $border-radius !default;
    -$nav-pills-link-active-color:       $component-active-color !default;
    -$nav-pills-link-active-bg:          $component-active-bg !default;
    -
    -$nav-divider-color:                 $gray-200 !default;
    -$nav-divider-margin-y:              ($spacer / 2) !default;
    -
    -// Navbar
    -
    -$navbar-padding-y:                  ($spacer / 2) !default;
    -$navbar-padding-x:                  $spacer !default;
    -
    -$navbar-nav-link-padding-x:         .5rem !default;
    -
    -$navbar-brand-font-size:            $font-size-lg !default;
    -// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link
    -$nav-link-height:                   ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;
    -$navbar-brand-height:               $navbar-brand-font-size * $line-height-base !default;
    -$navbar-brand-padding-y:            ($nav-link-height - $navbar-brand-height) / 2 !default;
    -
    -$navbar-toggler-padding-y:          .25rem !default;
    -$navbar-toggler-padding-x:          .75rem !default;
    -$navbar-toggler-font-size:          $font-size-lg !default;
    -$navbar-toggler-border-radius:      $btn-border-radius !default;
    -
    -$navbar-dark-color:                 rgba($white, .5) !default;
    -$navbar-dark-hover-color:           rgba($white, .75) !default;
    -$navbar-dark-active-color:          $white !default;
    -$navbar-dark-disabled-color:        rgba($white, .25) !default;
    -$navbar-dark-toggler-icon-bg:       str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
    -$navbar-dark-toggler-border-color:  rgba($white, .1) !default;
    -
    -$navbar-light-color:                rgba($black, .5) !default;
    -$navbar-light-hover-color:          rgba($black, .7) !default;
    -$navbar-light-active-color:         rgba($black, .9) !default;
    -$navbar-light-disabled-color:       rgba($black, .3) !default;
    -$navbar-light-toggler-icon-bg:      str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
    -$navbar-light-toggler-border-color: rgba($black, .1) !default;
    -
    -// Pagination
    -
    -$pagination-padding-y:              .5rem !default;
    -$pagination-padding-x:              .75rem !default;
    -$pagination-padding-y-sm:           .25rem !default;
    -$pagination-padding-x-sm:           .5rem !default;
    -$pagination-padding-y-lg:           .75rem !default;
    -$pagination-padding-x-lg:           1.5rem !default;
    -$pagination-line-height:            1.25 !default;
    -
    -$pagination-color:                  $link-color !default;
    -$pagination-bg:                     $white !default;
    -$pagination-border-width:           $border-width !default;
    -$pagination-border-color:           $gray-300 !default;
    -
    -$pagination-focus-box-shadow:       $input-btn-focus-box-shadow !default;
    -$pagination-focus-outline:          0 !default;
    -
    -$pagination-hover-color:            $link-hover-color !default;
    -$pagination-hover-bg:               $gray-200 !default;
    -$pagination-hover-border-color:     $gray-300 !default;
    -
    -$pagination-active-color:           $component-active-color !default;
    -$pagination-active-bg:              $component-active-bg !default;
    -$pagination-active-border-color:    $pagination-active-bg !default;
    -
    -$pagination-disabled-color:         $gray-600 !default;
    -$pagination-disabled-bg:            $white !default;
    -$pagination-disabled-border-color:  $gray-300 !default;
    -
    -
    -// Jumbotron
    -
    -$jumbotron-padding:                 2rem !default;
    -$jumbotron-bg:                      $gray-200 !default;
    -
    -
    -// Cards
    -
    -$card-spacer-y:                     .75rem !default;
    -$card-spacer-x:                     1.25rem !default;
    -$card-border-width:                 $border-width !default;
    -$card-border-radius:                $border-radius !default;
    -$card-border-color:                 rgba($black, .125) !default;
    -$card-inner-border-radius:          calc(#{$card-border-radius} - #{$card-border-width}) !default;
    -$card-cap-bg:                       rgba($black, .03) !default;
    -$card-bg:                           $white !default;
    -
    -$card-img-overlay-padding:          1.25rem !default;
    -
    -$card-group-margin:                 ($grid-gutter-width / 2) !default;
    -$card-deck-margin:                  $card-group-margin !default;
    -
    -$card-columns-count:                3 !default;
    -$card-columns-gap:                  1.25rem !default;
    -$card-columns-margin:               $card-spacer-y !default;
    -
    -
    -// Tooltips
    -
    -$tooltip-font-size:                 $font-size-sm !default;
    -$tooltip-max-width:                 200px !default;
    -$tooltip-color:                     $white !default;
    -$tooltip-bg:                        $black !default;
    -$tooltip-border-radius:             $border-radius !default;
    -$tooltip-opacity:                   .9 !default;
    -$tooltip-padding-y:                 .25rem !default;
    -$tooltip-padding-x:                 .5rem !default;
    -$tooltip-margin:                    0 !default;
    -
    -$tooltip-arrow-width:               .8rem !default;
    -$tooltip-arrow-height:              .4rem !default;
    -$tooltip-arrow-color:               $tooltip-bg !default;
    -
    -
    -// Popovers
    -
    -$popover-font-size:                 $font-size-sm !default;
    -$popover-bg:                        $white !default;
    -$popover-max-width:                 276px !default;
    -$popover-border-width:              $border-width !default;
    -$popover-border-color:              rgba($black, .2) !default;
    -$popover-border-radius:             $border-radius-lg !default;
    -$popover-box-shadow:                0 .25rem .5rem rgba($black, .2) !default;
    -
    -$popover-header-bg:                 darken($popover-bg, 3%) !default;
    -$popover-header-color:              $headings-color !default;
    -$popover-header-padding-y:          .5rem !default;
    -$popover-header-padding-x:          .75rem !default;
    -
    -$popover-body-color:                $body-color !default;
    -$popover-body-padding-y:            $popover-header-padding-y !default;
    -$popover-body-padding-x:            $popover-header-padding-x !default;
    -
    -$popover-arrow-width:               1rem !default;
    -$popover-arrow-height:              .5rem !default;
    -$popover-arrow-color:               $popover-bg !default;
    -
    -$popover-arrow-outer-color:         fade-in($popover-border-color, .05) !default;
    -
    -
    -// Badges
    -
    -$badge-font-size:                   75% !default;
    -$badge-font-weight:                 $font-weight-bold !default;
    -$badge-padding-y:                   .25em !default;
    -$badge-padding-x:                   .4em !default;
    -$badge-border-radius:               $border-radius !default;
    -
    -$badge-pill-padding-x:              .6em !default;
    -// Use a higher than normal value to ensure completely rounded edges when
    -// customizing padding or font-size on labels.
    -$badge-pill-border-radius:          10rem !default;
    -
    -
    -// Modals
    -
    -// Padding applied to the modal body
    -$modal-inner-padding:               1rem !default;
    -
    -$modal-dialog-margin:               .5rem !default;
    -$modal-dialog-margin-y-sm-up:       1.75rem !default;
    -
    -$modal-title-line-height:           $line-height-base !default;
    -
    -$modal-content-bg:                  $white !default;
    -$modal-content-border-color:        rgba($black, .2) !default;
    -$modal-content-border-width:        $border-width !default;
    -$modal-content-border-radius:       $border-radius-lg !default;
    -$modal-content-box-shadow-xs:       0 .25rem .5rem rgba($black, .5) !default;
    -$modal-content-box-shadow-sm-up:    0 .5rem 1rem rgba($black, .5) !default;
    -
    -$modal-backdrop-bg:                 $black !default;
    -$modal-backdrop-opacity:            .5 !default;
    -$modal-header-border-color:         $gray-200 !default;
    -$modal-footer-border-color:         $modal-header-border-color !default;
    -$modal-header-border-width:         $modal-content-border-width !default;
    -$modal-footer-border-width:         $modal-header-border-width !default;
    -$modal-header-padding:              1rem !default;
    -
    -$modal-lg:                          800px !default;
    -$modal-md:                          500px !default;
    -$modal-sm:                          300px !default;
    -
    -$modal-transition:                  transform .3s ease-out !default;
    -
    -
    -// Alerts
    -//
    -// Define alert colors, border radius, and padding.
    -
    -$alert-padding-y:                   .75rem !default;
    -$alert-padding-x:                   1.25rem !default;
    -$alert-margin-bottom:               1rem !default;
    -$alert-border-radius:               $border-radius !default;
    -$alert-link-font-weight:            $font-weight-bold !default;
    -$alert-border-width:                $border-width !default;
    -
    -$alert-bg-level:                    -10 !default;
    -$alert-border-level:                -9 !default;
    -$alert-color-level:                 6 !default;
    -
    -
    -// Progress bars
    -
    -$progress-height:                   1rem !default;
    -$progress-font-size:                ($font-size-base * .75) !default;
    -$progress-bg:                       $gray-200 !default;
    -$progress-border-radius:            $border-radius !default;
    -$progress-box-shadow:               inset 0 .1rem .1rem rgba($black, .1) !default;
    -$progress-bar-color:                $white !default;
    -$progress-bar-bg:                   theme-color("primary") !default;
    -$progress-bar-animation-timing:     1s linear infinite !default;
    -$progress-bar-transition:           width .6s ease !default;
    -
    -// List group
    -
    -$list-group-bg:                     $white !default;
    -$list-group-border-color:           rgba($black, .125) !default;
    -$list-group-border-width:           $border-width !default;
    -$list-group-border-radius:          $border-radius !default;
    -
    -$list-group-item-padding-y:         .75rem !default;
    -$list-group-item-padding-x:         1.25rem !default;
    -
    -$list-group-hover-bg:               $gray-100 !default;
    -$list-group-active-color:           $component-active-color !default;
    -$list-group-active-bg:              $component-active-bg !default;
    -$list-group-active-border-color:    $list-group-active-bg !default;
    -
    -$list-group-disabled-color:         $gray-600 !default;
    -$list-group-disabled-bg:            $list-group-bg !default;
    -
    -$list-group-action-color:           $gray-700 !default;
    -$list-group-action-hover-color:     $list-group-action-color !default;
    -
    -$list-group-action-active-color:    $body-color !default;
    -$list-group-action-active-bg:       $gray-200 !default;
    -
    -
    -// Image thumbnails
    -
    -$thumbnail-padding:                 .25rem !default;
    -$thumbnail-bg:                      $body-bg !default;
    -$thumbnail-border-width:            $border-width !default;
    -$thumbnail-border-color:            $gray-300 !default;
    -$thumbnail-border-radius:           $border-radius !default;
    -$thumbnail-box-shadow:              0 1px 2px rgba($black, .075) !default;
    -
    -
    -// Figures
    -
    -$figure-caption-font-size:          90% !default;
    -$figure-caption-color:              $gray-600 !default;
    -
    -
    -// Breadcrumbs
    -
    -$breadcrumb-padding-y:              .75rem !default;
    -$breadcrumb-padding-x:              1rem !default;
    -$breadcrumb-item-padding:           .5rem !default;
    -
    -$breadcrumb-margin-bottom:          1rem !default;
    -
    -$breadcrumb-bg:                     $gray-200 !default;
    -$breadcrumb-divider-color:          $gray-600 !default;
    -$breadcrumb-active-color:           $gray-600 !default;
    -$breadcrumb-divider:                quote("/") !default;
    -
    -$breadcrumb-border-radius:          $border-radius !default;
    -
    -
    -// Carousel
    -
    -$carousel-control-color:            $white !default;
    -$carousel-control-width:            15% !default;
    -$carousel-control-opacity:          .5 !default;
    -
    -$carousel-indicator-width:          30px !default;
    -$carousel-indicator-height:         3px !default;
    -$carousel-indicator-spacer:         3px !default;
    -$carousel-indicator-active-bg:      $white !default;
    -
    -$carousel-caption-width:            70% !default;
    -$carousel-caption-color:            $white !default;
    -
    -$carousel-control-icon-width:       20px !default;
    -
    -$carousel-control-prev-icon-bg:     str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default;
    -$carousel-control-next-icon-bg:     str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default;
    -
    -$carousel-transition:               transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)
    -
    -
    -// Close
    -
    -$close-font-size:                   $font-size-base * 1.5 !default;
    -$close-font-weight:                 $font-weight-bold !default;
    -$close-color:                       $black !default;
    -$close-text-shadow:                 0 1px 0 $white !default;
    -
    -// Code
    -
    -$code-font-size:                    87.5% !default;
    -$code-color:                        $pink !default;
    -
    -$kbd-padding-y:                     .2rem !default;
    -$kbd-padding-x:                     .4rem !default;
    -$kbd-font-size:                     $code-font-size !default;
    -$kbd-color:                         $white !default;
    -$kbd-bg:                            $gray-900 !default;
    -
    -$pre-color:                         $gray-900 !default;
    -$pre-scrollable-max-height:         340px !default;
    -
    -
    -// Printing
    -$print-page-size:                   a3 !default;
    -$print-body-min-width:              map-get($grid-breakpoints, "lg") !default;
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables5.scss b/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables5.scss
    deleted file mode 100644
    index 87ebfe9..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/bootstrap/variables5.scss
    +++ /dev/null
    @@ -1,1641 +0,0 @@
    -// Variables
    -//
    -// Variables should follow the `$component-state-property-size` formula for
    -// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
    -
    -// Color system
    -
    -// scss-docs-start gray-color-variables
    -$white:    #fff !default;
    -$gray-100: #f8f9fa !default;
    -$gray-200: #e9ecef !default;
    -$gray-300: #dee2e6 !default;
    -$gray-400: #ced4da !default;
    -$gray-500: #adb5bd !default;
    -$gray-600: #6c757d !default;
    -$gray-700: #495057 !default;
    -$gray-800: #343a40 !default;
    -$gray-900: #212529 !default;
    -$black:    #000 !default;
    -// scss-docs-end gray-color-variables
    -
    -// fusv-disable
    -// scss-docs-start gray-colors-map
    -$grays: (
    -  "100": $gray-100,
    -  "200": $gray-200,
    -  "300": $gray-300,
    -  "400": $gray-400,
    -  "500": $gray-500,
    -  "600": $gray-600,
    -  "700": $gray-700,
    -  "800": $gray-800,
    -  "900": $gray-900
    -) !default;
    -// scss-docs-end gray-colors-map
    -// fusv-enable
    -
    -// scss-docs-start color-variables
    -$blue:    #0d6efd !default;
    -$indigo:  #6610f2 !default;
    -$purple:  #6f42c1 !default;
    -$pink:    #d63384 !default;
    -$red:     #dc3545 !default;
    -$orange:  #fd7e14 !default;
    -$yellow:  #ffc107 !default;
    -$green:   #198754 !default;
    -$teal:    #20c997 !default;
    -$cyan:    #0dcaf0 !default;
    -// scss-docs-end color-variables
    -
    -// scss-docs-start colors-map
    -$colors: (
    -  "blue":       $blue,
    -  "indigo":     $indigo,
    -  "purple":     $purple,
    -  "pink":       $pink,
    -  "red":        $red,
    -  "orange":     $orange,
    -  "yellow":     $yellow,
    -  "green":      $green,
    -  "teal":       $teal,
    -  "cyan":       $cyan,
    -  "white":      $white,
    -  "gray":       $gray-600,
    -  "gray-dark":  $gray-800
    -) !default;
    -// scss-docs-end colors-map
    -
    -// scss-docs-start theme-color-variables
    -$primary:       $blue !default;
    -$secondary:     $gray-600 !default;
    -$success:       $green !default;
    -$info:          $cyan !default;
    -$warning:       $yellow !default;
    -$danger:        $red !default;
    -$light:         $gray-100 !default;
    -$dark:          $gray-900 !default;
    -// scss-docs-end theme-color-variables
    -
    -// scss-docs-start theme-colors-map
    -$theme-colors: (
    -  "primary":    $primary,
    -  "secondary":  $secondary,
    -  "success":    $success,
    -  "info":       $info,
    -  "warning":    $warning,
    -  "danger":     $danger,
    -  "light":      $light,
    -  "dark":       $dark
    -) !default;
    -// scss-docs-end theme-colors-map
    -
    -// scss-docs-start theme-colors-rgb
    -$theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
    -// scss-docs-end theme-colors-rgb
    -
    -// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.
    -// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast
    -$min-contrast-ratio:   4.5 !default;
    -
    -// Customize the light and dark text colors for use in our color contrast function.
    -$color-contrast-dark:      $black !default;
    -$color-contrast-light:     $white !default;
    -
    -// fusv-disable
    -$blue-100: tint-color($blue, 80%) !default;
    -$blue-200: tint-color($blue, 60%) !default;
    -$blue-300: tint-color($blue, 40%) !default;
    -$blue-400: tint-color($blue, 20%) !default;
    -$blue-500: $blue !default;
    -$blue-600: shade-color($blue, 20%) !default;
    -$blue-700: shade-color($blue, 40%) !default;
    -$blue-800: shade-color($blue, 60%) !default;
    -$blue-900: shade-color($blue, 80%) !default;
    -
    -$indigo-100: tint-color($indigo, 80%) !default;
    -$indigo-200: tint-color($indigo, 60%) !default;
    -$indigo-300: tint-color($indigo, 40%) !default;
    -$indigo-400: tint-color($indigo, 20%) !default;
    -$indigo-500: $indigo !default;
    -$indigo-600: shade-color($indigo, 20%) !default;
    -$indigo-700: shade-color($indigo, 40%) !default;
    -$indigo-800: shade-color($indigo, 60%) !default;
    -$indigo-900: shade-color($indigo, 80%) !default;
    -
    -$purple-100: tint-color($purple, 80%) !default;
    -$purple-200: tint-color($purple, 60%) !default;
    -$purple-300: tint-color($purple, 40%) !default;
    -$purple-400: tint-color($purple, 20%) !default;
    -$purple-500: $purple !default;
    -$purple-600: shade-color($purple, 20%) !default;
    -$purple-700: shade-color($purple, 40%) !default;
    -$purple-800: shade-color($purple, 60%) !default;
    -$purple-900: shade-color($purple, 80%) !default;
    -
    -$pink-100: tint-color($pink, 80%) !default;
    -$pink-200: tint-color($pink, 60%) !default;
    -$pink-300: tint-color($pink, 40%) !default;
    -$pink-400: tint-color($pink, 20%) !default;
    -$pink-500: $pink !default;
    -$pink-600: shade-color($pink, 20%) !default;
    -$pink-700: shade-color($pink, 40%) !default;
    -$pink-800: shade-color($pink, 60%) !default;
    -$pink-900: shade-color($pink, 80%) !default;
    -
    -$red-100: tint-color($red, 80%) !default;
    -$red-200: tint-color($red, 60%) !default;
    -$red-300: tint-color($red, 40%) !default;
    -$red-400: tint-color($red, 20%) !default;
    -$red-500: $red !default;
    -$red-600: shade-color($red, 20%) !default;
    -$red-700: shade-color($red, 40%) !default;
    -$red-800: shade-color($red, 60%) !default;
    -$red-900: shade-color($red, 80%) !default;
    -
    -$orange-100: tint-color($orange, 80%) !default;
    -$orange-200: tint-color($orange, 60%) !default;
    -$orange-300: tint-color($orange, 40%) !default;
    -$orange-400: tint-color($orange, 20%) !default;
    -$orange-500: $orange !default;
    -$orange-600: shade-color($orange, 20%) !default;
    -$orange-700: shade-color($orange, 40%) !default;
    -$orange-800: shade-color($orange, 60%) !default;
    -$orange-900: shade-color($orange, 80%) !default;
    -
    -$yellow-100: tint-color($yellow, 80%) !default;
    -$yellow-200: tint-color($yellow, 60%) !default;
    -$yellow-300: tint-color($yellow, 40%) !default;
    -$yellow-400: tint-color($yellow, 20%) !default;
    -$yellow-500: $yellow !default;
    -$yellow-600: shade-color($yellow, 20%) !default;
    -$yellow-700: shade-color($yellow, 40%) !default;
    -$yellow-800: shade-color($yellow, 60%) !default;
    -$yellow-900: shade-color($yellow, 80%) !default;
    -
    -$green-100: tint-color($green, 80%) !default;
    -$green-200: tint-color($green, 60%) !default;
    -$green-300: tint-color($green, 40%) !default;
    -$green-400: tint-color($green, 20%) !default;
    -$green-500: $green !default;
    -$green-600: shade-color($green, 20%) !default;
    -$green-700: shade-color($green, 40%) !default;
    -$green-800: shade-color($green, 60%) !default;
    -$green-900: shade-color($green, 80%) !default;
    -
    -$teal-100: tint-color($teal, 80%) !default;
    -$teal-200: tint-color($teal, 60%) !default;
    -$teal-300: tint-color($teal, 40%) !default;
    -$teal-400: tint-color($teal, 20%) !default;
    -$teal-500: $teal !default;
    -$teal-600: shade-color($teal, 20%) !default;
    -$teal-700: shade-color($teal, 40%) !default;
    -$teal-800: shade-color($teal, 60%) !default;
    -$teal-900: shade-color($teal, 80%) !default;
    -
    -$cyan-100: tint-color($cyan, 80%) !default;
    -$cyan-200: tint-color($cyan, 60%) !default;
    -$cyan-300: tint-color($cyan, 40%) !default;
    -$cyan-400: tint-color($cyan, 20%) !default;
    -$cyan-500: $cyan !default;
    -$cyan-600: shade-color($cyan, 20%) !default;
    -$cyan-700: shade-color($cyan, 40%) !default;
    -$cyan-800: shade-color($cyan, 60%) !default;
    -$cyan-900: shade-color($cyan, 80%) !default;
    -
    -$blues: (
    -  "blue-100": $blue-100,
    -  "blue-200": $blue-200,
    -  "blue-300": $blue-300,
    -  "blue-400": $blue-400,
    -  "blue-500": $blue-500,
    -  "blue-600": $blue-600,
    -  "blue-700": $blue-700,
    -  "blue-800": $blue-800,
    -  "blue-900": $blue-900
    -) !default;
    -
    -$indigos: (
    -  "indigo-100": $indigo-100,
    -  "indigo-200": $indigo-200,
    -  "indigo-300": $indigo-300,
    -  "indigo-400": $indigo-400,
    -  "indigo-500": $indigo-500,
    -  "indigo-600": $indigo-600,
    -  "indigo-700": $indigo-700,
    -  "indigo-800": $indigo-800,
    -  "indigo-900": $indigo-900
    -) !default;
    -
    -$purples: (
    -  "purple-100": $purple-200,
    -  "purple-200": $purple-100,
    -  "purple-300": $purple-300,
    -  "purple-400": $purple-400,
    -  "purple-500": $purple-500,
    -  "purple-600": $purple-600,
    -  "purple-700": $purple-700,
    -  "purple-800": $purple-800,
    -  "purple-900": $purple-900
    -) !default;
    -
    -$pinks: (
    -  "pink-100": $pink-100,
    -  "pink-200": $pink-200,
    -  "pink-300": $pink-300,
    -  "pink-400": $pink-400,
    -  "pink-500": $pink-500,
    -  "pink-600": $pink-600,
    -  "pink-700": $pink-700,
    -  "pink-800": $pink-800,
    -  "pink-900": $pink-900
    -) !default;
    -
    -$reds: (
    -  "red-100": $red-100,
    -  "red-200": $red-200,
    -  "red-300": $red-300,
    -  "red-400": $red-400,
    -  "red-500": $red-500,
    -  "red-600": $red-600,
    -  "red-700": $red-700,
    -  "red-800": $red-800,
    -  "red-900": $red-900
    -) !default;
    -
    -$oranges: (
    -  "orange-100": $orange-100,
    -  "orange-200": $orange-200,
    -  "orange-300": $orange-300,
    -  "orange-400": $orange-400,
    -  "orange-500": $orange-500,
    -  "orange-600": $orange-600,
    -  "orange-700": $orange-700,
    -  "orange-800": $orange-800,
    -  "orange-900": $orange-900
    -) !default;
    -
    -$yellows: (
    -  "yellow-100": $yellow-100,
    -  "yellow-200": $yellow-200,
    -  "yellow-300": $yellow-300,
    -  "yellow-400": $yellow-400,
    -  "yellow-500": $yellow-500,
    -  "yellow-600": $yellow-600,
    -  "yellow-700": $yellow-700,
    -  "yellow-800": $yellow-800,
    -  "yellow-900": $yellow-900
    -) !default;
    -
    -$greens: (
    -  "green-100": $green-100,
    -  "green-200": $green-200,
    -  "green-300": $green-300,
    -  "green-400": $green-400,
    -  "green-500": $green-500,
    -  "green-600": $green-600,
    -  "green-700": $green-700,
    -  "green-800": $green-800,
    -  "green-900": $green-900
    -) !default;
    -
    -$teals: (
    -  "teal-100": $teal-100,
    -  "teal-200": $teal-200,
    -  "teal-300": $teal-300,
    -  "teal-400": $teal-400,
    -  "teal-500": $teal-500,
    -  "teal-600": $teal-600,
    -  "teal-700": $teal-700,
    -  "teal-800": $teal-800,
    -  "teal-900": $teal-900
    -) !default;
    -
    -$cyans: (
    -  "cyan-100": $cyan-100,
    -  "cyan-200": $cyan-200,
    -  "cyan-300": $cyan-300,
    -  "cyan-400": $cyan-400,
    -  "cyan-500": $cyan-500,
    -  "cyan-600": $cyan-600,
    -  "cyan-700": $cyan-700,
    -  "cyan-800": $cyan-800,
    -  "cyan-900": $cyan-900
    -) !default;
    -// fusv-enable
    -
    -// Characters which are escaped by the escape-svg function
    -$escaped-characters: (
    -  ("<", "%3c"),
    -  (">", "%3e"),
    -  ("#", "%23"),
    -  ("(", "%28"),
    -  (")", "%29"),
    -) !default;
    -
    -// Options
    -//
    -// Quickly modify global styling by enabling or disabling optional features.
    -
    -$enable-caret:                true !default;
    -$enable-rounded:              true !default;
    -$enable-shadows:              false !default;
    -$enable-gradients:            false !default;
    -$enable-transitions:          true !default;
    -$enable-reduced-motion:       true !default;
    -$enable-smooth-scroll:        true !default;
    -$enable-grid-classes:         true !default;
    -$enable-cssgrid:              false !default;
    -$enable-button-pointers:      true !default;
    -$enable-rfs:                  true !default;
    -$enable-validation-icons:     true !default;
    -$enable-negative-margins:     false !default;
    -$enable-deprecation-messages: true !default;
    -$enable-important-utilities:  true !default;
    -
    -// Prefix for :root CSS variables
    -
    -$variable-prefix:             bs- !default;
    -
    -// Gradient
    -//
    -// The gradient which is added to components if `$enable-gradients` is `true`
    -// This gradient is also added to elements with `.bg-gradient`
    -// scss-docs-start variable-gradient
    -$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;
    -// scss-docs-end variable-gradient
    -
    -// Spacing
    -//
    -// Control the default styling of most Bootstrap elements by modifying these
    -// variables. Mostly focused on spacing.
    -// You can add more entries to the $spacers map, should you need more variation.
    -
    -// scss-docs-start spacer-variables-maps
    -$spacer: 1rem !default;
    -$spacers: (
    -  0: 0,
    -  1: $spacer * .25,
    -  2: $spacer * .5,
    -  3: $spacer,
    -  4: $spacer * 1.5,
    -  5: $spacer * 3,
    -) !default;
    -
    -$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
    -// scss-docs-end spacer-variables-maps
    -
    -// Position
    -//
    -// Define the edge positioning anchors of the position utilities.
    -
    -// scss-docs-start position-map
    -$position-values: (
    -  0: 0,
    -  50: 50%,
    -  100: 100%
    -) !default;
    -// scss-docs-end position-map
    -
    -// Body
    -//
    -// Settings for the `` element.
    -
    -$body-bg:                   $white !default;
    -$body-color:                $gray-900 !default;
    -$body-text-align:           null !default;
    -
    -// Utilities maps
    -//
    -// Extends the default `$theme-colors` maps to help create our utilities.
    -
    -// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.
    -// scss-docs-start utilities-colors
    -$utilities-colors: $theme-colors-rgb !default;
    -// scss-docs-end utilities-colors
    -
    -// scss-docs-start utilities-text-colors
    -$utilities-text: map-merge(
    -  $utilities-colors,
    -  (
    -    "black": to-rgb($black),
    -    "white": to-rgb($white),
    -    "body": to-rgb($body-color)
    -  )
    -) !default;
    -$utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
    -// scss-docs-end utilities-text-colors
    -
    -// scss-docs-start utilities-bg-colors
    -$utilities-bg: map-merge(
    -  $utilities-colors,
    -  (
    -    "black": to-rgb($black),
    -    "white": to-rgb($white),
    -    "body": to-rgb($body-bg)
    -  )
    -) !default;
    -$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
    -// scss-docs-end utilities-bg-colors
    -
    -// Links
    -//
    -// Style anchor elements.
    -
    -$link-color:                              $primary !default;
    -$link-decoration:                         underline !default;
    -$link-shade-percentage:                   20% !default;
    -$link-hover-color:                        shift-color($link-color, $link-shade-percentage) !default;
    -$link-hover-decoration:                   null !default;
    -
    -$stretched-link-pseudo-element:           after !default;
    -$stretched-link-z-index:                  1 !default;
    -
    -// Paragraphs
    -//
    -// Style p element.
    -
    -$paragraph-margin-bottom:   1rem !default;
    -
    -
    -// Grid breakpoints
    -//
    -// Define the minimum dimensions at which your layout will change,
    -// adapting to different screen sizes, for use in media queries.
    -
    -// scss-docs-start grid-breakpoints
    -$grid-breakpoints: (
    -  xs: 0,
    -  sm: 576px,
    -  md: 768px,
    -  lg: 992px,
    -  xl: 1200px,
    -  xxl: 1400px
    -) !default;
    -// scss-docs-end grid-breakpoints
    -
    -@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
    -@include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints");
    -
    -
    -// Grid containers
    -//
    -// Define the maximum width of `.container` for different screen sizes.
    -
    -// scss-docs-start container-max-widths
    -$container-max-widths: (
    -  sm: 540px,
    -  md: 720px,
    -  lg: 960px,
    -  xl: 1140px,
    -  xxl: 1320px
    -) !default;
    -// scss-docs-end container-max-widths
    -
    -@include _assert-ascending($container-max-widths, "$container-max-widths");
    -
    -
    -// Grid columns
    -//
    -// Set the number of columns and specify the width of the gutters.
    -
    -$grid-columns:                12 !default;
    -$grid-gutter-width:           1.5rem !default;
    -$grid-row-columns:            6 !default;
    -
    -$gutters: $spacers !default;
    -
    -// Container padding
    -
    -$container-padding-x: $grid-gutter-width * .5 !default;
    -
    -
    -// Components
    -//
    -// Define common padding and border radius sizes and more.
    -
    -// scss-docs-start border-variables
    -$border-width:                1px !default;
    -$border-widths: (
    -  1: 1px,
    -  2: 2px,
    -  3: 3px,
    -  4: 4px,
    -  5: 5px
    -) !default;
    -
    -$border-color:                $gray-300 !default;
    -// scss-docs-end border-variables
    -
    -// scss-docs-start border-radius-variables
    -$border-radius:               .25rem !default;
    -$border-radius-sm:            .2rem !default;
    -$border-radius-lg:            .3rem !default;
    -$border-radius-pill:          50rem !default;
    -// scss-docs-end border-radius-variables
    -
    -// scss-docs-start box-shadow-variables
    -$box-shadow:                  0 .5rem 1rem rgba($black, .15) !default;
    -$box-shadow-sm:               0 .125rem .25rem rgba($black, .075) !default;
    -$box-shadow-lg:               0 1rem 3rem rgba($black, .175) !default;
    -$box-shadow-inset:            inset 0 1px 2px rgba($black, .075) !default;
    -// scss-docs-end box-shadow-variables
    -
    -$component-active-color:      $white !default;
    -$component-active-bg:         $primary !default;
    -
    -// scss-docs-start caret-variables
    -$caret-width:                 .3em !default;
    -$caret-vertical-align:        $caret-width * .85 !default;
    -$caret-spacing:               $caret-width * .85 !default;
    -// scss-docs-end caret-variables
    -
    -$transition-base:             all .2s ease-in-out !default;
    -$transition-fade:             opacity .15s linear !default;
    -// scss-docs-start collapse-transition
    -$transition-collapse:         height .35s ease !default;
    -$transition-collapse-width:   width .35s ease !default;
    -// scss-docs-end collapse-transition
    -
    -// stylelint-disable function-disallowed-list
    -// scss-docs-start aspect-ratios
    -$aspect-ratios: (
    -  "1x1": 100%,
    -  "4x3": calc(3 / 4 * 100%),
    -  "16x9": calc(9 / 16 * 100%),
    -  "21x9": calc(9 / 21 * 100%)
    -) !default;
    -// scss-docs-end aspect-ratios
    -// stylelint-enable function-disallowed-list
    -
    -// Typography
    -//
    -// Font, line-height, and color for body text, headings, and more.
    -
    -// scss-docs-start font-variables
    -// stylelint-disable value-keyword-case
    -$font-family-sans-serif:      system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
    -$font-family-monospace:       SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
    -// stylelint-enable value-keyword-case
    -$font-family-base:            var(--#{$variable-prefix}font-sans-serif) !default;
    -$font-family-code:            var(--#{$variable-prefix}font-monospace) !default;
    -
    -// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins
    -// $font-size-base affects the font size of the body text
    -$font-size-root:              null !default;
    -$font-size-base:              1rem !default; // Assumes the browser default, typically `16px`
    -$font-size-sm:                $font-size-base * .875 !default;
    -$font-size-lg:                $font-size-base * 1.25 !default;
    -
    -$font-weight-lighter:         lighter !default;
    -$font-weight-light:           300 !default;
    -$font-weight-normal:          400 !default;
    -$font-weight-bold:            700 !default;
    -$font-weight-bolder:          bolder !default;
    -
    -$font-weight-base:            $font-weight-normal !default;
    -
    -$line-height-base:            1.5 !default;
    -$line-height-sm:              1.25 !default;
    -$line-height-lg:              2 !default;
    -
    -$h1-font-size:                $font-size-base * 2.5 !default;
    -$h2-font-size:                $font-size-base * 2 !default;
    -$h3-font-size:                $font-size-base * 1.75 !default;
    -$h4-font-size:                $font-size-base * 1.5 !default;
    -$h5-font-size:                $font-size-base * 1.25 !default;
    -$h6-font-size:                $font-size-base !default;
    -// scss-docs-end font-variables
    -
    -// scss-docs-start font-sizes
    -$font-sizes: (
    -  1: $h1-font-size,
    -  2: $h2-font-size,
    -  3: $h3-font-size,
    -  4: $h4-font-size,
    -  5: $h5-font-size,
    -  6: $h6-font-size
    -) !default;
    -// scss-docs-end font-sizes
    -
    -// scss-docs-start headings-variables
    -$headings-margin-bottom:      $spacer * .5 !default;
    -$headings-font-family:        null !default;
    -$headings-font-style:         null !default;
    -$headings-font-weight:        500 !default;
    -$headings-line-height:        1.2 !default;
    -$headings-color:              null !default;
    -// scss-docs-end headings-variables
    -
    -// scss-docs-start display-headings
    -$display-font-sizes: (
    -  1: 5rem,
    -  2: 4.5rem,
    -  3: 4rem,
    -  4: 3.5rem,
    -  5: 3rem,
    -  6: 2.5rem
    -) !default;
    -
    -$display-font-weight: 300 !default;
    -$display-line-height: $headings-line-height !default;
    -// scss-docs-end display-headings
    -
    -// scss-docs-start type-variables
    -$lead-font-size:              $font-size-base * 1.25 !default;
    -$lead-font-weight:            300 !default;
    -
    -$small-font-size:             .875em !default;
    -
    -$sub-sup-font-size:           .75em !default;
    -
    -$text-muted:                  $gray-600 !default;
    -
    -$initialism-font-size:        $small-font-size !default;
    -
    -$blockquote-margin-y:         $spacer !default;
    -$blockquote-font-size:        $font-size-base * 1.25 !default;
    -$blockquote-footer-color:     $gray-600 !default;
    -$blockquote-footer-font-size: $small-font-size !default;
    -
    -$hr-margin-y:                 $spacer !default;
    -$hr-color:                    inherit !default;
    -$hr-height:                   $border-width !default;
    -$hr-opacity:                  .25 !default;
    -
    -$legend-margin-bottom:        .5rem !default;
    -$legend-font-size:            1.5rem !default;
    -$legend-font-weight:          null !default;
    -
    -$mark-padding:                .2em !default;
    -
    -$dt-font-weight:              $font-weight-bold !default;
    -
    -$nested-kbd-font-weight:      $font-weight-bold !default;
    -
    -$list-inline-padding:         .5rem !default;
    -
    -$mark-bg:                     #fcf8e3 !default;
    -// scss-docs-end type-variables
    -
    -
    -// Tables
    -//
    -// Customizes the `.table` component with basic values, each used across all table variations.
    -
    -// scss-docs-start table-variables
    -$table-cell-padding-y:        .5rem !default;
    -$table-cell-padding-x:        .5rem !default;
    -$table-cell-padding-y-sm:     .25rem !default;
    -$table-cell-padding-x-sm:     .25rem !default;
    -
    -$table-cell-vertical-align:   top !default;
    -
    -$table-color:                 $body-color !default;
    -$table-bg:                    #fff !default;
    -$table-accent-bg:             transparent !default;
    -
    -$table-th-font-weight:        null !default;
    -
    -$table-striped-color:         $table-color !default;
    -$table-striped-bg-factor:     .05 !default;
    -$table-striped-bg:            $gray-200 !default;
    -
    -$table-active-color:          $table-color !default;
    -$table-active-bg-factor:      .1 !default;
    -$table-active-bg:             $gray-600 !default;
    -
    -$table-hover-color:           $table-color !default;
    -$table-hover-bg-factor:       .075 !default;
    -$table-hover-bg:              $gray-400 !default;
    -
    -$table-border-factor:         .1 !default;
    -$table-border-width:          $border-width !default;
    -$table-border-color:          $border-color !default;
    -
    -$table-striped-order:         odd !default;
    -
    -$table-group-separator-color: currentColor !default;
    -
    -$table-caption-color:         $text-muted !default;
    -
    -$table-bg-scale:              -80% !default;
    -// scss-docs-end table-variables
    -
    -// scss-docs-start table-loop
    -$table-variants: (
    -  "primary":    shift-color($primary, $table-bg-scale),
    -  "secondary":  shift-color($secondary, $table-bg-scale),
    -  "success":    shift-color($success, $table-bg-scale),
    -  "info":       shift-color($info, $table-bg-scale),
    -  "warning":    shift-color($warning, $table-bg-scale),
    -  "danger":     shift-color($danger, $table-bg-scale),
    -  "light":      $light,
    -  "dark":       $dark,
    -) !default;
    -// scss-docs-end table-loop
    -
    -
    -// Buttons + Forms
    -//
    -// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
    -
    -// scss-docs-start input-btn-variables
    -$input-btn-padding-y:         .375rem !default;
    -$input-btn-padding-x:         .75rem !default;
    -$input-btn-font-family:       null !default;
    -$input-btn-font-size:         $font-size-base !default;
    -$input-btn-line-height:       $line-height-base !default;
    -
    -$input-btn-focus-width:         .25rem !default;
    -$input-btn-focus-color-opacity: .25 !default;
    -$input-btn-focus-color:         rgba($component-active-bg, $input-btn-focus-color-opacity) !default;
    -$input-btn-focus-blur:          0 !default;
    -$input-btn-focus-box-shadow:    0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;
    -
    -$input-btn-padding-y-sm:      .25rem !default;
    -$input-btn-padding-x-sm:      .5rem !default;
    -$input-btn-font-size-sm:      $font-size-sm !default;
    -
    -$input-btn-padding-y-lg:      .5rem !default;
    -$input-btn-padding-x-lg:      1rem !default;
    -$input-btn-font-size-lg:      $font-size-lg !default;
    -
    -$input-btn-border-width:      $border-width !default;
    -// scss-docs-end input-btn-variables
    -
    -
    -// Buttons
    -//
    -// For each of Bootstrap's buttons, define text, background, and border color.
    -
    -// scss-docs-start btn-variables
    -$btn-padding-y:               $input-btn-padding-y !default;
    -$btn-padding-x:               $input-btn-padding-x !default;
    -$btn-font-family:             $input-btn-font-family !default;
    -$btn-font-size:               $input-btn-font-size !default;
    -$btn-line-height:             $input-btn-line-height !default;
    -$btn-white-space:             null !default; // Set to `nowrap` to prevent text wrapping
    -
    -$btn-padding-y-sm:            $input-btn-padding-y-sm !default;
    -$btn-padding-x-sm:            $input-btn-padding-x-sm !default;
    -$btn-font-size-sm:            $input-btn-font-size-sm !default;
    -
    -$btn-padding-y-lg:            $input-btn-padding-y-lg !default;
    -$btn-padding-x-lg:            $input-btn-padding-x-lg !default;
    -$btn-font-size-lg:            $input-btn-font-size-lg !default;
    -
    -$btn-border-width:            $input-btn-border-width !default;
    -
    -$btn-font-weight:             $font-weight-normal !default;
    -$btn-box-shadow:              inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;
    -$btn-focus-width:             $input-btn-focus-width !default;
    -$btn-focus-box-shadow:        $input-btn-focus-box-shadow !default;
    -$btn-disabled-opacity:        .65 !default;
    -$btn-active-box-shadow:       inset 0 3px 5px rgba($black, .125) !default;
    -
    -$btn-link-color:              $link-color !default;
    -$btn-link-hover-color:        $link-hover-color !default;
    -$btn-link-disabled-color:     $gray-600 !default;
    -
    -// Allows for customizing button radius independently from global border radius
    -$btn-border-radius:           $border-radius !default;
    -$btn-border-radius-sm:        $border-radius-sm !default;
    -$btn-border-radius-lg:        $border-radius-lg !default;
    -
    -$btn-transition:              color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
    -
    -$btn-hover-bg-shade-amount:       15% !default;
    -$btn-hover-bg-tint-amount:        15% !default;
    -$btn-hover-border-shade-amount:   20% !default;
    -$btn-hover-border-tint-amount:    10% !default;
    -$btn-active-bg-shade-amount:      20% !default;
    -$btn-active-bg-tint-amount:       20% !default;
    -$btn-active-border-shade-amount:  25% !default;
    -$btn-active-border-tint-amount:   10% !default;
    -// scss-docs-end btn-variables
    -
    -
    -// Forms
    -
    -// scss-docs-start form-text-variables
    -$form-text-margin-top:                  .25rem !default;
    -$form-text-font-size:                   $small-font-size !default;
    -$form-text-font-style:                  null !default;
    -$form-text-font-weight:                 null !default;
    -$form-text-color:                       $text-muted !default;
    -// scss-docs-end form-text-variables
    -
    -// scss-docs-start form-label-variables
    -$form-label-margin-bottom:              .5rem !default;
    -$form-label-font-size:                  null !default;
    -$form-label-font-style:                 null !default;
    -$form-label-font-weight:                null !default;
    -$form-label-color:                      null !default;
    -// scss-docs-end form-label-variables
    -
    -// scss-docs-start form-input-variables
    -$input-padding-y:                       $input-btn-padding-y !default;
    -$input-padding-x:                       $input-btn-padding-x !default;
    -$input-font-family:                     $input-btn-font-family !default;
    -$input-font-size:                       $input-btn-font-size !default;
    -$input-font-weight:                     $font-weight-base !default;
    -$input-line-height:                     $input-btn-line-height !default;
    -
    -$input-padding-y-sm:                    $input-btn-padding-y-sm !default;
    -$input-padding-x-sm:                    $input-btn-padding-x-sm !default;
    -$input-font-size-sm:                    $input-btn-font-size-sm !default;
    -
    -$input-padding-y-lg:                    $input-btn-padding-y-lg !default;
    -$input-padding-x-lg:                    $input-btn-padding-x-lg !default;
    -$input-font-size-lg:                    $input-btn-font-size-lg !default;
    -
    -$input-bg:                              $body-bg !default;
    -$input-disabled-bg:                     $gray-200 !default;
    -$input-disabled-border-color:           null !default;
    -
    -$input-color:                           $body-color !default;
    -$input-border-color:                    $gray-400 !default;
    -$input-border-width:                    $input-btn-border-width !default;
    -$input-box-shadow:                      $box-shadow-inset !default;
    -
    -$input-border-radius:                   $border-radius !default;
    -$input-border-radius-sm:                $border-radius-sm !default;
    -$input-border-radius-lg:                $border-radius-lg !default;
    -
    -$input-focus-bg:                        $input-bg !default;
    -$input-focus-border-color:              tint-color($component-active-bg, 50%) !default;
    -$input-focus-color:                     $input-color !default;
    -$input-focus-width:                     $input-btn-focus-width !default;
    -$input-focus-box-shadow:                $input-btn-focus-box-shadow !default;
    -
    -$input-placeholder-color:               $gray-600 !default;
    -$input-plaintext-color:                 $body-color !default;
    -
    -$input-height-border:                   $input-border-width * 2 !default;
    -
    -$input-height-inner:                    add($input-line-height * 1em, $input-padding-y * 2) !default;
    -$input-height-inner-half:               add($input-line-height * .5em, $input-padding-y) !default;
    -$input-height-inner-quarter:            add($input-line-height * .25em, $input-padding-y * .5) !default;
    -
    -$input-height:                          add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;
    -$input-height-sm:                       add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;
    -$input-height-lg:                       add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;
    -
    -$input-transition:                      border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
    -
    -$form-color-width:                      3rem !default;
    -// scss-docs-end form-input-variables
    -
    -// scss-docs-start form-check-variables
    -$form-check-input-width:                  1em !default;
    -$form-check-min-height:                   $font-size-base * $line-height-base !default;
    -$form-check-padding-start:                $form-check-input-width + .5em !default;
    -$form-check-margin-bottom:                .125rem !default;
    -$form-check-label-color:                  null !default;
    -$form-check-label-cursor:                 null !default;
    -$form-check-transition:                   null !default;
    -
    -$form-check-input-active-filter:          brightness(90%) !default;
    -
    -$form-check-input-bg:                     $input-bg !default;
    -$form-check-input-border:                 1px solid rgba($black, .25) !default;
    -$form-check-input-border-radius:          .25em !default;
    -$form-check-radio-border-radius:          50% !default;
    -$form-check-input-focus-border:           $input-focus-border-color !default;
    -$form-check-input-focus-box-shadow:       $input-btn-focus-box-shadow !default;
    -
    -$form-check-input-checked-color:          $component-active-color !default;
    -$form-check-input-checked-bg-color:       $component-active-bg !default;
    -$form-check-input-checked-border-color:   $form-check-input-checked-bg-color !default;
    -$form-check-input-checked-bg-image:       url("data:image/svg+xml,") !default;
    -$form-check-radio-checked-bg-image:       url("data:image/svg+xml,") !default;
    -
    -$form-check-input-indeterminate-color:          $component-active-color !default;
    -$form-check-input-indeterminate-bg-color:       $component-active-bg !default;
    -$form-check-input-indeterminate-border-color:   $form-check-input-indeterminate-bg-color !default;
    -$form-check-input-indeterminate-bg-image:       url("data:image/svg+xml,") !default;
    -
    -$form-check-input-disabled-opacity:        .5 !default;
    -$form-check-label-disabled-opacity:        $form-check-input-disabled-opacity !default;
    -$form-check-btn-check-disabled-opacity:    $btn-disabled-opacity !default;
    -
    -$form-check-inline-margin-end:    1rem !default;
    -// scss-docs-end form-check-variables
    -
    -// scss-docs-start form-switch-variables
    -$form-switch-color:               rgba($black, .25) !default;
    -$form-switch-width:               2em !default;
    -$form-switch-padding-start:       $form-switch-width + .5em !default;
    -$form-switch-bg-image:            url("data:image/svg+xml,") !default;
    -$form-switch-border-radius:       $form-switch-width !default;
    -$form-switch-transition:          background-position .15s ease-in-out !default;
    -
    -$form-switch-focus-color:         $input-focus-border-color !default;
    -$form-switch-focus-bg-image:      url("data:image/svg+xml,") !default;
    -
    -$form-switch-checked-color:       $component-active-color !default;
    -$form-switch-checked-bg-image:    url("data:image/svg+xml,") !default;
    -$form-switch-checked-bg-position: right center !default;
    -// scss-docs-end form-switch-variables
    -
    -// scss-docs-start input-group-variables
    -$input-group-addon-padding-y:           $input-padding-y !default;
    -$input-group-addon-padding-x:           $input-padding-x !default;
    -$input-group-addon-font-weight:         $input-font-weight !default;
    -$input-group-addon-color:               $input-color !default;
    -$input-group-addon-bg:                  $gray-200 !default;
    -$input-group-addon-border-color:        $input-border-color !default;
    -// scss-docs-end input-group-variables
    -
    -// scss-docs-start form-select-variables
    -$form-select-padding-y:             $input-padding-y !default;
    -$form-select-padding-x:             $input-padding-x !default;
    -$form-select-font-family:           $input-font-family !default;
    -$form-select-font-size:             $input-font-size !default;
    -$form-select-indicator-padding:     $form-select-padding-x * 3 !default; // Extra padding for background-image
    -$form-select-font-weight:           $input-font-weight !default;
    -$form-select-line-height:           $input-line-height !default;
    -$form-select-color:                 $input-color !default;
    -$form-select-bg:                    $input-bg !default;
    -$form-select-disabled-color:        null !default;
    -$form-select-disabled-bg:           $gray-200 !default;
    -$form-select-disabled-border-color: $input-disabled-border-color !default;
    -$form-select-bg-position:           right $form-select-padding-x center !default;
    -$form-select-bg-size:               16px 12px !default; // In pixels because image dimensions
    -$form-select-indicator-color:       $gray-800 !default;
    -$form-select-indicator:             url("data:image/svg+xml,") !default;
    -
    -$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;
    -$form-select-feedback-icon-position:    center right $form-select-indicator-padding !default;
    -$form-select-feedback-icon-size:        $input-height-inner-half $input-height-inner-half !default;
    -
    -$form-select-border-width:        $input-border-width !default;
    -$form-select-border-color:        $input-border-color !default;
    -$form-select-border-radius:       $input-border-radius !default;
    -$form-select-box-shadow:          $box-shadow-inset !default;
    -
    -$form-select-focus-border-color:  $input-focus-border-color !default;
    -$form-select-focus-width:         $input-focus-width !default;
    -$form-select-focus-box-shadow:    0 0 0 $form-select-focus-width $input-btn-focus-color !default;
    -
    -$form-select-padding-y-sm:        $input-padding-y-sm !default;
    -$form-select-padding-x-sm:        $input-padding-x-sm !default;
    -$form-select-font-size-sm:        $input-font-size-sm !default;
    -$form-select-border-radius-sm:    $input-border-radius-sm !default;
    -
    -$form-select-padding-y-lg:        $input-padding-y-lg !default;
    -$form-select-padding-x-lg:        $input-padding-x-lg !default;
    -$form-select-font-size-lg:        $input-font-size-lg !default;
    -$form-select-border-radius-lg:    $input-border-radius-lg !default;
    -
    -$form-select-transition:          $input-transition !default;
    -// scss-docs-end form-select-variables
    -
    -// scss-docs-start form-range-variables
    -$form-range-track-width:          100% !default;
    -$form-range-track-height:         .5rem !default;
    -$form-range-track-cursor:         pointer !default;
    -$form-range-track-bg:             $gray-300 !default;
    -$form-range-track-border-radius:  1rem !default;
    -$form-range-track-box-shadow:     $box-shadow-inset !default;
    -
    -$form-range-thumb-width:                   1rem !default;
    -$form-range-thumb-height:                  $form-range-thumb-width !default;
    -$form-range-thumb-bg:                      $component-active-bg !default;
    -$form-range-thumb-border:                  0 !default;
    -$form-range-thumb-border-radius:           1rem !default;
    -$form-range-thumb-box-shadow:              0 .1rem .25rem rgba($black, .1) !default;
    -$form-range-thumb-focus-box-shadow:        0 0 0 1px $body-bg, $input-focus-box-shadow !default;
    -$form-range-thumb-focus-box-shadow-width:  $input-focus-width !default; // For focus box shadow issue in Edge
    -$form-range-thumb-active-bg:               tint-color($component-active-bg, 70%) !default;
    -$form-range-thumb-disabled-bg:             $gray-500 !default;
    -$form-range-thumb-transition:              background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
    -// scss-docs-end form-range-variables
    -
    -// scss-docs-start form-file-variables
    -$form-file-button-color:          $input-color !default;
    -$form-file-button-bg:             $input-group-addon-bg !default;
    -$form-file-button-hover-bg:       shade-color($form-file-button-bg, 5%) !default;
    -// scss-docs-end form-file-variables
    -
    -// scss-docs-start form-floating-variables
    -$form-floating-height:            add(3.5rem, $input-height-border) !default;
    -$form-floating-line-height:       1.25 !default;
    -$form-floating-padding-x:         $input-padding-x !default;
    -$form-floating-padding-y:         1rem !default;
    -$form-floating-input-padding-t:   1.625rem !default;
    -$form-floating-input-padding-b:   .625rem !default;
    -$form-floating-label-opacity:     .65 !default;
    -$form-floating-label-transform:   scale(.85) translateY(-.5rem) translateX(.15rem) !default;
    -$form-floating-transition:        opacity .1s ease-in-out, transform .1s ease-in-out !default;
    -// scss-docs-end form-floating-variables
    -
    -// Form validation
    -
    -// scss-docs-start form-feedback-variables
    -$form-feedback-margin-top:          $form-text-margin-top !default;
    -$form-feedback-font-size:           $form-text-font-size !default;
    -$form-feedback-font-style:          $form-text-font-style !default;
    -$form-feedback-valid-color:         $success !default;
    -$form-feedback-invalid-color:       $danger !default;
    -
    -$form-feedback-icon-valid-color:    $form-feedback-valid-color !default;
    -$form-feedback-icon-valid:          url("data:image/svg+xml,") !default;
    -$form-feedback-icon-invalid-color:  $form-feedback-invalid-color !default;
    -$form-feedback-icon-invalid:        url("data:image/svg+xml,") !default;
    -// scss-docs-end form-feedback-variables
    -
    -// scss-docs-start form-validation-states
    -$form-validation-states: (
    -  "valid": (
    -    "color": $form-feedback-valid-color,
    -    "icon": $form-feedback-icon-valid
    -  ),
    -  "invalid": (
    -    "color": $form-feedback-invalid-color,
    -    "icon": $form-feedback-icon-invalid
    -  )
    -) !default;
    -// scss-docs-end form-validation-states
    -
    -// Z-index master list
    -//
    -// Warning: Avoid customizing these values. They're used for a bird's eye view
    -// of components dependent on the z-axis and are designed to all work together.
    -
    -// scss-docs-start zindex-stack
    -$zindex-dropdown:                   1000 !default;
    -$zindex-sticky:                     1020 !default;
    -$zindex-fixed:                      1030 !default;
    -$zindex-offcanvas-backdrop:         1040 !default;
    -$zindex-offcanvas:                  1045 !default;
    -$zindex-modal-backdrop:             1050 !default;
    -$zindex-modal:                      1055 !default;
    -$zindex-popover:                    1070 !default;
    -$zindex-tooltip:                    1080 !default;
    -// scss-docs-end zindex-stack
    -
    -
    -// Navs
    -
    -// scss-docs-start nav-variables
    -$nav-link-padding-y:                .5rem !default;
    -$nav-link-padding-x:                1rem !default;
    -$nav-link-font-size:                null !default;
    -$nav-link-font-weight:              null !default;
    -$nav-link-color:                    $link-color !default;
    -$nav-link-hover-color:              $link-hover-color !default;
    -$nav-link-transition:               color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;
    -$nav-link-disabled-color:           $gray-600 !default;
    -
    -$nav-tabs-border-color:             $gray-300 !default;
    -$nav-tabs-border-width:             $border-width !default;
    -$nav-tabs-border-radius:            $border-radius !default;
    -$nav-tabs-link-hover-border-color:  $gray-200 $gray-200 $nav-tabs-border-color !default;
    -$nav-tabs-link-active-color:        $gray-700 !default;
    -$nav-tabs-link-active-bg:           $body-bg !default;
    -$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;
    -
    -$nav-pills-border-radius:           $border-radius !default;
    -$nav-pills-link-active-color:       $component-active-color !default;
    -$nav-pills-link-active-bg:          $component-active-bg !default;
    -// scss-docs-end nav-variables
    -
    -
    -// Navbar
    -
    -// scss-docs-start navbar-variables
    -$navbar-padding-y:                  $spacer * .5 !default;
    -$navbar-padding-x:                  null !default;
    -
    -$navbar-nav-link-padding-x:         .5rem !default;
    -
    -$navbar-brand-font-size:            $font-size-lg !default;
    -// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link
    -$nav-link-height:                   $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;
    -$navbar-brand-height:               $navbar-brand-font-size * $line-height-base !default;
    -$navbar-brand-padding-y:            ($nav-link-height - $navbar-brand-height) * .5 !default;
    -$navbar-brand-margin-end:           1rem !default;
    -
    -$navbar-toggler-padding-y:          .25rem !default;
    -$navbar-toggler-padding-x:          .75rem !default;
    -$navbar-toggler-font-size:          $font-size-lg !default;
    -$navbar-toggler-border-radius:      $btn-border-radius !default;
    -$navbar-toggler-focus-width:        $btn-focus-width !default;
    -$navbar-toggler-transition:         box-shadow .15s ease-in-out !default;
    -// scss-docs-end navbar-variables
    -
    -// scss-docs-start navbar-theme-variables
    -$navbar-dark-color:                 rgba($white, .55) !default;
    -$navbar-dark-hover-color:           rgba($white, .75) !default;
    -$navbar-dark-active-color:          $white !default;
    -$navbar-dark-disabled-color:        rgba($white, .25) !default;
    -$navbar-dark-toggler-icon-bg:       url("data:image/svg+xml,") !default;
    -$navbar-dark-toggler-border-color:  rgba($white, .1) !default;
    -
    -$navbar-light-color:                rgba($black, .55) !default;
    -$navbar-light-hover-color:          rgba($black, .7) !default;
    -$navbar-light-active-color:         rgba($black, .9) !default;
    -$navbar-light-disabled-color:       rgba($black, .3) !default;
    -$navbar-light-toggler-icon-bg:      url("data:image/svg+xml,") !default;
    -$navbar-light-toggler-border-color: rgba($black, .1) !default;
    -
    -$navbar-light-brand-color:                $navbar-light-active-color !default;
    -$navbar-light-brand-hover-color:          $navbar-light-active-color !default;
    -$navbar-dark-brand-color:                 $navbar-dark-active-color !default;
    -$navbar-dark-brand-hover-color:           $navbar-dark-active-color !default;
    -// scss-docs-end navbar-theme-variables
    -
    -
    -// Dropdowns
    -//
    -// Dropdown menu container and contents.
    -
    -// scss-docs-start dropdown-variables
    -$dropdown-min-width:                10rem !default;
    -$dropdown-padding-x:                0 !default;
    -$dropdown-padding-y:                .5rem !default;
    -$dropdown-spacer:                   .125rem !default;
    -$dropdown-font-size:                $font-size-base !default;
    -$dropdown-color:                    $body-color !default;
    -$dropdown-bg:                       $white !default;
    -$dropdown-border-color:             rgba($black, .15) !default;
    -$dropdown-border-radius:            $border-radius !default;
    -$dropdown-border-width:             $border-width !default;
    -$dropdown-inner-border-radius:      subtract($dropdown-border-radius, $dropdown-border-width) !default;
    -$dropdown-divider-bg:               $dropdown-border-color !default;
    -$dropdown-divider-margin-y:         $spacer * .5 !default;
    -$dropdown-box-shadow:               $box-shadow !default;
    -
    -$dropdown-link-color:               $gray-900 !default;
    -$dropdown-link-hover-color:         shade-color($dropdown-link-color, 10%) !default;
    -$dropdown-link-hover-bg:            $gray-200 !default;
    -
    -$dropdown-link-active-color:        $component-active-color !default;
    -$dropdown-link-active-bg:           $component-active-bg !default;
    -
    -$dropdown-link-disabled-color:      $gray-500 !default;
    -
    -$dropdown-item-padding-y:           $spacer * .25 !default;
    -$dropdown-item-padding-x:           $spacer !default;
    -
    -$dropdown-header-color:             $gray-600 !default;
    -$dropdown-header-padding:           $dropdown-padding-y $dropdown-item-padding-x !default;
    -// scss-docs-end dropdown-variables
    -
    -// scss-docs-start dropdown-dark-variables
    -$dropdown-dark-color:               $gray-300 !default;
    -$dropdown-dark-bg:                  $gray-800 !default;
    -$dropdown-dark-border-color:        $dropdown-border-color !default;
    -$dropdown-dark-divider-bg:          $dropdown-divider-bg !default;
    -$dropdown-dark-box-shadow:          null !default;
    -$dropdown-dark-link-color:          $dropdown-dark-color !default;
    -$dropdown-dark-link-hover-color:    $white !default;
    -$dropdown-dark-link-hover-bg:       rgba($white, .15) !default;
    -$dropdown-dark-link-active-color:   $dropdown-link-active-color !default;
    -$dropdown-dark-link-active-bg:      $dropdown-link-active-bg !default;
    -$dropdown-dark-link-disabled-color: $gray-500 !default;
    -$dropdown-dark-header-color:        $gray-500 !default;
    -// scss-docs-end dropdown-dark-variables
    -
    -
    -// Pagination
    -
    -// scss-docs-start pagination-variables
    -$pagination-padding-y:              .375rem !default;
    -$pagination-padding-x:              .75rem !default;
    -$pagination-padding-y-sm:           .25rem !default;
    -$pagination-padding-x-sm:           .5rem !default;
    -$pagination-padding-y-lg:           .75rem !default;
    -$pagination-padding-x-lg:           1.5rem !default;
    -
    -$pagination-color:                  $link-color !default;
    -$pagination-bg:                     $white !default;
    -$pagination-border-width:           $border-width !default;
    -$pagination-border-radius:          $border-radius !default;
    -$pagination-margin-start:           -$pagination-border-width !default;
    -$pagination-border-color:           $gray-300 !default;
    -
    -$pagination-focus-color:            $link-hover-color !default;
    -$pagination-focus-bg:               $gray-200 !default;
    -$pagination-focus-box-shadow:       $input-btn-focus-box-shadow !default;
    -$pagination-focus-outline:          0 !default;
    -
    -$pagination-hover-color:            $link-hover-color !default;
    -$pagination-hover-bg:               $gray-200 !default;
    -$pagination-hover-border-color:     $gray-300 !default;
    -
    -$pagination-active-color:           $component-active-color !default;
    -$pagination-active-bg:              $component-active-bg !default;
    -$pagination-active-border-color:    $pagination-active-bg !default;
    -
    -$pagination-disabled-color:         $gray-600 !default;
    -$pagination-disabled-bg:            $white !default;
    -$pagination-disabled-border-color:  $gray-300 !default;
    -
    -$pagination-transition:              color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
    -
    -$pagination-border-radius-sm:       $border-radius-sm !default;
    -$pagination-border-radius-lg:       $border-radius-lg !default;
    -// scss-docs-end pagination-variables
    -
    -
    -// Placeholders
    -
    -// scss-docs-start placeholders
    -$placeholder-opacity-max:           .5 !default;
    -$placeholder-opacity-min:           .2 !default;
    -// scss-docs-end placeholders
    -
    -// Cards
    -
    -// scss-docs-start card-variables
    -$card-spacer-y:                     $spacer !default;
    -$card-spacer-x:                     $spacer !default;
    -$card-title-spacer-y:               $spacer * .5 !default;
    -$card-border-width:                 $border-width !default;
    -$card-border-color:                 rgba($black, .125) !default;
    -$card-border-radius:                $border-radius !default;
    -$card-box-shadow:                   null !default;
    -$card-inner-border-radius:          subtract($card-border-radius, $card-border-width) !default;
    -$card-cap-padding-y:                $card-spacer-y * .5 !default;
    -$card-cap-padding-x:                $card-spacer-x !default;
    -$card-cap-bg:                       rgba($black, .03) !default;
    -$card-cap-color:                    null !default;
    -$card-height:                       null !default;
    -$card-color:                        null !default;
    -$card-bg:                           $white !default;
    -$card-img-overlay-padding:          $spacer !default;
    -$card-group-margin:                 $grid-gutter-width * .5 !default;
    -// scss-docs-end card-variables
    -
    -// Accordion
    -
    -// scss-docs-start accordion-variables
    -$accordion-padding-y:                     1rem !default;
    -$accordion-padding-x:                     1.25rem !default;
    -$accordion-color:                         $body-color !default;
    -$accordion-bg:                            $body-bg !default;
    -$accordion-border-width:                  $border-width !default;
    -$accordion-border-color:                  rgba($black, .125) !default;
    -$accordion-border-radius:                 $border-radius !default;
    -$accordion-inner-border-radius:           subtract($accordion-border-radius, $accordion-border-width) !default;
    -
    -$accordion-body-padding-y:                $accordion-padding-y !default;
    -$accordion-body-padding-x:                $accordion-padding-x !default;
    -
    -$accordion-button-padding-y:              $accordion-padding-y !default;
    -$accordion-button-padding-x:              $accordion-padding-x !default;
    -$accordion-button-color:                  $accordion-color !default;
    -$accordion-button-bg:                     $accordion-bg !default;
    -$accordion-transition:                    $btn-transition, border-radius .15s ease !default;
    -$accordion-button-active-bg:              tint-color($component-active-bg, 90%) !default;
    -$accordion-button-active-color:           shade-color($primary, 10%) !default;
    -
    -$accordion-button-focus-border-color:     $input-focus-border-color !default;
    -$accordion-button-focus-box-shadow:       $btn-focus-box-shadow !default;
    -
    -$accordion-icon-width:                    1.25rem !default;
    -$accordion-icon-color:                    $accordion-button-color !default;
    -$accordion-icon-active-color:             $accordion-button-active-color !default;
    -$accordion-icon-transition:               transform .2s ease-in-out !default;
    -$accordion-icon-transform:                rotate(-180deg) !default;
    -
    -$accordion-button-icon:         url("data:image/svg+xml,") !default;
    -$accordion-button-active-icon:  url("data:image/svg+xml,") !default;
    -// scss-docs-end accordion-variables
    -
    -// Tooltips
    -
    -// scss-docs-start tooltip-variables
    -$tooltip-font-size:                 $font-size-sm !default;
    -$tooltip-max-width:                 200px !default;
    -$tooltip-color:                     $white !default;
    -$tooltip-bg:                        $black !default;
    -$tooltip-border-radius:             $border-radius !default;
    -$tooltip-opacity:                   .9 !default;
    -$tooltip-padding-y:                 $spacer * .25 !default;
    -$tooltip-padding-x:                 $spacer * .5 !default;
    -$tooltip-margin:                    0 !default;
    -
    -$tooltip-arrow-width:               .8rem !default;
    -$tooltip-arrow-height:              .4rem !default;
    -$tooltip-arrow-color:               $tooltip-bg !default;
    -// scss-docs-end tooltip-variables
    -
    -// Form tooltips must come after regular tooltips
    -// scss-docs-start tooltip-feedback-variables
    -$form-feedback-tooltip-padding-y:     $tooltip-padding-y !default;
    -$form-feedback-tooltip-padding-x:     $tooltip-padding-x !default;
    -$form-feedback-tooltip-font-size:     $tooltip-font-size !default;
    -$form-feedback-tooltip-line-height:   null !default;
    -$form-feedback-tooltip-opacity:       $tooltip-opacity !default;
    -$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;
    -// scss-docs-end tooltip-feedback-variables
    -
    -
    -// Popovers
    -
    -// scss-docs-start popover-variables
    -$popover-font-size:                 $font-size-sm !default;
    -$popover-bg:                        $white !default;
    -$popover-max-width:                 276px !default;
    -$popover-border-width:              $border-width !default;
    -$popover-border-color:              rgba($black, .2) !default;
    -$popover-border-radius:             $border-radius-lg !default;
    -$popover-inner-border-radius:       subtract($popover-border-radius, $popover-border-width) !default;
    -$popover-box-shadow:                $box-shadow !default;
    -
    -$popover-header-bg:                 shade-color($popover-bg, 6%) !default;
    -$popover-header-color:              $headings-color !default;
    -$popover-header-padding-y:          .5rem !default;
    -$popover-header-padding-x:          $spacer !default;
    -
    -$popover-body-color:                $body-color !default;
    -$popover-body-padding-y:            $spacer !default;
    -$popover-body-padding-x:            $spacer !default;
    -
    -$popover-arrow-width:               1rem !default;
    -$popover-arrow-height:              .5rem !default;
    -$popover-arrow-color:               $popover-bg !default;
    -
    -$popover-arrow-outer-color:         fade-in($popover-border-color, .05) !default;
    -// scss-docs-end popover-variables
    -
    -
    -// Toasts
    -
    -// scss-docs-start toast-variables
    -$toast-max-width:                   350px !default;
    -$toast-padding-x:                   .75rem !default;
    -$toast-padding-y:                   .5rem !default;
    -$toast-font-size:                   .875rem !default;
    -$toast-color:                       null !default;
    -$toast-background-color:            rgba($white, .85) !default;
    -$toast-border-width:                1px !default;
    -$toast-border-color:                rgba($black, .1) !default;
    -$toast-border-radius:               $border-radius !default;
    -$toast-box-shadow:                  $box-shadow !default;
    -$toast-spacing:                     $container-padding-x !default;
    -
    -$toast-header-color:                $gray-600 !default;
    -$toast-header-background-color:     rgba($white, .85) !default;
    -$toast-header-border-color:         rgba($black, .05) !default;
    -// scss-docs-end toast-variables
    -
    -
    -// Badges
    -
    -// scss-docs-start badge-variables
    -$badge-font-size:                   .75em !default;
    -$badge-font-weight:                 $font-weight-bold !default;
    -$badge-color:                       $white !default;
    -$badge-padding-y:                   .35em !default;
    -$badge-padding-x:                   .65em !default;
    -$badge-border-radius:               $border-radius !default;
    -// scss-docs-end badge-variables
    -
    -
    -// Modals
    -
    -// scss-docs-start modal-variables
    -$modal-inner-padding:               $spacer !default;
    -
    -$modal-footer-margin-between:       .5rem !default;
    -
    -$modal-dialog-margin:               .5rem !default;
    -$modal-dialog-margin-y-sm-up:       1.75rem !default;
    -
    -$modal-title-line-height:           $line-height-base !default;
    -
    -$modal-content-color:               null !default;
    -$modal-content-bg:                  $white !default;
    -$modal-content-border-color:        rgba($black, .2) !default;
    -$modal-content-border-width:        $border-width !default;
    -$modal-content-border-radius:       $border-radius-lg !default;
    -$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;
    -$modal-content-box-shadow-xs:       $box-shadow-sm !default;
    -$modal-content-box-shadow-sm-up:    $box-shadow !default;
    -
    -$modal-backdrop-bg:                 $black !default;
    -$modal-backdrop-opacity:            .5 !default;
    -$modal-header-border-color:         $border-color !default;
    -$modal-footer-border-color:         $modal-header-border-color !default;
    -$modal-header-border-width:         $modal-content-border-width !default;
    -$modal-footer-border-width:         $modal-header-border-width !default;
    -$modal-header-padding-y:            $modal-inner-padding !default;
    -$modal-header-padding-x:            $modal-inner-padding !default;
    -$modal-header-padding:              $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility
    -
    -$modal-sm:                          300px !default;
    -$modal-md:                          500px !default;
    -$modal-lg:                          800px !default;
    -$modal-xl:                          1140px !default;
    -
    -$modal-fade-transform:              translate(0, -50px) !default;
    -$modal-show-transform:              none !default;
    -$modal-transition:                  transform .3s ease-out !default;
    -$modal-scale-transform:             scale(1.02) !default;
    -// scss-docs-end modal-variables
    -
    -
    -// Alerts
    -//
    -// Define alert colors, border radius, and padding.
    -
    -// scss-docs-start alert-variables
    -$alert-padding-y:               $spacer !default;
    -$alert-padding-x:               $spacer !default;
    -$alert-margin-bottom:           1rem !default;
    -$alert-border-radius:           $border-radius !default;
    -$alert-link-font-weight:        $font-weight-bold !default;
    -$alert-border-width:            $border-width !default;
    -$alert-bg-scale:                -80% !default;
    -$alert-border-scale:            -70% !default;
    -$alert-color-scale:             40% !default;
    -$alert-dismissible-padding-r:   $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side
    -// scss-docs-end alert-variables
    -
    -
    -// Progress bars
    -
    -// scss-docs-start progress-variables
    -$progress-height:                   1rem !default;
    -$progress-font-size:                $font-size-base * .75 !default;
    -$progress-bg:                       $gray-200 !default;
    -$progress-border-radius:            $border-radius !default;
    -$progress-box-shadow:               $box-shadow-inset !default;
    -$progress-bar-color:                $white !default;
    -$progress-bar-bg:                   $primary !default;
    -$progress-bar-animation-timing:     1s linear infinite !default;
    -$progress-bar-transition:           width .6s ease !default;
    -// scss-docs-end progress-variables
    -
    -
    -// List group
    -
    -// scss-docs-start list-group-variables
    -$list-group-color:                  $gray-900 !default;
    -$list-group-bg:                     $white !default;
    -$list-group-border-color:           rgba($black, .125) !default;
    -$list-group-border-width:           $border-width !default;
    -$list-group-border-radius:          $border-radius !default;
    -
    -$list-group-item-padding-y:         $spacer * .5 !default;
    -$list-group-item-padding-x:         $spacer !default;
    -$list-group-item-bg-scale:          -80% !default;
    -$list-group-item-color-scale:       40% !default;
    -
    -$list-group-hover-bg:               $gray-100 !default;
    -$list-group-active-color:           $component-active-color !default;
    -$list-group-active-bg:              $component-active-bg !default;
    -$list-group-active-border-color:    $list-group-active-bg !default;
    -
    -$list-group-disabled-color:         $gray-600 !default;
    -$list-group-disabled-bg:            $list-group-bg !default;
    -
    -$list-group-action-color:           $gray-700 !default;
    -$list-group-action-hover-color:     $list-group-action-color !default;
    -
    -$list-group-action-active-color:    $body-color !default;
    -$list-group-action-active-bg:       $gray-200 !default;
    -// scss-docs-end list-group-variables
    -
    -
    -// Image thumbnails
    -
    -// scss-docs-start thumbnail-variables
    -$thumbnail-padding:                 .25rem !default;
    -$thumbnail-bg:                      $body-bg !default;
    -$thumbnail-border-width:            $border-width !default;
    -$thumbnail-border-color:            $gray-300 !default;
    -$thumbnail-border-radius:           $border-radius !default;
    -$thumbnail-box-shadow:              $box-shadow-sm !default;
    -// scss-docs-end thumbnail-variables
    -
    -
    -// Figures
    -
    -// scss-docs-start figure-variables
    -$figure-caption-font-size:          $small-font-size !default;
    -$figure-caption-color:              $gray-600 !default;
    -// scss-docs-end figure-variables
    -
    -
    -// Breadcrumbs
    -
    -// scss-docs-start breadcrumb-variables
    -$breadcrumb-font-size:              null !default;
    -$breadcrumb-padding-y:              0 !default;
    -$breadcrumb-padding-x:              0 !default;
    -$breadcrumb-item-padding-x:         .5rem !default;
    -$breadcrumb-margin-bottom:          1rem !default;
    -$breadcrumb-bg:                     null !default;
    -$breadcrumb-divider-color:          $gray-600 !default;
    -$breadcrumb-active-color:           $gray-600 !default;
    -$breadcrumb-divider:                quote("/") !default;
    -$breadcrumb-divider-flipped:        $breadcrumb-divider !default;
    -$breadcrumb-border-radius:          null !default;
    -// scss-docs-end breadcrumb-variables
    -
    -// Carousel
    -
    -// scss-docs-start carousel-variables
    -$carousel-control-color:             $white !default;
    -$carousel-control-width:             15% !default;
    -$carousel-control-opacity:           .5 !default;
    -$carousel-control-hover-opacity:     .9 !default;
    -$carousel-control-transition:        opacity .15s ease !default;
    -
    -$carousel-indicator-width:           30px !default;
    -$carousel-indicator-height:          3px !default;
    -$carousel-indicator-hit-area-height: 10px !default;
    -$carousel-indicator-spacer:          3px !default;
    -$carousel-indicator-opacity:         .5 !default;
    -$carousel-indicator-active-bg:       $white !default;
    -$carousel-indicator-active-opacity:  1 !default;
    -$carousel-indicator-transition:      opacity .6s ease !default;
    -
    -$carousel-caption-width:             70% !default;
    -$carousel-caption-color:             $white !default;
    -$carousel-caption-padding-y:         1.25rem !default;
    -$carousel-caption-spacer:            1.25rem !default;
    -
    -$carousel-control-icon-width:        2rem !default;
    -
    -$carousel-control-prev-icon-bg:      url("data:image/svg+xml,") !default;
    -$carousel-control-next-icon-bg:      url("data:image/svg+xml,") !default;
    -
    -$carousel-transition-duration:       .6s !default;
    -$carousel-transition:                transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)
    -
    -$carousel-dark-indicator-active-bg:  $black !default;
    -$carousel-dark-caption-color:        $black !default;
    -$carousel-dark-control-icon-filter:  invert(1) grayscale(100) !default;
    -// scss-docs-end carousel-variables
    -
    -
    -// Spinners
    -
    -// scss-docs-start spinner-variables
    -$spinner-width:           2rem !default;
    -$spinner-height:          $spinner-width !default;
    -$spinner-vertical-align:  -.125em !default;
    -$spinner-border-width:    .25em !default;
    -$spinner-animation-speed: .75s !default;
    -
    -$spinner-width-sm:        1rem !default;
    -$spinner-height-sm:       $spinner-width-sm !default;
    -$spinner-border-width-sm: .2em !default;
    -// scss-docs-end spinner-variables
    -
    -
    -// Close
    -
    -// scss-docs-start close-variables
    -$btn-close-width:            1em !default;
    -$btn-close-height:           $btn-close-width !default;
    -$btn-close-padding-x:        .25em !default;
    -$btn-close-padding-y:        $btn-close-padding-x !default;
    -$btn-close-color:            $black !default;
    -$btn-close-bg:               url("data:image/svg+xml,") !default;
    -$btn-close-focus-shadow:     $input-btn-focus-box-shadow !default;
    -$btn-close-opacity:          .5 !default;
    -$btn-close-hover-opacity:    .75 !default;
    -$btn-close-focus-opacity:    1 !default;
    -$btn-close-disabled-opacity: .25 !default;
    -$btn-close-white-filter:     invert(1) grayscale(100%) brightness(200%) !default;
    -// scss-docs-end close-variables
    -
    -
    -// Offcanvas
    -
    -// scss-docs-start offcanvas-variables
    -$offcanvas-padding-y:               $modal-inner-padding !default;
    -$offcanvas-padding-x:               $modal-inner-padding !default;
    -$offcanvas-horizontal-width:        400px !default;
    -$offcanvas-vertical-height:         30vh !default;
    -$offcanvas-transition-duration:     .3s !default;
    -$offcanvas-border-color:            $modal-content-border-color !default;
    -$offcanvas-border-width:            $modal-content-border-width !default;
    -$offcanvas-title-line-height:       $modal-title-line-height !default;
    -$offcanvas-bg-color:                $modal-content-bg !default;
    -$offcanvas-color:                   $modal-content-color !default;
    -$offcanvas-box-shadow:              $modal-content-box-shadow-xs !default;
    -$offcanvas-backdrop-bg:             $modal-backdrop-bg !default;
    -$offcanvas-backdrop-opacity:        $modal-backdrop-opacity !default;
    -// scss-docs-end offcanvas-variables
    -
    -// Code
    -
    -$code-font-size:                    $small-font-size !default;
    -$code-color:                        $pink !default;
    -
    -$kbd-padding-y:                     .2rem !default;
    -$kbd-padding-x:                     .4rem !default;
    -$kbd-font-size:                     $code-font-size !default;
    -$kbd-color:                         $white !default;
    -$kbd-bg:                            $gray-900 !default;
    -
    -$pre-color:                         null !default;
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bulma/tabulator_bulma.scss b/tmp/tabulator-5.6.1/src/scss/themes/bulma/tabulator_bulma.scss
    deleted file mode 100644
    index 6eeeec4..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/bulma/tabulator_bulma.scss
    +++ /dev/null
    @@ -1,266 +0,0 @@
    -@import "variables.scss";
    -
    -// Style conversion file, bulma to tabulator
    -
    -//Main Theme Variables
    -$backgroundColor: $table-background-color !default; //background color of tabulator
    -// $borderColor:#999 !default; //border to tabulator
    -$textSize:16px !default; //table text size
    -
    -//header theming
    -$headerBackgroundColor:$table-head-background-color !default; //border to tabulator
    -$headerTextColor:$table-head-cell-color !default; //header text color
    -$headerBorderColor:#aaa !default;  //header border color
    -$headerSeparatorColor:#999 !default; //header bottom separator color
    -$headerMargin:4px !default; //padding round header
    -
    -//column header arrows
    -$sortArrowActive: $headerTextColor !default;
    -$sortArrowInactive: #bbb !default;
    -
    -//row theming
    -$rowBackgroundColor:$table-body-background-color !default; //table row background color
    -$rowAltBackgroundColor:$table-striped-row-even-background-color !default; //table row background color
    -$rowBorderColor:#aaa !default; //table border color
    -$rowTextColor:$table-color !default; //table text color
    -$rowHoverBackground:$table-row-hover-background-color !default; //row background color on hover
    -
    -$rowSelectedBackground: $table-row-active-background-color !default; //row background color when selected
    -// $rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
    -
    -$editBoxColor:#1D68CD !default; //border color for edit boxes
    -$errorColor:#dd0000 !default; //error indication
    -
    -//footer theming
    -$footerBackgroundColor:$table-foot-background-color !default; //border to tabulator
    -$footerTextColor:$table-foot-cell-color !default; //footer text color
    -$footerBorderColor:$grey-lighter !default; //footer border color
    -// $footerSeparatorColor:#999 !default; //footer bottom separator color
    -// $footerActiveColor:#d00 !default; //footer bottom active text color
    -
    -//range selection
    -$rangeBorderColor: #{darken($rowSelectedBackground, 10%)} !default; //range border color
    -$rangeHandleColor: $rangeBorderColor !default; //range handle color
    -$rangeHeaderSelectedBackground: $rangeBorderColor !default; //header background color when selected
    -$rangeHeaderSelectedTextColor: #FFFFFF !default; //header text color when selected
    -
    -
    -@import "../../tabulator.scss";
    -
    -.tabulator{
    -	border:none;
    -	
    -	.tabulator-header{
    -		border:$table-cell-border;
    -		border-width:$table-head-cell-border-width;
    -		
    -		.tabulator-col{
    -			border-right:none;
    -			
    -			&.tabulator-moving{
    -				border:none;
    -			}
    -			
    -			.tabulator-col-content{
    -				padding:$table-cell-padding;
    -				
    -				.tabulator-col-sorter{
    -					right:0px;
    -				}
    -			}
    -			
    -			.tabulator-header-filter{
    -				input{
    -					border:$button-border-width solid $button-border-color;
    -				}
    -			}
    -		}
    -		
    -		.tabulator-calcs-holder{
    -			.tabulator-row{
    -				.tabulator-cell{
    -					border-bottom-width:0;
    -				}
    -			}
    -			
    -			border:$table-cell-border;
    -			border-width:$table-foot-cell-border-width;
    -		}
    -	}
    -	
    -	.tabulator-tableholder{
    -		.tabulator-table{
    -			.tabulator-row{
    -				&.tabulator-calcs{
    -					&.tabulator-calcs-top{
    -						border:$table-cell-border;
    -						border-width:$table-head-cell-border-width;
    -					}
    -					
    -					&.tabulator-calcs-bottom{
    -						border:$table-cell-border;
    -						border-width:$table-foot-cell-border-width;
    -					}
    -					
    -					.tabulator-cell{
    -						border-bottom-width:0;
    -					}
    -				}
    -			}
    -		}
    -	}
    -	
    -	.tabulator-footer{
    -		padding:$table-cell-padding;
    -		border:$table-cell-border;
    -		border-width:$table-foot-cell-border-width;
    -		
    -		.tabulator-calcs-holder{
    -			margin:-5px -10px 10px -10px;
    -			
    -			border:$table-cell-border;
    -			border-width:$table-head-cell-border-width;
    -			
    -			.tabulator-row{
    -				.tabulator-cell{
    -					border-bottom-width:0;
    -				}
    -			}
    -		}
    -		
    -		.tabulator-page{
    -			margin:0 0.1875em;
    -			padding:$button-padding-vertical $button-padding-horizontal;
    -			
    -			border:$button-border-width solid $button-border-color;
    -			
    -			font-size: $textSize;
    -			
    -			&.active{
    -				border-color:$button-active-border-color;
    -				color:$button-active-color;
    -				font-weight:bold;
    -			}
    -			
    -			&:not(.disabled){
    -				@media (hover:hover) and (pointer:fine){
    -					&:hover{
    -						cursor:pointer;
    -						border-color:$button-hover-border-color;
    -						background:inherit;
    -						color:inherit;
    -					}
    -				}
    -			}
    -		}
    -	}
    -	
    -	//Bulma theming classes
    -	
    -	&.is-striped{
    -		.tabulator-row{
    -			&:nth-child(even){
    -				background-color: $rowAltBackgroundColor;
    -			}
    -		}
    -	}
    -	
    -	&.is-bordered{
    -		border:$table-cell-border;
    -		
    -		.tabulator-header{
    -			.tabulator-col{
    -				border-right:$table-cell-border;
    -			}
    -		}
    -		
    -		.tabulator-tableholder{
    -			.tabulator-table{
    -				.tabulator-row{
    -					.tabulator-cell{
    -						border-right:$table-cell-border;
    -					}
    -				}
    -			}
    -		}
    -	}
    -	
    -	&.is-narrow{
    -		.tabulator-header{
    -			.tabulator-col{
    -				.tabulator-col-content{
    -					padding: 0.25em 0.5em
    -				}
    -			}
    -		}
    -		
    -		.tabulator-tableholder{
    -			.tabulator-table{
    -				.tabulator-row{
    -					.tabulator-cell{
    -						padding: 0.25em 0.5em
    -					}
    -				}
    -			}
    -		}
    -	}
    -}
    -
    -.tabulator-row{
    -	min-height:14px + ($headerMargin * 2);
    -	
    -	&.tabulator-row-even{
    -		background-color: inherit;
    -	}
    -	
    -	&.tabulator-selected{
    -		background-color:$rowSelectedBackground !important;
    -	}
    -	
    -	@media (hover:hover) and (pointer:fine){
    -		&.tabulator-selected:hover{
    -			background-color:darken($rowSelectedBackground, 10%) !important;
    -		}
    -	}
    -	
    -	.tabulator-cell{
    -		padding:$table-cell-padding;
    -		border:$table-cell-border;
    -		border-width:$table-cell-border-width;
    -	}
    -	
    -	&.tabulator-group{
    -		border-bottom:1px solid #999;
    -		border-right:none;
    -		border-top:1px solid #999;
    -		color:$table-cell-heading-color;
    -	}
    -}
    -
    -.tabulator-print-table{
    -	.tabulator-print-table-group{
    -		box-sizing:border-box;
    -		border-bottom:1px solid #999;
    -		border-right:none;
    -		border-top:1px solid #999;
    -		color:$table-cell-heading-color;
    -	}
    -}
    -
    -.tabulator-popup-container{
    -	background: $backgroundColor,
    -}
    -
    -.tabulator-edit-list{
    -	.tabulator-edit-list-item{
    -		&.active{
    -			color:$backgroundColor;
    -		}
    -
    -		@media (hover:hover) and (pointer:fine){
    -			&:hover{
    -				color:$backgroundColor;
    -			}
    -		}
    -	}
    -}
    \ No newline at end of file
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/bulma/variables.scss b/tmp/tabulator-5.6.1/src/scss/themes/bulma/variables.scss
    deleted file mode 100644
    index 5783ae4..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/bulma/variables.scss
    +++ /dev/null
    @@ -1,198 +0,0 @@
    -////////// from utilities/initial-variables.sass //////////
    -$black:        hsl(0, 0%, 4%) !default;
    -$black-bis:    hsl(0, 0%, 7%) !default;
    -$black-ter:    hsl(0, 0%, 14%) !default;
    -
    -$grey-darker:  hsl(0, 0%, 21%) !default;
    -$grey-dark:    hsl(0, 0%, 29%) !default;
    -$grey:         hsl(0, 0%, 48%) !default;
    -$grey-light:   hsl(0, 0%, 71%) !default;
    -$grey-lighter: hsl(0, 0%, 86%) !default;
    -
    -$white-ter:    hsl(0, 0%, 96%) !default;
    -$white-bis:    hsl(0, 0%, 98%) !default;
    -$white:        hsl(0, 0%, 100%) !default;
    -
    -$orange:       hsl(14,  100%, 53%) !default;
    -$yellow:       hsl(48,  100%, 67%) !default;
    -$green:        hsl(141, 71%,  48%) !default;
    -$turquoise:    hsl(171, 100%, 41%) !default;
    -$cyan:         hsl(204, 86%,  53%) !default;
    -$blue:         hsl(217, 71%,  53%) !default;
    -$purple:       hsl(271, 100%, 71%) !default;
    -$red:          hsl(348, 100%, 61%) !default;
    -
    -// Typography
    -
    -$family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !default;
    -$family-monospace: monospace !default;
    -$render-mode: optimizeLegibility !default;
    -
    -$size-1: 3rem !default;
    -$size-2: 2.5rem !default;
    -$size-3: 2rem !default;
    -$size-4: 1.5rem !default;
    -$size-5: 1.25rem !default;
    -$size-6: 1rem !default;
    -$size-7: 0.75rem !default;
    -
    -$weight-light: 300 !default;
    -$weight-normal: 400 !default;
    -$weight-medium: 500 !default;
    -$weight-semibold: 600 !default;
    -$weight-bold: 700 !default;
    -
    -////////// from utilities/derived-variables.sass //////////
    -
    -$primary: $turquoise !default;
    -
    -$info: $cyan !default;
    -$success: $green !default;
    -$warning: $yellow !default;
    -$danger: $red !default;
    -
    -$light: $white-ter !default;
    -$dark: $grey-darker !default;
    -
    -// Invert colors
    -
    -$orange-invert: findColorInvert($orange) !default;
    -$yellow-invert: findColorInvert($yellow) !default;
    -$green-invert: findColorInvert($green) !default;
    -$turquoise-invert: findColorInvert($turquoise) !default;
    -$cyan-invert: findColorInvert($cyan) !default;
    -$blue-invert: findColorInvert($blue) !default;
    -$purple-invert: findColorInvert($purple) !default;
    -$red-invert: findColorInvert($red) !default;
    -
    -$primary-invert: $turquoise-invert !default;
    -$info-invert: $cyan-invert !default;
    -$success-invert: $green-invert !default;
    -$warning-invert: $yellow-invert !default;
    -$danger-invert: $red-invert !default;
    -$light-invert: $dark !default;
    -$dark-invert: $light !default;
    -
    -// General colors
    -
    -$background: $white-ter !default;
    -
    -$border: $grey-lighter !default;
    -$border-hover: $grey-light !default;
    -
    -// Text colors
    -
    -$text: $grey-dark !default;
    -$text-invert: findColorInvert($text) !default;
    -$text-light: $grey !default;
    -$text-strong: $grey-darker !default;
    -
    -// Code colors
    -
    -$code: $red !default;
    -$code-background: $background !default;
    -
    -$pre: $text !default;
    -$pre-background: $background !default;
    -
    -// Link colors
    -
    -$link: $blue !default;
    -$link-invert: $blue-invert !default;
    -$link-visited: $purple !default;
    -
    -$link-hover: $grey-darker !default;
    -$link-hover-border: $grey-light !default;
    -
    -$link-focus: $grey-darker !default;
    -$link-focus-border: $blue !default;
    -
    -$link-active: $grey-darker !default;
    -$link-active-border: $grey-dark !default;
    -
    -// Typography
    -
    -$family-primary: $family-sans-serif !default;
    -$family-secondary: $family-sans-serif !default;
    -$family-code: $family-monospace !default;
    -
    -$size-small: $size-7 !default;
    -$size-normal: $size-6 !default;
    -$size-medium: $size-5 !default;
    -$size-large: $size-4 !default;
    -
    -// Lists and maps
    -$custom-colors: null !default;
    -$custom-shades: null !default;
    -
    -$colors: mergeColorMaps(("white": ($white, $black), "black": ($black, $white), "light": ($light, $light-invert), "dark": ($dark, $dark-invert), "primary": ($primary, $primary-invert), "link": ($link, $link-invert), "info": ($info, $info-invert), "success": ($success, $success-invert), "warning": ($warning, $warning-invert), "danger": ($danger, $danger-invert)), $custom-colors) !default;
    -$shades: mergeColorMaps(("black-bis": $black-bis, "black-ter": $black-ter, "grey-darker": $grey-darker, "grey-dark": $grey-dark, "grey": $grey, "grey-light": $grey-light, "grey-lighter": $grey-lighter, "white-ter": $white-ter, "white-bis": $white-bis), $custom-shades) !default;
    -
    -$sizes: $size-1 $size-2 $size-3 $size-4 $size-5 $size-6 $size-7 !default;
    -
    -
    -////////// from elements/button.sass //////////
    -
    -$control-border-width: 1px !default;
    -
    -$button-color: $grey-darker !default;
    -$button-background-color: $white !default;
    -
    -$button-border-color: $grey-lighter !default;
    -$button-border-width: $control-border-width !default;
    -
    -$button-padding-vertical: calc(0.375em - #{$button-border-width}) !default;
    -$button-padding-horizontal: 0.75em !default;
    -
    -$button-hover-color: $link-hover !default;
    -$button-hover-border-color: $link-hover-border !default;
    -
    -$button-focus-color: $link-focus !default;
    -$button-focus-border-color: $link-focus-border !default;
    -$button-focus-box-shadow-size: 0 0 0 0.125em !default;
    -$button-focus-box-shadow-color: rgba($link, 0.25) !default;
    -
    -$button-active-color: $link-active !default;
    -$button-active-border-color: $link-active-border !default;
    -
    -$button-text-color: $text !default;
    -$button-text-hover-background-color: $background !default;
    -$button-text-hover-color: $text-strong !default;
    -
    -$button-disabled-background-color: $white !default;
    -$button-disabled-border-color: $grey-lighter !default;
    -$button-disabled-shadow: none !default;
    -$button-disabled-opacity: 0.5 !default;
    -
    -$button-static-color: $grey !default;
    -$button-static-background-color: $white-ter !default;
    -$button-static-border-color: $grey-lighter !default;
    -
    -
    -
    -////////// from elements/table.sass //////////
    -
    -$table-color: $grey-darker !default;
    -$table-background-color: $white !default;
    -
    -$table-cell-border: 1px solid $grey-lighter !default;
    -$table-cell-border-width: 0 0 1px !default;
    -$table-cell-padding: 0.5em 0.75em !default;
    -$table-cell-heading-color: $text-strong !default;
    -
    -$table-head-cell-border-width: 0 0 2px !default;
    -$table-head-cell-color: $text-strong !default;
    -$table-foot-cell-border-width: 2px 0 0 !default;
    -$table-foot-cell-color: $text-strong !default;
    -
    -$table-head-background-color: transparent !default;
    -$table-body-background-color: transparent !default;
    -$table-foot-background-color: transparent !default;
    -
    -$table-row-hover-background-color: $white-bis !default;
    -
    -$table-row-active-background-color: $primary !default;
    -$table-row-active-color: $primary-invert !default;
    -
    -$table-striped-row-even-background-color: $white-bis !default;
    -$table-striped-row-even-hover-background-color: $white-ter !default;
    \ No newline at end of file
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/materialize/tabulator_materialize.scss b/tmp/tabulator-5.6.1/src/scss/themes/materialize/tabulator_materialize.scss
    deleted file mode 100644
    index 32662df..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/materialize/tabulator_materialize.scss
    +++ /dev/null
    @@ -1,275 +0,0 @@
    -@import "variables.scss";
    -
    -// Style conversion file, bootstrap to tabulator
    -
    -//Main Theme Variables
    -$backgroundColor: #fff !default; //background color of tabulator
    -$borderColor:$table-border-color !default; //border to tabulator
    -$textSize:16px !default; //table text size
    -
    -//header theming
    -$headerBackgroundColor:#fff !default; //border to tabulator
    -$headerSeparatorColor:$table-border-color !default; //header bottom separator color
    -
    -$cellPadding:15px !default; //padding round header
    -
    -//column header arrows
    -$sortArrowActive: #666 !default;
    -$sortArrowInactive: #bbb !default;
    -
    -//row theming
    -$rowBackgroundColor:#fff !default; //table row background color
    -$rowAltBackgroundColor: $table-striped-color !default; //table row background color
    -$rowBorderColor:$table-border-color !default; //table border color
    -$rowHoverBackground:$table-striped-color !default; //row background color on hover
    -
    -$rowSelectedBackground:$primary-color !default; //row background color when selected
    -$rowSelectedBackgroundHover: $primary-color !default;//row background color when selected and hovered
    -
    -$editBoxColor:$primary-color !default; //border color for edit boxes
    -$errorColor:#dd0000 !default; //error indication
    -
    -//footer theming
    -$footerBorderColor:$table-border-color !default; //footer border color
    -$footerSeparatorColor:$table-border-color !default; //footer bottom separator color
    -$footerActiveColor:$primary-color !default; //footer bottom active text color
    -
    -//range selection
    -$rangeBorderColor: #{darken($primary-color, 10%)} !default; //range border color
    -$rangeHandleColor: $rangeBorderColor !default; //range handle color
    -$rangeHeaderSelectedBackground: $rangeBorderColor !default; //header background color when selected
    -$rangeHeaderSelectedTextColor: #FFFFFF !default; //header text color when selected
    -
    -
    -@import "../../tabulator.scss";
    -
    -.tabulator{
    -	border:none;
    -	background-color: $backgroundColor;
    -
    -	width: 100%;
    -	max-width: 100%;
    -
    -	.tabulator-header{
    -		color:inherit;
    -
    -		.tabulator-col{
    -			border-right:none;
    -
    -			.tabulator-col-content{
    -				padding:$cellPadding;
    -
    -				.tabulator-col-sorter{
    -					right:-10px;
    -				}
    -			}
    -
    -			&.tabulator-col-group{
    -				.tabulator-col-group-cols{
    -					border-top:1px solid $borderColor;
    -				}
    -			}
    -
    -			&.tabulator-sortable{
    -				.tabulator-col-title{
    -					padding-right:10px;
    -				}
    -			}
    -		}
    -
    -		.tabulator-calcs-holder{
    -			width:100%;
    -
    -			border-bottom:1px solid $headerSeparatorColor;
    -		}
    -
    -		.tabulator-frozen-rows-holder{
    -			min-width:600%;
    -
    -			&:empty{
    -				display: none;
    -			}
    -		}
    -	}
    -
    -	.tabulator-tableholder{
    -		.tabulator-table{
    -			color:inherit;
    -		}
    -	}
    -
    -	.tabulator-footer{
    -		background-color:transparent;
    -		color:inherit;
    -
    -		.tabulator-paginator{
    -			color:inherit;
    -		}
    -
    -		.tabulator-page{
    -			margin:0;
    -			margin-top:5px;
    -			padding:8px 12px;
    -
    -			border-radius:0;
    -			border-right:none;
    -
    -			background:rgba(255,255,255,.2);
    -
    -			&[data-page="next"], &:first-of-type {
    -				border-top-left-radius:4px;
    -				border-bottom-left-radius:4px;
    -			}
    -
    -			&[data-page="prev"], &:last-of-type {
    -				border:1px solid $footerBorderColor;
    -				border-top-right-radius:4px;
    -				border-bottom-right-radius:4px;
    -			}
    -
    -			&.active{
    -				color:$footerActiveColor;
    -			}
    -		}
    -	}
    -
    -	//materialize theming classes
    -	&.striped{
    -		.tabulator-row{
    -			&:nth-child(even){
    -				background-color: $rowAltBackgroundColor;
    -
    -				&.tabulator-selected{
    -					background-color:$rowSelectedBackground !important;
    -				}
    -
    -				@media (hover:hover) and (pointer:fine){
    -					&.tabulator-selectable:hover{
    -						background-color:$rowHoverBackground;
    -						cursor: pointer;
    -					}
    -
    -					&.tabulator-selected:hover{
    -						background-color:$rowSelectedBackgroundHover !important;
    -						cursor: pointer;
    -					}
    -				}
    -			}
    -		}
    -	}
    -}
    -
    -//row element
    -.tabulator-row{
    -	min-height:$textSize + ($cellPadding * 2);
    -	border-bottom:1px solid $rowBorderColor;
    -
    -	&.tabulator-row-even{
    -		background-color: $rowBackgroundColor;
    -	}
    -
    -	.tabulator-cell{
    -		padding:$cellPadding;
    -		border-right:none;
    -
    -		&:last-of-type{
    -			border-right: none;
    -		}
    -
    -		.tabulator-data-tree-control{
    -			border:1px solid #ccc;
    -
    -			.tabulator-data-tree-control-collapse{
    -				&:after {
    -					background: #ccc;
    -				}
    -			}
    -
    -			.tabulator-data-tree-control-expand{
    -				background: #ccc;
    -
    -				&:after {
    -					background: #ccc;
    -				}
    -			}
    -		}
    -	}
    -
    -	&.tabulator-group{
    -		background:#fafafa;
    -
    -		span{
    -			margin-left:10px;
    -			color:#666;
    -		}
    -	}
    -}
    -
    -.tabulator-edit-select-list{
    -	background:$headerBackgroundColor;
    -
    -	.tabulator-edit-select-list-item{
    -		color:inherit;
    -
    -		&.active{
    -			color:$headerBackgroundColor;
    -
    -			&.focused{
    -				outline:1px solid rgba($headerBackgroundColor, .5);
    -			}
    -		}
    -
    -		@media (hover:hover) and (pointer:fine){
    -			&:hover{
    -				color:$headerBackgroundColor;
    -			}
    -		}
    -	}
    -
    -	.tabulator-edit-select-list-notice{
    -		color: inherit;
    -	}
    -
    -	.tabulator-edit-select-list-group{
    -		color: inherit;
    -	}
    -}
    -
    -.tabulator.tabulator-rtl{
    -	.tabulator-header {
    -		.tabulator-col{
    -			border-left:none;
    -			border-right:none;
    -		}
    -	}
    -}
    -
    -.tabulator-print-table{
    -	.tabulator-print-table-group{
    -		background:#fafafa;
    -
    -		span{
    -			margin-left:10px;
    -			color:#666;
    -		}
    -	}
    -
    -	.tabulator-data-tree-control{
    -		border:1px solid #ccc;
    -
    -		.tabulator-data-tree-control-collapse{
    -			&:after {
    -				background: #ccc;
    -			}
    -		}
    -
    -		.tabulator-data-tree-control-expand{
    -			background: #ccc;
    -
    -			&:after {
    -				background: #ccc;
    -			}
    -		}
    -	}
    -}
    -
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/materialize/variables.scss b/tmp/tabulator-5.6.1/src/scss/themes/materialize/variables.scss
    deleted file mode 100644
    index e7dd08d..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/materialize/variables.scss
    +++ /dev/null
    @@ -1,70 +0,0 @@
    -// ==========================================================================
    -// Materialize variables
    -// ==========================================================================
    -//
    -// Table of Contents:
    -//
    -//  1. Colors
    -//  2. Badges
    -//  3. Buttons
    -//  4. Cards
    -//  5. Carousel
    -//  6. Collapsible
    -//  7. Chips
    -//  8. Date + Time Picker
    -//  9. Dropdown
    -//  10. Forms
    -//  11. Global
    -//  12. Grid
    -//  13. Navigation Bar
    -//  14. Side Navigation
    -//  15. Photo Slider
    -//  16. Spinners | Loaders
    -//  17. Tabs
    -//  18. Tables
    -//  19. Toasts
    -//  20. Typography
    -//  21. Footer
    -//  22. Flow Text
    -//  23. Collections
    -//  24. Progress Bar
    -
    -
    -// 18. Tables
    -// ==========================================================================
    -
    -$materialize-red: (
    -  "base":       #e51c23,
    -  "lighten-5":  #fdeaeb,
    -  "lighten-4":  #f8c1c3,
    -  "lighten-3":  #f3989b,
    -  "lighten-2":  #ee6e73,
    -  "lighten-1":  #ea454b,
    -  "darken-1":   #d0181e,
    -  "darken-2":   #b9151b,
    -  "darken-3":   #a21318,
    -  "darken-4":   #8b1014,
    -);
    -
    -$colors: (
    -        "materialize-red": $materialize-red,
    -) !default;
    -
    -// usage: color("name_of_color", "type_of_color")
    -// to avoid to repeating map-get($colors, ...)
    -@function color($color, $type) {
    -  @if map-has-key($colors, $color) {
    -    $curr_color: map-get($colors, $color);
    -    @if map-has-key($curr_color, $type) {
    -      @return map-get($curr_color, $type);
    -    }
    -  }
    -  @warn "Unknown `#{$color}` - `#{$type}` in $colors.";
    -  @return null;
    -}
    -
    -$table-border-color: rgba(0,0,0,.12) !default;
    -$table-striped-color: #f8f8f8 !default;
    -
    -
    -$primary-color: color("materialize-red", "lighten-2") !default;
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/semanticui/tabulator_semanticui.scss b/tmp/tabulator-5.6.1/src/scss/themes/semanticui/tabulator_semanticui.scss
    deleted file mode 100644
    index dd46266..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/semanticui/tabulator_semanticui.scss
    +++ /dev/null
    @@ -1,587 +0,0 @@
    -
    -@import "variables_table.scss";
    -
    -//Main Theme Variables
    -$backgroundColor: $background !default; //background color of tabulator
    -$textSize:14px !default; //table text size
    -
    -//header theming
    -$headerBackgroundColor:$headerBackground !default; //border to tabulator
    -$headerTextColor:$headerColor !default; //header text color
    -$headerBorderColor:#ddd !default;  //header border color
    -$headerSeparatorColor:#999 !default; //header bottom separator color
    -$headerMargin:4px !default; //padding round header
    -
    -//column header arrows
    -$sortArrowActive: #666 !default;
    -$sortArrowInactive: #bbb !default;
    -
    -//row theming
    -$rowBorderColor:#ddd !default; //table border color
    -$rowTextColor:#333 !default; //table text color
    -
    -$rowSelectedBackground: #9ABCEA !default; //row background color when selected
    -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
    -
    -
    -$editBoxColor:#1D68CD !default; //border color for edit boxes
    -$errorColor:#dd0000 !default; //error indication
    -
    -//footer theming
    -$footerBackgroundColor:#fff !default; //border to tabulator
    -$footerTextColor:#555 !default; //footer text color
    -$footerBorderColor:#aaa !default; //footer border color
    -$footerSeparatorColor:#999 !default; //footer bottom separator color
    -$footerActiveColor:#d00 !default; //footer bottom active text color
    -
    -@import "../../tabulator.scss";
    -
    -.tabulator{
    -	width: 100%;
    -
    -	margin: $margin;
    -	border: $border;
    -	box-shadow: $boxShadow;
    -	border-radius: $borderRadius;
    -	color: $color;
    -
    -	.tabulator-header{
    -		border-right:none;
    -		border-bottom: $headerBorder;
    -		background-color: $headerBackgroundColor;
    -
    -		box-shadow: $headerBoxShadow;
    -
    -		color: $headerTextColor;
    -		font-style: $headerFontStyle;
    -		font-weight: $headerFontWeight;
    -		text-transform: $headerTextTransform;
    -
    -		.tabulator-col{
    -			border-right: none;
    -			background-color: $headerBackgroundColor;
    -
    -			.tabulator-col-content{
    -				padding: $headerVerticalPadding $headerHorizontalPadding;
    -			}
    -		}
    -	}
    -
    -	.tabulator-tableholder{
    -		.tabulator-table{
    -			background-color:transparent;
    -			.tabulator-row{
    -				&.tabulator-calcs{
    -					background:darken($background, 5%) !important;
    -
    -					&.tabulator-calcs-top{
    -						border-bottom:2px solid $rowBorderColor;
    -					}
    -
    -					&.tabulator-calcs-bottom{
    -						border-top:2px solid $rowBorderColor;
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	.tabulator-footer{
    -		padding: $footerVerticalPadding $footerHorizontalPadding;
    -
    -		border-top: $footerBorder;
    -		box-shadow: $footerBoxShadow;
    -
    -		background: $footerBackground;
    -
    -		text-align:right;
    -		color: $footerColor;
    -
    -		font-style: $footerFontStyle;
    -		font-weight: $footerFontWeight;
    -		text-transform: $footerTextTransform;
    -
    -		.tabulator-calcs-holder{
    -			margin:(-$footerVerticalPadding) (-$footerHorizontalPadding) $footerVerticalPadding (-$footerHorizontalPadding);
    -
    -			background:lighten($footerBackground, 5%) !important;
    -
    -			.tabulator-row{
    -				background:lighten($footerBackground, 5%) !important;
    -			}
    -
    -			&:only-child{
    -				margin-bottom:-$footerVerticalPadding;
    -				border-bottom:none;
    -			}
    -		}
    -	}
    -
    -	.tabulator-tableholder{
    -		.tabulator-table{
    -			.tabulator-row{
    -				&.positive, .tabulator-cell.positive{
    -					box-shadow: $positiveBoxShadow;
    -					background: $positiveBackgroundColor !important;
    -					color: $positiveColor !important;
    -
    -					@media (hover:hover) and (pointer:fine){
    -						&:hover{
    -							background: $positiveBackgroundHover !important;
    -							color: $positiveColorHover !important;
    -						}
    -					}
    -				}
    -
    -				&.negative, .tabulator-cell.negative{
    -					box-shadow: $negativeBoxShadow;
    -					background: $negativeBackgroundColor !important;
    -					color: $negativeColor !important;
    -
    -					@media (hover:hover) and (pointer:fine){
    -						&:hover{
    -							background: $negativeBackgroundHover !important;
    -							color: $negativeColorHover !important;
    -						}
    -					}
    -				}
    -
    -				&.error, .tabulator-cell.error{
    -					box-shadow: $errorBoxShadow;
    -					background: $errorBackgroundColor !important;
    -					color: $errorColor !important;
    -
    -					@media (hover:hover) and (pointer:fine){
    -						&:hover{
    -							background: $errorBackgroundHover !important;
    -							color: $errorColorHover !important;
    -						}
    -					}
    -				}
    -
    -				&.warning, .tabulator-cell.warning{
    -					box-shadow: $warningBoxShadow;
    -					background: $warningBackgroundColor !important;
    -					color: $warningColor !important;
    -
    -					@media (hover:hover) and (pointer:fine){
    -						&:hover{
    -							background: $warningBackgroundHover !important;
    -							color: $warningColorHover !important;
    -						}
    -					}
    -				}
    -
    -				&.active, .tabulator-cell.active{
    -					box-shadow: $activeBoxShadow;
    -					background: $activeBackgroundColor !important;
    -					color: $activeColor !important;
    -
    -					@media (hover:hover) and (pointer:fine){
    -						&:hover{
    -							background: $positiveBackgroundHover !important;
    -							color: $positiveColorHover !important;
    -						}
    -					}
    -				}
    -
    -				&.active, .tabulator-cell.active{
    -					pointer-events: none;
    -					color: $disabledTextColor;
    -				}
    -
    -				@media (hover:hover) and (pointer:fine){
    -					&.disabled:hover{
    -						pointer-events: none;
    -						color: $disabledTextColor;
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -
    -	&.inverted{
    -
    -		background: $invertedBackground;
    -		color: $invertedCellColor;
    -		border: $invertedBorder;
    -
    -		.tabulator-header{
    -			background-color: $invertedHeaderBackground;
    -			border-color: $invertedHeaderBorderColor !important;
    -			color: $invertedHeaderColor;
    -
    -			.tabulator-col{
    -				border-color: $invertedCellBorderColor !important;
    -			}
    -		}
    -
    -		.tabulator-tableholder{
    -			.tabulator-table{
    -				.tabulator-row{
    -					color: $invertedCellColor;
    -					border: $invertedBorder;
    -
    -					.tabulator-cell{
    -						border-color: $invertedCellBorderColor !important;
    -					}
    -				}
    -			}
    -		}
    -
    -		.tabulator-footer{
    -			background: $definitionPageBackground;
    -		}
    -	}
    -
    -	&.striped{
    -		.tabulator-row{
    -			&:nth-child(even){
    -				background-color: $basicTableStripedBackground;
    -			}
    -		}
    -	}
    -
    -	&.celled{
    -		border:1px solid $borderColor;
    -
    -		.tabulator-header{
    -			.tabulator-col{
    -				border-right:$cellBorder;
    -			}
    -		}
    -
    -		.tabulator-tableholder{
    -			.tabulator-table{
    -				.tabulator-row{
    -					.tabulator-cell{
    -						border-right:$cellBorder;
    -					}
    -				}
    -			}
    -		}
    -
    -	}
    -
    -
    -	&[class*="single line"]{
    -		.tabulator-tableholder{
    -			.tabulator-table{
    -				.tabulator-row{
    -					.tabulator-cell{
    -						border-right:none;
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	//coloured table varients
    -	/* Red */
    -	&.red {
    -		border-top: $coloredBorderSize solid $red;
    -	}
    -	&.inverted.red {
    -		background-color: $red !important;
    -		color: $white !important;
    -	}
    -
    -	/* Orange */
    -	&.orange {
    -		border-top: $coloredBorderSize solid $orange;
    -	}
    -	&.inverted.orange {
    -		background-color: $orange !important;
    -		color: $white !important;
    -	}
    -
    -	/* Yellow */
    -	&.yellow {
    -		border-top: $coloredBorderSize solid $yellow;
    -	}
    -	&.inverted.yellow {
    -		background-color: $yellow !important;
    -		color: $white !important;
    -	}
    -
    -	/* Olive */
    -	&.olive {
    -		border-top: $coloredBorderSize solid $olive;
    -	}
    -	&.inverted.olive {
    -		background-color: $olive !important;
    -		color: $white !important;
    -	}
    -
    -	/* Green */
    -	&.green {
    -		border-top: $coloredBorderSize solid $green;
    -	}
    -	&.inverted.green {
    -		background-color: $green !important;
    -		color: $white !important;
    -	}
    -
    -	/* Teal */
    -	&.teal {
    -		border-top: $coloredBorderSize solid $teal;
    -	}
    -	&.inverted.teal {
    -		background-color: $teal !important;
    -		color: $white !important;
    -	}
    -
    -	/* Blue */
    -	&.blue {
    -		border-top: $coloredBorderSize solid $blue;
    -	}
    -	&.inverted.blue {
    -		background-color: $blue !important;
    -		color: $white !important;
    -	}
    -
    -	/* Violet */
    -	&.violet {
    -		border-top: $coloredBorderSize solid $violet;
    -	}
    -	&.inverted.violet {
    -		background-color: $violet !important;
    -		color: $white !important;
    -	}
    -
    -	/* Purple */
    -	&.purple {
    -		border-top: $coloredBorderSize solid $purple;
    -	}
    -	&.inverted.purple {
    -		background-color: $purple !important;
    -		color: $white !important;
    -	}
    -
    -	/* Pink */
    -	&.pink {
    -		border-top: $coloredBorderSize solid $pink;
    -	}
    -	&.inverted.pink {
    -		background-color: $pink !important;
    -		color: $white !important;
    -	}
    -
    -	/* Brown */
    -	&.brown {
    -		border-top: $coloredBorderSize solid $brown;
    -	}
    -	&.inverted.brown {
    -		background-color: $brown !important;
    -		color: $white !important;
    -	}
    -
    -	/* Grey */
    -	&.grey {
    -		border-top: $coloredBorderSize solid $grey;
    -	}
    -	&.inverted.grey {
    -		background-color: $grey !important;
    -		color: $white !important;
    -	}
    -
    -	/* Black */
    -	&.black {
    -		border-top: $coloredBorderSize solid $black;
    -	}
    -	&.inverted.black {
    -		background-color: $black !important;
    -		color: $white !important;
    -	}
    -
    -	&.padded{
    -		.tabulator-header{
    -			.tabulator-col{
    -				.tabulator-col-content{
    -					padding: $paddedVerticalPadding $paddedHorizontalPadding;
    -
    -					.tabulator-arrow{
    -						top:20px;
    -					}
    -				}
    -			}
    -		}
    -		.tabulator-tableholder{
    -			.tabulator-table{
    -				.tabulator-row{
    -					.tabulator-cell{
    -						padding: $paddedVerticalPadding $paddedHorizontalPadding;
    -					}
    -				}
    -			}
    -		}
    -
    -		&.very{
    -			.tabulator-header{
    -				.tabulator-col{
    -					.tabulator-col-content{
    -						padding: $veryPaddedVerticalPadding $veryPaddedHorizontalPadding;
    -
    -						.tabulator-arrow{
    -							top:26px;
    -						}
    -					}
    -				}
    -			}
    -			.tabulator-tableholder{
    -				.tabulator-table{
    -					.tabulator-row{
    -						.tabulator-cell{
    -							padding: $veryPaddedVerticalPadding $veryPaddedHorizontalPadding;
    -						}
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	&.compact{
    -		.tabulator-header{
    -			.tabulator-col{
    -				.tabulator-col-content{
    -					padding: $compactVerticalPadding $compactHorizontalPadding;
    -
    -					.tabulator-arrow{
    -						top:12px;
    -					}
    -				}
    -			}
    -		}
    -		.tabulator-tableholder{
    -			.tabulator-table{
    -				.tabulator-row{
    -					.tabulator-cell{
    -						padding: $compactVerticalPadding $compactHorizontalPadding;
    -					}
    -				}
    -			}
    -		}
    -
    -		&.very{
    -			.tabulator-header{
    -				.tabulator-col{
    -					.tabulator-col-content{
    -						padding: $veryCompactVerticalPadding $veryCompactHorizontalPadding;
    -
    -						.tabulator-arrow{
    -							top:10px;
    -						}
    -					}
    -				}
    -			}
    -			.tabulator-tableholder{
    -				.tabulator-table{
    -					.tabulator-row{
    -						.tabulator-cell{
    -							padding: $veryCompactVerticalPadding $veryCompactHorizontalPadding;
    -						}
    -					}
    -				}
    -			}
    -		}
    -	}
    -}
    -
    -.tabulator-row{
    -	border-bottom: $rowBorder;
    -
    -	&.tabulator-row-even{
    -		background-color: $rowBackgroundColor;
    -	}
    -
    -	@media (hover:hover) and (pointer:fine){
    -		&.tabulator-selectable:hover{
    -			box-shadow: $activeBoxShadow;
    -			background: $activeBackgroundColor !important;
    -			color: $activeColor !important;
    -		}
    -	}
    -
    -	&.tabulator-selected{
    -		background-color:$rowSelectedBackground !important;
    -	}
    -
    -	@media (hover:hover) and (pointer:fine){
    -		&.tabulator-selected:hover{
    -			background-color:$rowSelectedBackgroundHover !important;
    -			cursor: pointer;
    -		}
    -	}
    -
    -	&.tabulator-moving{
    -		pointer-events: none !important;
    -	}
    -
    -	.tabulator-cell{
    -		padding: $cellVerticalPadding $cellHorizontalPadding;
    -		border-right:none;
    -		vertical-align:middle;
    -
    -		&:last-of-type{
    -			border-right: none;
    -		}
    -
    -		.tabulator-responsive-collapse-toggle{
    -			color:#fff;
    -		}
    -	}
    -
    -	&.tabulator-group{
    -		background:#fafafa;
    -		span{
    -			color:#666;
    -		}
    -	}
    -}
    -
    -.tabulator-menu{
    -	background:$backgroundColor;
    -
    -	.tabulator-menu-item{
    -		@media (hover:hover) and (pointer:fine){
    -			&:not(.tabulator-menu-item-disabled):hover{
    -				background: $headerBackgroundColor;
    -			}
    -		}
    -	}
    -}
    -
    -.tabulator-edit-select-list{
    -	background:$backgroundColor;
    -
    -	.tabulator-edit-select-list-item{
    -		&.active{
    -			color:$backgroundColor;
    -
    -			&.focused{
    -				outline:1px solid rgba($backgroundColor, .5);
    -			}
    -		}
    -
    -		@media (hover:hover) and (pointer:fine){
    -			&:hover{
    -				color:$backgroundColor;
    -			}
    -		}
    -	}
    -
    -	.tabulator-edit-select-list-notice{
    -		color:inherit;
    -	}
    -}
    -
    -.tabulator-print-table{
    -	.tabulator-print-table-group{
    -		background:#fafafa;
    -
    -		span{
    -			color:#666;
    -		}
    -	}
    -}
    \ No newline at end of file
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/semanticui/variables.scss b/tmp/tabulator-5.6.1/src/scss/themes/semanticui/variables.scss
    deleted file mode 100644
    index 65d71c6..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/semanticui/variables.scss
    +++ /dev/null
    @@ -1,839 +0,0 @@
    -/// Remove the unit of a length
    -/// @param {Number} $number - Number to remove unit from
    -/// @author Hugo Giraudel
    -/// @return {Number} - Unitless number
    -@function strip-unit($number) {
    -  @if type-of($number) == 'number' and not unitless($number) {
    -    @return $number / ($number * 0 + 1);
    -  }
    -
    -  @return $number;
    -}
    -
    -/*******************************
    -         Site Settings
    -*******************************/
    -
    -/*-------------------
    -       Fonts
    ---------------------*/
    -
    -$fontName          : 'Lato' !default;
    -$fontSmoothing     : antialiased !default;
    -
    -$headerFont        : $fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif !default;
    -$pageFont          : $fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif !default;
    -
    -$googleFontName    : $fontName !default;
    -$importGoogleFonts : true !default;
    -$googleFontSizes   : '400,700,400italic,700italic' !default;
    -$googleSubset      : 'latin' !default;
    -
    -$googleProtocol    : 'https://' !default;
    -$googleFontRequest : '${googleFontName}:${googleFontSizes}&subset=${googleSubset}' !default;
    -
    -/*-------------------
    -      Base Sizes
    ---------------------*/
    -
    -/* This is the single variable that controls them all */
    -$emSize   : 14px !default;
    -
    -/* The size of page text  */
    -$fontSize : 14px !default;
    -
    -/*-------------------
    -  Exact Pixel Values
    ---------------------*/
    -/*
    -  These are used to specify exact pixel values in em
    -  for things like borders that remain constantly
    -  sized as emSize adjusts
    -
    -  Since there are many more sizes than names for sizes,
    -  these are named by their original pixel values.
    -
    -*/
    -
    -
    -$a1px  : strip-unit(1 / $emSize) + rem !default;
    -$a4px  : strip-unit(4 / $emSize) + rem !default;
    -$a11px  : strip-unit(11 / $emSize) + rem !default;
    -$a14px  : strip-unit(14 / $emSize) + rem !default;
    -
    -$relative1px  : strip-unit(1 / $emSize) + em !default;
    -$relative4px  : strip-unit(4 / $emSize) + em !default;
    -$relative11px  : strip-unit(11 / $emSize) + em !default;
    -$relative14px  : strip-unit(14 / $emSize) + em !default;
    -
    -
    -
    -/*-------------------
    -    Border Radius
    ---------------------*/
    -
    -/* See Power-user section below
    -   for explanation of $px variables
    -*/
    -$relativeBorderRadius: $relative4px !default;
    -$absoluteBorderRadius: $a4px !default;
    -
    -$defaultBorderRadius: $absoluteBorderRadius !default;
    -
    -
    -
    -/*-------------------
    -      Site Colors
    ---------------------*/
    -
    -/*---  Colors  ---*/
    -$red              : #DB2828 !default;
    -$orange           : #F2711C !default;
    -$yellow           : #FBBD08 !default;
    -$olive            : #B5CC18 !default;
    -$green            : #21BA45 !default;
    -$teal             : #00B5AD !default;
    -$blue             : #2185D0 !default;
    -$violet           : #6435C9 !default;
    -$purple           : #A333C8 !default;
    -$pink             : #E03997 !default;
    -$brown            : #A5673F !default;
    -$grey             : #767676 !default;
    -$black            : #1B1C1D !default;
    -
    -/*---  Light Colors  ---*/
    -$lightRed         : #FF695E !default;
    -$lightOrange      : #FF851B !default;
    -$lightYellow      : #FFE21F !default;
    -$lightOlive       : #D9E778 !default;
    -$lightGreen       : #2ECC40 !default;
    -$lightTeal        : #6DFFFF !default;
    -$lightBlue        : #54C8FF !default;
    -$lightViolet      : #A291FB !default;
    -$lightPurple      : #DC73FF !default;
    -$lightPink        : #FF8EDF !default;
    -$lightBrown       : #D67C1C !default;
    -$lightGrey        : #DCDDDE !default;
    -$lightBlack       : #545454 !default;
    -
    -/*---   Neutrals  ---*/
    -$fullBlack        : #000000 !default;
    -$offWhite         : #F9FAFB !default;
    -$darkWhite        : #F3F4F5 !default;
    -$midWhite         : #DCDDDE !default;
    -$white            : #FFFFFF !default;
    -
    -/*--- Colored Backgrounds ---*/
    -$redBackground    : #FFE8E6 !default;
    -$orangeBackground : #FFEDDE !default;
    -$yellowBackground : #FFF8DB !default;
    -$oliveBackground  : #FBFDEF !default;
    -$greenBackground  : #E5F9E7 !default;
    -$tealBackground   : #E1F7F7 !default;
    -$blueBackground   : #DFF0FF !default;
    -$violetBackground : #EAE7FF !default;
    -$purpleBackground : #F6E7FF !default;
    -$pinkBackground   : #FFE3FB !default;
    -$brownBackground  : #F1E2D3 !default;
    -
    -/*--- Colored Text ---*/
    -$redTextColor    : $red !default;
    -$orangeTextColor : $orange !default;
    -$yellowTextColor : #B58105 !default; // Yellow text is difficult to read
    -$oliveTextColor  : #8ABC1E !default; // Olive is difficult to read
    -$greenTextColor  : #1EBC30 !default; // Green is difficult to read
    -$tealTextColor   : #10A3A3 !default; // Teal text is difficult to read
    -$blueTextColor   : $blue !default;
    -$violetTextColor : $violet !default;
    -$purpleTextColor : $purple !default;
    -$pinkTextColor   : $pink !default;
    -$brownTextColor  : $brown !default;
    -
    -/*--- Colored Headers ---*/
    -$redHeaderColor    : darken($redTextColor, 5) !default;
    -$oliveHeaderColor  : darken($oliveTextColor, 5) !default;
    -$greenHeaderColor  : darken($greenTextColor, 5) !default;
    -$yellowHeaderColor : darken($yellowTextColor, 5) !default;
    -$blueHeaderColor   : darken($blueTextColor, 5) !default;
    -$tealHeaderColor   : darken($tealTextColor, 5) !default;
    -$pinkHeaderColor   : darken($pinkTextColor, 5) !default;
    -$violetHeaderColor : darken($violetTextColor, 5) !default;
    -$purpleHeaderColor : darken($purpleTextColor, 5) !default;
    -$orangeHeaderColor : darken($orangeTextColor, 5) !default;
    -$brownHeaderColor  : darken($brownTextColor, 5) !default;
    -
    -/*--- Colored Border ---*/
    -$redBorderColor    : $redTextColor !default;
    -$orangeBorderColor : $orangeTextColor !default;
    -$yellowBorderColor : $yellowTextColor !default;
    -$oliveBorderColor  : $oliveTextColor !default;
    -$greenBorderColor  : $greenTextColor !default;
    -$tealBorderColor   : $tealTextColor !default;
    -$blueBorderColor   : $blueTextColor !default;
    -$violetBorderColor : $violetTextColor !default;
    -$purpleBorderColor : $purpleTextColor !default;
    -$pinkBorderColor   : $pinkTextColor !default;
    -$brownBorderColor  : $brownTextColor !default;
    -
    -/*-------------------
    -     Alpha Colors
    ---------------------*/
    -
    -$subtleTransparentBlack     : rgba(0, 0, 0, 0.03) !default;
    -$transparentBlack           : rgba(0, 0, 0, 0.05) !default;
    -$strongTransparentBlack     : rgba(0, 0, 0, 0.10) !default;
    -$veryStrongTransparentBlack : rgba(0, 0, 0, 0.15) !default;
    -
    -$subtleTransparentWhite     : rgba(255, 255, 255, 0.02) !default;
    -$transparentWhite           : rgba(255, 255, 255, 0.08) !default;
    -$strongTransparentWhite     : rgba(255, 255, 255, 0.15) !default;
    -
    -
    -
    -/*-------------------
    -    Brand Colors
    ---------------------*/
    -
    -$primaryColor        : $blue !default;
    -$secondaryColor      : $black !default;
    -
    -$lightPrimaryColor   : $lightBlue !default;
    -$lightSecondaryColor : $lightBlack !default;
    -
    -/*--------------
    -  Page Heading
    ----------------*/
    -
    -$headerFontWeight : bold !default;
    -$headerLineHeight : (18 / 14) * 1em !default;
    -
    -$h1 : (28 / 14) * 1rem !default;
    -$h2 : (24 / 14) * 1rem !default;
    -$h3 : (18 / 14) * 1rem !default;
    -$h4 : (15 / 14) * 1rem !default;
    -$h5 : (14 / 14) * 1rem !default;
    -
    -
    -/*-------------------
    -        Page
    ---------------------*/
    -
    -$pageBackground      : #FFFFFF !default;
    -$pageOverflowX       : hidden !default;
    -
    -$lineHeight          : 1.4285em !default;
    -$textColor           : rgba(0, 0, 0, 0.87) !default;
    -
    -
    -/*--------------
    -   Form Input
    ----------------*/
    -
    -/* This adjusts the default form input across all elements */
    -$inputBackground        : $white !default;
    -$inputVerticalPadding   : $relative11px !default;
    -$inputHorizontalPadding : $relative14px !default;
    -$inputPadding           : $inputVerticalPadding $inputHorizontalPadding !default;
    -
    -/* Input Text Color */
    -$inputColor: $textColor !default;
    -$inputPlaceholderColor: lighten($inputColor, 75) !default;
    -$inputPlaceholderFocusColor: lighten($inputColor, 45) !default;
    -
    -/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */
    -$inputLineHeight: (17 / 14) * 1em !default;
    -
    -/*-------------------
    -    Focused Input
    ---------------------*/
    -
    -/* Used on inputs, textarea etc */
    -$focusedFormBorderColor: #85B7D9 !default;
    -
    -/* Used on dropdowns, other larger blocks */
    -$focusedFormMutedBorderColor: #96C8DA !default;
    -
    -/*-------------------
    -        Sizes
    ---------------------*/
    -
    -/*
    -  Sizes are all expressed in terms of 14px/em (default em)
    -  This ensures these "ratios" remain constant despite changes in EM
    -*/
    -
    -$miniSize        : (11 / 14) !default;
    -$tinySize        : (12 / 14) !default;
    -$smallSize       : (13 / 14) !default;
    -$mediumSize      : (14 / 14) !default;
    -$largeSize       : (16 / 14) !default;
    -$bigSize         : (18 / 14) !default;
    -$hugeSize        : (20 / 14) !default;
    -$massiveSize     : (24 / 14) !default;
    -
    -
    -/*-------------------
    -      Paragraph
    ---------------------*/
    -
    -$paragraphMargin     : 0em 0em 1em !default;
    -$paragraphLineHeight : $lineHeight !default;
    -
    -/*-------------------
    -       Links
    ---------------------*/
    -
    -$linkColor           : #4183C4 !default;
    -$linkUnderline       : none !default;
    -$linkHoverColor      : darken(saturate($linkColor, 20), 15) !default;
    -$linkHoverUnderline  : $linkUnderline !default;
    -
    -/*-------------------
    -  Highlighted Text
    ---------------------*/
    -
    -$highlightBackground      : #CCE2FF !default;
    -$highlightColor           : $textColor !default;
    -
    -$inputHighlightBackground : rgba(100, 100, 100, 0.4) !default;
    -$inputHighlightColor      : $textColor !default;
    -
    -/*-------------------
    -       Em Sizes
    ---------------------*/
    -
    -/*
    -  This rounds $size values to the closest pixel then expresses that value in (r)em.
    -  This ensures all size values round to exact pixels
    -*/
    -$mini            : (round($miniSize * $emSize) / $emSize) * 1rem !default;
    -$tiny            : (round($tinySize * $emSize) / $emSize) * 1rem !default;
    -$small           : (round($smallSize * $emSize) / $emSize) * 1rem !default;
    -$medium          : (round($mediumSize * $emSize) / $emSize) * 1rem !default;
    -$large           : (round($largeSize * $emSize) / $emSize) * 1rem !default;
    -$big             : (round($bigSize * $emSize) / $emSize) * 1rem !default;
    -$huge            : (round($hugeSize * $emSize) / $emSize) * 1rem !default;
    -$massive         : (round($massiveSize * $emSize) / $emSize) * 1rem !default;
    -
    -/* em */
    -$relativeMini    : (round($miniSize * $emSize) / $emSize) * 1em !default;
    -$relativeTiny    : (round($tinySize * $emSize) / $emSize) * 1em !default;
    -$relativeSmall   : (round($smallSize * $emSize) / $emSize) * 1em !default;
    -$relativeMedium  : (round($mediumSize * $emSize) / $emSize) * 1em !default;
    -$relativeLarge   : (round($largeSize * $emSize) / $emSize) * 1em !default;
    -$relativeBig     : (round($bigSize * $emSize) / $emSize) * 1em !default;
    -$relativeHuge    : (round($hugeSize * $emSize) / $emSize) * 1em !default;
    -$relativeMassive : (round($massiveSize * $emSize) / $emSize) * 1em !default;
    -
    -/* rem */
    -$absoluteMini    : (round($miniSize * $emSize) / $emSize) * 1rem !default;
    -$absoluteTiny    : (round($tinySize * $emSize) / $emSize) * 1rem !default;
    -$absoluteSmall   : (round($smallSize * $emSize) / $emSize) * 1rem !default;
    -$absoluteMedium  : (round($mediumSize * $emSize) / $emSize) * 1rem !default;
    -$absoluteLarge   : (round($largeSize * $emSize) / $emSize) * 1rem !default;
    -$absoluteBig     : (round($bigSize * $emSize) / $emSize) * 1rem !default;
    -$absoluteHuge    : (round($hugeSize * $emSize) / $emSize) * 1rem !default;
    -$absoluteMassive : (round($massiveSize * $emSize) / $emSize) * 1rem !default;
    -
    -
    -/*-------------------
    -       Loader
    ---------------------*/
    -
    -$loaderSize              : $relativeBig !default;
    -$loaderSpeed             : 0.6s !default;
    -$loaderLineWidth         : 0.2em !default;
    -$loaderFillColor         : rgba(0, 0, 0, 0.1) !default;
    -$loaderLineColor         : $grey !default;
    -
    -$invertedLoaderFillColor : rgba(255, 255, 255, 0.15) !default;
    -$invertedLoaderLineColor : $white !default;
    -
    -/*-------------------
    -        Grid
    ---------------------*/
    -
    -$columnCount: 16 !default;
    -
    -/*-------------------
    -     Transitions
    ---------------------*/
    -
    -$defaultDuration : 0.1s !default;
    -$defaultEasing   : ease !default;
    -
    -/*-------------------
    -     Breakpoints
    ---------------------*/
    -
    -$mobileBreakpoint            : 320px !default;
    -$tabletBreakpoint            : 768px !default;
    -$computerBreakpoint          : 992px !default;
    -$largeMonitorBreakpoint      : 1200px !default;
    -$widescreenMonitorBreakpoint : 1920px !default;
    -
    -
    -
    -/* Columns */
    -$oneWide        : (1 / $columnCount * 100%) !default;
    -$twoWide        : (2 / $columnCount * 100%) !default;
    -$threeWide      : (3 / $columnCount * 100%) !default;
    -$fourWide       : (4 / $columnCount * 100%) !default;
    -$fiveWide       : (5 / $columnCount * 100%) !default;
    -$sixWide        : (6 / $columnCount * 100%) !default;
    -$sevenWide      : (7 / $columnCount * 100%) !default;
    -$eightWide      : (8 / $columnCount * 100%) !default;
    -$nineWide       : (9 / $columnCount * 100%) !default;
    -$tenWide        : (10 / $columnCount * 100%) !default;
    -$elevenWide     : (11 / $columnCount * 100%) !default;
    -$twelveWide     : (12 / $columnCount * 100%) !default;
    -$thirteenWide   : (13 / $columnCount * 100%) !default;
    -$fourteenWide   : (14 / $columnCount * 100%) !default;
    -$fifteenWide    : (15 / $columnCount * 100%) !default;
    -$sixteenWide    : (16 / $columnCount * 100%) !default;
    -
    -$oneColumn      : (1 / 1 * 100%) !default;
    -$twoColumn      : (1 / 2 * 100%) !default;
    -$threeColumn    : (1 / 3 * 100%) !default;
    -$fourColumn     : (1 / 4 * 100%) !default;
    -$fiveColumn     : (1 / 5 * 100%) !default;
    -$sixColumn      : (1 / 6 * 100%) !default;
    -$sevenColumn    : (1 / 7 * 100%) !default;
    -$eightColumn    : (1 / 8 * 100%) !default;
    -$nineColumn     : (1 / 9 * 100%) !default;
    -$tenColumn      : (1 / 10 * 100%) !default;
    -$elevenColumn   : (1 / 11 * 100%) !default;
    -$twelveColumn   : (1 / 12 * 100%) !default;
    -$thirteenColumn : (1 / 13 * 100%) !default;
    -$fourteenColumn : (1 / 14 * 100%) !default;
    -$fifteenColumn  : (1 / 15 * 100%) !default;
    -$sixteenColumn  : (1 / 16 * 100%) !default;
    -
    -
    -/*******************************
    -           Power-User
    -*******************************/
    -
    -
    -/*-------------------
    -    Emotive Colors
    ---------------------*/
    -
    -/* Positive */
    -$positiveColor           : $green !default;
    -$positiveBackgroundColor : #FCFFF5 !default;
    -$positiveBorderColor     : #A3C293 !default;
    -$positiveHeaderColor     : #1A531B !default;
    -$positiveTextColor       : #2C662D !default;
    -
    -/* Negative */
    -$negativeColor           : $red !default;
    -$negativeBackgroundColor : #FFF6F6 !default;
    -$negativeBorderColor     : #E0B4B4 !default;
    -$negativeHeaderColor     : #912D2B !default;
    -$negativeTextColor       : #9F3A38 !default;
    -
    -/* Info */
    -$infoColor              : #31CCEC !default;
    -$infoBackgroundColor    : #F8FFFF !default;
    -$infoBorderColor        : #A9D5DE !default;
    -$infoHeaderColor        : #0E566C !default;
    -$infoTextColor          : #276F86 !default;
    -
    -/* Warning */
    -$warningColor           : #F2C037 !default;
    -$warningBorderColor     : #C9BA9B !default;
    -$warningBackgroundColor : #FFFAF3 !default;
    -$warningHeaderColor     : #794B02 !default;
    -$warningTextColor       : #573A08 !default;
    -
    -/*-------------------
    -        Paths
    ---------------------*/
    -
    -/* For source only. Modified in gulp for dist */
    -$imagePath : '../../themes/default/assets/images' !default;
    -$fontPath  : '../../themes/default/assets/fonts' !default;
    -
    -
    -/*-------------------
    -       Icons
    ---------------------*/
    -
    -/* Maximum Glyph Width of Icon */
    -$iconWidth : 1.18em !default;
    -
    -/*-------------------
    -     Neutral Text
    ---------------------*/
    -
    -$darkTextColor               : rgba(0, 0, 0, 0.85) !default;
    -$mutedTextColor              : rgba(0, 0, 0, 0.6) !default;
    -$lightTextColor              : rgba(0, 0, 0, 0.4) !default;
    -
    -$unselectedTextColor         : rgba(0, 0, 0, 0.4) !default;
    -$hoveredTextColor            : rgba(0, 0, 0, 0.8) !default;
    -$pressedTextColor            : rgba(0, 0, 0, 0.9) !default;
    -$selectedTextColor           : rgba(0, 0, 0, 0.95) !default;
    -$disabledTextColor           : rgba(0, 0, 0, 0.2) !default;
    -
    -$invertedTextColor           : rgba(255, 255, 255, 0.9) !default;
    -$invertedMutedTextColor      : rgba(255, 255, 255, 0.8) !default;
    -$invertedLightTextColor      : rgba(255, 255, 255, 0.7) !default;
    -$invertedUnselectedTextColor : rgba(255, 255, 255, 0.5) !default;
    -$invertedHoveredTextColor    : rgba(255, 255, 255, 1) !default;
    -$invertedPressedTextColor    : rgba(255, 255, 255, 1) !default;
    -$invertedSelectedTextColor   : rgba(255, 255, 255, 1) !default;
    -$invertedDisabledTextColor   : rgba(255, 255, 255, 0.2) !default;
    -
    -/*-------------------
    -     Brand Colors
    ---------------------*/
    -
    -$facebookColor   : #3B5998 !default;
    -$twitterColor    : #55ACEE !default;
    -$googlePlusColor : #DD4B39 !default;
    -$linkedInColor   : #1F88BE !default;
    -$youtubeColor    : #CC181E !default;
    -$pinterestColor  : #BD081C !default;
    -$vkColor         : #4D7198 !default;
    -$instagramColor  : #49769C !default;
    -
    -/*-------------------
    -      Borders
    ---------------------*/
    -
    -$circularRadius                : 500rem !default;
    -
    -$borderColor               : rgba(34, 36, 38, 0.15) !default;
    -$strongBorderColor         : rgba(34, 36, 38, 0.22) !default;
    -$internalBorderColor       : rgba(34, 36, 38, 0.1) !default;
    -$selectedBorderColor       : rgba(34, 36, 38, 0.35) !default;
    -$strongSelectedBorderColor : rgba(34, 36, 38, 0.5) !default;
    -$disabledBorderColor       : rgba(34, 36, 38, 0.5) !default;
    -
    -$solidInternalBorderColor  : #FAFAFA !default;
    -$solidBorderColor          : #D4D4D5 !default;
    -$solidSelectedBorderColor  : #BCBDBD !default;
    -
    -$whiteBorderColor              : rgba(255, 255, 255, 0.1) !default;
    -$selectedWhiteBorderColor      : rgba(255, 255, 255, 0.8) !default;
    -
    -$solidWhiteBorderColor         : #555555 !default;
    -$selectedSolidWhiteBorderColor : #999999 !default;
    -
    -/*-------------------
    -       Accents
    ---------------------*/
    -
    -/* Differentiating Neutrals */
    -$subtleGradient: linear-gradient(transparent, $transparentBlack) !default;
    -
    -/* Differentiating Layers */
    -$subtleShadow:
    -  0px 1px 2px 0 $borderColor
    - !default;
    -$floatingShadow:
    -  0px 2px 4px 0px rgba(34, 36, 38, 0.12),
    -  0px 2px 10px 0px rgba(34, 36, 38, 0.15)
    - !default;
    -
    -
    -/*-------------------
    -    Derived Values
    ---------------------*/
    -
    -/* Loaders Position Offset */
    -$loaderOffset : -($loaderSize / 2) !default;
    -$loaderMargin : $loaderOffset 0em 0em $loaderOffset !default;
    -
    -/* Rendered Scrollbar Width */
    -$scrollbarWidth: 17px !default;
    -
    -/* Maximum Single Character Glyph Width, aka Capital "W" */
    -$glyphWidth: 1.1em !default;
    -
    -/* Used to match floats with text */
    -$lineHeightOffset       : (($lineHeight - 1em) / 2) !default;
    -$headerLineHeightOffset : ($headerLineHeight - 1em) / 2 !default;
    -
    -/* Header Spacing */
    -$headerTopMargin    : calc(2rem - #{$headerLineHeightOffset}) !default;
    -$headerBottomMargin : 1rem !default;
    -
    -/* Minimum Mobile Width */
    -$pageMinWidth       : 320px !default;
    -
    -/* Positive / Negative Dupes */
    -$successBackgroundColor : $positiveBackgroundColor !default;
    -$successColor           : $positiveColor !default;
    -$successBorderColor     : $positiveBorderColor !default;
    -$successHeaderColor     : $positiveHeaderColor !default;
    -$successTextColor       : $positiveTextColor !default;
    -
    -$errorBackgroundColor   : $negativeBackgroundColor !default;
    -$errorColor             : $negativeColor !default;
    -$errorBorderColor       : $negativeBorderColor !default;
    -$errorHeaderColor       : $negativeHeaderColor !default;
    -$errorTextColor         : $negativeTextColor !default;
    -
    -
    -/* Responsive */
    -$largestMobileScreen : ($tabletBreakpoint - 1px) !default;
    -$largestTabletScreen : ($computerBreakpoint - 1px) !default;
    -$largestSmallMonitor : ($largeMonitorBreakpoint - 1px) !default;
    -$largestLargeMonitor : ($widescreenMonitorBreakpoint - 1px) !default;
    -
    -
    -
    -/*******************************
    -             States
    -*******************************/
    -
    -/*-------------------
    -      Disabled
    ---------------------*/
    -
    -$disabledOpacity: 0.45 !default;
    -$disabledTextColor: rgba(40, 40, 40, 0.3) !default;
    -$invertedDisabledTextColor: rgba(225, 225, 225, 0.3) !default;
    -
    -/*-------------------
    -        Hover
    ---------------------*/
    -
    -/*---  Shadows  ---*/
    -$floatingShadowHover:
    -  0px 2px 4px 0px rgba(34, 36, 38, 0.15),
    -  0px 2px 10px 0px rgba(34, 36, 38, 0.25)
    - !default;
    -
    -/*---  Colors  ---*/
    -$primaryColorHover    : saturate(darken($primaryColor, 5), 10) !default;
    -$secondaryColorHover  : saturate(lighten($secondaryColor, 5), 10) !default;
    -
    -$redHover             : saturate(darken($red, 5), 10) !default;
    -$orangeHover          : saturate(darken($orange, 5), 10) !default;
    -$yellowHover          : saturate(darken($yellow, 5), 10) !default;
    -$oliveHover           : saturate(darken($olive, 5), 10) !default;
    -$greenHover           : saturate(darken($green, 5), 10) !default;
    -$tealHover            : saturate(darken($teal, 5), 10) !default;
    -$blueHover            : saturate(darken($blue, 5), 10) !default;
    -$violetHover          : saturate(darken($violet, 5), 10) !default;
    -$purpleHover          : saturate(darken($purple, 5), 10) !default;
    -$pinkHover            : saturate(darken($pink, 5), 10) !default;
    -$brownHover           : saturate(darken($brown, 5), 10) !default;
    -
    -$lightRedHover        : saturate(darken($lightRed, 5), 10) !default;
    -$lightOrangeHover     : saturate(darken($lightOrange, 5), 10) !default;
    -$lightYellowHover     : saturate(darken($lightYellow, 5), 10) !default;
    -$lightOliveHover      : saturate(darken($lightOlive, 5), 10) !default;
    -$lightGreenHover      : saturate(darken($lightGreen, 5), 10) !default;
    -$lightTealHover       : saturate(darken($lightTeal, 5), 10) !default;
    -$lightBlueHover       : saturate(darken($lightBlue, 5), 10) !default;
    -$lightVioletHover     : saturate(darken($lightViolet, 5), 10) !default;
    -$lightPurpleHover     : saturate(darken($lightPurple, 5), 10) !default;
    -$lightPinkHover       : saturate(darken($lightPink, 5), 10) !default;
    -$lightBrownHover      : saturate(darken($lightBrown, 5), 10) !default;
    -$lightGreyHover       : saturate(darken($lightGrey, 5), 10) !default;
    -$lightBlackHover      : saturate(darken($fullBlack, 5), 10) !default;
    -
    -/*---  Emotive  ---*/
    -$positiveColorHover   : saturate(darken($positiveColor, 5), 10) !default;
    -$negativeColorHover   : saturate(darken($negativeColor, 5), 10) !default;
    -
    -/*---  Brand   ---*/
    -$facebookHoverColor   : saturate(darken($facebookColor, 5), 10) !default;
    -$twitterHoverColor    : saturate(darken($twitterColor, 5), 10) !default;
    -$googlePlusHoverColor : saturate(darken($googlePlusColor, 5), 10) !default;
    -$linkedInHoverColor   : saturate(darken($linkedInColor, 5), 10) !default;
    -$youtubeHoverColor    : saturate(darken($youtubeColor, 5), 10) !default;
    -$instagramHoverColor  : saturate(darken($instagramColor, 5), 10) !default;
    -$pinterestHoverColor  : saturate(darken($pinterestColor, 5), 10) !default;
    -$vkHoverColor         : saturate(darken($vkColor, 5), 10) !default;
    -
    -/*---  Dark Tones  ---*/
    -$fullBlackHover       : lighten($fullBlack, 5) !default;
    -$blackHover           : lighten($black, 5) !default;
    -$greyHover            : lighten($grey, 5) !default;
    -
    -/*---  Light Tones  ---*/
    -$whiteHover           : darken($white, 5) !default;
    -$offWhiteHover        : darken($offWhite, 5) !default;
    -$darkWhiteHover       : darken($darkWhite, 5) !default;
    -
    -/*-------------------
    -        Focus
    ---------------------*/
    -
    -/*---  Colors  ---*/
    -$primaryColorFocus    : saturate(darken($primaryColor, 8), 20) !default;
    -$secondaryColorFocus  : saturate(lighten($secondaryColor, 8), 20) !default;
    -
    -$redFocus             : saturate(darken($red, 8), 20) !default;
    -$orangeFocus          : saturate(darken($orange, 8), 20) !default;
    -$yellowFocus          : saturate(darken($yellow, 8), 20) !default;
    -$oliveFocus           : saturate(darken($olive, 8), 20) !default;
    -$greenFocus           : saturate(darken($green, 8), 20) !default;
    -$tealFocus            : saturate(darken($teal, 8), 20) !default;
    -$blueFocus            : saturate(darken($blue, 8), 20) !default;
    -$violetFocus          : saturate(darken($violet, 8), 20) !default;
    -$purpleFocus          : saturate(darken($purple, 8), 20) !default;
    -$pinkFocus            : saturate(darken($pink, 8), 20) !default;
    -$brownFocus           : saturate(darken($brown, 8), 20) !default;
    -
    -$lightRedFocus        : saturate(darken($lightRed, 8), 20) !default;
    -$lightOrangeFocus     : saturate(darken($lightOrange, 8), 20) !default;
    -$lightYellowFocus     : saturate(darken($lightYellow, 8), 20) !default;
    -$lightOliveFocus      : saturate(darken($lightOlive, 8), 20) !default;
    -$lightGreenFocus      : saturate(darken($lightGreen, 8), 20) !default;
    -$lightTealFocus       : saturate(darken($lightTeal, 8), 20) !default;
    -$lightBlueFocus       : saturate(darken($lightBlue, 8), 20) !default;
    -$lightVioletFocus     : saturate(darken($lightViolet, 8), 20) !default;
    -$lightPurpleFocus     : saturate(darken($lightPurple, 8), 20) !default;
    -$lightPinkFocus       : saturate(darken($lightPink, 8), 20) !default;
    -$lightBrownFocus      : saturate(darken($lightBrown, 8), 20) !default;
    -$lightGreyFocus       : saturate(darken($lightGrey, 8), 20) !default;
    -$lightBlackFocus      : saturate(darken($fullBlack, 8), 20) !default;
    -
    -/*---  Emotive  ---*/
    -$positiveColorFocus   : saturate(darken($positiveColor, 8), 20) !default;
    -$negativeColorFocus   : saturate(darken($negativeColor, 8), 20) !default;
    -
    -/*---  Brand   ---*/
    -$facebookFocusColor   : saturate(darken($facebookColor, 8), 20) !default;
    -$twitterFocusColor    : saturate(darken($twitterColor, 8), 20) !default;
    -$googlePlusFocusColor : saturate(darken($googlePlusColor, 8), 20) !default;
    -$linkedInFocusColor   : saturate(darken($linkedInColor, 8), 20) !default;
    -$youtubeFocusColor    : saturate(darken($youtubeColor, 8), 20) !default;
    -$instagramFocusColor  : saturate(darken($instagramColor, 8), 20) !default;
    -$pinterestFocusColor  : saturate(darken($pinterestColor, 8), 20) !default;
    -$vkFocusColor         : saturate(darken($vkColor, 8), 20) !default;
    -
    -/*---  Dark Tones  ---*/
    -$fullBlackFocus       : lighten($fullBlack, 8) !default;
    -$blackFocus           : lighten($black, 8) !default;
    -$greyFocus            : lighten($grey, 8) !default;
    -
    -/*---  Light Tones  ---*/
    -$whiteFocus           : darken($white, 8) !default;
    -$offWhiteFocus        : darken($offWhite, 8) !default;
    -$darkWhiteFocus       : darken($darkWhite, 8) !default;
    -
    -
    -/*-------------------
    -    Down (:active)
    ---------------------*/
    -
    -/*---  Colors  ---*/
    -$primaryColorDown    : darken($primaryColor, 10) !default;
    -$secondaryColorDown  : lighten($secondaryColor, 10) !default;
    -
    -$redDown             : darken($red, 10) !default;
    -$orangeDown          : darken($orange, 10) !default;
    -$yellowDown          : darken($yellow, 10) !default;
    -$oliveDown           : darken($olive, 10) !default;
    -$greenDown           : darken($green, 10) !default;
    -$tealDown            : darken($teal, 10) !default;
    -$blueDown            : darken($blue, 10) !default;
    -$violetDown          : darken($violet, 10) !default;
    -$purpleDown          : darken($purple, 10) !default;
    -$pinkDown            : darken($pink, 10) !default;
    -$brownDown           : darken($brown, 10) !default;
    -
    -$lightRedDown        : darken($lightRed, 10) !default;
    -$lightOrangeDown     : darken($lightOrange, 10) !default;
    -$lightYellowDown     : darken($lightYellow, 10) !default;
    -$lightOliveDown      : darken($lightOlive, 10) !default;
    -$lightGreenDown      : darken($lightGreen, 10) !default;
    -$lightTealDown       : darken($lightTeal, 10) !default;
    -$lightBlueDown       : darken($lightBlue, 10) !default;
    -$lightVioletDown     : darken($lightViolet, 10) !default;
    -$lightPurpleDown     : darken($lightPurple, 10) !default;
    -$lightPinkDown       : darken($lightPink, 10) !default;
    -$lightBrownDown      : darken($lightBrown, 10) !default;
    -$lightGreyDown       : darken($lightGrey, 10) !default;
    -$lightBlackDown      : darken($fullBlack, 10) !default;
    -
    -/*---  Emotive  ---*/
    -$positiveColorDown   : darken($positiveColor, 10) !default;
    -$negativeColorDown   : darken($negativeColor, 10) !default;
    -
    -/*---  Brand   ---*/
    -$facebookDownColor   : darken($facebookColor, 10) !default;
    -$twitterDownColor    : darken($twitterColor, 10) !default;
    -$googlePlusDownColor : darken($googlePlusColor, 10) !default;
    -$linkedInDownColor   : darken($linkedInColor, 10) !default;
    -$youtubeDownColor    : darken($youtubeColor, 10) !default;
    -$instagramDownColor  : darken($instagramColor, 10) !default;
    -$pinterestDownColor  : darken($pinterestColor, 10) !default;
    -$vkDownColor         : darken($vkColor, 10) !default;
    -
    -/*---  Dark Tones  ---*/
    -$fullBlackDown       : lighten($fullBlack, 10) !default;
    -$blackDown           : lighten($black, 10) !default;
    -$greyDown            : lighten($grey, 10) !default;
    -
    -/*---  Light Tones  ---*/
    -$whiteDown           : darken($white, 10) !default;
    -$offWhiteDown        : darken($offWhite, 10) !default;
    -$darkWhiteDown       : darken($darkWhite, 10) !default;
    -
    -
    -/*-------------------
    -        Active
    ---------------------*/
    -
    -/*---  Colors  ---*/
    -$primaryColorActive    : saturate(darken($primaryColor, 5), 15) !default;
    -$secondaryColorActive  : saturate(lighten($secondaryColor, 5), 15) !default;
    -
    -$redActive             : saturate(darken($red, 5), 15) !default;
    -$orangeActive          : saturate(darken($orange, 5), 15) !default;
    -$yellowActive          : saturate(darken($yellow, 5), 15) !default;
    -$oliveActive           : saturate(darken($olive, 5), 15) !default;
    -$greenActive           : saturate(darken($green, 5), 15) !default;
    -$tealActive            : saturate(darken($teal, 5), 15) !default;
    -$blueActive            : saturate(darken($blue, 5), 15) !default;
    -$violetActive          : saturate(darken($violet, 5), 15) !default;
    -$purpleActive          : saturate(darken($purple, 5), 15) !default;
    -$pinkActive            : saturate(darken($pink, 5), 15) !default;
    -$brownActive           : saturate(darken($brown, 5), 15) !default;
    -
    -$lightRedActive        : saturate(darken($lightRed, 5), 15) !default;
    -$lightOrangeActive     : saturate(darken($lightOrange, 5), 15) !default;
    -$lightYellowActive     : saturate(darken($lightYellow, 5), 15) !default;
    -$lightOliveActive      : saturate(darken($lightOlive, 5), 15) !default;
    -$lightGreenActive      : saturate(darken($lightGreen, 5), 15) !default;
    -$lightTealActive       : saturate(darken($lightTeal, 5), 15) !default;
    -$lightBlueActive       : saturate(darken($lightBlue, 5), 15) !default;
    -$lightVioletActive     : saturate(darken($lightViolet, 5), 15) !default;
    -$lightPurpleActive     : saturate(darken($lightPurple, 5), 15) !default;
    -$lightPinkActive       : saturate(darken($lightPink, 5), 15) !default;
    -$lightBrownActive      : saturate(darken($lightBrown, 5), 15) !default;
    -$lightGreyActive       : saturate(darken($lightGrey, 5), 15) !default;
    -$lightBlackActive      : saturate(darken($fullBlack, 5), 15) !default;
    -
    -/*---  Emotive  ---*/
    -$positiveColorActive   : saturate(darken($positiveColor, 5), 15) !default;
    -$negativeColorActive   : saturate(darken($negativeColor, 5), 15) !default;
    -
    -/*---  Brand   ---*/
    -$facebookActiveColor   : saturate(darken($facebookColor, 5), 15) !default;
    -$twitterActiveColor    : saturate(darken($twitterColor, 5), 15) !default;
    -$googlePlusActiveColor : saturate(darken($googlePlusColor, 5), 15) !default;
    -$linkedInActiveColor   : saturate(darken($linkedInColor, 5), 15) !default;
    -$youtubeActiveColor    : saturate(darken($youtubeColor, 5), 15) !default;
    -$instagramActiveColor  : saturate(darken($instagramColor, 5), 15) !default;
    -$pinterestActiveColor  : saturate(darken($pinterestColor, 5), 15) !default;
    -$vkActiveColor         : saturate(darken($vkColor, 5), 15) !default;
    -
    -/*---  Dark Tones  ---*/
    -$fullBlackActive       : darken($fullBlack, 5) !default;
    -$blackActive           : darken($black, 5) !default;
    -$greyActive            : darken($grey, 5) !default;
    -
    -/*---  Light Tones  ---*/
    -$whiteActive           : darken($white, 5) !default;
    -$offWhiteActive        : darken($offWhite, 5) !default;
    -$darkWhiteActive       : darken($darkWhite, 5) !default;
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/semanticui/variables_table.scss b/tmp/tabulator-5.6.1/src/scss/themes/semanticui/variables_table.scss
    deleted file mode 100644
    index 37a288c..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/semanticui/variables_table.scss
    +++ /dev/null
    @@ -1,247 +0,0 @@
    -@import "variables.scss";
    -
    -/*******************************
    -             Table
    -*******************************/
    -
    -/*-------------------
    -       Element
    ---------------------*/
    -
    -$verticalMargin: 1em !default;
    -$horizontalMargin: 0em !default;
    -$margin: $verticalMargin $horizontalMargin !default;
    -$borderCollapse: separate !default;
    -$borderSpacing: 0px !default;
    -$borderRadius: $defaultBorderRadius !default;
    -$transition:
    -  background $defaultDuration $defaultEasing,
    -  color $defaultDuration $defaultEasing !default;
    -$background: $white !default;
    -$color: $textColor !default;
    -$borderWidth: 1px !default;
    -$border: $borderWidth solid $borderColor !default;
    -$boxShadow: none !default;
    -$textAlign: left !default;
    -
    -/*--------------
    -     Parts
    ----------------*/
    -
    -/* Table Row */
    -$rowBorder: 1px solid $internalBorderColor !default;
    -
    -/* Table Cell */
    -$cellVerticalPadding: $relativeMini !default;
    -$cellHorizontalPadding: $relativeMini !default;
    -$cellVerticalAlign: inherit !default;
    -$cellTextAlign: inherit !default;
    -$cellBorder: 1px solid $internalBorderColor !default;
    -
    -/* Table Header */
    -$headerBorder: 1px solid $internalBorderColor !default;
    -$headerDivider: none !default;
    -$headerBackground: $offWhite !default;
    -$headerAlign: inherit !default;
    -$headerVerticalAlign: inherit !default;
    -$headerColor: $textColor !default;
    -$headerVerticalPadding: $relativeSmall !default;
    -$headerHorizontalPadding: $cellHorizontalPadding !default;
    -$headerFontStyle: none !default;
    -$headerFontWeight: bold !default;
    -$headerTextTransform: none !default;
    -$headerBoxShadow: none !default;
    -
    -/* Table Footer */
    -$footerBoxShadow: none !default;
    -$footerBorder: 1px solid $borderColor !default;
    -$footerDivider: none !default;
    -$footerBackground: $offWhite !default;
    -$footerAlign: inherit !default;
    -$footerVerticalAlign: middle !default;
    -$footerColor: $textColor !default;
    -$footerVerticalPadding: $cellVerticalPadding !default;
    -$footerHorizontalPadding: $cellHorizontalPadding !default;
    -$footerFontStyle: normal !default;
    -$footerFontWeight: normal !default;
    -$footerTextTransform: none !default;
    -
    -/* Responsive Size */
    -$responsiveHeaderDisplay: block !default;
    -$responsiveFooterDisplay: block !default;
    -$responsiveRowVerticalPadding: 1em !default;
    -$responsiveRowBoxShadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important !default;
    -$responsiveCellVerticalPadding: 0.25em !default;
    -$responsiveCellHorizontalPadding: 0.75em !default;
    -$responsiveCellBoxShadow: none !important !default;
    -
    -/*-------------------
    -       Types
    ---------------------*/
    -
    -/* Definition */
    -$definitionPageBackground: $white !default;
    -
    -$definitionHeaderBackground: transparent !default;
    -$definitionHeaderColor: $unselectedTextColor !default;
    -$definitionHeaderFontWeight: normal !default;
    -
    -$definitionFooterBackground: $definitionHeaderBackground !default;
    -$definitionFooterColor: $definitionHeaderColor !default;
    -$definitionFooterFontWeight: $definitionHeaderFontWeight !default;
    -
    -$definitionColumnBackground: $subtleTransparentBlack !default;
    -$definitionColumnFontWeight: bold !default;
    -$definitionColumnColor: $selectedTextColor !default;
    -$definitionColumnFontSize: $relativeMedium !default;
    -$definitionColumnTextTransform: '' !default;
    -$definitionColumnBoxShadow: '' !default;
    -$definitionColumnTextAlign: '' !default;
    -$definitionColumnHorizontalPadding: '' !default;
    -
    -
    -/*--------------
    -    Couplings
    ----------------*/
    -
    -$iconVerticalAlign: baseline !default;
    -
    -/*--------------
    -     States
    ----------------*/
    -
    -$stateMarkerWidth: 0px !default;
    -
    -/* Positive */
    -$positiveColor: $positiveTextColor !default;
    -$positiveBoxShadow: $stateMarkerWidth 0px 0px $positiveBorderColor inset !default;
    -$positiveBackgroundHover: darken($positiveBackgroundColor, 3) !default;
    -$positiveColorHover: darken($positiveColor, 3) !default;
    -
    -/* Negative */
    -$negativeColor: $negativeTextColor !default;
    -$negativeBoxShadow: $stateMarkerWidth 0px 0px $negativeBorderColor inset !default;
    -$negativeBackgroundHover: darken($negativeBackgroundColor, 3) !default;
    -$negativeColorHover: darken($negativeColor, 3) !default;
    -
    -/* Error */
    -$errorColor: $errorTextColor !default;
    -$errorBoxShadow: $stateMarkerWidth 0px 0px $errorBorderColor inset !default;
    -$errorBackgroundHover: darken($errorBackgroundColor, 3) !default;
    -$errorColorHover: darken($errorColor, 3) !default;
    -
    -/* Warning */
    -$warningColor: $warningTextColor !default;
    -$warningBoxShadow: $stateMarkerWidth 0px 0px $warningBorderColor inset !default;
    -$warningBackgroundHover: darken($warningBackgroundColor, 3) !default;
    -$warningColorHover: darken($warningColor, 3) !default;
    -
    -/* Active */
    -$activeColor: $textColor !default;
    -$activeBackgroundColor: #E0E0E0 !default;
    -$activeBoxShadow: $stateMarkerWidth 0px 0px $activeColor inset !default;
    -
    -$activeBackgroundHover: #EFEFEF !default;
    -$activeColorHover: $selectedTextColor !default;
    -
    -/*--------------
    -     Types
    ----------------*/
    -
    -/* Attached */
    -$attachedTopOffset: 0px !default;
    -$attachedBottomOffset: 0px !default;
    -$attachedHorizontalOffset: -$borderWidth !default;
    -$attachedWidth: calc(100% + #{$attachedHorizontalOffset * -2}) !default;
    -$attachedBoxShadow: none !default;
    -$attachedBorder: $borderWidth solid $solidBorderColor !default;
    -$attachedBottomBoxShadow:
    -  $boxShadow,
    -  $attachedBoxShadow
    - !default;
    -
    -/* Striped */
    -$stripedBackground: rgba(0, 0, 50, 0.02) !default;
    -$invertedStripedBackground: rgba(255, 255, 255, 0.05) !default;
    -
    -/* Selectable */
    -$selectableBackground: $transparentBlack !default;
    -$selectableTextColor: $selectedTextColor !default;
    -$selectableInvertedBackground: $transparentWhite !default;
    -$selectableInvertedTextColor: $invertedSelectedTextColor !default;
    -
    -/* Sortable */
    -$sortableBackground: '' !default;
    -$sortableColor: $textColor !default;
    -
    -$sortableBorder: 1px solid $borderColor !default;
    -$sortableIconWidth: auto !default;
    -$sortableIconDistance: 0.5em !default;
    -$sortableIconOpacity: 0.8 !default;
    -$sortableIconFont: 'Icons' !default;
    -$sortableIconAscending: '\f0d8' !default;
    -$sortableIconDescending: '\f0d7' !default;
    -$sortableDisabledColor: $disabledTextColor !default;
    -
    -$sortableHoverBackground: $transparentBlack !default;
    -$sortableHoverColor: $hoveredTextColor !default;
    -
    -$sortableActiveBackground: $transparentBlack !default;
    -$sortableActiveColor: $selectedTextColor !default;
    -
    -$sortableActiveHoverBackground: $transparentBlack !default;
    -$sortableActiveHoverColor: $selectedTextColor !default;
    -
    -$sortableInvertedBorderColor: transparent !default;
    -$sortableInvertedHoverBackground: $transparentWhite $subtleGradient !default;
    -$sortableInvertedHoverColor: $invertedHoveredTextColor !default;
    -$sortableInvertedActiveBackground: $strongTransparentWhite $subtleGradient !default;
    -$sortableInvertedActiveColor: $invertedSelectedTextColor !default;
    -
    -/* Colors */
    -$coloredBorderSize: 0.2em !default;
    -$coloredBorderRadius: 0em 0em $borderRadius $borderRadius !default;
    -
    -/* Inverted */
    -$invertedBackground: #333333 !default;
    -$invertedBorder: none !default;
    -$invertedCellBorderColor: $whiteBorderColor !default;
    -$invertedCellColor: $invertedTextColor !default;
    -
    -$invertedHeaderBackground: $veryStrongTransparentBlack !default;
    -$invertedHeaderColor: $invertedTextColor !default;
    -$invertedHeaderBorderColor: $invertedCellBorderColor !default;
    -
    -$invertedDefinitionColumnBackground: $subtleTransparentWhite !default;
    -$invertedDefinitionColumnColor: $invertedSelectedTextColor !default;
    -$invertedDefinitionColumnFontWeight: bold !default;
    -
    -/* Basic */
    -$basicTableBackground: transparent !default;
    -$basicTableBorder: $borderWidth solid $borderColor !default;
    -$basicBoxShadow: none !default;
    -
    -$basicTableHeaderBackground: transparent !default;
    -$basicTableCellBackground: transparent !default;
    -$basicTableHeaderDivider: none !default;
    -$basicTableCellBorder: 1px solid rgba(0, 0, 0, 0.1) !default;
    -$basicTableCellPadding: '' !default;
    -$basicTableStripedBackground: #f2f2f2 !default;
    -
    -/* Padded */
    -$paddedVerticalPadding: 1em !default;
    -$paddedHorizontalPadding: 1em !default;
    -$veryPaddedVerticalPadding: 1.5em !default;
    -$veryPaddedHorizontalPadding: 1.5em !default;
    -
    -/* Compact */
    -$compactVerticalPadding: 0.5em !default;
    -$compactHorizontalPadding: 0.7em !default;
    -$veryCompactVerticalPadding: 0.4em !default;
    -$veryCompactHorizontalPadding: 0.6em !default;
    -
    -
    -/* Sizes */
    -$small: 0.9em !default;
    -$medium: 1em !default;
    -$large: 1.1em !default;
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_midnight.scss b/tmp/tabulator-5.6.1/src/scss/themes/tabulator_midnight.scss
    deleted file mode 100644
    index 4b2ea22..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_midnight.scss
    +++ /dev/null
    @@ -1,175 +0,0 @@
    -
    -//Main Theme Variables
    -$backgroundColor: #222 !default; //background color of tabulator
    -$borderColor:#333 !default; //border to tabulator
    -$textSize:14px !default; //table text size
    -
    -//header theming
    -$headerBackgroundColor:#333 !default; //border to tabulator
    -$headerTextColor:#fff !default; //header text color
    -$headerBorderColor:#aaa !default;  //header border color
    -$headerSeparatorColor:#999 !default; //header bottom separator color
    -$headerMargin:4px !default; //padding round header
    -
    -//column header arrows
    -$sortArrowActive: #666 !default;
    -$sortArrowInactive: #bbb !default;
    -
    -//row theming
    -$rowBackgroundColor:#666 !default; //table row background color
    -$rowAltBackgroundColor:#444 !default; //table row background color
    -$rowBorderColor:#888 !default; //table border color
    -$rowTextColor:#fff !default; //table text color
    -$rowHoverBackground:#999 !default; //row background color on hover
    -
    -$rowSelectedBackground: #000 !default; //row background color when selected
    -$rowSelectedBackgroundHover: #888 !default;//row background color when selected and hovered
    -
    -$editBoxColor:#999 !default; //border color for edit boxes
    -$errorColor:#dd0000 !default; //error indication
    -
    -//footer theming
    -$footerBackgroundColor:#333 !default; //border to tabulator
    -$footerTextColor:#333 !default; //footer text color
    -$footerBorderColor:#aaa !default; //footer border color
    -$footerSeparatorColor:#999 !default; //footer bottom separator color
    -$footerActiveColor:#fff !default; //footer bottom active text color
    -
    -$headerHighlightBackground: #777 !default; //header background color when highlighted
    -$headerTextHighlightBackground: #fff !default; //header background color when highlighted
    -
    -//range selection
    -$rangeBorderColor: #ccc !default; //range border color
    -$rangeHandleColor: $rangeBorderColor !default; //range handle color
    -$rangeHeaderSelectedBackground: $rangeBorderColor !default; //header background color when selected
    -$rangeHeaderSelectedTextColor: #333 !default; //header text color when selected
    -$rangeHeaderHighlightBackground: #999 !default; //header background color when highlighted
    -$rangeHeaderTextHighlightBackground: #000000 !default; //header text color when highlighted
    -
    -
    -
    -@import "../tabulator.scss";
    -
    -//Tabulator Containing Element
    -.tabulator{
    -	background-color: $backgroundColor;
    -
    -	.tabulator-header{
    -
    -		.tabulator-col{
    -			background-color: $headerBackgroundColor;
    -
    -			.tabulator-col-content{
    -				.tabulator-col-title{
    -					.tabulator-title-editor{
    -						color: #fff;
    -					}
    -				}
    -			}
    -
    -			.tabulator-header-filter{
    -				input, select{
    -					border:1px solid #999;
    -					background: #444;
    -					color: #fff;
    -				}
    -			}
    -		}
    -
    -		.tabulator-calcs-holder{
    -			background:darken($headerBackgroundColor, 10%) !important;
    -
    -			.tabulator-row{
    -				background:darken($headerBackgroundColor, 10%) !important;
    -			}
    -		}
    -	}
    -
    -	//footer element
    -	.tabulator-footer{
    -
    -		.tabulator-calcs-holder{
    -			background:darken($footerBackgroundColor, 5%) !important;
    -
    -			.tabulator-row{
    -				background:darken($footerBackgroundColor, 5%) !important;
    -			}
    -		}
    -
    -		//pagination container element
    -		.tabulator-paginator{
    -			label{
    -				color:#fff;
    -			}
    -		}
    -
    -		.tabulator-page-counter {
    -			color: #fff;
    -		}
    -
    -		//pagination button
    -		.tabulator-page{
    -			color: $footerTextColor;
    -			font-family:inherit;
    -			font-weight:inherit;
    -			font-size:inherit;
    -		}
    -	}
    -}
    -
    -//row element
    -.tabulator-row{
    -
    -	//row grouping element
    -	&.tabulator-group{
    -		min-width: 100%;
    -
    -		color:#333;
    -
    -		@media (hover:hover) and (pointer:fine){
    -			&:hover{
    -				cursor:pointer;
    -				background-color:rgba(0,0,0,.1);
    -			}
    -		}
    -
    -		span{
    -			color:#666;
    -		}
    -	}
    -}
    -
    -.tabulator-edit-select-list{
    -	background:$rowTextColor;
    -
    -	.tabulator-edit-select-list-item{
    -		color:$rowBackgroundColor;
    -
    -		&.active{
    -			color:$editBoxColor;
    -			background:$rowAltBackgroundColor;
    -
    -			&.focused{
    -				outline:1px solid rgba($editBoxColor, .5);
    -			}
    -		}
    -
    -		&.focused{
    -			outline:1px solid $rowAltBackgroundColor;
    -		}
    -
    -		@media (hover:hover) and (pointer:fine){
    -			&:hover{
    -				color:$editBoxColor;
    -				background:$rowBackgroundColor;
    -			}
    -		}
    -	}
    -}
    -
    -.tabulator-print-table{
    -	.tabulator-print-table-group{
    -		color:#333;
    -	}
    -}
    -
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_modern.scss b/tmp/tabulator-5.6.1/src/scss/themes/tabulator_modern.scss
    deleted file mode 100644
    index 402298d..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_modern.scss
    +++ /dev/null
    @@ -1,248 +0,0 @@
    -
    -$primary: #3759D7 !default; //the base text color from which the rest of the theme derives
    -
    -//Main Theme Variables
    -$backgroundColor: #fff !default; //background color of tabulator
    -$borderColor:#fff !default; //border to tabulator
    -$textSize:16px !default; //table text size
    -
    -//header theming
    -$headerBackgroundColor:#fff !default; //border to tabulator
    -$headerTextColor:$primary !default; //header text color
    -$headerBorderColor:#fff !default;  //header border color
    -$headerSeparatorColor:$primary !default; //header bottom separator color
    -$headerMargin:4px !default; //padding round header
    -
    -//column header arrows
    -$sortArrowActive: $primary !default;
    -$sortArrowInactive: lighten($primary, 30%) !default;
    -
    -//row theming
    -$rowBackgroundColor:#f3f3f3 !default; //table row background color
    -$rowAltBackgroundColor:#fff !default; //table row background color
    -$rowBorderColor:#fff !default; //table border color
    -$rowTextColor:#333 !default; //table text color
    -$rowHoverBackground:#bbb !default; //row background color on hover
    -
    -$rowSelectedBackground: #9ABCEA !default; //row background color when selected
    -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
    -
    -$editBoxColor:#1D68CD !default; //border color for edit boxes
    -$errorColor:#dd0000 !default; //error indication
    -
    -//footer theming
    -$footerBackgroundColor:#fff !default; //border to tabulator
    -$footerTextColor:$primary !default; //footer text color
    -$footerBorderColor:#aaa !default; //footer border color
    -$footerSeparatorColor:#999 !default; //footer bottom separator color
    -$footerActiveColor:$primary !default; //footer bottom active text color
    -
    -$handleWidth:10px !default; //width of the row handle
    -$handleColor: $primary !default; //color for odd numbered rows
    -$handleColorAlt: lighten($primary, 10%) !default; //color for even numbered rows
    -
    -//range selection
    -$rangeBorderColor: #{darken($primary, 10%)} !default; //range border color
    -$rangeHandleColor: $rangeBorderColor !default; //range handle color
    -$rangeHeaderSelectedBackground: $rangeBorderColor !default; //header background color when selected
    -$rangeHeaderHighlightBackground: $primary !default; //header background color when highlighted
    -$rangeHeaderTextHighlightBackground: #fff !default; //header text color when highlighted
    -
    -
    -
    -@import "../tabulator.scss";
    -
    -.tabulator{
    -
    -	.tabulator-header{
    -		border-bottom:3px solid $headerSeparatorColor;
    -		margin-bottom:4px;
    -		padding-left:$handleWidth;
    -
    -		font-size: 1.1em;
    -
    -		.tabulator-col{
    -			border-right:2px solid $headerBorderColor;
    -			background-color: $headerBackgroundColor;
    -
    -			&:nth-child(1) {
    -				padding-left: $handleWidth;
    -			}
    -
    -			.tabulator-col-content{
    -				.tabulator-col-title{
    -					.tabulator-title-editor{
    -						border:1px solid $primary;
    -
    -						font-size: 1em;
    -						color: $primary;
    -					}
    -				}
    -			}
    -
    -			&.tabulator-col-group{
    -				.tabulator-col-group-cols{
    -					border-top:2px solid $headerSeparatorColor;
    -				}
    -			}
    -		}
    -
    -		.tabulator-frozen{
    -			&.tabulator-frozen-left{
    -				padding-left: $handleWidth;
    -			}
    -		}
    -
    -		.tabulator-calcs-holder{
    -			border-top:2px solid $headerSeparatorColor !important;
    -
    -			.tabulator-row{
    -				padding-left: 0 !important;
    -
    -				.tabulator-cell{
    -					background:none;
    -				}
    -			}
    -		}
    -	}
    -
    -	.tabulator-tableholder{
    -		.tabulator-placeholder{
    -			span{
    -				color:$primary;
    -			}
    -		}
    -
    -		.tabulator-table{
    -			.tabulator-row{
    -				&.tabulator-calcs{
    -					&.tabulator-calcs-top{
    -						border-bottom:2px solid $headerSeparatorColor;
    -					}
    -
    -					&.tabulator-calcs-bottom{
    -						border-top:2px solid $headerSeparatorColor;
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	.tabulator-footer{
    -		.tabulator-calcs-holder{
    -			border-top:3px solid $headerSeparatorColor !important;
    -			border-bottom:2px solid $headerSeparatorColor !important;
    -
    -			.tabulator-row{
    -				background:lighten($footerBackgroundColor, 5%) !important;
    -
    -				.tabulator-cell{
    -					background:none;
    -
    -					&:first-child{
    -						border-left: $handleWidth solid transparent;
    -					}
    -				}
    -			}
    -
    -			&:only-child{
    -				border-bottom:none !important;
    -			}
    -		}
    -	}
    -}
    -
    -
    -.tabulator-row{
    -	margin-bottom: 2px;
    -
    -	.tabulator-cell{
    -		&:first-child{
    -			border-left: $handleWidth solid $handleColor;
    -		}
    -	}
    -
    -
    -	&:nth-child(even){
    -		background-color: $handleColorAlt;
    -
    -		.tabulator-cell{
    -			background-color: $rowAltBackgroundColor;
    -
    -			&:first-child{
    -				border-left: $handleWidth solid $handleColorAlt;
    -			}
    -		}
    -	}
    -
    -	@media (hover:hover) and (pointer:fine){
    -		&.tabulator-selectable:hover{
    -			cursor: pointer;
    -
    -			.tabulator-cell{
    -				background-color:$rowHoverBackground;
    -			}
    -		}
    -	}
    -
    -	&.tabulator-selected{
    -		.tabulator-cell{
    -			background-color:$rowSelectedBackground;
    -		}
    -	}
    -
    -	@media (hover:hover) and (pointer:fine){
    -		&.tabulator-selected:hover{
    -			.tabulator-cell{
    -				background-color:$rowSelectedBackgroundHover;
    -				cursor: pointer;
    -			}
    -		}
    -	}
    -
    -	&.tabulator-moving{
    -		pointer-events: none !important;
    -	}
    -
    -	.tabulator-cell{
    -		padding:6px 4px;
    -		border-right:2px solid $rowBorderColor;
    -
    -		background-color: $rowBackgroundColor;
    -	}
    -
    -	&.tabulator-group{
    -		min-width: 100%;
    -
    -		margin-bottom: 2px;
    -
    -		border-bottom:2px solid $primary;
    -		border-top:2px solid $primary;
    -		border-right:none;
    -
    -		background:lighten($primary, 20%);
    -
    -		span{
    -			color:$primary;
    -		}
    -	}
    -}
    -
    -.tabulator-edit-select-list{
    -	border:1px solid $editBoxColor;
    -}
    -
    -.tabulator-print-table{
    -
    -	.tabulator-print-table-group{
    -		border-bottom:2px solid $primary;
    -		border-top:2px solid $primary;
    -		background:lighten($primary, 20%);
    -		margin-bottom: 2px;
    -
    -		span{
    -			color:$primary;
    -		}
    -	}
    -}
    -
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_simple.scss b/tmp/tabulator-5.6.1/src/scss/themes/tabulator_simple.scss
    deleted file mode 100644
    index 7b0bebf..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_simple.scss
    +++ /dev/null
    @@ -1,102 +0,0 @@
    -
    -//Main Theme Variables
    -$backgroundColor: #fff !default; //background color of tabulator
    -$borderColor:#999 !default; //border to tabulator
    -$textSize:14px !default; //table text size
    -
    -//header theming
    -$headerBackgroundColor:#fff !default; //border to tabulator
    -$headerTextColor:#555 !default; //header text color
    -$headerBorderColor:#ddd !default;  //header border color
    -$headerSeparatorColor:#999 !default; //header bottom separator color
    -$headerMargin:4px !default; //padding round header
    -
    -//column header arrows
    -$sortArrowActive: #666 !default;
    -$sortArrowInactive: #bbb !default;
    -
    -//row theming
    -$rowBackgroundColor:#fff !default; //table row background color
    -$rowAltBackgroundColor:#fff !default; //table row background color
    -$rowBorderColor:#ddd !default; //table border color
    -$rowTextColor:#333 !default; //table text color
    -$rowHoverBackground:#bbb !default; //row background color on hover
    -
    -$rowSelectedBackground: #9ABCEA !default; //row background color when selected
    -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
    -
    -
    -$editBoxColor:#1D68CD !default; //border color for edit boxes
    -$errorColor:#dd0000 !default; //error indication
    -
    -//footer theming
    -$footerBackgroundColor:#fff !default; //border to tabulator
    -$footerTextColor:#555 !default; //footer text color
    -$footerBorderColor:#aaa !default; //footer border color
    -$footerSeparatorColor:#999 !default; //footer bottom separator color
    -$footerActiveColor:#d00 !default; //footer bottom active text color
    -
    -@import "../tabulator.scss";
    -
    -.tabulator{
    -	border:none;
    -	background-color: $backgroundColor;
    -
    -	.tabulator-header{
    -		.tabulator-calcs-holder{
    -			background:darken($headerBackgroundColor, 5%) !important;
    -
    -			.tabulator-row{
    -				background:darken($headerBackgroundColor, 5%) !important;
    -			}
    -
    -			border-bottom:1px solid $headerSeparatorColor;
    -		}
    -	}
    -
    -	.tabulator-tableholder{
    -		.tabulator-placeholder{
    -			span{
    -				color:#000;
    -			}
    -		}
    -	}
    -
    -	.tabulator-footer{
    -		.tabulator-calcs-holder{
    -			background:darken($footerBackgroundColor, 5%) !important;
    -
    -			.tabulator-row{
    -				background:darken($footerBackgroundColor, 5%) !important;
    -			}
    -
    -			border-bottom:1px solid $footerBackgroundColor;
    -		}
    -	}
    -}
    -
    -.tabulator-row{
    -	border-bottom:1px solid $rowBorderColor;
    -
    -	.tabulator-cell{
    -		&:last-of-type{
    -			border-right: none;
    -		}
    -	}
    -
    -	&.tabulator-group{
    -		span{
    -			color:#666;
    -		}
    -	}
    -}
    -
    -.tabulator-print-table{
    -	.tabulator-print-table-group{
    -		span{
    -			margin-left:10px;
    -			color:#666;
    -		}
    -	}
    -}
    -
    diff --git a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_site.scss b/tmp/tabulator-5.6.1/src/scss/themes/tabulator_site.scss
    deleted file mode 100644
    index e3985c5..0000000
    --- a/tmp/tabulator-5.6.1/src/scss/themes/tabulator_site.scss
    +++ /dev/null
    @@ -1,204 +0,0 @@
    -
    -//Main Theme Variables
    -$backgroundColor: #fff !default; //background color of tabulator
    -$borderColor:#222 !default; //border to tabulator
    -$textSize:14px !default; //table text size
    -
    -//header theming
    -$headerBackgroundColor:#222 !default; //border to tabulator
    -$headerTextColor:#fff !default; //header text color
    -$headerBorderColor:#aaa !default;  //header border color
    -$headerSeparatorColor:#3FB449 !default; //header bottom separator color
    -$headerMargin:4px !default; //padding round header
    -
    -//column header arrows
    -$sortArrowActive: #3FB449 !default;
    -$sortArrowInactive: #bbb !default;
    -
    -//row theming
    -$rowBackgroundColor:#fff !default; //table row background color
    -$rowAltBackgroundColor:#EFEFEF !default; //table row background color
    -$rowBorderColor:#aaa !default; //table border color
    -$rowTextColor:#333 !default; //table text color
    -$rowHoverBackground:#bbb !default; //row background color on hover
    -
    -$rowSelectedBackground: #70c28e !default; //row background color when selected
    -$rowSelectedBackgroundHover: #269b51 !default;//row background color when selected and hovered
    -
    -
    -$editBoxColor:#1D68CD !default; //border color for edit boxes
    -$errorColor:#dd0000 !default; //error indication
    -
    -//footer theming
    -$footerBackgroundColor:#222 !default; //border to tabulator
    -$footerTextColor:#222 !default; //footer text color
    -$footerBorderColor:#aaa !default; //footer border color
    -$footerSeparatorColor:#3FB449 !default; //footer bottom separator color
    -$footerActiveColor:$footerSeparatorColor !default; //footer bottom active text color
    -
    -//range selection
    -$rangeBorderColor: $rowSelectedBackgroundHover !default; //range border color
    -$rangeHandleColor: $rangeBorderColor !default; //range handle color
    -$rangeHeaderSelectedBackground: $rangeBorderColor !default; //header background color when selected
    -$rangeHeaderSelectedTextColor: #FFFFFF !default; //header text color when selected
    -$rangeHeaderHighlightBackground: $rowSelectedBackground !default; //header background color when highlighted
    -$rangeHeaderTextHighlightBackground: #000000 !default; //header text color when highlighted
    -
    -@import "../tabulator.scss";
    -
    -.tabulator{
    -	border:none;
    -	border-bottom: 5px solid $borderColor;
    -
    -	&[tabulator-layout="fitColumns"]{
    -		.tabulator-row{
    -			.tabulator-cell{
    -				&:last-of-type{
    -					border-right: none;
    -				}
    -			}
    -		}
    -	}
    -
    -	.tabulator-header{
    -		border-bottom:3px solid $headerSeparatorColor;
    -
    -		.tabulator-col{
    -			background-color: $headerBackgroundColor;
    -			
    -
    -			.tabulator-col-content{
    -				padding:8px;
    -			}
    -			
    -		}
    -
    -		.tabulator-calcs-holder{
    -			background:lighten($headerBackgroundColor, 10%) !important;
    -
    -			.tabulator-row{
    -				background:lighten($headerBackgroundColor, 10%) !important;
    -			}
    -
    -			border-top:1px solid $rowBorderColor;
    -			border-bottom:none;
    -		}
    -	}
    -
    -	.tabulator-tableholder{
    -		.tabulator-placeholder{
    -			span{
    -				color:$headerSeparatorColor;
    -			}
    -		}
    -		.tabulator-table{
    -			.tabulator-row{
    -				&.tabulator-calcs{
    -					font-weight: bold;
    -					background:lighten($headerBackgroundColor, 15%) !important;
    -					color:$headerTextColor;
    -				}
    -
    -				&.tabulator-calcs-top{
    -					border-bottom:none;
    -				}
    -
    -				&.tabulator-calcs-bottom{
    -					border-top:none;
    -				}
    -			}
    -		}
    -	}
    -
    -	.tabulator-footer{
    -		padding:5px 10px;
    -		padding-top:8px;
    -		border-top:3px solid $footerSeparatorColor;
    -
    -		.tabulator-calcs-holder{
    -			margin:-8px -10px 8px -10px;
    -
    -			background:lighten($footerBackgroundColor, 10%) !important;
    -
    -			.tabulator-row{
    -				background:lighten($footerBackgroundColor, 10%) !important;
    -				color:$headerTextColor !important;
    -			}
    -
    -			border-top:none;
    -			border-bottom:1px solid $rowBorderColor;
    -		}
    -
    -		.tabulator-paginator{
    -			label{
    -				color:#fff;
    -			}
    -		}
    -
    -		.tabulator-page-counter{
    -			color:#fff;
    -		}
    -
    -		.tabulator-page{
    -			background-color:#fff;
    -
    -			color: $footerTextColor;
    -			font-family:inherit;
    -			font-weight:inherit;
    -			font-size:inherit;
    -		}
    -	}
    -}
    -
    -.tabulator-row{
    -	.tabulator-cell{
    -		padding:6px;
    -
    -		&.tabulator-row-handle{
    -			.tabulator-row-handle-box{
    -				.tabulator-row-handle-bar{
    -					background:$sortArrowActive;
    -				}
    -			}
    -		}
    -	}
    -
    -	&.tabulator-group{
    -		border-right:1px solid $rowBorderColor;
    -		border-top:1px solid #000;
    -		border-bottom:2px solid $headerSeparatorColor;
    -		background:$headerBackgroundColor;
    -		color:$headerTextColor;
    -
    -		@media (hover:hover) and (pointer:fine){
    -			&:hover{
    -				background-color:darken($headerBackgroundColor, 10%);
    -			}
    -		}
    -
    -		span{
    -			color:$headerSeparatorColor;
    -		}
    -	}
    -}
    -
    -.tabulator-print-table{
    -	border-collapse: collapse;
    -
    -	.tabulator-print-table-group{
    -		border-bottom:2px solid $headerSeparatorColor;
    -		background:$headerBackgroundColor;
    -		color:$headerTextColor;
    -
    -		@media (hover:hover) and (pointer:fine){
    -			&:hover{
    -				background-color:darken($headerBackgroundColor, 10%);
    -			}
    -		}
    -
    -		span{
    -			color:$headerSeparatorColor;
    -		}
    -	}
    -}
    -
    diff --git a/tmp/tabulator-6.0.1.zip b/tmp/tabulator-6.0.1.zip
    deleted file mode 100644
    index f48b7f3..0000000
    Binary files a/tmp/tabulator-6.0.1.zip and /dev/null differ
    diff --git a/tmp/tabulator-6.2.1.zip b/tmp/tabulator-6.2.1.zip
    deleted file mode 100644
    index d657699..0000000
    Binary files a/tmp/tabulator-6.2.1.zip and /dev/null differ